PIC24 - múltiples cambios en el ciclo de trabajo de PWM

1

Disculpas por adelantado debido a mi falta de experiencia con la C incorporada.

Estoy trabajando en un proyecto PIC24FJ64GA004 en el que se necesita un valor PWM de 16 bits. ser cambiado varias veces Estoy usando MPLAB IDE y C30.

Me pregunto cómo puedo cambiar los valores de PWM y dónde en el código para cambiarlos. ¿Es una buena idea cambiar los valores de PWM en un ISR de temporizador? En main ()?

    
pregunta MZF786

2 respuestas

1

Su pregunta es tan amplia que probablemente se cerrará pronto, así que no quiero dedicar mucho tiempo a esto.

Sin embargo, brevemente, el "valor" principal de PWM es su ciclo de trabajo. Esto se cambia al escribir un valor diferente en el registro de ciclo de trabajo apropiado. Para averiguar qué es eso y qué restricciones puede haber, debe buscar en la hoja de datos para ver qué periféricos tiene su PIC particular, y luego leer sobre el módulo PWM en detalle en el Manual de referencia familiar. La hoja de datos le indicará qué capítulo es relevante para la implementación particular del periférico en su PIC.

Hay dos tipos de módulos que pueden producir salidas PWM de forma nativa. Los módulos PWM desnudos se denominan "comparación de salida". También hay módulos PWM más sofisticados para aplicaciones más específicas. Por lo general, a estos se les llama algo con "PWM" en sus nombres, como "control de motor PWM", por ejemplo.

    
respondido por el Olin Lathrop
1

El problema parece ser si es mejor actualizar el valor de PWM en el controlador de interrupciones o en el programa principal.

La actualización en el programa principal puede confundir potencialmente la lógica PWM. Por ejemplo, si la cuenta regresiva es 0, y el programa principal reduce el valor de PWM por debajo del conteo actual, por ejemplo, ¿el comparador de "valor" se dispara cuando cuenta = valor? Si es así, puede obtener un pulso inesperadamente corto y un valor de salida incorrecto temporal. (Diferentes micros pueden reaccionar de manera diferente; no sé si este es un problema real con el PIC; pero existe la posibilidad).

Por lo tanto, puede ser mejor sincronizar las actualizaciones con el contador PWM; Esto se hace más fácilmente con un temporizador de interrupción. Luego, el programa principal puede generar un nuevo valor y establecer un indicador, de modo que la próxima interrupción del temporizador actualice el valor PWM de manera segura y borre el indicador. (La bandera puede ser simplemente la variable "nuevo valor pwm" que no sea 0).

Esto mantiene la mayor parte del trabajo fuera del controlador de interrupciones, que generalmente debería ser lo más corto posible.

Es posible que algunos de los ejemplos que estés estudiando no se molesten en recorrer tantos largos; ¡Los errores temporales en el brillo del LED probablemente no importan!

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas