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);
      
      }

      
      }
      
  
      
     

   

}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *