Sunteți pe pagina 1din 18

Capitulo 9 PWM

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%.

PWM con Modulacin no invertida al centro. En determinados tipos de control de motores la


modulacin no se hace con respecto al inicio del periodo, sino con respecto al centro. En la
siguiente figura se aprecia PWM con modulacin no invertida al centro con modulacin 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.

La frecuencia de la forma de onda est definida por la siguiente expresin matemtica.

Donde la variable N representa el factor del pre-escalador (1, 8, 64,256 0 1024).

9.2.2 Caractersticas de PWM rpida.

PWM de alta frecuencia


Modo de operacin de una sola pendiente o cuesta simple
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 rpida (WGM13:0 = 5, 6, 7, 14, o 15) proporciona la opcin de una generacin de


forma de onda PWM de alta frecuencia. Debido a su pendiente sencilla, la frecuencia de
operacin de la PWM rpida puede ser el doble de rpida que la PWM de fase correcta o
PWM de fase y frecuencia correcta que emplean doble pendiente. Esta alta frecuencia
permite que la PWM rpida sea ideal para el control de potencia, rectificacin, aplicaciones
de DAC. Altas frecuencias permiten pequeas componentes externas, tales como bobinas y
capacitores, reduciendo los costos totales del sistema donde se aplique.

La frecuencia de la forma de onda est definida por la siguiente expresin matemtica.

Donde la variable N representa el factor del pre-escalador (1, 8, 64,256 0 1024).

9.2.3 Caractersticas de PWM con correccin de fase.

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.

La frecuencia de la forma de onda est definida por la siguiente expresin matemtica.

Donde la variable N representa el factor del pre-escalador (1, 8, 64,256 0 1024).

9.2.4 Caractersticas de PWM con correccin de fase y frecuencia.

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 frecuencia y fase correcta (WGM13:0 = 8 o 9) proporciona una opcin de generacin


de forma de onda de alta resolucin y frecuencia correcta. La PWM de fase y frecuencia correcta
es de doble pendiente.
La principal diferencia entre la fase correcta y la fase y frecuencia correcta es el tiempo de
actualizacin del registro OCR1x por el buffer del registro.

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.

Donde la variable N representa el factor del pre-escalador (1, 8, 64,256 0 1024).

9.3 Configuracin de la PWM.


Los registros que interviene en la configuracin son los mismos que intervienen en la
configuracin de los temporizadores contadores 0, 1 y 2.

Slo se estudian los bits referentes al PWM.


9.3.1 registro de control A, TCCR1A.

Bit 7:6 COM1A1:0, modo de salida de comparacin para canal A.


Bit 5:4 COM1B1:0, modo de salida de comparacin para canal B.
Bit 1:0 WGM11:10, modo de generacin de formas de onda.

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

Operacin regular del puerto, OC1A/OC1B desconectadas


WGM13:10=9 o 11, conmutar OC1A en igualacin de comparacin, OC1B
desconectada (operacin regular del puerto). Para todas las otras WGM, operacin
regular del puerto, OC1A/OC1B desconectadas
Poner en cero OC1A/OC1B en igualacin de comparacin cuando se tenga conteo
ascendente. Poner en uno a OC1A/OC1B en igualacin de comparacin en conteo
descendente.
Poner a uno a OC1A/OC1B en igualacin de conteo en conteo ascendente. Poner
en cero a OC1A/OC1B en igualacin de conteo en conteo descendente

9.3.2 Registro de control B, TCCR1B.

Bit 4:3 WGM13:12, modo de generacin de formas de onda.


Bit 2:0 CS12:10, fuente del reloj para el timer 1. Estos ltimos tres bit, configuran la
fuente de reloj que utilizar el timer 1, de acuerdo a la siguiente tabla.

Tabla de generacin de formas de onda, descripcin de los bits

9.4 Practica de PWM.


9.4.1 Objetivo.
Conocer el funcionamiento de la PWM y de los registros que intervienen en la configuracin de la
PWM del microcontrolador AT mega48.

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

9.5 Informacin adicional


9.5.1 Practica de la PWM

Uso del PWM


Descripcin.
En este ejemplo se presenta la forma de empleo del PWM, o modulacin por ancho de pulso, la
cual consiste en modificar el ancho del pulso dejando la frecuencia intacta, el programa acepta dos
entradas, las cuales son los Push Buttons conectados al microcontrolador, y cuenta con una salida,
que es el LED, el cual indica el nivel de modulacin, a ms ancho el pulso mas ciclo de trabajo y el
LED se ilumina con mayor intensidad.

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>

//librera de entrada salida.


//librera de retardos.

int main(void){
DDRB=0x02;
DDRD=0x00;
TCCR1A=0b10000011;
TCCR1B=0b00000001;
TCNT1 =0b00000000;
OCR1A=0;
for(;;){

//inicia el programa principal.


// la terminal 1 del puerto B como salida.
//todas las terminales del puerto D como entradas.
//configurar el PWM en modo de fase.
//sin pre escalador.
//no se modifica.
//inicializar el TOP en cero.
//inicia ciclo infinito.

if ( PIND == 0x01 ) {
OCR1A++;
_delay_us(500);
}

//si el botn 1 esta activado.


//incrementar la modulacin.
//retardo de 500 microsegundos.
//fin del primer if.

if ( PIND == 0x02 ) {
OCR1A--;
_delay_us(500);
}

//si el botn 2 esta activado.


//decrementar la modulacin.
//retardo de 500 microsegundos.
//fin del segundo if.
//fin del ciclo infinito.

}
}

//fin del programa principal.

Detalles del programa.


#include <avr/io.h>
Se incluye la librera avr/io que contiene la informacin de las entradas y salidas del
microcontrolador.
#include <util/delay.h>
Esta librera es necesaria para poder utilizar los retardos de tiempo.
int main (void){
El main es la funcin principal, es donde el programa inicia, siempre es necesario declarar la
funcin main.
DDRB=0x02;

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.

S-ar putea să vă placă și