informe pwm
TRANSCRIPT
UNIVERSIDAD TÉCNICA DEL NORTE
FACULTAD DE INGENIERÍA EN CIENCIAS APLICADAS
CIERCOM
SISTEMAS MICROPROCESADOS
CARTAGENA EDUARDO
2013/07/12
I. TEMA
Modulación por ancho de pulso PWM
II. OBJETIVOS
GENERAL
Comprender el funcionamiento de un sistema PWM utilizando el micro controlador Atmega 164
ESPECIFICOS
Realizar un programa en CODEVISION AVR mediante el cual podamos visualizar
diferentes ondas diferenciando el ancho de pulso que estas poseen
Comprender el funcionamiento y la programación en el micro del sistema PWM
Determinar si la teoría satisface a la práctica mediante la conexión de los elementos
electrónicos que se utilizaran para el funcionamiento del circuito.
Utilizar programa software Proteus para comprobar de una manera más detallada el
funcionamiento del circuito.
Aprender un poco más de la materia, de una forma más didáctica a través de la
realización de prácticas en las cuales podamos comprender la parte teórica de una mejor
manera.
Obtener las conclusiones.
III. MARCO TEÓRICO
MODULACIÓN POR ANCHO DE PULSO PWM
La modulación por ancho de pulso, transforma un señal en un tren de pulsos con dos posibles valores de amplitud, cero o un nivel de tensión definido. La modulación se realiza mediante la variación del ciclo de trabajo para un periodo constante.
Este tipo de modulación es muy utilizada en el control de la velocidad de motores DC, aunque también cuenta con otras utilidades como el control de intensidad de luz de dispositivos como los LEDs, transmisión de información entre otras.
La técnica de PWM de señal cuadrada, básicamente genera una señal de tipo cuadrada de frecuencia fija, a la cual se le varía el ancho de pulso de nivel positivo, es decir se varía el tiempo en alto de la señal y por ende cambia su ciclo de trabajo. De esta manera se logra controlar la velocidad de giro del motor. Una de las ventajas de utilizar esta técnica para el control de la velocidad de un motor DC es que el motor no pierde sus propiedades de par y velocidad
FORMULAS
TIMER 0
Duty cycle (ciclo útil del reloj)
DC= N*(0CR0A+1)/F_CPC(frecuencia del CPU)
PERIODO= (N*256/F_CPU)
DUTY CYCLE = ((OCROA+1)/256)*100%
TIMERS DE 16 BITS (T1,T3)
TOP= F_CPU/2N(50)
PERIODO= (N*TOPE)/F_CPU
Duty cycle= (N* OCR1A)/F_CPU
OCR1AH = 8BITS
OCR1AL = 8BITS
Señal PWM para diferentes ciclos de trabajo
IV. DESARROLLO
#include <mega164a.h>
// Declare your global variables here
void main(void){// Declare your local variables here
// Crystal Oscillator division factor: 1#pragma optsize-CLKPR=0x80;CLKPR=0x00;#ifdef _OPTIMIZE_SIZE_#pragma optsize+#endif
PORTA=0x00;DDRA=0x00;
PORTB=0x00;DDRB=0x00;PORTC=0x00;DDRC=0x00;
DDRD=0x20;
// Timer/Counter 0 initialization// Clock source: System Clock// Clock value: Timer 0 Stopped// Mode: Normal top=0xFF// OC0A output: Disconnected// OC0B output: DisconnectedTCCR0A=0x00;TCCR0B=0x00;TCNT0=0x00;OCR0A=0x00;OCR0B=0x00;
TCCR1A=0x82;TCCR1B=0x1A;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;
OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;ASSR=0x00;TCCR2A=0x00;TCCR2B=0x00;TCNT2=0x00;OCR2A=0x00;OCR2B=0x00;EICRA=0x00;EIMSK=0x00;PCICR=0x00;
// Timer/Counter 0 Interrupt(s) initializationTIMSK0=0x00;
// Timer/Counter 1 Interrupt(s) initializationTIMSK1=0x00;
// Timer/Counter 2 Interrupt(s) initializationTIMSK2=0x00;UCSR0B=0x00;
UCSR1B=0x00;ACSR=0x80;ADCSRB=0x00;DIDR1=0x00;
// ADC initialization// ADC disabledADCSRA=0x00;
// SPI initialization// SPI disabledSPCR=0x00;
// TWI initialization// TWI disabledTWCR=0x00;
while (1) { ICR1H=0b10011100; // el valor tope de conteo nivel alto ICR1L=0b001000000; // el valor tope de conteo nivel bajo
switch( PINA)
{ case 0:
OCR1AH=0b00000000; //registro temporal de 8 bits para almacenar el byte alto OCR1AL=0b00000000; //registro temporal de 8 bits para almacenar el byte bajo break; case 1: //5000= 1001110001000 OCR1AH=0b00010011; //registro temporal de 8 bits para almacenar el byte alto OCR1AL=0b10001000; //registro temporal de 8 bits para almacenar el byte alto break;
case 2: //10000= 10011100010000 OCR1AH=0b00100111; //registro temporal de 8 bits para almacenar el byte alto OCR1AL=0b00010000; //registro temporal de 8 bits para almacenar el byte alto break; case 3: //15000= 11101010011000 OCR1AH=0b00111010; //registro temporal de 8 bits para almacenar el byte alto OCR1AL=0b10011000; //registro temporal de 8 bits para almacenar el byte alto break; case 4: //20000= 100111000100000 OCR1AH=0b010011101; //registro temporal de 8 bits para almacenar el byte alto OCR1AL=0b00100000; //registro temporal de 8 bits para almacenar el byte alto break; case 5: //25 000= 110000110101000 OCR1AH=0b011000011; //registro temporal de 8 bits para almacenar el byte alto OCR1AL=0b10101000; //registro temporal de 8 bits para almacenar el byte alto break; case 6: //30 000= 111010100110000 OCR1AH=0b01110101; //registro temporal de 8 bits para almacenar el byte alto OCR1AL=0b00110000; //registro temporal de 8 bits para almacenar el byte alto break;
case 7: //35 000= 1000100010111000 OCR1AH=0b10001000 //registro temporal de 8 bits para almacenar el byte alto OCR1AL=0b10111000; //registro temporal de 8 bits para almacenar el byte alto break;
}
}}
V. DIAGRAMAS CIRCUITALES
VI.
CONCLUSIONES
Verificamos el correcto funcionamiento de la modulación por ancho de pulso
Se pudo entender la manera de utilizar los PWM y comprobar su funcionamiento
Gracias al programa PROTEUS se pudo comprobar el buen funcionamiento del circuito.
Este tipo de modulación es muy utilizada en el control de la velocidad de motores DC, aunque también cuenta con otras utilidades como el control de intensidad de luz de dispositivos como los LEDs, transmisión de información entre otras.