Control de un motor a pasos bipolar con AVR (ATmega8535)

Hola gente de este foro, espero y todo esten bien, bueno es hora de hacer otra entrada a este foro, en esta ocasión les traigo un "sistema" de control para el motor a pasos bipolar (dos bobinas sin un comun), busque en la red muchos ejemplos pero ninguno me decia de manera explicita la secuencia qeu se tenia que tener estos motores, unos decian que polarizar los dos devanados(bobinas,solenoides) al mismo tiempo pero eso no funciona, bueno esa fue la odisea en encontrar como funcionaban pero gracias a un miembro de esta foro,llamado Marcelo, pude dar con ella, pueden checar la teoria detras de esto en:

https://www.forosdeelectronica.com/f19/introduccion-motores-paso-paso-289/

Bueno manos a la obra, para entender un motor a pasos bipolar hay que olvidarnos que se
polarizan asi:

Image13016.jpg


Eso no funciona por mas que lo intenten, solo haran que el motor tambale y no avance
la secuencia correcta es:
+------+---+-+---+---+
|paso | A | B | C | D |
+------+--+---+---+--+
| 1 |v+ | v- | v-| v-
| 2 | v-| v- | v+ | v-
| 3 |v- | v+ | v-| v-
| 4 |v- | v- | v- | v+
+------+---+---+----+--+
(disculpa la tabla)

Esa secuencia si enciende al motor con la direccion hacia la izquierda, para la derecha basta con invertir la secuencia y listo , para lo medios pasos hay que colocar una secuencia intermediaentre paso y paso como se muestra en la imagen primera y ready.

Bueno para ya no hacercelas tan larga les dejo un esquematico hecho en proteus para que lo simulen y si estan apurados les dejo la simulacion, el circuito no porque tendrian que venir a mi casa:D. El codigo recuerden que es para los avr( es un plus++) por que casi todo estan para pic's, que es casi lo mismo pero hay quienes quieren aprender a usar la familia de AVR

Código:
    .INCLUDE"M8535DEF.INC"
        .CSEG
        .ORG $000
        RJMP INICIO
        .ORG $015


INICIO:
        LDI R16,LOW(RAMEND)
        OUT SPL,R16
        LDI R16,HIGH(RAMEND)
        OUT SPH,R16
        SER R16
;****************
;configuracion de puertos
;********************
        OUT DDRC, R16
        OUT PORTA, R16  //CONFIGURA ENTRADA EN PULL-UP Y 0'S EN DDR
        OUT DDRB,R16    //CONFIGURA SALIDA CON 1'S EN DDR'S
        OUT PORTD,R16


PREDETERMINADO:  ;rutina que hace por default
        LDI R16,$00
        OUT PORTC,R16
        LDI R17,$80
        IN R23,PIND
        SBRS R23,0
        RJMP PREDETERMINADO

;************************************
; esta encendido el motor a paso pero espera una secuencia de bits
;************************************
HABILITADO:              
        IN R24,PIND
        SBRC R24,1
        RCALL GIRO_IZQ
        IN R25,PIND
        SBRC R25,2
        RCALL GIRO_DER
        SBRS R25,0
        RJMP PREDETERMINADO
        RJMP HABILITADO 

;***************************************
;rutina para hacerlo girar hacia la izquierda si quieren hacerlo girar
;con medio pasos solo descomenten las lineas
;************************************++
GIRO_IZQ:            
        
        LDI R16,0B10000000
        RCALL SALIDA
        RCALL TIEMPO
;        LDI R16,0B10100000
;        RCALL SALIDA
;        RCALL TIEMPO
        LDI R16,0B00100000
        RCALL SALIDA
        RCALL TIEMPO
;        LDI R16,0B01100000
;        RCALL SALIDA
;        RCALL TIEMPO
        LDI R16,0B01000000
        RCALL SALIDA
        RCALL TIEMPO
;        LDI R16,0B01010000
;        RCALL SALIDA
;        RCALL TIEMPO
        LDI R16,0B00010000
        RCALL SALIDA
        RCALL TIEMPO
;        LDI R16,0B10010000
;        RCALL SALIDA
;        RCALL TIEMPO
        RCALL CHECA_ST

;***************************************
;rutina para hacerlo girar hacia la derecha si quieren hacerlo girar
;con medio pasos solo descomenten las lineas
;************************************++
        RJMP GIRO_IZQ

GIRO_DER:
        LDI R16,0B00010000
        RCALL SALIDA
        RCALL TIEMPO
;        LDI R16,0B01010000
;        RCALL SALIDA
;        RCALL TIEMPO
        LDI R16,0B01000000
        RCALL SALIDA
        RCALL TIEMPO
;        LDI R16,0B01100000
;        RCALL SALIDA
;        RCALL TIEMPO
        LDI R16,0B00100000
        RCALL SALIDA
        RCALL TIEMPO
;        LDI R16,0B10100000
;        RCALL SALIDA
;        RCALL TIEMPO
        LDI R16,0B10000000
        RCALL SALIDA
        RCALL TIEMPO
;        LDI R16,0B10010000
;        RCALL SALIDA
;        RCALL TIEMPO
        RCALL CHECA_ST
        RJMP GIRO_DER
;************************
;rutina que checa el estado de los switch de control
;(ref. el circuito en proteus)
;**************************
CHECA_ST:
        SBIS PIND,0
        RJMP PREDETERMINADO
        SBIS PIND,3
        RCALL VEL
        SBIC PIND,1
        RJMP GIRO_IZQ
        SBIC PIND,2
        RJMP GIRO_DER
        RET
        
;**********
;Control de velocidad, se restan 128 a todo el numero ingresado
;en el puerto A para reducir el tiempo entre paso y paso
;*********************************            
VEL:    IN R17,PINA
        SUBI R17,$80
        RET

;*******
;salida por el puerto C
;************************
SALIDA:
        OUT PORTB,R16
        OUT PORTC,R16
        RET
;*******************
;tiempo entre paso y paso
;********************
TIEMPO:
       DEC R18
       BRNE TIEMPO
       DEC R17
       BRNE TIEMPO
       RCALL VEL
       RET
bueno espero que les haya sido de ayuda cualquier cosa me lo hacen saber y gracias por todo. :) este es mi correo por si la dudas: g_mirandac@hotmail.com
 

Adjuntos

  • PASOS.PDF
    55.7 KB · Visitas: 207
  • PASOS.zip
    20.9 KB · Visitas: 72
Última edición:
muy interesante muchas gracias justamente estaba buscando como controlar un motor con ATmega 8535 pero usando PWM pero esto me sera de gran ayuda ojala puedas seguir aportando usando micros AVR saludos :D
 
Última edición:
Interesante sin duda, pero debes saber que puedes hacer pasos simples, o medios pasos, con lo que consigues que tu motor tenga el doble de pasos.

Mira el datasheet del L297 que es un controlador de motores paso paso, yo tengo montados tres controladoras con L297+L298 y va de fábula y puede con motores de hasta 2A, con control PWM para que no consuman demasiado cuando estab bloqueados.
 
Atrás
Arriba