Sistemas de Tiempo Real Laboratorio 2: Introduccion o´ n a Pulse-Width Modulation (PWM) en Arduino Grado en Ingenier´ In genier´ıa ıa Inform I nformatica. a´ tica. Curso 2011/2012 2011/2012
1
Objeti Objetivos vos del laborato laboratorio rio
El objetivo del laboratorio es que el alumno aprenda los conceptos basicos a´ sicos de la modulacion o´ n en anchura del pulso (Pulse-Width modulation, PWM) y c´omo omo puede ser implementado sobre la plataforma Arduino. Este laboratorio persigue: 1. Presentar Presentar al alumno las las distintos modos modos de PWM. 2. Dise˜nar nar un circuito electr´onico onico y desarrollar el programa (sketch) que permita controlar un LED mediante PWM (parte 1 del laboratorio) y posteriormente reproducir una melod´ melod ´ıa ıa usando tambi´en en PWM mediante un zumbador (parte 2 del laboratorio).
2
Mater ateria iale less
Para la elaboraci on o´ n de este laboratorio necesita utilizar los siguientes componentes:
• Microcontrolador Arduino UNO. prototipado. • 1 Placa de prototipado.
• 1 LED (Light-Emitting Diode). resistencias de 220 ohmios. • 2 resistencias
• 1 LDR (fotorresistencia). r´ıgido ıgido para interconexion o´ n de los componentes. componentes. • Cable r´ on del PC al microcontrolador. • Cable USB de conexi´on Para ahorrar tiempo durante el laboratorio, se recomienda traer un conjunto de cables precortados y listos para su uso de las siguientes medidas: 2cm, 5cm, 10cm. En el Ap´ Apendice e´ ndice A se muestra una descripci descripcion o´ n de cada uno de los componentes componentes anteriores. anteriores.
3
Intr Introd oduc ucci ci´on o´ n a PWM
La modulaci modulacion o´ n de anchura de pulso o Pulse-Width Modulation (PWM) consiste en generar se˜nales nales digitales como ondas cuadradas donde la frecuencia es constante pero la fracci on o´ n de tiempo en que la se˜ senal n˜ al est´ esta´ activada (denominado ciclo de actividad) puede variar entre 0% y 100%. La Figura 1 muestra muestra diferentes diferentes ondas cuadr´aticas aticas generadas con distintos ciclos de actividad: actividad: 0%, 10%, 25%, 50%, 80% y 100%. De esta manera, el tiempo en que se mantiene el pulso (anchura del pulso) en estado de activacion o´ n (on) en un per´ per´ıodo ıodo (tiempo total que dura la onda), puede ser expresado como un tanto por ciento de la longitud del per´ıodo. ıodo. Como puede observarse obs ervarse la frecuencia se mantiene 1
Figure Figure 1: Ondas Ondas cuadra cuadradas das genera generadas das con distin distintos tos ciclos ciclos de activi actividad dad (extr (extraa´ıdo ı do de arduino.cc) constante. constante. La frecuencia frecuencia puede definirse como la cantidad de pulsos (estado on/off) on/off) por segundo segundo 1 y su expresi´on on matem´atica atica es la inversa del periodo es decir frecuencia= periodo . El microcontrolador Arduino dispone de una serie de pines que implementan PWM. Estos pines son algunos de los pines digitales, digitales, espec´ıficamente: ıficamente: 3,5,6,9,10 3,5,6,9,10 y 11. Cuando se configura configura apropiadamente PWM en uno de estos pines, y se conecta un dispositivo de salida, por ejemplo un LED, el resultado es que se generar a´ una onda cuadrada cuya anchura de pulso se representa como estado ON del dispositivo disp ositivo y el resto del tiempo del per´ıodo ıodo en estado OFF del dispositivo. La funci´on on analogWrite proporciona proporciona una interfaz interfaz m as a´ s simple al hardware PWM: aunque permite modular la anchura del pulso no proporciona proporciona ning´ ningun u´ n control sobre la frecuencia. Los modos PWM se describen en el Ap´endice endice B de este enunciado. enunciado.
4
Descr escrip ipci ci´on o´ n del laboratorio
El laboratorio se divide en dos partes:
4.1 PWM y analog analogWri Write te Modifique el codigo o´ digo correspondiente a la parte 2 del Laboratorio 1 para usar PWM en lugar de laboratorio, el LED estaba conectado conectado a la salida anal ogica o´ gica 9. Para configurar analogWrite. En ese laboratorio, PWM en el pin 9, usaremos el Timer 1, y la salida A. Para ello deber´a deber´a simplemente configurar PWM con los siguientes valores (ver Ap´ Apendice e´ ndice C): 1. Seleccionar Seleccionar Modo Fast Fast PWM escribiendo escribiendo 0101 en WGM. 2. Valor de pre-escalad pre-escalado o de 64 (011). 3. No invertir invertir la la salida.
setup() escriba el siguiente codigo Para ello, en la secci on o´ n setup() o´ digo que configura PWM con los valores anteriores: pinMode( pinMode(9, 9, OUTPUT); OUTPUT); pinMode( pinMode(10, 10, OUTPUT); OUTPUT); TCCR TC CR1A 1A = BV BV(C (COM OM1A 1A1) 1) |
BV(C BV (COM OM1B 1B1) 1) |
2
BV(W BV (WGM GM10 10); );
TCCR TC CR1B 1B =
BV(W BV (WGM GM12 12) ) |
BV(C BV (CS1 S11) 1) |
BV(C BV (CS1 S10) 0); ;
loop() del sketch, el unico En la seccion o´ n loop() u´ nico cambio consiste en asignar el valor del sensor LDR al registro OCR1A, de la siguiente manera: valor=analogRead(LDR); OCR1A=valor; delay(10);
Una vez programado la funci´on on anterior, verifique y compile el sketch. Conecte el cable USB y cargue el codigo o´ digo sin errores errores en la plataforma plataforma Arduino. Arduino. Compruebe Compruebe que el programa ejecuta ejecuta correctamente. ¿Cu´al al es el resultado de este programa?
4.2
Control Control de un LED LED mediant mediantee el modo modo Fast Fast PWM PWM
El alumno deber´a dise˜nar nar un circuito que permita conectar un LED al pin PWM correspondiente de salida. De esta manera, cuando haya pulso en la onda generada el LED permanecer a´ encendido (ON) y en caso contrario se apagar´a (OFF). En esta parte del laboratorio, el alumno deber´a modificar los valores de comparaci´on on para modificar la salida. Para ello, el alumno deber´a seguir los siguientes pasos: Seleccionar el Timer Timer que desea usar. usar. Puede usar Timer0, Timer0, Timer Timer 1 y Timer2. Timer2. En funci on o´ n • Seleccionar del Timer seleccionado, seleccionado, identifique los dos pines PWM de salida correspondie correspondientes ntes al timer seleccionado (ver Tabla B1 B1). ). Por ejemplo, si usa el Timer 2, la salida A se corresponde con el pin PWM 11; si usa la salida B el pin PWM es el 3. a´ nodo del LED. La Figura 2 muestra muestra la placa de de • Conecte a uno de esos pines de salida el anodo prototipado (en la parte izquierda) y el esquema de conexi on o´ n (en la parte derecha) para la realizaci´on de esta parte del laboratorio. laboratorio.
Figure 2: Placa de prototipado (izquierda) y esquema de conexi on o´ n (derecha) del laboratorio (parte 2))
3
• Abra el IDE de Arduino y programe un nuevo sketch que realize las siguientes operaciones: 1. En el el apartad apartado o setup() debe inicializar los pines PWM como salida mediante la funci on o´ n as el modo PWM usando las siguientes siguientes opciones: pinM ode. Debe configurar adem´as (a) Asignar Asignar 011 a los bits WGM correspondiente correspondientess al timer usado (selecciona (selecciona Fast PWM). (b) Asignar Asignar el valor de pre-escalado pre-escalado de 64 escribiendo escribiendo 100 en los bits C2 (divide la frecuencia del reloj del sistema entre 64). (c) Asignar Asignar el valor 10 en los bits COM2A y COM2B de manera que no se invierta invierta la salida generada en A y en B. El codigo o´ digo de configuracion o´ n si usa el Timer 2 es similar al explicado como ejemplo cuando se describi´o Fast PWM en este enunciado. 2. En el apartado apartado loop() debe alternativamente modificar los valores de comparaci´on on utilizados por el timer. Estos registros se denominan OCRXA y OCRXB, donde X=0,1,2 dependiendo dependiendo del timer utilizado. utilizado. En este c´odigo odigo fuente usamos valores aleatorios para los registros de comparacion: o´ n: valor=0; if (val (valor or == LOW) LOW){ OCR2A=180; OCR2B=250;
}else{ OCR2A=100; OCR2B=5;
} valo valor r = 1 - valo valor; r;
on anterior, verifique y compile el sketch. • Una vez programado la funci´on o´ digo sin errores en la plataforma Arduino. • Conecte el cable USB y cargue el c odigo al es el resultado de este programa? • Compruebe que el programa ejecuta correctamente. ¿Cu´al Pruebe a modificar los valores de comparaci on. o´ n. ¿Cu ¿Cual a´ l es la diferencia con respecto a la ejecuci´ ejecucion o´ n anterior?
4.3 4.3
Eval Evalua uaci ci´on o´ n del laboratorio
El profesor debe comprobar visualmente el correcto funcionamiento de cada parte del laboratorio. Para ello, cuando el grupo de pr´acticas acticas haya terminado, debe llamar al profesor para que pueda realizar esta verificaci on. o´ n. Antes de abandonar el aula, cada alumno deber´ debera´ entregar y responder el cuestionario que proponga el profesor.
4
5
Mate Materia riall de consul consulta ta
El alumno podr´a consultar la siguiente bibliograf´ıa ıa para la realizaci on o ´ n de este laboratorio:
• El microcontrolador Arduino ( http://arduino.cc). • Fritzing (http://fritzing.org). onica B´asica asica • Electr´onica (http://www.sc. http://www.sc.ehu.es/sbweb/e ehu.es/sbweb/electronica/elec lectronica/elec_basica/default _basica/default.htm .htm ). Componentes electr´ electr´onicos onicos • Componentes (http://es.wiki http://es.wikipedia.org/wiki pedia.org/wiki/Componente_ele /Componente_electronico ctronico ).
• Secrets of Arduino PWM (http://www.arcfn.com/2009/07/secrets-of-arduino-pwm.html). o´ digo de ejemplo ejemplo PlayMelody: • Codigo http://www.arduino.cc/en/Tuto http://www.ardu ino.cc/en/Tutorial/PlayMelody rial/PlayMelody
• Datasheet de Atmega328 http://www.atmel.com/Images/doc8271.pdf
• Material y transparencias de clase.
5
Appendix A
Ap´ Apendice e´ ndice A. Descripci Descripci´on o´ n de los componentes electr´ electronicos o´ nicos
A1
LED
Un LED es un diodo semiconductor que emite luz. Muchos dispositivos usan LEDs de distintos colore coloress como como indica indicador dores. es. Los hay de vario varioss colore colores, s, siendo siendo los mas a´ s usuales rojos, verdes y amaril amarillos los.. Las ”patas” ”patas” de los LEDs LEDs tienen tienen distintos distintos tama˜ tamanos: n˜ os: la m´ mas a´ s corta es el c atodo a´ todo (que debe conectarse al polo negativo de la fuente de alimentaci´on) on) y la m´as as larga el anodo a´ nodo (que debe conectarse al polo positivo de la fuente de alimentaci on). o´ n). La siguiente figura figura muestra el aspecto de los LEDs. LEDs.
Figure A1: Leds de distintos colores
A2
Fotorr Fotorresis esistenc tencia ia
Una fotorresistenci fotorresistenciaa es un componente electr´onico onico cuya resistencia disminuye con el aumento de intensidad de luz incidente (puede descender hasta 50 ohmios) y aumenta cuando est a´ a oscuras (varios megaohmios). Figure A2 muestra un LDR.
Figure A2: Ligth Diode Resistor (LDR) (LDR)
A3
Placa Placa de proto prototip tipad ado o
Una placa de prototipado es un dispostivo de pl´ plastico a´ stico que contiene filas y columnas de agujeros que dejan pasar la electricida electricidad. d. Esos agujeros agujeros est´ est an a´ n situados a una distancia est´andar andar de 2.54 mm y los componentes electronicos o´ nicos mantienen esa separacion o´ n entre sus pines. Al poner un pin de un componente en uno de los agujeros, se establecer a´ una conexi´ conexion o´ n el´ electrica e´ ctrica con todos los agujeros agujeros en la misma columna vertical. vertical. En la parte inferior inferior y superior superior de la placa, existen dos filas especiales especiales marcadas como ’+’ (5v) y ’-’ (0v), que permiten conectar horizontalmente con los otros agujeros 6
en esa fila. De esta manera, se pueden poner jumpers o cables para conectar a tierra o al voltaje especificado los distintos componentes insertados en la placa.
Figure A3: Una placa de prototipado prototipado
A4
Resist Resistenc encias ias
Una resistencia resistencia es un componente componente electr´ electronico o´ nico con un cuerpo cil´ cil´ındrico ındrico con dos ”patas”. Se trata de un componente imprescindible en cualquier circuito electr´onico: onico: en un circuito el voltaje, voltaje, la intensidad, y la resistencia est an a´ n relacionados; en particular, la resistencia de un circuito determina la intensidad intensidad de corriente corriente que circula, dado un cierto cierto voltaje (conocida (conocida como la Ley de Ohm):
R(resistencia) resistencia) = V ( V (voltaje) voltaje)/I (intensidad) intensidad) Los ingenieros han disenado n˜ ado un c´ codigo o´ digo de colores, para determinar la capacidad de una resistencia (en ohmios). ohmios). Por lo general, en el cuerpo de una resistencia resistencia hay cuatro anillos de colores, colores, una de ellas en color dorado o plata, donde cada color representa representa lo siguiente (le´ıdo ıdo de izquierda izquierda a derecha, dejando a la derecha el anillo de color dorado/plata): 1. El color del primer anillo anillo representa representa las decenas. decenas. 2. El color del segundo anillo anillo representa representa las unidades. unidades. 3. El color del tercer tercer anillo representa representa el valor valor k (en formato 10k ) que multiplica multiplica el valor de la resistencia. 4. Por Por ultimo, ´ el color del cuarto anillo representa el valor de tolerancia.
7
Negro Marr´ Marro´ n Rojo Naranja Amarillo Verde
0 1 2 3 4 5
Azul Pu´ rpura Gris Blanco Plata Dorado
6 7 8 9 10 % 5%
Table A1: C odigo o´ digo de colores de las resistencias La Tabla A1 muestra el codigo o´ digo de colores usados para calcular el valor de la resistencia. Por ejemplo, considera una resistencia con c odigo o´ digo de colores: marron, o´ n, azul, naranja naranja y dorado. Entonces su 3 valor es 16 ∗ 10 ± 5%. Figura A4 muestra varias resistencias el ectricas. e´ ctricas.
Figure A4: Resistencia Resistenciass el ectricas e´ ctricas
A5
Boton o´ n
Un bot´ boton o´ n es un dispositivo compuesto de dos pines de metal y una cubierta de pl astico. a´ stico. Cuando los pines de metal no est´an an conectados, es decir el bot´on on no est´a presionado, no existe existe circulaci´ circulaci´on on de corriente. Por otro lado, cuando el bot´on on se presiona los pines entr´an an en contacto y entre ellos circula circula corriente. corriente. El bot on o´ n es, pues, una forma b asica a´ sica de interruptor de la corriente el ectrica. e´ ctrica. La Figura A5 muestra el aspecto de un pulsador el´ectrico ectrico o bot´on. on.
Figure A5: Pulsador o bot´on on el´ectrico ectrico
8
A6
Zumb Zumbad ador or
Un zumbador es un transductor electroac ustico u´ stico que produce un sonido o zumbido del mismo tono que puede ser continuo continuo o interm intermite itente nte.. Se utiliza utiliza como mecanismo mecanismo de senalizaci´ ˜ on o aviso en multiples u´ ltiples sistemas como en autom´ automoviles o´ viles o en electrodom´ electrodomesticos. e´ sticos. Para lograr distintos tonos puede ser conectado a distintos tipos de circuitos. El zumbador consta de dos elementos b´asicos: asicos: un electroim´ electroim´an an y una l´amina amina met´alica alica de acero. Cuando la corriente pasa por la bobina del electroim an, a´ n, se produce un campo magn´ magnetico e´ tico variable que hace vibrar la l amina a´ mina de acero, lo cual produce un tono.
Figure A6: Zumbador (buzzer)
9
B
Modos odos de PWM PWM
Para controlar la frecuencia en que se generan las ondas se utilizan los timer (o relojes de software) incorporados incorporados en el microcontrolador microcontrolador de Arduino. Arduino. El chip ATmega168P/3 Tmega168P/328P 28P usa tres timer para PWM (ver datasheet) denominados Timer 0, Timer 1 y Timer 2. Cada uno de estos timer controlan la funci´on on PWM modificando los valores de dos registros de control, denominados TCCRnA y TCCRnB. Los registros permiten codificar las opciones de PWM que queramos usar en cada caso. 1. Los bits Waveform Waveform Generation Mode (WGM) (WGM) permiten seleccionar el modo de PWM. Esos Esos bits se almacenan discontinuamente en los registros TCCRnA and TCCRnB. 2. Los bits Clock Select Select (CS) permiten controlar controlar el pre-escala pre-escalado do del reloj, reloj, es decir, decir, dividen la frecuencia del reloj del sistema por un factor de pre-escalado entre 1 y 1024. Los valores de CS identifican uno de esos factores. Cada timer tiene dos registros de comparacion o´ n denominados OCRnA y OCRnB, correspondientes a las salidas salidas A y B respec respecti tiva vament mente. e. Cuando Cuando el valor valor del timer llega llega al valor del registr registro o de comparaci´on, la salida se modificar´a de acuerdo acuerdo al modo modo PWM especifi especificad cado. o. Existe Existen n dos bits mas, a´ s, denominados Compare Match Output A Mode (COMnA) y Compare Match Output B Mode (COMnB) que permiten habilitar, deshabilitar o invertir la salida de los registros A y B. NOTA: los bits de los registros de control difieren en cada timer (ver datasheet para detalles). Por Por ejem ejempl plo, o, el Timer imer 2 usa las las sali salida dass PW PWM M 3 (asoc (asocia iada da al regi regist stro ro de sali salida da OC2B OC2B)) y 11 (asoc (asocia iada da al registro de salida OC2A). El Timer 1 est a´ implementado como un contador de 16 bits y el Timer 0 y Timer 2 de 8 bits. Existen distintos modos de PWM. En este enunciado se describe el modo Fast PWM, PhaseCorrect PWM y modificacion o´ n del l´ l´ımite ımite superior del timer mediante el registro OCRA.
B1
Fast ast PWM PWM
Fast PWM es el modo m as a´ s simple de PWM, donde el timer cuenta repetidamente desde 0 hasta 255. La salida generada generada toma el valor 1 (ON) cuando el timer es igual a 0 y toma el valor 0 (OFF) cuando el valor del timer alcanza el valor del registro de comparaci on. o´ n. En este caso, cuanto m as a´ s alto es el valor en el registro de comparaci´on, on, mayor es la anchura del pulso. El siguiente diagrama muestra las salidas para dos valores concretos de los registros de comparaci´on: on: OCRnA es 180 y OCRnB es 50. Para configurar Arduino con cualquier modo PWM se ha de usar los pines PWM correpondientes al timer que queremos usar. La tabla siguiente muestra la asignaci´on on de timers a pines PWM de Arduino. El siguiente c´odigo odigo configura Fast PWM, un pre-escala pre-escalado do de 64 (divisi´on on de la frecuencia del reloj del sistema), salida no-invertida para A y B y los valores de los registros de comparaci on o´ n OCRnA igual a 180 y OCRnB igual a 50. pinMode(3 pinMode(3, , OUTPUT); OUTPUT); pinMode(1 pinMode(11, 1, OUTPUT); OUTPUT); TCCR TC CR2A 2A = BV BV(C (COM OM2A 2A1) 1) | TCCR TC CR2B 2B = BV BV(C (CS2 S22) 2); ;
BV(C BV (COM OM2B 2B1) 1) |
10
BV(W BV (WGM GM21 21) ) |
BV(W BV (WGM GM20 20); );
Figure B1: Fast PWM (http://www.arcfn.com/2009/07/secrets-of-arduino-pwm.html) Timer imer Timer 0 Timer 0 Timer 1 Timer 1 Timer 2 Timer 2
Regi Regist stro ro de sali salida da del del Timer imer OC0A OC0B OC1A OC1B OC2A OC2B
Pin Pin PW PWM M de Ardui Arduino no 6 5 9 10 11 3
Table B1: Relaci Relacion o´ n entre timers, registros registros de salida y pines PWM de Arduino Arduino OCR2A OCR2 A = 18 180; 0; OCR2 OC R2B B = 50; 50;
La macro BV permite activar (poner a 1) el bit que recibe como argumento. El ap´endice endice C muestra muestra los registros de control y los bits que los componen. La modificaci modificacion o´ n de esos bits permite configurar distintos modos de PWM. Asumiendo que estamos usando el timer 2, para configurar el modo Fast PWM debemos escribir el valor 011 en los bits WGM; para configurar un pre-escalado de 64 escribimos el valor 100 en los bits CS; finalmente, para indicar que la salida no se invierta, se escribe el valor 10 en los bits COM2A y COM2B. Podemos calcular la frecuencia y el ciclo de actividad conociendo la frecuencia del reloj del sistema, en el caso del chip Atmega328 de 16Mhz. En este caso la frecuencia del reloj del sistema se ha dividido entre 64 (valor de pre-escalado), dividido entre 256 ciclos que toma el timer para iniciar de nuevo la onda. Nota que la frecuencia en las salidas A y B es la misma. Por tanto:
freq (FastPWM ) =
Frecuencia reloj sistema P re − escalado × 256
(B1)
El ciclo de actividad de las ondas generadas en las salidas A y B depende del valor del registro de comparaci´on on correspondiente. En este caso:
duty cycle( cycle(FastPWM ) =
OCRN 2X + X + 1 256
(B2)
donde X es igual a A o B, seg un u´ n el registro de comparaci on. o´ n. El incremento en 1 se debe a que el valor de salida cambia un ciclo despu es e´ s de que el valor del timer alcance el valor del registro de comparaci´on. 11
B2
Phase Phase Corre Correct ct PWM
En este modo PWM, el timer timer cuenta cuenta de 0 a 255 y de aqu´ aqu´ı cuenta hacia atr as a´ s hasta llegar a 0. La salida se desactiva (pone a 0) cuando el valor del timer alcanza el registro de comparaci´on on durante la cuenta hacia adelante; por el contrario la salida se activa (pone a 1) cuando el valor del timer alcanza el registro de comparaci on o´ n durante la cuenta hacia atr´ atr as. a´ s. Este Este modo PWM genera genera una onda m´as as sim´etrica, etrica, tal y como muestra la siguiente figura:
Figure B2: Phase-correct PWM (http://www.arcfn.com/2009/07/secrets-of-arduino-pwm.html) En este caso, la frecuencia de salida ser´a aproximadamente la mitad que en el modo Fast PWM, dado que la salida cambia dos veces, cuando el timer cuenta hacia atr´ atras a´ s y hacia adelante:
freq (Phase − correctPWM ) =
Frecuencia reloj sistema P re − escalado × 255 × 2
(B3)
El ciclo de actividad de las ondas generadas en las salidas A y B depende del valor del registro de comparacion o´ n correspondiente. En este caso:
duty cycle( cycle(Phase − correctPWM ) =
OCRN 2X 256
(B4)
donde X es igual a A o B, seg´ segun u´ n el registro de comparaci on. o´ n. Nota Nota que en este este caso no existe existe el incremento en 1. El siguiente fragmento de codigo o´ digo usa el Timer 2 y los pines 3 y 11 para configurar Phase Correct PWM. En este caso, escribimos en los bits WGM el valor 001 (correspondiente a este modo de PWM). Dado que las opciones de pre-escalado y no invertir la salida se mantienen, el resto de bits permanecen permanecen igual que en el ejemplo ejemplo Fast PWM. pinMode( pinMode(3, 3, OUTPUT); OUTPUT); pinMode(1 pinMode(11, 1, OUTPUT); OUTPUT); TCCR TC CR2A 2A = BV BV(C (COM OM2A 2A1) 1) | BV BV(C (COM OM2B 2B1) 1) | TCCR TC CR2B 2B = BV BV(C (CS2 S22) 2); ; OCR2 OC R2A A = 18 180; 0; OCR2 OC R2B B = 50 50; ;
12
BV(W BV (WGM GM20 20); );
B3
Modi Modific ficac aciion o´ n del l´ l´ımite ımite superior del timer con OCRA
El ultimo u´ ltimo de los modos PWM consiste en modificar el valor del l´ l ´ımite ımite superior del timer y puede usarse tanto con Fast PWM como con Phase-Correct PWM. En este modo, el timer cuenta de 0 hasta OCRA (el registro de comparaci on o´ n de la salida A) en lugar de contar hasta 255 (como lo hac´ hac´ıa ıa en los modos anteriores). anteriores). Esto proporciona proporciona m´ mas a´ s control en la frecuencia de salida que los modos anteriores. anteriores. Dado que el registro OCRA contiene contiene el valor superior del timer, timer, cuando usamos este modo s´ solo o´ lo la salida B puede ser usada para PWM. El modo especial, denominado ”Toggle OCnA on Compare Match” modifica la salida A al final de cada ciclo, generando una onda cuadrada y un ciclo de actividad del 50% y la mitad de la frecuencia. La Figura B3 muestra como el timer resetea cuando alcanza el valor de OCRnA, produciendo una frecuencia m as a´ s r apida a´ pida para la salida B que en los casos anteriores.
Figure B3: Fast PWM con OCRA (http://www.arcfn.com/2009/07/secrets-of-arduino-pwm.html) En este modo, los valores de frecuencia y ciclo de actividad se calculan de distinta manera para las salidas A y B. Para la salida A:
Frecuencia reloj sistema P re − escalado × (OCR OC R2A + 1) × 2 duty cycleA (Fast PWM OCRA) OCRA) = 50%
frequencyA (Fast PWM OCRA) OCRA) =
(B5) (B6)
Para la salida B:
Frecuencia reloj sistema P re − escalado × (OCR OC R2A + 1) OCR OC R2B + 1 duty cycle B (Fast PWM OCRA) OCRA) = OCR OC R2A + 1
frequencyB (Fast PWM OCRA) OCRA) =
(B7) (B8)
En este ejemplo, el Timer 2 cuenta de 0 a 180 (OCRA), y tarda 181 ciclos de reloj, por tanto, la frecuencia de salida se divide entre 181. La salida A tiene la mitad de la frecuencia que la salida B, debido a que el modo ”Toggle on Compare Match” cambia la salida A toda vez que se completa el ciclo del timer. Para controlar el valor de OCRA usando Fast PWM, se debe escribir 111 en los bits WGM. El modo ”Toggle on Compare Match” se consigue escribiendo 01 en los bits COM2A.
13
pinMode(3 pinMode(3, , OUTPUT); OUTPUT); pinMode(1 pinMode(11, 1, OUTPUT); OUTPUT); TCCR TC CR2A 2A = BV BV(C (COM OM2A 2A0) 0) | BV BV(C (COM OM2B 2B1) 1) | TCCR TC CR2B 2B = BV BV(W (WGM GM22 22) ) | BV(C BV(CS2 S22) 2); ; OCR2 OC R2A A = 18 180; 0; OCR2 OC R2B B = 50 50; ;
BV(W BV (WGM GM21 21) ) |
BV(W BV (WGM GM20 20); );
De igual modo, es posible configurar Phast-Correct PWM con OCRA para modificar el valor maximo a´ ximo del timer. La Figura B4 muestra muestra la salida en este modo:
Figure B4: Phase-correct PWM con OCRA (http://www.arcfn.com/2009/07/secrets-of-arduino-pwm.html) Para configurarlo, escribimos el valor 101 en los bits WGM (selecciona phase-correct PWM con OCRA). Como en el caso anterior, anterior, para seleccionar seleccionar ”Toggle on Compare Match ” escribimos 01 en los bits COM2A. pinMode( pinMode(3, 3, OUTPUT); OUTPUT); pinMode(1 pinMode(11, 1, OUTPUT); OUTPUT); TCCR TC CR2A 2A = BV BV(C (COM OM2A 2A0) 0) | BV BV(C (COM OM2B 2B1) 1) | TCCR TC CR2B 2B = BV BV(W (WGM GM22 22) ) | BV BV(C (CS2 S22) 2); ; OCR2 OC R2A A = 18 180; 0; OCR2 OC R2B B = 50 50; ;
BV(W BV (WGM GM20 20); );
Calculamos Calculamos la frecuencia frecuencia y ciclo de actividad actividad para las salidas A y B usando este modo. Para la salida A:
Frecuencia reloj sistema (B9) P re − escalado × OCR OC R2A × 2 × 2 duty cycleA (PhaseCorrect PWM OCRA) OCRA) = 50% (B10)
frequencyA (PhaseCorrect PWM OCRA) OCRA) =
Para la salida B:
Frecuencia reloj sistema P re − escalado × OCR OC R2A × 2 OC R2B duty cycle B (PhaseCorrect PWM OCRA) OCRA) = OCR OC R2A
frequencyB (PhaseCorrect PWM OCRA) OCRA) =
(B11) (B12)
En el ejemplo, el Timer 2 cuenta hacia adelante de 0 a 180 y despu es e´ s hacia atr´ atr as a´ s hasta llegar a 0, lo cual tomo 360 ciclos de reloj. 14
C
Ap´ Apendice e´ ndice B. Configuraci´ Configuracion o´ n de los timer para implementaci´ implementacion o´ n de PWM
on, vea el datasheet del chip Atmega328. NOTA: Para consultar los detalles de implementaci´on,
C1
Timer imer 0 Configurar el modo PWM. • Configurar Timer 0 - 8 bits Mode TCCR0B WGM02 Deshabilitar canales 0 16-bit Phase + Frecuency correct 8 bit Phase-correct 0 9 bit Phase-correct 10 bit Phase-correct 16 bit Phase-correct 8 bit Fast PWM 0 9 bit Fast PWM 10 bit Fast PWM 16 bit Fast PWM
TCCR0A WGM01 0
TCCR0A WGM00 0
Valor TOP 255
0
1
255
1
1
255
Table C1: Opciones PWM en Timer 0
• Pre-escalado. Timer 0 - 8 bits Mode TCCR0B TCCR0B CS02 CS01 Deshabilitar canales 0 0 Divisor reloj por 1 0 0 Divisor reloj por 8 0 1 Divisor reloj por 32 Divisor reloj por 64 0 1 Divisor reloj por 128 Divisor reloj por 256 1 0 Divisor reloj por 1024 1 0
TCCR0B CS00 0 1 0 1 0 1
Table C2: Opciones de pre-escalado para el Timer 0 Registros de comparaci´ comparaci´on on de salida. • Registros o´ n son OCR0A (8 bits) y OCR0B (8 bits) • Los registros que almacenan el valor de comparaci on y la salida OC0A y OC0B (de 8 bits cada uno). 15
Mode
Deshabilitar el canal No invertir la salida Invertir la salida
Channel A TCCR CCR0A TCCR0A COM COM0A1 0A1 COM COM0A0 0A0 0 0 1 0 1 1
Channel B TCCR0A TCCR CCR0A COM0 COM0B1 B1 COM COM0B0 0B0 0 0 1 0 1 1
Table C3: Modos de registros de comparacion o´ n de salida en Timer 0
C2
Timer imer 1 Configurar el modo PWM. • Configurar
Mode Deshabilitar canales 16-bit Phase + Frecuency correct 8 bit Phase-correct 9 bit Phase-correct 10 bit Phase-correct 16 bit Phase-correct 8 bit Fast PWM 9 bit Fast PWM 10 bit Fast PWM 16 bit Fast PWM
Timer 1 - 16 bits TCCR1B TCCR1B WGM13 WGM12 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1
TCCR1A WGM11 0 0 0 1 1 1 0 1 1 1
TCCR1A WGM10 0 0 1 0 1 0 1 0 1 0
Valor TOP 65535 ICR1 255 511 1023 ICR1 255 511 1023 ICR1
Table C4: Opciones PWM en Timer 1
• Pre-escalado o´ n de salida. • Registros de comparacion on son OCR1A (16 bits) y OCR1B (16 • Los registros que almacenan el valor de comparaci´on bits) y la salida OC1A y OC1B (de 16 bits cada uno).
C3
Timer imer 2 Configurar el modo PWM. • Configurar
• Pre-escalado. o´ n de salida. • Registros de comparacion on son OCR2A (8 bits) y OCR2B (8 bits) • Los registros que almacenan el valor de comparaci´on y la salida OC2A y OC2B (de 8 bits cada uno).
16
Timer 1 - 16 bits Mode TCCR1B TCCR1B CS12 CS11 Deshabilitar canales 0 0 Divisor reloj por 1 0 0 Divisor reloj por 8 0 1 Divisor reloj por 32 Divisor reloj por 64 0 1 Divisor reloj por 128 Divisor reloj por 256 1 0 Divisor reloj por 1024 1 0
TCCR1B CS10 0 1 0 1 0 1
Table C5: Opciones de pre-escalado para el Timer 1
Mode
Deshabilitar el canal No invertir la salida Invertir la salida
Channel A TCCR CCR1A TCCR1A COM COM1A1 1A1 COM COM1A0 1A0 0 0 1 0 1 1
Channel B TCCR1A TCCR CCR1A COM1 COM1B1 B1 COM COM1B0 1B0 0 0 1 0 1 1
Table C6: Modos de registros de comparaci comparacion o´ n de salida en Timer 1
Timer 2 - 8 bits Mode TCCR2B WGM22 Deshabilitar canales 0 16-bit Phase + Frecuency correct 8 bit Phase-correct 0 9 bit Phase-correct 10 bit Phase-correct 16 bit Phase-correct 8 bit Fast PWM 0 9 bit Fast PWM 10 bit Fast PWM 16 bit Fast PWM
TCCR2A WGM21 0
TCCR2A WGM20 0
Valor TOP 255
0
1
255
1
1
255
Table C7: Opciones PWM en Timer 2
17
Timer 2 - 8 bits Mode TCCR2B TCCR2B CS22 CS21 Deshabilitar canales 0 0 Divisor reloj por 1 0 0 Divisor reloj por 8 0 1 Divisor reloj por 32 0 1 Divisor reloj por 64 1 0 Divisor reloj por 128 1 0 Divisor reloj por 256 1 1 Divisor reloj por 1024 1 1
TCCR2B CS20 0 1 0 1 0 1 0 1
Table C8: Opciones de pre-escalado para el Timer 2
Mode
Deshabilitar el canal No invertir la salida Invertir la salida
Channel A TCCR CCR2A TCCR2A COM COM2A1 2A1 COM COM2A0 2A0 0 0 1 0 1 1
Channel B TCCR2A TCCR CCR2A COM2 COM2B1 B1 COM COM2B0 2B0 0 0 1 0 1 1
Table C9: Modos de registros de comparacion o´ n de salida en Timer 2
18