Pages Menu
TwitterFacebook



BANNER2_ALT

Posted by on Abr 15, 2014 in AVR | 2 comments

Motor a pasos

Motor a pasos

CONTROL DE MOTOR A PASOS

PASO SIMPLE Y PASO COMPLETO

 Introducción:

El motor  a pasos tienen cuatro bobinas  y avanzan o retroceden solo un pequeño ángulo de giro o ángulo de paso, por cada combinación de voltaje aplicado en las bobinas. Para mantener la marcha del motor es necesario cambiar periódicamente la combinación de voltajes en sus terminales.

Con 4 bobinas un motor a pasos puede tener hasta 8 terminales, dos por cada bobina. Las terminales se pueden unir interna o externamente dando lugar a dos tipos de motores, Unipolares y los Bipolares.

Los motores a pasos bipolares cada bobina debe ser polarizada en ambas direcciones. Esto es equivalente a hacer girar un motor DC en ambas direcciones y para esto se requiere un circuito llamado Puente – H.

Los motores a pasos unipolares son más fáciles de controlar por el hardware requerido. En estos motores las bobinas se polarizan en una sola dirección, por lo que basta un switch o transistor por cada bobina para energizarla. Para controlar este tipo de motores las bobinas deben ser polarizadas secuencialmente de acuerdo con la dirección que se quiera girar.

En los motores a pasos unipolares las bobinas no deben ser polarizadas las 4 bobinas al mismo tiempo por que generaría un campo magnético simétrico y el rotor no sabría a donde girar. A partir de esto se deduce que existen hasta tres modos de hacer girar un motor a pasos unipolar; Paso simple, Paso completo y Medio paso.

Paso completo: Es cuando las bobinas se polarizan de dos en dos. En la siguiente tabla se muestra la secuencia en que se energizan las bobinas para hacer girar el rotor hacia un sentido, para que gire en sentido contrario solo hay que invertir el orden de polarización de las bobinas.

Tabla 1. Secuencia de polarización las bobinas de paso completo.

L1 L2 L3 L4 Hex
1 0 0 1 0x09
1 1 0 0 0x0C
0 1 1 0 0x06
0 0 1 1 0x03

Medio paso: Es cuando las bobinas se polarizan de a una y de a dos intercaladamente. En la siguiente tabla se muestra la secuencia de polarización de las bobinas en modo medio paso.

Tabla 2. Secuencia de polarización las bobinas de medio paso.

L1 L2 L3 L4 Hex
1 0 0 1 0x09
1 1 0 1 0x0D
1 1 0 0 0x0C
1 1 1 0 0x0E
0 1 1 0 0x06
0 1 1 1 0x07
0 0 1 1 0x03
1 0 1 1 0x0B

Paso simple: Es cuando las bobinas se polarizan de una en una. En la siguiente tabla se muestra la secuencia de polarización de las bobinas en paso simple.

Tabla 3. Secuencia de polarización las bobinas de paso simple.

L1 L2 L3 L4 Hex
0 0 0 1 0x01
0 0 1 0 0x02
0 1 0 0 0x04
1 0 0 0 0x08

