Escolar Documentos
Profissional Documentos
Cultura Documentos
9.0 Introduccin.
Una seal analgica tiene un intervalo variable de valores con una resolucin infinita ya que puede
tomar cualquier valor real; mientras que una seal digital solamente puede tomar valores dentro
de un intervalo predeterminado y finito de posibilidades.
El control analgico no siempre es la mejor opcin en la industria pues es ms propenso a
alteraciones por ruido y con el tiempo suele presentarse cambios lo cual complica la sincronizacin
de los mismos. Los controles analgicos de alta precisin suelen ser muy caros, y voluminosos.
La modulacin por ancho de pulso, o PWM (Pulse Width Modulation) por sus siglas en ingles, es
una tcnica para control de circuitos analgicos utilizando una seal digital. En este caso la seal
digital del microcontrolador.
Vista de una forma sencilla la PWM es una forma de codificar seales analgicas de una forma
digital. A travs del uso de contadores una seal cuadrada es modulada para obtener un
determinado nivel analgico.
9.1 Tipos de PWM del ATmega48.
Seales PWM. Una seal PWM (Pulse Width Modulation) o modulacin por ancho de pulso tiene
las siguientes caractersticas: el periodo de la seal es fijo, lo que cambia es el ancho de pulso.
PWM no invertida, en esta figura se aprecia que el periodo de la seal es fijo y lo que se modifica
es el ancho de pulso, en el primer ciclo la modulacin est al 50%, esto es que durante todo el 50%
del periodo de la seal estar en 1 el pulso, en el siguiente ciclo se encuentra la modulacin es del
75%, as que estar en 1 durante partes del periodo de la seal, y en el ltimo ciclo est al 100%
la modulacin, as que est en 1 todo el tiempo que dura el periodo de la seal.
Las seales PWM son muy utilizadas en control de energa de CA y CD. Si conectramos un LED con
un PWM al 50% veramos que est ligeramente encendido, si subimos el ancho de pulso el LED
prendera con mayor intensidad, y si la modulacin est al 100% el LED prendera al mximo de
intensidad luminosa.
PWM invertida. En una seal PWM invertida, la modulacin del 50% del periodo la seal estar en
0 la seal. Cuando est al 75% significa que partes del periodo de la seal estar en 0. Vea la
siguiente figura de una seal PWM invertida al 50%, 75% y 100%.
En la figura anterior se nota que el pulso va creciendo con respecto al centro, y que si la
modulacin es del 50% entonces durante 50% del tiempo del ciclo estar en 1 pero centrado con
respecto al periodo de la seal.
PWM con Modulacin invertida al centro. En este tipo de modulacin la modulacin es el tiempo
que est en 0 con respecto al centro del periodo, y en la siguiente figura se tienen este tipo de
modulacin al 50%, 75% y 100%.
Estos modos de modulacin del PWM se ilustran y explican debido a que con el timer del
Atmega48 es posible generarlos.
El microcontrolador Atmega48 posee 6 canales de PWM (OC1A, OC1B, OC2A, OC2B, OCOB y
OC0A), las dos primeras son canales de 16 bits mientras que las otras son de 8 bits.
9.2.1 Caractersticas de PWM en modo CTC (Clear timer on compare match).
En el modo CTC (WGM13:0 = 4 o 12), el OCR1A es empleado para manejar la resolucin del
contador. En el modo CTC el contador (TCNT1) es llevado a cero ya sea cuando ste alcanza el
valor o se iguala a OCRIA (WGM13:0 = 4) o a el valor de ICR1 (WGM13:0 =12). El OCR1A o ICR1
definen el valor mximo del contador, y por lo tanto su resolucin. Este modo permite un mayor
control de la igualacin en comparacin de la frecuencia de salida. Tambin simplifica el conteo de
los eventos de conteo externos.
El diagrama para el modo CTC se muestra a continuacin. El valor del contador TCNT1 se
incrementa hasta que ocurre una comparacin ya sea con OCR1A o ICR1, para entonces TCNT1 es
puesto a cero.
Resolucin de 8,9, y 10 bits, o bien, definida por ICR1 o OCR1A (resolucin mnima de 2
bits o 16 bits).
Alta resolucin
Modo de operacin invertido doble pendiente o doble cuesta
Modo de operacin invertido y no invertido
Resolucin de 8,9 y 10 bits, o bien, definida por ICR1 o OCR1A (resolucin mnima de
2 bits o 16 bits).
La PWM de fase correcta o correccin de fase (WGM13:0 = 1, 2, 3,10, o 11) proporciona una alta
resolucin. Al igual que la PWM de fase y frecuencia correcta la PWM de fase correcta, estn
basadas en doble pendiente.
La operacin de doble pendiente tiene una frecuencia de operacin menor que la de pendiente
sencilla: Sin embargo debido a las caractersticas simtricas de la doble pendiente la PWM de
doble pendiente son preferidas para el control de motores.
Alta resolucin
Modo de operacin invertido doble pendiente o doble cuesta
Modo de operacin invertido y no invertido
Resolucin de 8,9 y 10 bits, o bien, definida por ICR1 o OCR1A (resolucin mnima de
2 bits o 16 bits).
Como se puede observar en la ltima figura la salida generada, es en contraste con la PWM de
correccin de fase, simtrica en todos los periodos. Ya que los registros OCR1x son actualizados en
la parte baja del conteo, la longitud tanto de la cuesta de subida como de la cuesta de bajada son
siempre iguales. Lo que da una salida simtrica en pulsos y por lo tanto la frecuencia correcta.
La frecuencia de la forma de onda est definida por la siguiente expresin matemtica.
Los bits COM1A1:0 y COM1B1:0 controlan el comportamiento de las terminales de comparacin de salida
(OC1A y OC1B respectivamente). Si uno o ambos bits de COM1A1:0 estn en el valor de uno lgico, la salida
OC1A sobrepasa la funcionalidad del puerto I/O al cual est conectado. Si uno o ambos de los bits
COM1B1:0 estn en el valor lgico de uno, la salida OC1B sobrepasa la funcionalidad del puerto I/O al cual
est conectado. Sin embargo, hay que tomar en cuenta que el DDR del bit correspondiente a los pines de
OC1A u OC1B debe de tener el valor de uno lgico, para permitir la salida de la informacin.
Cuando OC1A o OC1B estn conectados al pin correspondiente, la funcin de los bits COM1x1:0 depende de
los bits WGM13:10. La siguiente tabla muestra la funcionalidad de los bits COM1x1:0 cuando los bits
WGM13:10 estn en el valor lgico uno o el modo CTC [clear time on compare; pon en cero en el momento
de la comparacin] (no PWM).
Tabla de modo de comparacin de salida, no PWM
COM1A1/ COM1A0/
Descripcin
COM1B1
COM1B0
0
0
Operacin regular del puerto, OC1A/OC1B desconectada
0
1
Conmutacin OC1A/OC1B en igualacin de comparacin
1
0
Limpiar OC1A/OC1B en igualacin de comparacin (salida en nivel bajo)
1
1
Poner a uno a OC1A/OC1B en igualacin de comparacin (salida en nivel alto)
Tabla de modo de comparacin de salida, PWM rpida.
COM1A1/ COM1A0/
Descripcin
COM1B1
COM1B0
0
0
Operacin regular del puerto, OC1A/OC1B desconectada
0
1
WGM13:10 = 14 o 15, conmuta OC1A en modo de comparacin, OC1B
desconectado (operacin puerto regular), para todas las otras WGM, operacin del
puerto regular, OC1A/OCIB desconectadas
1
0
Poner en cero OC1A/OC1B en igualacin de comparacin, poner en uno
OC1A/OC1B en bottom (valor mnimo), modo no invertido.
1
1
Poner en uno OC1A/OC1B en igualacin de comparacin, poner en cero
OC1A/OC1B en bottom (valor mnimo), modo no invertido.
Tabla de modo de comparacin de salida, PWM de fase correcta y PWM de fase y frecuencia correcta
COM1A1/ COM1A0/
Descripcin
COM1B1
0
0
COM1B0
0
1
9.4.2 Material.
Cantidad
1
1
1
1
1
Descripcin
Puente H L298N
Motor de CD de 12 V. o un led
Resistencia de 10 K
Programador de avr
Microcontrolador atmega48
Fuente de alimentacin, cables, protoboard
9.4.3 Desarrollo
9.4.4 Cdigo.
//____________________inicio del programa
#include <avr/io.h>
#include <avr/interrupt.h>
char data,parametro;
void init_PWM(void) {
TCCR1A= (1<<COM1A1)| (1<<WGM10);
// Configuracin PWM rpida.
TCCR1B= (1<<WGM12)| (1<<CS10);
//8 bits no invertida
}
void init_USART(void) {
UBRRL=25;
//Configurara USART para
UCSRB= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //baud rate de 9600 a 4 Mhz.
UCSRC= (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);//2 bits de parada, 8 bits de datos sin paridad
sei();
}
void incrementa(void) {
if (parmetro!=255)
parametro++;
OCR1A=parametro;
}
void decrementa(void) {
if (parametro!=0)
parametro--;
OCR1A=parametro;
}
void para(void){
PORTB=0;
}
void avanza(void) {
PORTB=1;
}
ISR (SIG_UART_RECV){
//interrupcin de recepcin USART
data = UDR;
// leer dato recibido
switch(data){
// determinar accin a seguir
case(i): incrementa();
break;
case(d):decrementa();
break;
case(p):para();
break;
case(a): avanza();
break;
}
}
int main() {
DDRB=255;
init_PWM();
init_USART();
while(1);
}
//_________________________fin de programa
Diagrama Esquemtico.
Materiales.
1
1
2
2
1
LED.
Resistor de 220 Ohms.
Push Button.
Resistores de 10Kohms.
Microcontrolador ATmega48.
Introduccin.
Modulacin por ancho de pulso o PWM (Pulse-Width Modulation), de una seal, se presenta
cuando se modifica el ciclo de trabajo o el ancho del pulso de una seal peridica, en este caso
representado por una seal cuadrada, uno de los usos del PWM entre muchos otros, es controlar
la cantidad de energa, en este caso el voltaje promedio es mayor conforme aumenta el ciclo de
trabajo, lo cual se puede emplear para controlar un motor de CD.
En la imagen anterior se puede observar, que el periodo de la seal permanece fijo, por lo tanto, la
frecuencia tambin, solamente cambia el ciclo de trabajo, en la primera se observa que el ciclo de
trabajo es de aproximadamente 50% lo cual indica que es el porcentaje de voltaje promedio
entregado a la carga.
El PWM se puede utilizar en varias cosas, como el control de la velocidad de motores de DC, la
posicin de un servomotor, fuentes conmutadas, entre otras cosas ms.
Programa en C.
#include <avr/io.h>
#include <util/delay.h>
int main(void){
DDRB=0x02;
DDRD=0x00;
TCCR1A=0b10000011;
TCCR1B=0b00000001;
TCNT1 =0b00000000;
OCR1A=0;
for(;;){
if ( PIND == 0x01 ) {
OCR1A++;
_delay_us(500);
}
if ( PIND == 0x02 ) {
OCR1A--;
_delay_us(500);
}
}
}
DDRD=0x00;
Se declaran el bit 1 del puerto B como salida y el puerto D como entrada.
TCCR1A=0b10000011;
Los primeros dos bits del TCCR1A los cuales se observa que tanto en el registro como en la tabla
sonWGM11 y WGM10, y como en este caso ambos estn activados, se puede comprobar que el
modo de operacin es el de PWM en fase de 10 bits.
Acerca del bit 7 este depende de qu tipo de PWM se est trabajando, ya que en este caso se est
trabajando el de correccin de fase, al consultar la tabla anterior se observa que se tiene el
COM1A1 habilitado el cual indica que limpia el OC1A en la comparacin al incrementar y ajusta el
OC1A en la comparacin al decremento.
TCCR1B=0b00000001;
Se ajusta el PWM para que no se emplee pre escalador desde el Clk, se puede ver en la tabla de los
ltimos tres bits del registro.
OCR1A=0;
Se inicializa el valor al que llega el PWM, como se puede ver en la imagen anterior los picos del
TCNTn dependen del OCRnx, en este caso es el OCR1A el cual se inicializa en cero.
for(;;){
En este caso, es otro manera de generar un loop infinito, esta instruccin es equivalente al
while(1){ .
if ( PIND == 0x01 ) {
OCR1A++;
_delay_us(500);
}
if ( PIND == 0x02 ) {
OCR1A--;
_delay_us(500);
}
En general lo que se hace en esta seccin de cdigo, es que primero verifica si el Push Button1
est siendo presionado al comparar el puerto con un 0x01, en caso de que si este, se incrementa
el valor del OCR1A el cual define el ancho del pulso en la modulacin, por consiguiente, como se
vio previamente, a mayor ancho del pulso se entrega un mayor voltaje promedio. El segundo if
funciona de la misma manera, slo que para activarlo hay que presionar el otro botn, y dentro de
este el OCR1A se decrementara.
El retardo se emplea ya que como el microcontrolador corre a una velocidad de 1Mhz, para limitar
la velocidad del incremento, si no hubiera algn retardo, no se podra observar que es lo que esta
pasado debido a la velocidad del incremento, ya que con slo presionar algn botn un instante
de tiempo, el cdigo se repetira cientos de veces y el OCR1A se incrementara o decrementaria
muy rpido.