Control de motores paso a paso (PAP) unipolares de 12V

motor pap unipolar

Este motor PAP unipolar 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 de 12V. Incorpora un mecanismo reductor de velocidad (esto incrementa enormemente 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.



  motor
                    pap unipolar   motor
                    pap unipolar

Dimensiones físicas (mm)

dimensiones-motor-pap-12v

Nota: d=diámetro

Ejemplo en lenguaje C (mikroC)

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).

conexión-de-un-motor-pap-unipolar-de-12v

//MotorPAP12V.c
//Microcontrolador: PIC16F628A
//Oscilador: Interno 4MHz
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);
}

Información complemetaria