Hacer que un motor de pasos bipolar gire un numero determinado de pasos  ( control de posición de motor )

Hacer que un motor de pasos bipolar gire un numero determinado de pasos ( control de posición de motor )

Escrito Por: admin Publicado En: Proyectos de microcontroladores PIC Fecha de Creación: 2014-08-19 visitas: 3940

Hacer que un motor de pasos bipolar gire un numero determinado de pasos  ( control de posición de motor )

Objetivo:

Control de posicion del motor de un motor bipolar, es decir controlar el numero de pasos que da el motor bipolar

 

Desarrollo

Un motor a pasos bipolar gira ciertos grados por cada paso ( esto varia de acuerdo al fabricante)

Para lograr esto tenemos que introducir un variable bandera que incrementado en uno cada que se un paso  para llevar la cuenta de los pasos y en caso de que se llege al paso el limite sacar al motor de la secuencia y pararlo.

 

Diagrama de flujo

Diagrama de proteus

Programa en 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)
#include "lcd.c" 

 

int8 contador=0;

int8 pasos=10;

 


void main()
{


set_tris_a(0xFF);  // configure porta como entrada
set_tris_c(0x00);  // configure portc como salida

output_c(0x00);


while(true) {

if  ((input(PIN_A0) == 1)) {


delay_ms(500);

output_c(0b00000110) ;

contador++;

   lcd_init();   
   lcd_gotoxy(1,1); 
   printf(lcd_putc,"%u",contador);
   
   if (contador==5){
   
   break;
   
   }

delay_ms(500);  // pausa de 1 seg
output_c(0b00000101) ;
contador++;
   lcd_init();   
   lcd_gotoxy(1,1); 
   printf(lcd_putc,"%u",contador);
   
   if (contador==5){
   
   break;
   
   }
delay_ms(500);
output_c(0b00001001) ;
contador++;
   lcd_init();   
   lcd_gotoxy(1,1); 
   printf(lcd_putc,"%u",contador);
   
   if (contador==5){
   
   break;
   
   }
delay_ms(500);
output_c(0b00001010) ;
contador++;
   lcd_init();   
   lcd_gotoxy(1,1); 
   printf(lcd_putc,"%u",contador);
   
   if (contador==5){
   
   break;
   
   }
delay_ms(500);


}

else {

          output_c(0x00);          
          delay_ms(1000);

}


}


          output_c(0x00);          
          delay_ms(1000);

}