Teensy ++ 2.0: cómo obtener una salida PWM de los pines OC2A y OC2B

1

Estoy haciendo un proyecto que requiere una gran cantidad de PWM y he conseguido que funcionen 6 de los 9 pines compatibles con PWM, pero estoy luchando para que los últimos 3 se ejecuten.

Para hacer que los pines OC1A-C ejecuten un PWM, hice esto:

DDRB = 0xE0 //Pins B7,B6 & B5 to output
TCCR1A |= (1 << COM1A1) | (1 << COM1A0) |(1 << COM1B1) | (1 << COM1B0) | (1 << COM1C1) | (1 << COM1C0) | (1 << WGM10);
TCCR1B |=  (1 << WGM12) | (1 << CS11);

//Test PWM Values
OCR1A = 0x10;
OCR1B = 0x20;
OCR1C = 0x30;

Sin embargo, cuando intento hacer lo mismo para OC2A y OC2B, no sucede nada:

DDRB = 0x10 //B4 to output
DDRD = 0x02 //D1 to output
TCCR2A |= (1 << COM2A1) | (1 << COM2A0) |(1 << COM2B1) | (1 << COM2B0) | (1 << WGM20);
TCCR2B |=  (1 << WGM22) | (1 << CS21);

//Test PWM Values
OCR2A = 0x40;
OCR2B = 0x50;

Entonces, ¿qué más necesito configurar para que el PWM de esos pines funcione?

    
pregunta Dom

1 respuesta

3

Has seleccionado el modo de forma de onda 5 (WGM22=1, WGM21=0, WGM20=1) . Esto significa: "Fase de PWM correcta donde OCR2A es el valor SUPERIOR".

Esto significa que el temporizador contará hasta el valor en OCR2A y luego regresará a cero. El pin OC2A no tendrá una salida en este modo, y el pin OC2B se configurará al contar en una comparación de comparación entre OCR2B y TCNT2 y se borrará cuando ocurra la comparación de comparación cuando la cuenta regresiva. Como ha configurado el valor de OCR2B para que sea más alto que OCR2A, nunca se producirá una comparación de comparación porque el contador comienza la cuenta regresiva antes de que suceda. Esto significa que tampoco obtendrá ninguna salida en OC2B. Este modo está diseñado para si desea una frecuencia PWM específica a expensas de una salida PWM y configura OCR2B < = OCR2A.

Creo que lo que quieres es el modo de forma de onda 3 (WGM22=0, WGM21=1, WGM20=1) o el modo de forma de onda 1 (WGM22=0, WGM21=0, WGM20=1) . Estos son "Fast PWM" y "Phase Correct PWM" respectivamente, pero que utilizan 0xFF como el valor TOP. En este modo, ambas salidas pueden usarse para generar una señal PWM con una frecuencia fija pero un ciclo de trabajo independiente (la frecuencia depende de la configuración del prescaler y la frecuencia del reloj).

Solo como referencia, lo anterior se basa en la Tabla 16-7 en la página 158 de la hoja de datos .

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas