Motor de pasos (y II)

26/01/2007

[Un post que tenía a medio acabar desde hacía tiempo]

Ya tengo implementada la clase que me servirá de “driver” para el motor de pasos. Es muy sencilla. Si recordamos el post donde describía el esquema eléctrico para conectar el motor de pasos al puerto paralelo, había conectado las lineas de datos D0 a D3 al integrado. Cada línea de datos la uso para activar cada una de las cuatro bobinas del motor de pasos de forma que la linea D0 controla la bobina A, la D1 la B, la D2 la C y la D3 la D.

La idea es ir activando cíclicamente las bobinas para conseguir del motor un movimiento giratorio. Para ello, cuando queremos activar una bobina específica, ponemos su correspondiente línea de datos a estado 1 mientras que si la queremos desactivar ponemos su línea de datos a 0.

Hay tres formas de hacer girar el motor:

  1. Paso simple - en este modo se activa una sola bobina a la vez haciendo desplazarse al rotor a la posición exacta de cada bobina. La secuencia de activación de las bobinas sería A,B,C,D, A,B,C,D, A,B,… En este modo se necesitan 48 pulsos para que el motor de una revolución completa.
  2. Medio paso - en este modo el motor va avanzando de medio en medio paso. Para ello se llegan a activar 2 bobinas a la vez. La secuencia de activación de las bobinas sería: A,AB,B,BC,C,CD,D,DA,A, AB,B… En este modo se precisan 96 pulsos para completar una revolución. La granularidad del giro es mayor pero por contra aumenta ligeramente el consumo.
  3. Paso firme - en este modo para cada paso se activan 2 bobinas. Hacen falta 48 pulsos para completar una revolución. La secuencia de activación de las bobinas sería: AB,BC,CD,DA, AB,BC,CD,DA, AB,BC…. En este modo aumenta el par o momento de fuerza del giro, pero por contra duplica el consumo con respecto al primer modo.

Para mi aplicación he decidido que el motor de pasos firmes, activando para cada posición 2 bobinas simultáneas. Esto otorga al movimiento resultante mayor precisión y un mayor par o momento de fuerza.

Esquema de pasos.

Y aquí una función sencillita que mueve el motor:

Public Sub Mover(ByVal Ciclos As Integer, ByVal Retardo As Integer)
    Dim Posiciones As Short() = {12, 6, 3, 9}

    ’ 12 = 1100 = AB
    ’  6 = 0110 = BC
    ’  3 = 0011 = CD
    ’  9 = 1001 = DA

    Do
        For Each Posicion As Short In Posiciones
            Out32(&H378, Posicion)
            Threading.Thread.Sleep(Retardo)
        Next

        Ciclos -= 1
    Loop Until Ciclos <= 0
End Sub


Comentarios

Todavía no hay comentarios.

Deja tu comentario

Los comentarios están deshabilitados.