Ancho de pulso PWM
Sistemas de Tiempo Real
http://www.arcos.inf.uc3m.es/~infostr
Grupo de Arquitectura y Tecnología de Computadores
(ARCOS)
PWM: frecuencia y duty cycle
• La técnica PWM (Pulse-Width Modulation) o modulación por
anchura del pulso permite generar ondas cuadradas con una
frecuencia y ciclo de actividad determinada:
– En Arduino UNO la frecuencia del reloj del sistemaes 16Mhz
• 16*10^6 ciclos (ticks) por segundo tiempo de ciclo es 1/ 16*10^6 = 62.5ns
• Es posible modificar la frecuencia para que el número de ciclos por segundo sea 1 por cada
8,16,32,64, etc. ciclos de reloj del sistema. Este valor se llama factor de pre-escalado.
– El ciclo de actividad (o duty cycle, DC) representa la anchura del
pulso: cuánto tiempo de cada onda cuadrada hay pulso (5V)y cuándo
no lo hay (0V).
Duty cycle
• Ejemplos de duty cycle:
• Otro ejemplo:
– analogWrite(pin,DC): es una función de Arduino que escribe en pin (salida) un
determinado DC o duty cycle
• Está función 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.
Introducción 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 depreescalado)
– Un timer cuenta desde 0 hasta MAX,
• MAX es el máximo que puede almacenar, y depende del número de bits del timer:
– Si el timer usa n bits
– Ejemplo con n=8
cuenta de 0..2^n-1
255
Timer (+1)
tick1
0
tick255
Frecuencia=1tick por c/factor pre-escalado
Si usamos pre-escalado=8, en un período hay
(16*10^6/8)*255
Introducción a PWM
• PWM permite generar ondascon diferentes frecuencias y
duty cycles usando timers:
– El duty cycle se modifica haciendo uso de un registro de comparación:
• Un registro de comparación almacena un valor comprendido entre 0 y MAX
• Cada registro de comparación 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
comparación, la salida emite 5v (valor 1). En caso contrario emite 0 v (valor 0).
• Ejemplo: un timer de n=8 bits y valor de comparación 2^n/2-1 genera un DC=50%
Timer (+1)
255
127
Reg. comparación
0
Salida generada
DC es 50%
Modos básicos de PWM: Fast PWM
• Fast PWM:
– El timer cuenta de 0 a MAX y vuelve a 0.
– La salida generada toma el valor 1 (ON) cuando el timer es igual a 0
– La salida generada tomael valor 0 (OFF) cuando el valor del timer alcanza el valor del
registro de comparación
255
Reg. comparación
0
Salida generada
Modos básicos de PWM: Fase correcta
• Phase-Correct PWM:
– El timer cuenta de 0 a MAX y decrece hasta 0.
– La salida generada toma el valor 0 (OFF) cuando el timer alcanza el valor del registro de
comparación durante la cuenta hacia adelante (0..MAX)
– Lasalida generada toma el valor 1 (ON) cuando el timer alcanza el valor del registro de
comparación durante la cuenta hacia atrás (MAX..0)
255
Reg.
comparación
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 actúan como registros
de comparación,
• 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...
Regístrate para leer el documento completo.