programa control de velocidad motor
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.}}}