3.15. Sterowanie silnikiem DC

Szczotkowy silnik prądu stałego (DC) to cewka z drutu osadzona na wale wewnątrz pola magnetycznego. Przepuść prąd przez cewkę, a pole wywiera na nią siłę; siła ta staje się momentem obrotowym na wale. Szczotki wewnątrz silnika przełączają kierunek prądu w cewce w miarę obracania się wału, dzięki czemu moment obrotowy zawsze popycha wał w tym samym kierunku. Przyłóż napięcie stałe do dwóch wyprowadzeń silnika, a wał zacznie się obracać; zamień biegunowość, a obróci się w drugą stronę.

Silniki zazwyczaj wymagają od kilkuset miliamperów do kilku amperów, przy napięciach zasilania wyższych niż logiczna szyna 3,3 V kamery. Pin GPIO może dostarczyć rzędu 25 mA i nie może odwrócić biegunowości – może jedynie sterować swoimi dwiema szynami. Stopień sterujący między kamerą a silnikiem musi przewodzić prąd silnika, doprowadzać osobne zasilanie silnika o wyższym napięciu oraz umożliwiać kamerze odwracanie biegunowości na żądanie. Standardowym rozwiązaniem jest czterotranzystorowy mostek H.

3.15.1. Mostek H

Mostek H to cztery przełączniki ułożone w kształt litery H wokół silnika:

Schemat mostka H. Vmotor u góry łączy się przez przełącznik S1 w dół do węzła A po lewej stronie, oraz przez przełącznik S2 w dół do węzła B po prawej stronie. Silnik M znajduje się poziomo pomiędzy A i B. Z węzła A kolejny przełącznik S3 prowadzi w dół do masy; z węzła B kolejny przełącznik S4 prowadzi w dół do masy.

Mostek H: cztery przełączniki (S1S4) łączą silnik M pomiędzy Vmotor a masą.

Zamknięcie różnych par przełączników wybiera to, co silnik widzi na swoich wyprowadzeniach:

  • S1 + S4 zamknięte, S2 + S3 otwarte. Prąd płynie od Vmotor przez S1, do A, przez silnik do B i przez S4 do masy. Silnik obraca się w jedną stronę.

  • S2 + S3 zamknięte, S1 + S4 otwarte. Prąd płynie przez silnik w drugą stronę. Silnik obraca się w drugą stronę.

  • Wszystkie cztery otwarte. Oba wyprowadzenia silnika są niepodłączone (pływają); silnik toczy się swobodnie.

  • S3 + S4 zamknięte (lub S1 + S2 zamknięte). Oba wyprowadzenia silnika są zwarte do tej samej szyny; energia kinetyczna samego silnika wymusza prąd, który zamknięta para zwiera, rozpraszając go jako ciepło. Silnik hamuje.

Niedozwolona kombinacja to zamknięcie obu przełączników w tej samej kolumnie – S1 + S3 lub S2 + S4 – co tworzy zwarcie od Vmotor bezpośrednio do masy. Jest to shoot-through i kod kamery nie może na to pozwolić.

W praktyce te cztery przełączniki to tranzystory MOSFET (przedstawione na stronie Konwersja poziomów napięć) wewnątrz zintegrowanego układu sterownika. Układ udostępnia dwa lub trzy piny wejściowe na poziomie logicznym, które wewnętrznie odpowiadają czterem przełącznikom, i zawiera logikę blokady zapobiegającą zjawisku shoot-through, dzięki czemu kod kamery nie musi nią bezpośrednio zarządzać.

3.15.2. PWM i indukcyjność silnika

Ustawienie prędkości silnika wymaga czegoś więcej niż pełnego załączenia i pełnego wyłączenia. Sztuczka jest taka sama jak ta używana dla diod LED w Ściemnianie diody LED za pomocą PWM: pulsuj sygnałem sterującym o wysokiej częstotliwości i pozwól obciążeniu uśrednić wynik. Dla diody LED uśredniaczem było oko; dla silnika jest nim sama cewka.

Cewka silnika ma znaczną indukcyjność. Prąd płynący przez cewkę indukcyjną nie może zmieniać się natychmiastowo; zmienia się z szybkością proporcjonalną do napięcia na niej panującego. Pulsowanie mostka załączeniami i wyłączeniami z częstotliwością 20 kHz powoduje narastanie prądu cewki podczas każdej fazy załączenia, a podczas fazy wyłączenia prąd musi nadal płynąć – cewka odwraca napięcie na sobie, aby go podtrzymać.

Nie mając dokąd popłynąć, prąd ten spowodowałby gwałtowny wzrost napięcia na właśnie otwartym przełączniku i mógłby uszkodzić tranzystor. Diody zwrotne (freewheeling) na każdym przełączniku – często po prostu wewnętrzne diody korpusowe samych MOSFET-ów wewnątrz układu sterownika – zapewniają prądowi potrzebną drogę. Płynie on przez diodę i z powrotem przez jeden z wciąż zamkniętych przełączników, zamykając pętlę zwrotną (freewheel), w której prąd stopniowo zanika przez niewielkie rezystancje mostka i samego silnika. Dioda ogranicza również napięcie na otwartym przełączniku do jednego spadku na diodzie względem tej szyny, do której powraca pętla, czyli głęboko w bezpiecznym obszarze pracy MOSFET-u.

