5 Ovládanie jednosmerných motorov
V tomto návode si ukážeme ako môžeme hýbať motormi robota. Ovládanie si najskôr vyskúšame v MATLABe priamo, aby sme zistili smer otáčania jednotlivých kolies. Neskôr prejdeme do Simulinku a ukážeme si zapojenie jednotlivých blokov tak, aby sme vedeli ovládať motory v ďalších úlohách.
Čo budeme potrebovať?
- zloženého robota podľa priloženého návodu v krabici.
- doska Arduino MEGA 2560
- USB kábel typu A-B
- Ovládač motora DC
- 5x AA baterky
- prepojovacie drôty
- počítač/notebook
- MATLAB
Ovládanie jednosmerných motorov
Jednosmerný motor je elektrické zariadenie, ktoré premieňa elektrickú energiu na mechanickú prácu (v našom prípade otáčanie kolies). Motory majú väčšie požiadavky na prúd, preto by sme ich nemali pripájať na Arduino priamo. Aby sme navyše mohli ovládať smer točenia kolies potrebujeme využiť elektronickú súčiastku, ktorú nazývame H-mostík. O princípe fungovania H-mostíka sa môžete dočítať na internete. V našom prípade využijeme ovládač od spoločnosti Waveshare (Motor Control Board), pomocou ktorého vieme ovládať naraz 2 motory.
Zapojenie ovládača motora DC
Pri zapojení ovládača si treba dávať pozor hlavne na zapojenie napájania motorov - opačná polarita poškodí súčiastku. Jednotlivé vstupy zapojíme nasledujúco:
- Vstup +- (modrý konektor) - napájanie motorov, z držiaka bateriek pripojíme červený kábel na + a čierny na -
- Vstup M1 (modrý konektor) - pripojenie motora (označíme ako M1)
- Vstup M2 (modrý konektor) - pripojenie motora (označíme ako M2)
- M1A a M1B - vstupy pre ovládanie motora M1, pripojíme prepojovacím káblikom na PWM piny (napr. D2 a D3)
- M2A a M2B - vstupy pre ovládanie motora M2, pripojíme prepojovacím káblikom na PWM piny (napr. D4 a D5)
- GND - zem riadiacej časti, pripojíme na GND Arduina
- 5V - napájanie riadiacej časti, pripojíme na 5V Arduina
Žltý jumper vedľa motora M2 dáme do pozície MP a +, aby sme motory napájali z bateriek a nie Arduina. Ak by ste chceli zmeniť smer otáčania motora M1 alebo M2, prepojte kábliky v konektoroch opačne. Zapojenie môže vyzerať napríklad nasledovne:
Ovládanie motorov z MATLABu
Skôr ako začneme ovládať motory zo Simulinku sa pozrieme do MATLABu a vyskúšame si zopínať jednotlivé PWM piny, aby sme zistili smer otáčania kolies. Vytvorme objekt pre spojenie s Arduinom
a=arduino
Vyskúšajme nastaviť 3V na digitálny pin D2 na jednu sekundu a následne motor zastavme
a.writePWMVoltage('D2',3);
pause(1)
a.writePWMVoltage('D2',0);
V našom prípade išlo ľavé koleso dozadu. Podobné príkazy zopakujte pre ďalšie piny, na ktoré ste pripojili vstupy ovládača motorov. Kombináciou rôznych príkazov sme schopní vytvoriť želaný pohyb robota. Aby sme mohli ovládať motory zo Simulinku potrebujeme vymazať objekt Arduina. Použite nasledujúci príkaz
clear a
Ovládanie motorov zo Simulinku
Na ovládanie motorov zo Simulinku použijeme najskôr 2 bloky
- Simulink - Sources - Constant
- Simulink Support Package for Arduino Hardware - Common - PWM
Nakonfigurujte model pre beh na cieľovom zariadení (Arduino MEGA 2560) tak, ako sme si to ukázali v predchádzajúcom návode. Prepojte bloky Constant a PWM ako je na nasledujúcom obrázku (nezabudnite pre jednotlivé bloky upraviť nastavenia, napríklad čísla pinov).
Spustite model tlačidlom Monitor & Tune a počas behu simulácie môžete meniť rýchlosti jednotlivých motorov v rozsahu 0 - 255. Pri experimentoch si môžete všimnúť, že z kombinácie vstupov M1A/M1B a M2A/M2B môže mať nenulovú hodnotu v jednom momente len jeden vstup pre motor M1 a jeden pre motor M2.
Pamätať si, ktorá hodnota je správna pre motor a jeho smer by bolo po čase náročné. Môžeme preto schému upraviť tak, aby sme nastavovali pre oba motory iba hodnoty v rozsahu -255 - 255. Použijeme nato ďalšie bloky
- Simulink - Math - Abs
- Simulink - Signal Routing - Switch
- Simulink - Signal Routing - Mux
- Simulink - Signal Routing - Demux
Vstup pre motor bude blok konštanty reprezentujúci rýchlosť -255 - 255 pre motory. Tento vstup spojíme s 0 cez blok Mux a zapojíme ho do horného portu bloku Switch. Do spodnej časti bloku Switch spojíme 0 s absolútnou hodnotou vstupu motora. Do strednej časti zapojíme samostatnú rýchlosť motora. Stredná časť rozhoduje, ktorá vetva bloku Switch bude zapnutá na základe znamienka rýchlosti. Ak bude rýchlosť kladná budeme motor ovládať cez vrchný blok PWM (pin 3). V opačnom prípade budeme ovládať motor cez spodný blok PWM (pin 2). Blok Demux rozpája spojené signály.
Po čase by naša schéma obsahovala množstvo blokov a bola by dosť neprehľadná. Pre zjednodušenie čitateľnosti môžeme bloky zlúčiť do logických častí, ktoré v Simulinku nazývame subsystémy. Pre vytvorenie subsystému označte všetky bloky okrem konštánt reprezentujúcich vstupné rýchlosti a pomocou pravého kliku zvoľte možnosť Create Subsystem from Selection. Schéma by mala vyzerať nasledovne
Do subsystému sa môžete dostať dvojklikom a editovať ho. Vrátiť späť do hlavnej schémy sa dá modrou šípkou nahor v Toolstripe Simulinku alebo kliknutím na názov hlavnej schémy v Explorer Bare (na obrázku schema3). Model môžete spustiť pomocou Monitor & Tune a skúšať meniť rýchlosti pre jednotlivé motory.
V tomto návode sme si ukázali ako môžeme ovládať motory pomocou Simulinku. Ako však môžeme vytvoriť postupnosť operácií? Ísť dopredu určitý čas a následne sa otočiť do jednej strany? MATLAB a Simulink obsahujú nadstavbu pre modelovanie postupnosti operácií a to si ukážeme v ďalšom návode.