programa control de velocidad motor

2
Programa control de velocidad motor unsigned short PWM=41, CONT=0; // PWM =41 PORQUE EL SEMICICLE DE LA SEÑAL DE RED ES DE 8.3ms, el programa empezara con angulo de conduccion en 4.1ms //Función de interrupciones. void interrupt() { //Interrupción externa por RB0. if( INTCON.F1 ) { //Se apaga el pin de disparo. PORTB.F7=0; //Se reinicia el contador. CONT = 0; //Se apaga la bandera de la interrupción //externa. INTCON.F1=0; } //Interrupción por Timer 0 a 102.4u Seg. if( INTCON.F2 ) { //Se incrementa el contador. CONT ++; //mientras mayor valor tenga el CONT mayor angulo de conduccion //Se compara el contador con el punto, //PWM, y se apaga el disparo y es mayor el contador. if( CONT > PWM ) PORTB.F7=1; //Se apaga la bandera de la interrupción por //Timer 0. INTCON.F2 =0; } } void main( void ) { CMCON=0X07; //Configuración de puertos. TRISB = 0b00111111; PORTB = 0x00;

Upload: roberto-ayala

Post on 26-Nov-2015

12 views

Category:

Documents


0 download

TRANSCRIPT

Programa control de velocidad motor

unsigned short PWM=41, CONT=0; // PWM =41 PORQUE EL SEMICICLE DE LA SEAL DE RED ES DE 8.3ms, el programa empezara con angulo de conduccion en 4.1ms//Funcin de interrupciones.void interrupt(){//Interrupcin externa por RB0.if( INTCON.F1 ){//Se apaga el pin de disparo.PORTB.F7=0;

//Se reinicia el contador.CONT = 0;//Se apaga la bandera de la interrupcin//externa.INTCON.F1=0;}//Interrupcin por Timer 0 a 102.4u Seg.if( INTCON.F2 ){//Se incrementa el contador.CONT ++; //mientras mayor valor tenga el CONT mayor angulo de conduccion//Se compara el contador con el punto,//PWM, y se apaga el disparo y es mayor el contador.if( CONT > PWM )PORTB.F7=1;

//Se apaga la bandera de la interrupcin por//Timer 0.INTCON.F2 =0;}}void main( void ){CMCON=0X07;

//Configuracin de puertos.TRISB = 0b00111111;PORTB = 0x00;TRISA=0b111111;

//Activacin del Timer0, y flanco de//interrupcin externa.OPTION_REG = 0b01000000;INTCON = 0b10110000;

PORTA=0b000000; PORTB.F6=1;delay_ms(700);PORTB.F6=0;delay_ms(700);PORTB.F6=1;while( 1 )// Bucle infinito.{//Pulsador de menor potencia.while( Button( &PORTB, 1, 10, 0 ) ){//Decremento del recorte de fase.PWM ++; if( PWM > 84 )PWM=84; //el PWM representa el valor "0" de la seal de control y el CONT representa el valor "1"delay_ms(10); //Retardo de cambio.}//Pulsador de mayor frecuencia.while( Button( &PORTB, 2, 10, 0 ) ){//Incremento del recorte de fase.PWM --; if( PWM == 255 )PWM=0;delay_ms(10); //Retardo de cambio.}}}