Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccionpwm
Introduccionpwm
El ciclo de actividad (o duty cycle, DC) representa la anchura del pulso: cunto tiempo de cada onda cuadrada hay pulso (5V) y cundo no lo hay (0V).
Duty cycle
Ejemplos de duty cycle:
Otro ejemplo:
analogWrite(pin,DC): es una funcin de Arduino que escribe en pin (salida) un determinado DC o duty cycle
Est funcin se implementa como un PWM con una frecuencia fija (mediante un factor de preescalado de 64). Problema: aunque permite modificar el duty cycle, no es posible modificar la frecuencia, ya que el valor de pre-escalado est fijo.
Introduccin a PWM
PWM permite generar ondas con diferentes frecuencias y duty cycles usando timers:
Un timer es un contador software que cuenta ciclos de reloj: el timer usa el reloj de la CPU (o reloj del sistema). El timer se puede configurar para que solo se incremente cada X ciclos en lugar de cada ciclo. (siendo X el factor de preescalado) Un timer cuenta desde 0 hasta MAX,
MAX es el mximo que puede almacenar, y depende del nmero de bits del timer:
Si el timer usa n bits Ejemplo con n=8 cuenta de 0..2^n-1
255
Timer (+1)
tick1
tick255
0
(16*10^6/8)*255
Introduccin a PWM
PWM permite generar ondas con diferentes frecuencias y duty cycles usando timers:
El duty cycle se modifica haciendo uso de un registro de comparacin:
Un registro de comparacin almacena un valor comprendido entre 0 y MAX Cada registro de comparacin esta asociado a una salida digital (PWM). Por ejemplo, en Fast PWM, si el valor del contador del timer es menor que el registro de comparacin, la salida emite 5 v (valor 1). En caso contrario emite 0 v (valor 0). Ejemplo: un timer de n=8 bits y valor de comparacin 2^n/2-1 genera un DC=50% Timer (+1)
255
127
Reg. comparacin
0
Salida generada DC es 50%
255
Reg. comparacin
0
Salida generada
255
Reg. comparacin
0
Salida generada
Timers de Arduino
Arduino tiene 3 Timers (Timer0, Timer1, Timer2),
Cada timer tiene 2 registros de HW que permiten configurar las opciones de PWM
TCCRXA y TCCRXB (X=0,1,2) dependiendo del timer usado
Cada timer tiene otros 2 registros de HW que actan como registros de comparacin,
OCRXA y OCRXB (X=0,1,2) dependiendo del timer usado
Cada timer tiene 2 salidas que pueden conectarse a dos salidas PWM de Arduino:
Timer 0 Timer 1 Timer 2 salidas 6 (A) y 5 (B) salidas 9 (A) y 10 (B) salidas 11 (A) y 3 (B)
Timer 0 (8 bits)
TCCR0A Timer/Counter Control Register A
COM0A1 COM0A0 COM0B1 COM0B0 --WGM01 WGM02
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Leyenda:
WGM (Waveform Generation Mode) permite seleccionar modo PWM CS (Clock Select) permite especificar el factor de pre-escalado Los bits COM0 permite habilitar, deshabilitar o invertir las salidas A y B
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Leyenda:
WGM (Waveform Generation Mode) permite seleccionar modo PWM CS (Clock Select) permite especificar el factor de pre-escalado Los bits COM1 permite habilitar, deshabilitar o invertir las salidas A y B
Timer 2 (8 bits)
TCCR2A Timer/Counter Control Register A
COM2A1 COM2A0 COM2B1 COM2B0 --WGM21 WGM20
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
Leyenda:
WGM (Waveform Generation Mode) permite seleccionar modo PWM CS (Clock Select) permite especificar el factor de pre-escalado Los bits COM2 permite habilitar, deshabilitar o invertir las salidas A y B
Configuracin de opciones
Un registro de HW se modifica como una variable de SW
TCCR2A=5 Opciones PWM se configuran escribiendo sobre los registros de HW
Para activar/desactivar bits de los registros se usa la macro _BV(pin) donde pin es el nombre del bit que queremos activar.
Se utilizan operadores de bits (& y |) para hacer operaciones AND y OR con el resto de bits de los registros
TCCR2A=BV(COM2A1) activa (pone a 1) el bit COM2A1 del registro TCCR2A TCCR2A=TCCR2A|BV(COM2A1) activa (pone a 1) el bit COM2A1 del registro TCCR2A y mantiene el valor del resto de bits del registro