Вы находитесь на странице: 1из 6

Control de velocidad PWM para motores de corriente directa

Extracto del Captulo IX del libro Cmo microcontroladores PIC16F88, 16F628A programar en lenguaje C los y 16F877A. 2da edicin. Regstrate aqu para descargar una muestra gratis de este libro

Introduccin
Los perifricos son los subsistemas que le aaden gran poder y versatilidad a un microcontrolador ya que, al estar incluidos dentro de ste, simplifican enormemente el proceso de diseo, tanto en hardware como en software, de una determinada aplicacin. Entre los ms importantes estn los mdulos PWM (Modulacin de Ancho de Pulso) , los convertidores analgico/digital (Convertidor A/D), los mdulos de comunicacin serial SSP y AUSART (SCI) y los comparadores.

Modulacin de ancho de pulso: PWM para PIC


Este es uno de los tres posibles modos de operacin del mdulo CCP de los PICs 16F88, 16F628A y 16F877A, y se describe a continuacin debido a su gran importancia en el campo de la automatizacin. Una seal PWM es una forma de onda digital binaria de una determinada frecuencia y ciclo de trabajo (duty cycle) variable. Un ejemplo tpico de aplicacin es el control de potencia (figura 9.1). Si se considera que el nivel 0 representa OFF y el nivel 1 representa ON, la potencia que consume la carga ser directamente proporcional a la duracin del pulso.

Figura 9.1 Control de potencia PWM En este modo, el pin CCP1 produce una seal PWM de hasta 10 bits de resolucin, lo que

significa que se tienen hasta 1024 opciones de configuracin del ciclo de trabajo. Este pin tiene que configurarse como salida por medio del registro TRISB. La figura 9.2 muestra un diagrama de bloques del mdulo CCP operando en modo PWM.

Figura 9.2 Diagrama de bloques PWM (16F88, 16F628A y 16F877A) Una seal PWM (figura 9.3) se caracteriza por una base de tiempo (perodo) y un tiempo durante el cual la salida tiene un nivel alto (ciclo de trabajo). La frecuencia es el inverso del perodo.

Figura 9.3 Seal PWM

Funciones de mikroC para PWM

Tabla 9.1 Funciones para PWM

Ejemplos de programacin PWM para PIC


Estos ejemplos corresponden al PIC16F88. El cdigo fuente para los PICs 16F628A y 16F877A se encuentra en las carpetas correspondientes que acompaan a este libro. Con una frecuencia de oscilador (FOSC) de 4MHz se tiene un perodo (TOSC) de 0,25 us; si el prescaler del Timer2 tiene un valor de 1, entonces se pueden calcular los perodos mnimo y mximo de la seal PWM y las frecuencias mxima y mnima permitidas, respectivamente. El perodo mnimo se obtiene cuando el registro PR2 tiene un valor de 0, por lo tanto: TPWMmn=(0+1)x4x0,25x1=1 us Y la frecuencia mxima ser :f PWMmx=1MHz

El perodo mximo se obtiene cuando el registro PR2 tiene un valor de 255: TPWMmx=(255+1)x4x0,25x1=256 us Y En el la frecuencia ejemplo se mnima trabaja con ser una :f frecuencia PWMmn=3.906Hz PWM de 5kHz.

siguiente

Ejemplo-PWM_1.c: Realizar un control de velocidad de un motor de corriente continua de 12 V en cinco pasos que se pueden seleccionar por medio de un pulsador conectado en RB7.

Inicialmente el motor se encuentra detenido, al pulsar la primera vez la velocidad ser del 25%, la segunda el 50%, la tercera el 75% y la cuarta el 100%. Si se vuelve a presionar, el motor se detiene. La velocidad actual se muestra en el LCD (figuras 9.4.1 y 9.4.2).

Figura 9.4.1 Circuito PWM para PIC 16F88 y 16F628A


//PWM_1.c //Declaracin //del sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit de las 12 variables mdulo necesarias at at at at at at at at at at at para la conexin LCD. RB5_bit; RB6_bit; RB1_bit; RB2_bit; RB3_bit; RB4_bit;

LCD_RS LCD_EN LCD_D4 LCD_D5 LCD_D6 LCD_D7 LCD_RS_Direction LCD_EN_Direction LCD_D4_Direction LCD_D5_Direction LCD_D6_Direction

TRISB5_bit; TRISB6_bit; TRISB1_bit; TRISB2_bit; TRISB3_bit;

sbit // char

Fin

de

LCD_D7_Direction declaracin

de

at variables

TRISB4_bit; de conexin. contador=0,estado=1;

void main(){ OSCCON=0x60; //Oscilador interno a 4MHz (TCI=1 us). while (OSCCON.IOFS==0); //Esperar mientras el oscilador est inestable. PORTB=0x00; //Inicializacin. ANSEL=0x00; //Bits AN6:AN0 como E/S digital. TRISB0_bit=0; //RB0 como salida. Lcd_Init(); //Inicializa el LCD. Lcd_Cmd(_LCD_CLEAR); //Borra el display. Lcd_Cmd(_LCD_CURSOR_OFF); //Apaga el cursor. Lcd_Out(1,3,"Control PWM."); PWM1_Init(5000); //Frecuencia PWM. PWM1_Start(); while (1){ if (Button(&PORTB,7,1,0)) estado=0; //Si se pulsa. if (estado==0 && Button(&PORTB,7,1,1)){ //Si se pulsa y se libera. contador++; if (contador>4) contador=0; estado=1; } switch (contador){ case 0: Lcd_Out(2,3,"Veloc.= 0%"); PWM1_Set_Duty(0); break; case 1: Lcd_Out(2,3,"Veloc.= 25%"); PWM1_Set_Duty(64); break; case 2: Lcd_Out(2,3,"Veloc.= 50%"); PWM1_Set_Duty(127); break; case 3: Lcd_Out(2,3,"Veloc.= 75%"); PWM1_Set_Duty(191); break; case 4: Lcd_Out(2,3,"Veloc.=100%"); PWM1_Set_Duty(255); } } }

Otros temas que tambin encontrars en este libro:


Convertidor A/D de 7 canales (PIC16F88 y 16F877A) Seleccin del reloj de conversin Registros de resultado

Funciones de mikroC para conversin A/D Ejemplos de programacin de conversin A/D

Вам также может понравиться