Timers. Casos duty-cycle = 0% y 100%

Timers. Casos duty-cycle = 0% y 100%

de Ignacio Martín Duci -
Número de respuestas: 2

Buenos días, profesor.

Al trabajar en modo FAST PWM con TOP por ICRn y OCnA en modo CLEAR, me surgen las siguientes situaciones:

1 - En la onda roja, entiendo que al tener TCNTn = 500 donde se da la coincidencia  con ICRn tendré OCnA = H y luego se hace clear teniendo OCnA = L cuando TCNTn = 0 donde se da la coincidencia con OCRnA. Creo que es por esto la aparición de los picos de valor alto durante la transición de TCNTn = 500 a TCNTn = 0. ¿Es así? ¿Es aceptable? ¿Cómo podría solucionarse?


2 - Si tengo OCRnA = 500 siguen apareciendo los picos, ¿Cuál es el orden de los sucesos? 

Yo esperaba tener una onda siempre en alto (sin picos) debido a que la puesta en bajo debido a la coincidencia de OCRnA era rápidamente puesta en alto o sobre escrita por la coincidencia con ICRn. 



3 - Si ahora OCRnA = 499, lo que yo esperaba era tener una onda en alto pero con picos debido a la presencia de valor bajo durante el paso de TCNTn = 499, donde se pone en bajo, hasta TCNTn = 500, donde se pone en alto. ¿Por qué no aparecen estos picos?


 4 - Si pongo OCnA en modo SET los problemas son análogos. 

5 - La solución que encontré es modificar el modo de OCnA según me convenga en cada caso de duty-cycle 0% o 100% ¿Es correcto? 

En el simulador de Proteus si se sucede lo que esperaba en el inciso (2).




Muchas gracias.


En respuesta a Ignacio Martín Duci

Re: Timers. Casos duty-cycle = 0% y 100%

de Eduardo Iriarte -
Hola Ignacio.
Efectivamente, el primer caso es correcto, la coincidencia en 0 (TCNT=OCR1A=0) hace que la salida OC1A suba y baje a 0 en solo 1 ciclo de clk, unos 62,5 ns a 16MHz. Este tiempo es insignificante en la mayoría de las aplicaciones de PWM, no requiere corrección. En caso de ser necesario, se puede desactivar directamente OC1A haciendo el bit COM1A1=0 (modo normal, pasa a ser una GPIO, y haciendo 0 ese bit del puerto B, PB1)
En los casos 2 y 3 (y 4) hay un error de frontera en el programa del simulador de timer (a corregir en la próxima versión...). El orden es como vos esperabas, y como indica el simulador de Proteus.