Generación de señales PWM con Timers
Leyder Dalmir Quintero Bayona Cod. 1065841753
Jasyd David Caballero Quintero Cod. 1094282954
Objetivos:
1. Variar interrumpidamente el ancho de pulso por medio de la programación para
obtener una onda cuadrada con el comportamiento deseado.
2. Comprender las ecuaciones y distintos parámetros para la obtención de la
frecuencia deseada.
3. Calcular la frecuencia de PWM para ideal para controlar la velocidad de un
motor en c.c.
4. Programar la señal PWM con la frecuencia deseada usando Timers y una
salida digital del microcontrolador.
Introducción:
La modulación por ancho de pulsos (también conocida como PWM, siglas en inglés de pulse-
width modulation) de una señal o fuente de energía es una técnica en la que se modifica el
ciclo de trabajo de una señal periódica (una senoidal o una cuadrada, por ejemplo), ya sea
para transmitir información a través de un canal de comunicaciones o para controlar la
cantidad de energía que se envía a una carga.
El ciclo de trabajo de una señal periódica es el ancho relativo de su parte positiva en relación
con el período. Expresado matemáticamente:
𝜏
𝐷 = 𝑇 (1)
1
𝑇 = 𝑓(2)
𝑇/100
𝐶𝑇𝐶 = 𝑟𝑒𝑠𝑜𝑙𝑢𝑐𝑖ó𝑛 𝑡𝑖𝑚𝑒𝑟(3)
D: ciclo de trabajo
T: periodo de la función
τ: ancho de pulso
𝑓: frecuencia
preescaler: circuito de conteo electrónico que se utiliza para reducir una señal eléctrica de alta
frecuencia a una frecuencia más baja por división entera.
CTC: valor que se almacenará en el registro OCR1A, el cual se comparará por constantemente
con el Timer.
La construcción típica de un circuito PWM se lleva a cabo mediante un comparador con dos
entradas y una salida. Una de las entradas se conecta a un oscilador de onda dientes de
sierra, mientras que la otra queda disponible para la señal moduladora. En la salida la
frecuencia es generalmente igual a la de la señal dientes de sierra y el ciclo de trabajo está
en función de la portadora.
La principal desventaja que presentan los circuitos PWM es la posibilidad de que haya
interferencias generadas por radiofrecuencia. Estas pueden minimizarse ubicando el
controlador cerca de la carga y realizando un filtrado de la fuente de alimentación.[1]
Cálculos: [2]
𝜏 = 𝑅𝐿 = 2,85𝑚𝐻
67𝛺
= 42,537𝜇𝑠 ; (42,537𝜇 𝑠)(5) = 21,26𝑚𝑠
Donde:
L: Inductancia del motor
R: Resistencia del motor
Ahora determinaremos la frecuencia máxima para la respuesta lineal.
1
= 47,017 𝐻𝑧
21,26𝑚 𝑠
Para hallar el periodo usaremos (2).
1
𝑇= = 0,0212 𝑠 = 21,2𝑚 𝑠
47,017 𝐻𝑧
Para obtener el valor a almacenar en el OCR1A con (3) este es hallado sin preescaler.
(0,0212 𝑠)/100
𝐶𝑇𝐶 = − 1 = 3401
1
16𝑀 𝐻𝑧
Programación:
#include <avr/io.h>
#include <avr/interrupt.h>
int contador_on = 0, contador_off = 0;
boolean on = true;
void setup() {
cli();
TCCR1A=0;
TCCR1B=0;
OCR1A=3401;
TCCR1B |= (1<<WGM12);
TCCR1B |= (1<<CS10);
TIMSK1=(1<<OCIE1A);
sei();
pinMode(13, OUTPUT);
digitalWrite(13, 1);
}
void loop() {
}
ISR(TIMER1_COMPA_vect){
if(on) contador_on ++;
else contador_off ++;
if(contador_on >= 50){
digitalWrite(13, 0);
contador_on = 0;
on = false;
}
if(contador_off >= 50){
digitalWrite(13, 1);
contador_off = 0;
on = true;
}
}
Capturas:
Fig. 1: Osciloscopio simulación Proteus.
Se obtuvo positivamente el valor deseado.
Fig. 2: Medición osciloscopio.
Fig. 3: Onda cuadrada al 50% High Fig. 4: Onda cuadrada 75% High
Fig. 5: Montaje físico.
Fig. 6: Funcionamiento de motor D.C (montaje físico).
Fig. : Simulacion en Proteus. Motor funcionando con PWM, duty al 50%).
Explicación y análisis:
La señal PWM programada haciendo uso del Timer0 provee una señal continua con un ciclo
positivo del 50% del periodo de la señal, en este caso la señal es de aproximadamente 47Hz;
se implementa un TIP31C el cual es un transistor bipolar de potencia media, su Base está
conectada por medio de una resistencia de 68Ω a la salida de control del Arduino, su Colector
se conecta a una de las terminales del motor y su Emisor a tierra, con esto y la configuración
de la señal anteriormente mencionada, se hace girar el motor a la mitad de su velocidad
máxima aproximadamente.
Conclusiones:
● El cálculo de la frecuencia necesaria para un motor en específico provee un
comportamiento aproximadamente lineal, ésta dependerá de la inductancia y
resistencia de dicho motor.
● Se puede obtener una señal PWM de cualquier frecuencia por medio de la
programacion de Timers en los microcontroladores, cuando este no cuenta con pines
suficientes para esta función.
● El uso de señales PWM permite superar la limitante de controlar dispositivos
analógicos con microcontroladores.
● La generación de señales PWM por medio de la manipulación de los timers de un
microcontrolador puede llegar a ser igual de eficiente que por librerías ya establecidas.
Referencias Bibliográficas
[1] "Modulación por ancho de pulsos", [Link], 2015. [Online]. Available:
[Link] [Accessed: 17- Jun- 2019]
[2] "AB-022 : PWM Frequency for Linear Motion Control - Precision Microdrives",
[Link], 2019. [Online]. Available: [Link]
022-pwm-frequency-for-linear-motion-control/. [Accessed: 17- Jun- 2019]