MICROCONTROLADORES
1
Modulación por ancho de Pulso Johnatan Pilatuña, Cristian Guachamin Las señales PWM tienen aplicaciones como por ejemplo: Abstract — En la presente práctica de laboratorio se realiza una PWM, que es una modulación por ancho de pulso. Esta señal puede tener diferentes aplicaciones como por ejemplo el control de la velocidad de un motor o iluminancia. En la práctica se realizó un PWM que varíe de 5% en 5% mediante 2 pulsadores que aumenten o disminuyan el porcentaje y el cambio se podrá observar en el LCD. Adicionalmente de manera opcional se puede realizar un trabajo optativo.
ATMegaa I ndex ndex Terms — ATMegaa
2560, PWM, Motor DC
I. I NTRODUCCION WM es más conocida por modulación de ancho de pulso, ya que sus siglas en ingles son Pulse Width Modulation.
P
Una señal PWM es una onda cuadrada de periodo constante T y ancho de pulso variable τ. En una señal PWM se trabaja con relaciones de trabajo que representan el ancho de pulso con respecto al periodo. Básicamente una PWM varía dinámicamente el ancho de pulso de manera que el tiempo en alto disminuya o aumente y en proporción inversa, el tiempo de baja aumente o disminuya, manteniendo T constante. Matemáticamente Matemáticamente se expresa de la siguiente manera:
Fuentes de alimentación comunes. Computadoras y otros dispositivos electrónicos. Control de velocidad de motores DC. Control de iluminación de lámparas, etc Las frecuencias del PWM dependerán de las aplicaciones. [1]
A. Control de velocidad de un MOTOR DC.
En la figura 2 el circuito utiliza el transistor BJT 2N2222A ya que el motor necesita una corriente de 80mA. Este es un ejemplo con un motor con esta característica. característica. El 2N2222A trabaja en corte y saturación para controlar la velocidad del motor de 12VCC, mediante la señal PWM que llega a la base del transistor por medio de la resistencia. El valor de la resistencia es de 1K para limitar al corriente. El diodo se usa para proteger el circuito durante el corte, ya que evita que el cambio en la corriente a través del motor sea instantáneo.
(1) Donde: D=ciclo de trabajo trabajo τ _= tiempo cuando la función es positiva (ancho de pulso) T= periodo de la función. =
En ejemplo de la variación del ancho de pulso se puede ver en la figura 1.
Fig. 2 Circuito de ejemplo. ej emplo. [2] II. DESARROLLO
Fig. 1 PWM
El objetivo de la práctica es configurar los registros de los temporizadores del microcontrolador ATMega2560 en modo PWM de 8, 9 y 10 bits. Para los cual se propusieron 2 trabajos a realizar el primero es obligatorio y el segundo es opcional.
MICROCONTROLADORES Trabajo obligatorio. Generar una señal PWM variable. Se plantea hacer un generador de una señal de PWM. El ancho de la señal PWM variará de 5% en 5% a través dedos pulsadores. Un pulsador hará que la señal en alto se incremente y un segundo pulsador hará que la señal en alto disminuya. Es decir, cada vez que se presione uno de los pulsadores, el ancho en alto de la señal PWM se incrementará o disminuirá 5% de acuerdo al pulsador que se presionó. Finalmente, se mostrará el porcentaje de la señal PWM en la pantalla LCD. La frecuencia de la señal PWM deberá ser mayor a 10KHz. Son libres de escoger el timer, los bits de resolución de la señal PWM y el preescalador.
2
INICIO
Trabajo optativo. Este trabajo aumenta 3 puntos a una nota de un taller anterior. A la señal PWM generada en el anterior punto, se le agregará un transistor en modo corte-saturación para manejar un motor DC de 3-12 VDC. El cálculo de corrientes del motor y corrientes que deberá soportar el transistor NPN serán hechas por parte del estudiante como parte del diseño. ¡Ojo! Tener en cuenta que el motor DC tiene una corriente pico de arranque la cual debe ser tomada en cuenta en el transistor. Es preferible si utilizan una batería de 9V como alimentación del motor.
DEFINIR LIBRERIAS
DEFINIR VARIABLES Y PUERTOS
PULSADOR 1
PULSADOR 2
Los elementos que fueron necesarios son:
Computador con softwareAtmel Studio yAXLoader o XLoader. Adaptador fijo o variable de 5V a 1 A. 2 pulsadores. 1 placa Arduino (UNO, MEGA o Leonardo) 1 pantalla LCD SPI con driver ILI9341. Protoboard (2 regletas mínimo). 1 metro de cables AWG 23 para Protoboard y/o30 cables “Jumpers”.
Cortador de alambres. Opcional para trabajo de puntos extras: Motor DC de 3 a 12 V, elementos varios para manejo en corte saturación del motor DC, batería de 9V. Tener en cuenta la corriente de arranque para escoger el transistor.
En la práctica se conectó el LCD con el microcontrolador para poder observar el porcentaje de variación de la PWM y con la ayuda de un osciloscopio se observó cómo variaba la señal con los pulsadores. III. RESULTADOS A. Diagrama de flujo:
LA PWM
VISUALIZAR EL
AUMENTA 5
VALOR EN LCD
LA PWM
VISUALIZAR EL
DISMINUYE 5
VALOR EN LCD
FIN
IV. CONCLUSIONES La señal PWM tiene muchas utilidades y aplicaciones en la vida real, por lo cual es muy importante conocer y entender cómo se genera una señal PWM. Al realizar la PWM mediante el microcontrolador facilita el diseño e implementación del circuito en el que se desee aplicar, ya que la misma señal se podría generar de otras maneras: empleando más elementos electrónicos como LM555 o amplificadores operacionales. V. BIBLIOGRAFÍA [1] RACSO, «ARDUINO UTFSM,» 21 Mayo 2014. [En línea]. Available: http://www.arduino.utfsm.cl/modulacion-por-ancho-de pulso-pwm/. [2] «Programacion de Microctroladores,» [En línea]. Available: http://microcontroladores-mrelberni.com/pwmavr-control-velocidad-motor-12vcc/.
VI. ANEXOS A. Código de programación
/*/* * GccApplication1.c * * Created: 09/05/2016 22:53:10
MICROCONTROLADORES */ #define F_CPU 16000000UL #include
#include #include #include unsigned char pulso; int main(void) { CONFIG_PORTB(); CONFIG_SPI(); INI_LCD(); DDRB&=~(1<<0); PORTB |=(1<<0); DDRB&=~(2<<0); PORTB |=(2<<0); DDRB=0b10000000; TCCR0A=0b10000001; TCCR0B=0b00000001; while (1) { OCR0A=pulso; if(!(PINB&(1<=5) pulso = pulso-5; _delay_ms(50);
} } IRXY(12,1); //Cambia de posición el cursor. ESC_CADENA_11x9 (" PWM ",NEGRO,BLANCO); IRXY(1,5); //Cambia de posición el cursor. ESC_ENTERO_11x9 ( pulso, NEGRO, BLANCO); IRXY(3,5); ESC_CADENA_11x9 (":", NEGRO,BLANCO); IRXY(9,5); }
3