Академический Документы
Профессиональный Документы
Культура Документы
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.
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.
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).
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
sbit // char
Fin
de
LCD_D7_Direction declaracin
de
at variables
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); } } }
Convertidor A/D de 7 canales (PIC16F88 y 16F877A) Seleccin del reloj de conversin Registros de resultado