Controlar motor a pasos Mikro C.
Alexis S RApuntes22 de Marzo de 2017
1.350 Palabras (6 Páginas)308 Visitas
/* Programa para controlar un motor a pasos con un PIC16f886.
La secuencia que debe seguir el programa es:
-avanzar en sentido horario de 90° en 90° con una pausa de 2seg cada 90°
-regresar al punto de incio de 90° en 90° con pausas de 2 segundos
-avanzar 360° con una velocidad mayor a la secuencia anterior
-luego de 2seg avanzar 180°
-luego de 2seg regresar 180°
*/
void config(); //declara una funcion para la configuracion del pic
void derecha(); //secuencia que gira a la derecha 90°
void izquierda(); //secuencia que gira a la izquierda 90°
void derecha_rapido(); //secuencia de 90° de giro la derecha a una velocidad rapida
void izquierda_rapido(); //secuencia de 90° de giro la izquierda a una velocidad rapida
unsigned int pasos,y; //declara variables sin signo llamadas "pasos" y "y"
#define bobinas PORTC
#define arranque RA0_bit
void main()
{
config(); //llama a la configuración
while(1) //inicia el cliclo infinito
{
if(arranque==1) //si el boton de arranque se presiona realizar...
{
derecha(); //giro de 0 a 90°
delay_ms(2000);
derecha(); //giro de 90 a 180°
delay_ms(2000);
derecha(); //giro de 180 a 270°
delay_ms(2000);
derecha(); //giro de 270 a 360°
delay_ms(2000);
izquierda(); //giro de 360 a 270°
delay_ms(2000);
izquierda(); //giro de 270 a 180°
delay_ms(2000);
izquierda(); //giro de 180 a 90°
delay_ms(2000);
izquierda(); //giro de 90 a 0°
delay_ms(2000);
derecha_rapido(); //giro en sentido horario desde 0°
derecha_rapido(); //180
derecha_rapido(); //270°
derecha_rapido(); //hasta 360° a una velocidad rapida sin pausas
delay_ms(2000);
derecha_rapido(); //giro desde 0°
derecha_rapido(); //hasta 180° a velocidad rapida
delay_ms(2000);
izquierda_rapido(); //giro antihorario desde 180°
izquierda_rapido(); //hasta 0° sin pausas
}
}
}
void config() //parametros de configuración
{
ANSEL=ANSELH=0; //desactiva E/S analogicas
TRISC=0B00000000; //declara PUERTO C como salidas
PORTC=0B00000000; //valor inicial del PUERTO C
TRISA=0B00000001; //declara el RA0 como (entrada para el arranque)
PORTA=0; //valor inicial del PUERTO A
}
void derecha() //secuencia de giro horario
{
for(pasos=0;pasos<13;pasos++) //repite 13 veces la activacion de cada bobina para dar 90° de giro
{
for(y=0,bobinas=1;y<4;y++) //ciclo for que se repite 3 veces
{
delay_ms(40); //cada 40ms activa bobinas
bobinas=bobinas<<1; //empezando desde el bit 1,2,4,8 del puerto C
}
}
}
void izquierda() //secuencia de giro antihorario
{
for(pasos=0;pasos<13;pasos++) //repite 13 veces la activacion de cada bobina para dar 90° de giro antihorario
...