- wymaga zamontowania gotowych sterowników zgodnyh z StepStick,
- dostosowana do modułów z układami: A4988, DRV8825, TMC2208, TMC2226,
- płytka o wymiarach zgodnych z Raspberry Pi Zero,
- konfiguracja poprzez magistralę I²C.
Użycie gotowego, wymiennego modułu, oprócz niższej ceny spowodowanej popularnością rozwiązania, umożliwia wybór optymalnych parametrów sterownika dla dołączonego silnika oraz sposobu sterowania mikrokrokowego. Takie rozwiązanie ułatwia też ewentualną wymianę uszkodzonego modułu, a jak wiemy, takie rzeczy się niestety zdarzają…
Przykładowe sterowniki zgodne z StepStick zostały pokazane na fotografii 1.
W kolejności od lewej znajdują się moduły z układami: A4988, DRV8825, TMC2208, TMC2226. Moduły są zgodne mechanicznie, mają ujednolicony sposób sterowania sygnałami EN/DIR/STEP, różnią się dostępną liczbą mikrokroków wbudowanego indeksera oraz możliwością konfiguracji poprzez interfejs szeregowy w przypadku modułów TMC22xx. Przyporządkowanie wyprowadzeń zestawiono w tabeli 1.
Moduły są wzajemnie zamienne, ale należy zwrócić uwagę na wyprowadzenie 10, na którym DRV8825 sygnalizuje usterkę, a dla pozostałych modułów jest to wyprowadzenie zasilania logiki.
Wyprowadzenia 2...6 należy sterować w różny sposób, ale odbywa się to już programowo. Dotyczy to sygnałów wyboru mikrokroku lub obniżonego poboru mocy. Moduły TMC22xx mają możliwość konfiguracji przez port szeregowy, ale nie jest ona stosowana w zaprezentowanym rozwiązaniu.
Zestawienie nie uwzględnia wszystkich dostępnych modułów, przed wybraniem konkretnego modelu należy sprawdzić zgodność sprzętową i uwzględnić zmiany programowe. Poszczególne płytki różnią się zakresem zasilania i maksymalnym prądem drivera, liczbą i zakresem dostępnych mikrokroków sekwencera, co w skrócie pokazuje tabela 2.
Z praktycznych uwag warto sprawdzić szczegółowo dokumentację StepSticków z TMC22xx ze względu na pewną liczbę dostępnych wersji sprzętowych.
Budowa i działanie
Schemat nakładki został pokazany na rysunku 1. Możliwe jest zastosowanie dwóch niezależnych modułów StepStick. Sygnały sterujące bezpośrednio silnikami: ENx(ENABLE), STPx(STEP), DIRx(DIR), RESx(RESET) oraz FLTx(FAULT), podłączone są do wyprowadzeń GPIO Pi Zero, co umożliwia ich szybkie generowanie. Zwory ZW1, ZW2 umożliwiają zmianę funkcji wyprowadzenia 10. W położeniu 1-2: A4988/TMC22xx doprowadzają do wyprowadzenia 10 zasilanie logiki (V33), w położeniu 2-3: DRV8825 wyprowadzają i polaryzują sygnał FLTx.
Sygnały konfigurujące mikrokroki MSxx(MicroSTEP) oraz sygnały obniżonego poboru mocy SLPx(SLEEP) podłączone są poprzez ekspander GPIO-I²C U1 typu PCA8574 i dostępne są pod adresem 0x27 magistrali. Umożliwia to ich konfigurację programową.
Zwory SW11, SW12 służą do ręcznego ustalenia konfiguracji mikrokroków, która może być odczytana przez ekspander U1. Należy zwrócić uwagę na różną funkcję wyprowadzenia 4 w przypadku układu TMC22xx.
Montaż i uruchomienie
Nakładka została zmontowana na dwustronnej płytce drukowanej o wymiarach zgodnych z Raspberry Pi Zero, ale oczywiście może być stosowana także z innymi wersjami komputerka. Schemat płytki PCB został pokazany na rysunku 2.
Zmontowana nakładka nie wymaga uruchamiania, należy jedynie zalutować zwory ZW1, ZW2 w zależności od posiadanych modułów StepStick. Napięcie zasilania silników doprowadzone jest do złącza PWR. Sterowanie silnikami odbywa się po konfiguracji GPIO i rejestrów I²C poprzez programowe generowanie impulsów kroku STP.
Prosty skrypt testowy w Pythonie pokazano na listingu 1.
import RPi.GPIO as GPIO
import smbus
from time import sleep
bus = smbus.SMBus(1)
# SLP & Mx config
bus.write_byte(0x27, 0x88)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17, GPIO.OUT) #EN
GPIO.setup(27, GPIO.OUT) #DIR
GPIO.setup(22, GPIO.OUT) #STP
GPIO.setup(5, GPIO.OUT) #RES
GPIO.setup(16, GPIO.IN) #FLT DRV8825
GPIO.output(5, GPIO.LOW) #RES pulse
sleep(0.2)
GPIO.output(5, GPIO.HIGH)
sleep(0.2)
GPIO.output(17, GPIO.LOW) #EN DRV
GPIO.output(27, GPIO.LOW) #DIR set
x=1
while x < 49:
print("STEP: ",x)
GPIO.output(22, GPIO.LOW) # STP+
GPIO.output(22, GPIO.HIGH)
sleep(0.2)
x=x+1
GPIO.cleanup()
bus.write_byte(0x27, 0x00)
Dla sprawdzenia drugiego silnika wystarczy w skrypcie zmienić numery linii sterujących GPIO. Poprzez odpowiednią modyfikację wpisu do rejestru U1 aktywujemy driver (SLP=1) oraz definiujemy liczbę mikrokroków. Niestety każdy z modułów obsługuje inną liczbę mikrokroków, które nie pokrywają się, dla A4988 ustawienie wejść MSxx=1 ustawia krok 1/16, a dla DRV8825 ta sama konfiguracja ustawia krok 1/32. W przypadku bardziej zaawansowanych modułów TMC nie wszystkie podziały są dostępne, ze względu na ograniczoną liczbę wyprowadzeń Msxx.
Adam Tatuś, EP
- R1, R2: 4,7 kΩ
- R3, R4, R5, R6, R7, R8, R9, R11: 10 kΩ
- R10, R12: 330 Ω
- C1, C3: 0,1 μF/50 V ceramiczny 50 V (SMD0805)
- CE1, CE2, CE3: 100 μF/50 V elektrolityczny
- C2, C4, C5: 0,1 μF ceramiczny 16 V (SMD0603)
- TSV: transil SMAJ33A (SMB_D)
- U1: PCA8574PW (TSSOP16)
- M1, M2: moduł StepStick4988 + gniazdo goldpin 1×8
- GPIO: złącze IDC40 żeńskie 2×20
- MS1, MS2: listwa goldpin kątowa 1×4
- SW1, SW2: listwa goldpin 2×3
- PWR: złącze śrubowe DG381-3.5-2