Los motores paso a paso PAP se puede controlar por medio de un microcontrolador PIC programado de la forma adecuada para regular el sentido de giro, la posicion y la velocidad. Esta caracteristica de los motores paso a paso PAP los hace ideales para proyectos en los cuales se requiere el control preciso del movimiento y la posicion.
¡Descubre el mundo de los microcontroladores PIC y lleva tus habilidades de programación al siguiente nivel! Obtén nuestro eBook y disfruta aprendiendo paso a paso desde cero, podrás realizar proyectos prácticos, encontrar soluciones a problemas comunes y explorar una amplia cobertura de temas desde lo más básico a lo más avanzado. Incluye software y ejemplos resueltos. ¡Cómpralo ahora y libera el increíble potencial de esta poderosa tecnología hoy mismo!
En este tutorial se emplea el motor paso a paso PAP unipolar 28BYJ-48 y el PIC16F628A. Este motor cuenta con un conector de cinco terminales, cuatro de los cuales corresponden a las bobinas y el quinto se utiliza para la conexión de la fuente de alimentación. Incorpora un mecanismo reductor de velocidad (esto incrementa su fuerza), lo que hace necesario ejecutar una cantidad bastante grande de pasos para obtener un movimiento apreciable del eje externo (ver ejemplo de programación). Es un motor de bajo costo y puede ser utilizado en múltiples proyectos tanto básicos como avanzados.
Dimensiones físicas (mm)
Nota:d=diámetro
Ejemplo en mikroC PRO con el PIC16F628A
MotorPAP12V.c: Realizar un control de giro de un motor PAP unipolar de 12V por medio de un PIC16F628A y un driver L293D, de tal forma que el motor ejecute una secuencia repetitiva de movimientos en sentido horario y en sentido antihorario. El encendido y apagado del motor se controla por medio de un interruptor conectado al PIC en el pin RB7, de tal forma que cuando el nivel de entrada es 0 (interruptor cerrado) el motor esté apagado, y cuando el nivel sea 1 (interruptor abierto) el motor se encienda (en el ejemplo, el motor efectúa 645 pasos en sentido horario y 650 en sentido contrario). La inversión del sentido de giro también se puede hacer intercambiando los cables Azul y Amarillo (ó los cables Naranja y Rosa).
//MotorPAP12V.c //Microcontrolador: PIC16F628A //Oscilador: Interno 4MHz //Modo HALF STEP (medio paso) void pasosCW(); //Ocho pasos CW (horario). void pasosCCW(); //Ocho pasos CCW (antihorario). #define PAUSA 5 //5 ms char i; void main(){ PORTB=0x00; //Inicialización. NOT_RBPU_bit=0; //Habilitar las pull-up. TRISB=0b10000000; //RB<6:0> como salidas. RB7 como entrada. while(1){ if (RB7_bit==0){ RB4_bit=0; //Motor desconectado. RB5_bit=0; //Motor desconectado. } if (RB7_bit==1){ //645 pasos CW for (i=1; i<=80;i++) pasosCW(); PORTB=0b00110110; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00110111; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00110101; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00111101; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00111001; //Secuencia continua. Delay_ms(PAUSA); //650 pasos CCW PORTB=0b00111101; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00110101; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00110111; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00110110; //Secuencia continua. Delay_ms(PAUSA); for (i=1; i<=80;i++) pasosCCW(); PORTB=0b00111110; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00111010; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00111011; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00111001; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00111101; //Secuencia continua. Delay_ms(PAUSA); PORTB=0b00111111; //Apagar el motor. Delay_ms(500); //Esperar 5 segundos antes de repetir. } } } //Definición de funciones. void pasosCW(){ PORTB=0b00110110; Delay_ms(PAUSA); PORTB=0b00110111; Delay_ms(PAUSA); PORTB=0b00110101; Delay_ms(PAUSA); PORTB=0b00111101; Delay_ms(PAUSA); PORTB=0b00111001; Delay_ms(PAUSA); PORTB=0b00111011; Delay_ms(PAUSA); PORTB=0b00111010; Delay_ms(PAUSA); PORTB=0b00111110; Delay_ms(PAUSA); } void pasosCCW(){ PORTB=0b00111110; Delay_ms(PAUSA); PORTB=0b00111010; Delay_ms(PAUSA); PORTB=0b00111011; Delay_ms(PAUSA); PORTB=0b00111001; Delay_ms(PAUSA); PORTB=0b00111101; Delay_ms(PAUSA); PORTB=0b00110101; Delay_ms(PAUSA); PORTB=0b00110111; Delay_ms(PAUSA); PORTB=0b00110110; Delay_ms(PAUSA); }