Sterownik dwóch silników krokowych do Raspberry Pi

Sterownik dwóch silników krokowych do Raspberry Pi

W sterowniku zastosowano specjalizowany driver średniej mocy z wbudowanym kontrolerem mikrokrokowym typu DRV8821. Zawiera on dwa pełne mostki H z tranzystorami MOSFET, z dopuszczalnym prądem uzwojeń 1,5 A, przy napięciu zasilania 8...32 V. Takie rozwiązanie będzie przydatne w robotyce amatorskiej i nie tylko...

Podstawowe parametry:
  • zawiera kontroler mikrokrokowy typu DRV8821, który integruje dwa pełne mostki H z tranzystorami MOSFET,
  • dopuszczalny prąd uzwojeń wynosi 1,5 A, przy napięciu zasilania 8...32 V,
  • sterowanie odbywa się w standardowej konwencji STEP/DIR/EN.

Strukturę wewnętrzną układu DRV8821 pokazano na rysunku 1. Zawiera on kontroler mikrokroku z podziałem 1/1, 1/2, 1/4 oraz 1/8 a także układ zabezpieczeń. Układ konfigurowany jest sprzętowo, a sterowanie odbywa się w standardowej konwencji STEP/DIR/EN.

Rysunek 1. Struktura wewnętrzna DRV8821 (za notą TI)

Budowa i działanie

Schemat nakładki został pokazany na rysunku 2. Dzięki niej możliwe jest sterowanie dwoma niezależnymi silnikami krokowymi podłączonymi do złączy MS1, MS2. Zasilanie silników z zakresu 8...28 V jest oddzielone od Raspberry Pi i musi być doprowadzone do złącza PWR. Kondensatory filtrujące CE1...CE4 zapewniają podstawowe filtrowanie napięcia zasilania silników, transil TVS zabezpiecza U1 przed skutkami przepięć.

Rysunek 2. Schemat ideowy modułu

Rezystory RA1, RA2...RD1, RD2 ustalają maksymalny prąd uzwojeń, zgodnie ze wzorem:

I = Vref / 5 × Rx1||Rx2

gdzie:

  • Vref – napięcie odniesienia wyprowadzeń ABVRF/CDVRF i wynosi ok. 2,5 V

Płynna regulacja prądu odbywa się za pomocą dzielników R1/RM1, R2/RM2. Kondensatory C3, C4 to elementy przetwornicy polaryzującej mostki H. Zasilanie części logicznej U1 podłączone jest do napięcia 3,3 V Raspberry.

Wszystkie sygnały sterujące podłączone są do złącza GPIO i muszą być generowane programowo. Standardowo są to sygnały:

  • ENx (ENABLE) – stan niski załącza tranzystory mostka,
  • STPx (STEP) – narastające zbocze generuje krok indeksera,
  • DIRx (DIR) – zmienia kierunek wirowania,
  • RESx (RESET) – stan niski kasuje logikę indeksera i wyłącza mostki.

Sygnały konfiguracyjne to:

  • MSxx (MicroSTEP) – określa pracę mikrokrokową zgodnie z tabelą 1,
  • DECx (Decay) – sygnał trybu hamowania, stan niski aktywuje tryb slow decay-brake (zwieranie uzwojeń silnika), stan wysoki to tryb mixed rozpoczynający się trybem fast decay-reverse (hamowanie przeciwprądem), a kończący się trybem slow decay-brake (zwieranie uzwojeń).

Układ uzupełnia złącze magistrali I²C w standardzie Grove.

Montaż i uruchomienie

Moduł zmontowany jest na dwustronnej płytce drukowanej o wymiarach zgodnych z płytką Raspberry Pi, której schemat pokazano na rysunku 3.

Rysunek 3. Schemat płytki PCB

Montaż jest typowy i nie wymaga opisu, należy tylko zwrócić uwagę na poprawne przylutowanie padu termicznego układu U1. Zmontowana nakładka nie wymaga uruchamiania. W zależności od typu silnika należy sprawdzić wartość rezystorów układu pomiaru prądu RAx...RDx i ewentualnie skorygować ich wartość zgodnie z notą DRV8821.

Sterowanie silnikami odbywa się po konfiguracji GPIO przez programowe generowanie sygnałów konfiguracyjnych i impulsów kroku STP. Prosty skrypt testowy w Pythonie dla silnika MS1 pokazano na listingu 1.

Listing 1. Skrypt testowy w języku Python

import RPi.GPIO as GPIO
from time import sleep

# SLP & Mx config
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

GPIO.setup(17, GPIO.OUT) #EN1
GPIO.setup(27, GPIO.OUT) #DIR1
GPIO.setup(22, GPIO.OUT) #STP1
GPIO.setup(5, GPIO.OUT) #RES1
GPIO.setup(26, GPIO.OUT) #DEC1
GPIO.setup(13, GPIO.OUT) #M10
GPIO.setup(19, GPIO.OUT) #M11

GPIO.output(5, GPIO.LOW) #RES1 pulse
sleep(0.2)
GPIO.output(5, GPIO.HIGH)
sleep(0.2)
GPIO.output(26, GPIO.LOW) #DEC1 slow/mixed
GPIO.output(17, GPIO.LOW) #EN DRV
GPIO.output(27, GPIO.LOW) #DIR set
GPIO.output(13, GPIO.LOW) #MS10=0
GPIO.output(19, GPIO.LOW) #MS11=0, 1/1 step
x=0

while x < 1440:
print("STEP: ",x)
GPIO.output(22, GPIO.LOW) # STP+
GPIO.output(22, GPIO.HIGH)
sleep(0.01)
x=x+1

GPIO.output(17, GPIO.HIGH) #EN DRV
GPIO.output(5, GPIO.LOW) #RES DRV
GPIO.cleanup()

Dla sprawdzenia drugiego silnika wystarczy w skrypcie zmienić numery wyprowadzeń sterujących GPIO.

Adam Tatuś, EP

Wykaz elementów:
Rezystory:
  • R1, R2: 5,6 kΩ (SMD0603)
  • R3, R4: 4,7 kΩ (SMD0805)
Kondensatory:
  • C1, C2, C3: 0,1 μF/50 V ceramiczny (SMD0805)
  • CE1, CE2, CE3, CE4: 100 μF/50 V elektrolityczny Low ESR
  • C4: 10 nF/50 V ceramiczny (SMD0805)
  • C5: 0,47 μF/10 V ceramiczny (SMD0805)
  • C6: 0,1 μF/10 V ceramiczny (SMD0805)
Półprzewodniki:
  • U1: DRV8821DCA (HTSSOP48)
Pozostałe:
  • GPIO: złącze IDC żeńskie 2×20
  • I²C: złącze Grove kątowe
  • MS1, MS2: SIP4 2,54 mm kątowe
  • PWR: złącze DG 5 mm 2 piny
  • RA1, RA2, RB1, RB2, RC1, RC2, RD1, RD2, : 1 Ω (SMD1206) dobrać do prądu silnika
  • RM1, RM2: potencjometr montażowy 20 kΩ (RV0.2)
  • TVS: transil 33 V SMAJ28A (SMB_D)
Artykuł ukazał się w
Elektronika Praktyczna
czerwiec 2023
DO POBRANIA
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik lipiec 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio lipiec - sierpień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje czerwiec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna lipiec 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich lipiec 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów