¿Cómo encontrar la relación de trabajo de un PWM usando la captura de entrada?

Tengo un controlador PIC18F y admite periféricos de captura de entrada. Entiendo que se puede usar para encontrar la frecuencia de la señal entrante. ¿Cómo se puede obtener la relación de trabajo de PWM a partir de los siguientes detalles en la hoja de datos ? ¿Hay alguna forma de hacerlo?

> bit 3-0 
 CCPxM<3:0>: CCPx Module Mode Select bits 0000 =
> Capture/Compare/PWM disabled (resets CCPx module) 0001 = Reserved 0010
> = Compare mode, toggle output on match (CCPxIF bit is set) 0011 = Reserved 0100 =    
  Capture mode:
  every falling edge 0101 = 
  Capture mode:
> every rising edge 0110 = 
  Capture mode: every 4th rising edge 0111 =
> Capture mode: every 16th rising edge 1000 = Compare mode: initialize
> CCPx pin low; on compare match, force CCPx pin high (CCPxIF bit is
> set) 1001 = Compare mode: initialize CCPx pin high; on compare match,
> force CCPx pin low (CCPxIF bit is set) 1010 = Compare mode: generate
> software interrupt on compare match (CCPxIF bit is set, CCPx pin
> reflects I/O state) 1011 = Compare mode: Special Event Trigger; reset
> timer on CCPx match (CCPxIF bit is set) 11xx = PWM mode
> 

ficha técnica página 257. PIC18F46J53.

¿Hay alguna forma de calcular la relación de trabajo? Confío en que de esta única frecuencia se pueda obtener.

Respuestas (2)

Tengo entendido que un módulo CCP puede capturar un borde ascendente o descendente, pero no ambos.

Para obtener el ciclo de trabajo, deberá capturar los bordes ascendente y descendente para luego comparar los tiempos de ambos y calcular la relación. Eso no se puede hacer con un solo módulo.

Sin embargo, no hay nada que le impida enviar la señal a dos módulos CCP separados, uno configurado para el flanco ascendente y otro para el flanco descendente, y usar los dos para calcular la diferencia entre el aumento y la caída.

Básicamente, terminaría con dos períodos, que deberían ser iguales, pero con una diferencia de fase entre ellos, y esa diferencia de fase sería igual al ciclo de trabajo.

That can't be done with just one module.Se puede hacer, en realidad. Lo he hecho recientemente con un PIC18. Debe configurar el módulo CCP en un flanco ascendente, esperar la interrupción y cambiar el modo a un flanco descendente y así sucesivamente.
@Majenko Muchas gracias. Encontré un elemento similar en la aplicación del módulo DSPIC CCP, tenga en cuenta el modo de relación de trabajo (Modo de detección de bordes)
@m.Alin muchas gracias. Probaré tu método.

Para responder a su pregunta sobre otros métodos, algunos PICS tienen una puerta de temporizador muy conveniente que actúa independientemente del módulo CCP. Si puede usar uno de estos, es MUY conveniente para este cálculo. Cuente mientras la señal esté alta, usando la puerta, y obtenga su Período con el CCP.

Una búsqueda rápida muestra que PIC18(L)F2X/4XK22 (enlace a la hoja de datos en pdf) parece tener esta función (consulte la sección 12)