Średni prąd w każdym okresie PWM jest tym, co wytwarza moment obrotowy, a ta średnia podąża liniowo za współczynnikiem wypełnienia – podwojenie wypełnienia z grubsza podwaja moment obrotowy, a przy stałym obciążeniu z grubsza podwaja prędkość. W przeciwieństwie do ściemniania diod LED, gdzie nieliniowa reakcja oka wymaga zastosowania krzywej, liniowa zmiana duty_u16 odpowiada już liniowej zmianie wysiłku silnika.

Częstotliwość PWM musi jedynie przekroczyć dwa progi:

  • Powyżej ~20 kHz nośna znajduje się poza pasmem słyszalnym dla człowieka. Poniżej tej wartości siła magnetyczna działająca na cewkę narasta i opada z każdym impulsem PWM, a uzwojenia i blachy fizycznie wibrują z częstotliwością nośnej – silnik staje się w efekcie małym głośnikiem emitującym ton o wysokości PWM.

  • Znacznie powyżej ~50 kHz MOSFET-y i ich sterowniki bramek zaczynają tracić sprawność z powodu strat przełączania. Podczas każdego przejścia załącz-wyłącz MOSFET na krótko przewodzi jednocześnie znaczne napięcie i znaczny prąd, rozpraszając niewielki impuls mocy jako ciepło; pojemność bramki MOSFET-ów również musi być ładowana i rozładowywana w każdym cyklu, za co płaci układ sterownika. Oba te koszty rosną wraz z częstotliwością PWM, więc przy wysokich częstotliwościach ciepło z przełączania może dorównywać ciepłu z przewodzenia prądu silnika.

20 kHz to wygodna domyślna wartość dla silników hobbystycznych.

3.15.3. Sterowanie mostkiem H

Układ sterownika mostka H z dwoma wejściami odwzorowuje IN1 i IN2 na cztery przełączniki z grubsza w ten sposób:

  • IN1 = 0, IN2 = 0 – swobodny bieg (wszystkie cztery przełączniki otwarte).

  • IN1 = 1, IN2 = 0 – napęd w jednym kierunku.

  • IN1 = 0, IN2 = 1 – napęd w drugim kierunku.

  • IN1 = 1, IN2 = 1 – hamowanie.

Sterowanie dwoma wejściami jako wyjściami PWM pozwala kamerze ustawić kierunek poprzez wybór, który z dwóch pinów przenosi wypełnienie, oraz prędkość poprzez samą wartość wypełnienia:

import time
from machine import PWM, Pin

in1 = PWM(Pin("P7"), freq=20_000, duty_u16=0)
in2 = PWM(Pin("P8"), freq=20_000, duty_u16=0)

def drive_a(speed):       # speed: 0..65535
    in1.duty_u16(speed)
    in2.duty_u16(0)

def drive_b(speed):
    in1.duty_u16(0)
    in2.duty_u16(speed)

def coast():
    in1.duty_u16(0)
    in2.duty_u16(0)

def brake():
    in1.duty_u16(65535)
    in2.duty_u16(65535)

drive_a(32768)    # half speed in direction A
time.sleep(2)
drive_b(16384)    # quarter speed in direction B
time.sleep(2)
coast()

Narastanie od wyłączenia do pełnej mocy i z powrotem daje płynny start i zatrzymanie:

for d in range(0, 65535, 256):
    in1.duty_u16(d)
    time.sleep_ms(10)
for d in range(65535, 0, -256):
    in1.duty_u16(d)
    time.sleep_ms(10)

3.15.4. Sterowniki kierunku i prędkości

Druga rodzina układów mostka H udostępnia wygodniejszy interfejs: jedno cyfrowe wejście kierunku (często oznaczone DIR lub PH od „phase”) plus jedno wejście prędkości (często PWM lub EN od „enable”). Pin kierunku wybiera, w którą stronę napędza mostek; współczynnik wypełnienia na pinie prędkości ustawia średni prąd.

Taki układ jest łatwiejszy w sterowaniu programowym niż schemat z dwoma wejściami PWM. Te dwa sygnały odpowiadają temu, jak zwykle formułuje się problem – „obróć w tę stronę, z tą prędkością” – więc kod może powiedzieć set_direction(forward); set_speed(50) zamiast rozgałęziać się między in1 a in2. Potrzebny jest tylko jeden kanał PWM, co zwalnia drugi kanał na tym samym liczniku czasu (timer) do niepowiązanego zadania. A pin kierunku może pozostawać ustawiony między zmianami bez ponownego wyzwalania mostka, więc zmiana prędkości przy stałym kierunku dotyka tylko jednego rejestru.

import time
from machine import PWM, Pin

dir_pin = Pin("P8", Pin.OUT)
speed = PWM(Pin("P7"), freq=20_000, duty_u16=0)

def drive(direction, speed_u16):
    dir_pin.value(direction)         # 0 or 1
    speed.duty_u16(speed_u16)        # 0..65535

drive(0, 32768)     # direction A at half speed
time.sleep(2)
drive(1, 16384)     # direction B at quarter speed
time.sleep(2)
speed.duty_u16(0)   # stop

To, co tak naprawdę robi „zatrzymanie” na tego rodzaju sterowniku – swobodny bieg czy hamowanie – zależy od układu. W przypadku sterownika z dwoma wejściami wybiera kod kamery (oba wejścia w stanie niskim dla swobodnego biegu, oba w stanie wysokim dla hamowania); w przypadku sterownika kierunku i prędkości decyduje układ, więc przed poleganiem na którymkolwiek z tych zachowań warto rzucić okiem na kartę katalogową.