Módulo motores paso a paso

INTRODUCCIÓN:

Con este módulo, aprenderemos el funcionamiento de los motores paso a paso (PaP), para comprender bien su funcionamiento, antes de todo una breve explicación.

DESCRIPCIÓN:

    El motor paso a paso es un dispositivo utilizado para convertir impulsos eléctricos en discretos movimientos mecánicos de rotación. Sus características de precisión y velocidad del posicionamiento los hacen adecuados a innumerables aplicaciones, por ejemplo, impresoras, plotters, robots, maquinas de control numérico, etc.

    Para el diseño se parte del uso de un motor paso a paso unipolar de 4 fases.

    Para poder excitar las bobinas se tendrá que proporcionar la corriente necesaria, que, lógicamente, no la puede proporcionar un microcontrolador. Es por eso que se necesita diseñar una sencilla etapa de potencia para poder hacer llegar la corriente necesaria a las bobinas. En este caso se puede optar por el uso del circuito ULN2003A, que es un driver de corriente formado por transistores en configuración darlington, que admite como señales de entrada las generadas por los dispositivos TTL. Este integrado admite un tensión máxima de entrada de 50V y una corriente de de 500 mA.

    Para controlar, por tanto, el movimiento del motor paso a paso se tendrá que hacer llegar al driver ULN 2003A las señales de control, es decir, la secuencia de pasos, para que las amplifique convenientemente y excite los devanados del mismo. Existen otros circuitos integrados (por ejemplo la pareja formada por el  L297 y L298 o el SAA1027) que automáticamente generan la secuencia de pasos, bien sea medio paso o paso entero, descargando al micro de la generación de la mencionada secuencia. Típicamente estos circuitos tienen, entre otras, una entrada para indicar si se desea paso entero o medio, una señal de dirección (CW o CCW) y una señal de reloj para determinar la frecuencia de funcionamiento, entre otras.

 

Descarga Del Esqiuema Del Módulo De Motores PaP

     En el esquema se muestra el esquema de la circuitería necesaria para realizar la interconexión del microcontrolador con el motor paso a paso. Las secuencias que se proponen son las siguientes (iguales a las comentadas en los primeros apartados).

           

          PASO

          1

          2

          3

          4

          Tabla -1. Secuencia de paso completo

          PASO 1 2 3 4

          Tabla -2. Secuencia de medio paso

 

PCB:

Descarga Del Pcb Del Módulo De Motores PaP

 

COMPONENTES:

 

COMPONENTES

CANTIDAD
Conector Molex 2x5 Pines 1
C.I. 74LS04 1
C.I. TD62064AP 1
Regleta Circuito Impreso Atornillable 2 Conductores 1
Regleta Circuito Impreso Atornillable 5 Conductores* 1
Torretas Separadoras 10mm 4
Placa PCB 1 Cara (77 x 56) mm 1
Zócalo DIP-14 Pines Redondeados 1
Zócalo DIP-16 Pines Redondeados 1

* Si la regleta atornillable de 5 conductores no estuviera disponible, simpre se puede construir a partir de una de tres y otra de 2 conductores.

EJEMPLO:

(guardar)

    Los siguientes programas muestran como controlar un motor paso a paso con el sistema propuesto.

 

/* motpp.c */
#include <io51.h>
#include "motpp.h"
#ifndef MOTP
#define MOTP P1
#endif
#define NPASOS 4 static unsigned char pasos={0x05,0x09,0x0A,0x06};

 /* l¢gica inversa, 0-> bobina alimentada, 1-> bobina desconectada */
 /* se evita que tras RESET se alimenten todas las bobinas */
static unsigned char cpaso=0;

 void motpp_off(void)
 {
     MOTP |= 0x0F;
} /* un paso en el sentido del reloj */

 void motpp_r(void)
{
     cpaso = (cpaso + 1) % NPASOS;
     MOTP |= pasos[cpaso];
     MOTP &= (0xF0 | pasos[cpaso]);
 } /* un paso en el sentido contrario del reloj */

 void motpp_cr(void)
 {
     cpaso--;
     cpaso = cpaso % NPASOS; /* 0 - 1= 255, 255 % 4 = 3 */
     MOTP |= pasos[cpaso];
     MOTP &= (0xF0 | pasos[cpaso]);
}
 
 

/* motpp.h */

void motpp_off(void);
void motpp_r(void);
 void motpp_cr(void);
 

 /* testmpp.c */
#include "motpp.h"
#include <io51.h>

 void retardo(long i);

 #define R 1
#define CR 0

void pasos(unsigned char s, unsigned int t, unsigned int d)
 {
     while (t--)
    {
         if (s) motpp_r();
         else motpp_cr();
         retardo(d);
    }
 }

 void main(void)
 {
     pasos(R,40,500);
     pasos(CR,40,500);
     retardo(5000);
     pasos(R,20,100);
     retardo(5000);
     pasos(R,20,100);
     retardo(5000);
     pasos(R,20,100);
     retardo(5000);
     pasos(R,20,100);
     retardo(5000);
     while(1)
     {
         pasos(R,200,10);
         retardo(5000);
         pasos(CR,200,10);
         retardo(5000);
     }
 }

 void retardo (long i)
{
     while (i--);
 }