Lista de materiales  (Puedes encontrarlos en la tienda virtual HeTPro http://www.hetpro-store.com)

 

 Diagrama Esquemático

esquematico

Diagrama micro controlador

 

 Imagenes

A continuacion se muestran imagenes funcionando de la tarjeta controladora de motores L298.

Motor

Imagen del cicuito

 

motor_2

circuito control

 

motor_3

Driver motor

 

motor_4

Imagen de conexion driver

 

Motor_5

Imagen de motor

 A continuación tenemos el programa en lenguaje C, fue desarrollado en AVR Studio y compilado con WinAVR. Este código se utilizó para controlar la dirección de giro y velocidad del motor a pasos, la velocidad es controlada con un potenciómetro el cual es leído por el ADC7 del microcontrolador ATMEGA8535 y mediante los valores del ADC se da el tiempo de retardo en los bits de salida del puerto en el que se conecta a la tarjeta controladora de motores.

Los botones sirven para seleccionar el tipo de paso y la dirección de giro del motor, como se puede ver en la sección del código tenemos las opciones de paso simple y paso completo para diferentes combinaciones de los primeros 2 bits del puerto C.

Programa en C

#include avr/io.h    //Librería necesaria para las entradas y salidas
#include util/delay.h  //Librería para usar los retardos de tiempo
#include avr/interrupt.h   // Interrupciones
#define Clock 8000000       //Frecuencia de trabajo del Microcontrolador
//Configuración-ADC...

void InicializarADC (void);          // Inicialización ADC
void IniciarConversionADC(void);     // Iniciar conversión ADC
unsigned int ConversionADC;         //Variable sin signo
unsigned int Ret;             // Variable sin signo para los Retardos
int main(void){                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      DDRA = 0x0F;                                                               //Se declara el Puerto A como salida
PORTA =0x01;            //Se pone un 1 en Puerto A
DDRD = 0x00;        //Se declara el puerto D como entrada

sei();          //Interrupción Global
InicializarADC();             //Inicializa el ADC
IniciarConversionADC();   //Inicia conversión del ADC
for(;;);    //Ciclo FOR infinito }
ISR(ADC_vect)      //Vector de Interrupción del ADC
{
volatile unsigned char ConversionADCL=ADCL;
volatile unsigned char ConversionADCH=ADCH;
ConversionADC=(ConversionADCH*256)+ConversionADCL;
Ret= ConversionADC;
// Secuencia de Polarización de las bobinas en Modo Paso Simple

if(PIND == 0x00)      //Giro a la Derecha
{
PORTA = 0x01;
_delay_ms(Ret);
PORTA = 0x02;
_delay_ms(Ret);
PORTA = 0x04;
_delay_ms(Ret);
PORTA = 0x08;
_delay_ms(Ret);
}
else if(PIND == 0x01)   //Giro a la Izquierda
{
PORTA = 0x08;
_delay_ms(Ret);
PORTA = 0x04;
_delay_ms(Ret);
PORTA = 0x02;
_delay_ms(Ret);
PORTA = 0x01;
_delay_ms(Ret);
}                   // Secuencia de Polarización de las bobinas en Modo Paso Completo

else if(PIND == 0x02) //Giro a la derecha
{
PORTA = 0x09;
_delay_ms(Ret);
PORTA = 0x0C;
_delay_ms(Ret);
PORTA = 0x06;
_delay_ms(Ret);
PORTA = 0x03;
_delay_ms(Ret);
}

else if(PIND == 0x03)     //Giro a la Izquierda
{
PORTA = 0x03;
_delay_ms(Ret);
PORTA = 0x06;
_delay_ms(Ret);
PORTA = 0x0C;
_delay_ms(Ret);
PORTA = 0x09;
_delay_ms(Ret);
}
IniciarConversionADC ();
}
// Configuración-ADC...
void InicializarADC (void)
{
ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);     // Habilitar ADC, interrupción y prescalador(4)
ADMUX|=(0<<REFS1)|(1<<REFS0)|(0<<MUX4)|(0<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0);   //Configuracion de ADC7 y AVCC con capacitor externo en pin AREF
}
void IniciarConversionADC (void)
{
ADCSRA|= (1<<ADSC);        // Iniciar conversión
}

 

 

2 Comments

  1. engo un motor a pasos pero no tengo ninguna espesificacion sol que mide 3.300×3.300 4.470 con flecha de .500diamero y tiene un drive de 4.2 ampers, 24 volts y deseo comprar uno si me puedes ayudar a ver si encuentras uno con estas medidas, me comentaron que es un nema 34 pero no se si sea cierto y si el controlador que tengo es el adecuado para el motor, agradezco tu informacion y quedo a tus ordenes

Post a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *