PWM variable para un PIC18F4550?

Me gustaría crear un PWM de ciclo de trabajo variable en un microcontrolador PIC18F4550 para controlar la puerta de un MOSFET en un proyecto que estoy haciendo.

Soy nuevo en microcontroladores pero ya tengo un código que puede generar una señal PWM. Me gustaría ayuda para averiguar cómo hacer dos cosas.

  1. ¿Cómo puedo cambiar el ciclo de trabajo paso a paso (es decir, 10 %, 20 %, 30 %... 100 %), aumentando el ciclo de trabajo en cada período del PWM?
  2. ¿Cómo puedo cambiar el ciclo de trabajo del PWM basado en la presión de un interruptor externo?

Estoy programando en lenguaje C y agradecería algún código de ejemplo.

Acostúmbrese a proporcionar un enlace a la hoja de datos si está preguntando sobre una pieza en particular. Es una cortesía hacia otros que quieren ayudarte; a menudo queremos echarle un vistazo. También puede evitar confusiones si sabemos sin ambigüedades de qué parte estamos hablando.

Respuestas (2)

Para pasar por varios ciclos de trabajo, como incrementar un 10 % cada período, debe configurar una interrupción en el desbordamiento del temporizador. En esa rutina de servicios de interrupción, modifica el registro del ciclo de trabajo PWM a su nuevo valor.

Para actualizar el ciclo de trabajo basado en un interruptor, haga lo mismo. Configure una interrupción en el pin de entrada conectado al interruptor y vuelva a actualizar los registros del ciclo de trabajo durante esa rutina de servicio de interrupción.

Aquí hay un tutorial de Microchip sobre interrupciones del temporizador que incluye algo de código C. Y aquí está la nota de aplicación de Microchip en el periférico Capture/Compare/PWM. Los ejemplos están en Asamblea. Pero dice que ya configuró los PWM, por lo que ya debería estar familiarizado con los registros que necesita modificar para cambiar el ciclo de trabajo.

El 18F4550 tiene generadores PWM incorporados, por lo que es fácil. Una vez que configura el hardware, continúa generando la forma de onda PWM por sí solo. El hardware para hacer esto se llama módulo "CCP", que significa modulación de comparación, captura y ancho de pulso. En tu caso quieres usarlo en modo PWM.

Configura el temporizador 2 para proporcionar el período PWM, luego el ciclo de trabajo se escribe en CCPRxL. En realidad, el ciclo de trabajo tiene 2 bits de fracción adicionales debajo del período del temporizador 2. Estos bits de fracción se escriben en el registro CCPxCON en el lugar correcto. Es un poco raro, pero todo funciona.

Si desea cambiar el ciclo de trabajo de PWM en cada período, entonces probablemente desee interrumpir el temporizador 2. Tenga en cuenta que con su escalador posterior, puede interrumpir cada N períodos, donde N es 1 a 16. En la interrupción, cambia CCPRxL y CCPxCON (si desea utilizar los bits de fracción adicionales) al nuevo ciclo de trabajo. El ciclo de trabajo en estos registros está en unidades de conteo del temporizador 2, que es el tiempo de encendido absoluto por pulso, no la fracción de tiempo de encendido por pulso. La fracción de tiempo es el tiempo absoluto dividido por el período.

Una vez que sepa cómo cambiar el ciclo de trabajo de PWM, puede activarse desde cualquier decisión en el código. Cambiarlo en función de una pulsación de interruptor externo significa detectar esa pulsación y luego realizar el cambio.