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.
Estoy programando en lenguaje C y agradecería algún código de ejemplo.
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.
stevenvh