Giuseppe Parrello

 

Embedded Motore Passo-passo 28BYJ-48


Introduzione

Con questo progetto andremo a gestire un motore passo-passo 28BYJ-48, usando la scheda di sviluppo FTDI FT232H (di cui esiste una pagina dedicata su questo sito). Il motore passo-passo deve essere collegato ad una scheda di controllo basata sul chipset STMicroelectronics ULN2003.

 

Collegamento

Il motore passo-passo deve essere collegato alla scheda ULN2003, mentre quest'ultima deve essere collegata alla scheda di sviluppo FTDI FT232H. I connettori di collegamento sono elencati qui di seguito:

Immagine Scheda FT232H Scheda ULN2003

FT232H - 28BYJ-48

AD0 IN1
AD1 IN2
AD2 IN3
AD3 IN4
+5V VCC
GND GND

 

Codice Python

Per gestire il motore passo-passo, è richiesta la presenza della libreria "PyFTDI".
Il seguente esempio di codice Python fa girare il motore passo-passo prima velocemente, poi lentamente:

from os import environ
from pyftdi.gpio import GpioAsyncController
import time

clockwise = [[0b1000], [0b0100], [0b0010], [0b0001]]

def MotorCW(time_s, speed):
    counts = int(time_s /speed/16)
    for i in range(counts):
        for i in range(4):
            _gpio.write(clockwise[i])
            time.sleep(speed)
    _gpio.write(0)

def MotorCCW(time_s, speed):
    counts = int(time_s /speed/16)
    for i in range(counts):
        for i in reversed(range(4)):
            _gpio.write(clockwise[i])
            time.sleep(speed)
    _gpio.write(0)

_ctrl = GpioAsyncController()
url = environ.get('FTDI_DEVICE', 'ftdi:///1')
_ctrl.configure(url, direction=0b0, frequency=None, initial=0b0)
_gpio = _ctrl.get_gpio()
_gpio.set_direction(0b1111, 0b1111)

try:
    print("\nFast Clockwise...")
    MotorCW(20, 0.0020)
    time.sleep(0.5)
    print("\nFast Counterclockwise...")
    MotorCCW(20, 0.0020)
    time.sleep(0.5)
    print("\nSlow Clockwise...")
    MotorCW(20, 0.010)
    time.sleep(0.5)
    print("\nSlow Counterclockwise...")
    MotorCCW(20, 0.010)

except KeyboardInterrupt:
    # Capture keyboard ^C to exit the program
    print('\nYou terminated the program. The program ends!')
    _gpio.write(0)