Lekce se zabývá připojením jednoho nebo dvou DC motorů k micro:bitu. Vysvětluje analogový výstup pomocí PWD modulace a H-můstek pro změnu směru otáčení motoru.
název: B19 DC motory
kategorie: B mírně pokročilí
ref.číslo: B19
projekt: kurz micro:bit
verze: 01, 2017-11-10
autor: Ivo Obr, Lanškroun
Pokud si chceme postavit vozítko s micro:bitem, budeme potřebovat nejčastěji do začátku jako pohon jeden nebo dva motory podle typu podvozku. K pohonu můžeme použít buďto jednoduché motory na stejnosměrný proud (dále jen DC motor), hacknuté servo (které se otáčí stále dokola), nebo krokový motor (STEPPER motor). Tato lekce je napsána pro DC motory.
DC motor má dva vývody na které připojíme stejnosměrné napětí (obvykle pro naši modelařinu 3 až 12V). Motory potřebují větší elektrický příkon než může dodat na pinech micro:bit a proto mají samostatné napájení ze el. zdroje. Po připojení elektrického napájení se motor otáčí jen jedním směrem (na základě polarity el. zdroje). Vozítko ale musí jezdit oběma směry – dopředu i dozadu. Proto se k ovládání DC motorů používá elektronický ovladač (driver), který nám umožní měnit polaritu napájení DC motoru.
Na vstupu driveru jsou dva logické vstupy. Pokud je motor v klidu, na obou vstupech je logická nula. Pokud přivedeme logickou jedničku (+3V nebo +5V) na jeden ze vstupů (druhý zůstává na 0), pak se motor otáčí jedním směrem (sepnuto SW1 a SW4), pokud vyměníme hodnoty na vstupech, motor se otáčí druhým směrem (sepnuto SW2 a SW3). Tomuto zapojení se říká H-můstek (H-bridge).
Prakticky můžete použít desky určené pro řízení dvou DC motorů (se dvěma H-můstky) a to typy:
HG7881 (L9110S) – napájení 3V až 12V, proud do 800mA na jeden motor.
Modul má v sobě dva H-můstky, označeny jako motor_A a motor_B. Elektronika chrání H-můstky proti nastavení obou pinů na log1.
L298N – napájení 5V až 35V, proud do 2A na jeden motor.
Modul má v sobě dva H-můstky, označeny jako motor_A a motor_B. Elektronika chrání H-můstky proti nastavení obou pinů na log1.
V této lekci používám specializovanou desku Kitronik 5602, což je deska, do které se zasune micro:bit a ta již obsahuje nejen dva H-můstky, ale také napájení desky micro:bitu. Napájecí napětí je od 4,5V do 6V, maximální proud do jednoho motoru je 1,5A.
Řízení motorů je přes piny :
Pin8 – motor č.1 DOPŘEDU
Pin12 – motor č.1 DOZADU
Pin0 – motor č.2 DOPŘEDU
Pin16 – motor č.2 DOZADU
Pokud jsou piny 8 a 12 (0 a16) současně v log.1, pak je motor zkratován (brzda)
Abychom mohli měnit rychlost otáček DC motoru, je třeba do něj poslat méně energie. To se realizuje před analogové výstupy micro:bitu a to pomocí pulzně šířkové modulace neboli PWM (Pulse Width Modulation).
Na pinech se nesnižuje napětí, ale v jednom časovém intervalu (např. ve 2ms – 1 perioda), se pošle nejprve na výstupní pin log1 (3V) a pak log0 (0V). Poměr časů stavu výstupu v log1 a log0 dává analogovou hodnotu, pokud jsou periody dostatečně malé. (například na připojené LED diodě nevidíme blikání, ale jen můžeme pozorovat změnu jasu)
Pro naprogramování takového výstupu použijeme příkaz :
pinN.write_analog(hodnota)
kde N -je číslo pinu
hodnota – je v rozsahu od 0 o 1023. Nula znamená nulovou šířku pulsu log1, 1023 znamená, že puls log1 má stejnou šířku jako perioda pulsů – plný výkon.
Příklad :
Máme zapojen motor č.1 a chceme, aby se točil dozadu polovičním výkonem :
pin12.write_analog(511)
Po tomto příkazu se motor točí stále i když nám program provádí další příkazy. Motor zastavíme teprve příkazem :
pin12.write_analog(0)
Celé zapojení micro:bit – driver5602 – DC motor si můžeme vyzkoušet. Nejdříve si do micro:bitu nahrajeme program uvedený níže. Pak micro:bit odpojíme od USB kabelu, nasuneme do desky driveru s připojeným DC motorem č.1. Poté připojíme napájení do svorek driveru (4,5 až 6V, plochá baterie nebo čtyři tužkové články) – pozor na správnou polaritu napájecího zdroje!
Stiskem tlačítka “A” na micro:bitu by se měl motor č.1 točit jedním směrem a to na výkon 50% a po jedné vteřině pak na výkon 100%. Stiskem tlačítka “B” by se měl motor otáčet obráceným směrem.
from microbit import * display.show("DC MOTOR ") while True: if button_a.was_pressed(): pin8.write_analog(511) sleep(1000) pin8.write_analog(1023) sleep(1000) pin8.write_analog(0) sleep(100) if button_b.was_pressed(): pin12.write_analog(511) sleep(1000) pin12.write_analog(1023) sleep(1000) pin12.write_analog(0) sleep(100)
Pokud jste vše zapojili správně, mělo by to fungovat na první pokus. Program pro test je velice jednoduchý a pro Vás už by neměl být problém s aplikací DC motorů ve Vašich projektech.