Control de motor bipolar con pic16f887 con interruptor on/off y boton de cambio de giro usando pic c y proteus
motor bipolar, pic16f887, control de giro con boton
Objetivos:
- Control motor bipolar
- Interruptor on/off
- Boton giro
Diagrama proteus:

Diagrama de flujo:
Programa en C (pic C)
// control de motor de pasos unipolar con un boton de arranque y otro de giro
#include <16F887.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES LP //Low power osc < 200 khz
#FUSES NOPUT //No Power Up Timer
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOIESO //Internal External Switch Over mode disabled
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOWRT //Program memory not write protected
#FUSES BORV40 //Brownout reset at 4.0V
#use delay(clock=8000000)
int1 bandera=0;
void main()
{
set_tris_a(0xFF); // configure porta como entrada
set_tris_c(0x00); // configure portc como salida
while(true){
if ((input(PIN_A0) == 0)) // esta prendido?
{
if ((input(PIN_A1) == 0)){ // al oprimir el boton se cambia el valor de la bandera
bandera=!bandera;
}
if ((bandera==1)){ // si la bandera esta en 1 gira en sentido, si esta 0 gira en otro
output_c(0b00001010) ;
delay_ms(500); // pausa de 1 seg
output_c(0b00001001);
delay_ms(500);
output_c(0b00000101) ;
delay_ms(500);
output_c(0b00000110) ;
delay_ms(500);
output_c(0b00001010) ;
delay_ms(500);
}
else{
output_c(0b00000110) ;
delay_ms(500); // pausa de 1 seg
output_c(0b00000101) ;
delay_ms(500);
output_c(0b00001001) ;
delay_ms(500);
output_c(0b00001010) ;
delay_ms(500);
output_c(0b00000110) ;
delay_ms(500);
}
}
else // está apagado?
{
output_c(0x00);
delay_ms(1000);
}
}
}
