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ádací modul pre motorčeky dual H-bridge L298N, 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:

  • VS (1) - Vstupné napájanie motorov (+ červený kábel z držiaka bateriek)
  • GND (2) - Spoločná zem (- čierny kábel z držiaka bateriek), pripojte so zemou Arduina. Ja som použil WAGO svorku, nakoľko je káblik od držiaka tenký a mohol by zo svorkovnice vypadnúť.
  • VSS (3) - Napájanie logiky. Pretože napájame VS z 5 bateriek (pod 12V), nemusíme pripájať nič. Prepojenie (jumper) nad VS ponecháme.
  • OUT1 a OUT2 (8) - pripojenie motora (označíme ako M1). Ja som daval červenú na OUT1.
  • OUT3 a OUT4 (9) - pripojenie motora (označíme ako M2). Ja som daval červenú na OUT4.
  • IN1 a IN2 (5) - Riadenie smeru M1. Ja som daval na piny Arduina D3 a D4
  • IN3 a IN4 (6) - Riadenie smeru M2. Ja som daval na piny Arduina D5 a D6
  • ENA (4) - Riadenie rýchlosti M1 pomocou PWM (jumper dat preč). Ja som daval na piny Arduina D2
  • ENB (7) - Riadenie rýchlosti M2 pomocou PWM (jumper dat preč). Ja som daval na piny Arduina D7

Popis pinov nájdete aj na: Interface L298N DC Motor Driver Module with Arduino

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ť 2V na PWM pin D2 pre rýchlosť motora M1 a jeden smer zopneme pinom D3 (D4 necháme na nule).

a.writePWMVoltage('D2',2)
a.writeDigitalPin('D3',1)
a.writeDigitalPin('D4',0)

Smer točenia kolesa zmeníme tým, že na pin D3 nastavíme nulu a D4 na jednotku:

a.writePWMVoltage('D2',2)
a.writeDigitalPin('D3',0)
a.writeDigitalPin('D4',1)

Podobne to vyskúšajte aj pre druhý motor

a.writeDigitalPin('D5',1)
a.writeDigitalPin('D6',0)
a.writePWMVoltage('D7',2)

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 nasledujúce bloky

  • Simulink - Sources - Constant
  • Simulink - Math - Abs
  • Simulink - Logic and Bit Operations - Compare To Zero
  • Simulink - Logic and Bit Operations - Logical Operator
  • Simulink Support Package for Arduino Hardware - Common - Digital Output
  • 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. Rýchlosť motorov v modeli budeme ovládať hodnotami v rozsahu -255 až 255, aby sme jedným signálom pokryli oba smery. Náš algoritmus pre ovládanie motorov nám túto rýchlosť prevedie na piny Arduina. Na pin D2 (PWM pre motor M1) a pin D7 (PWM motor M2) pripojíme absolútne hodnoty rýchlosti, pretože blok PWM požaduje rozsah 0 až 255. Jeden smer motorov určíme porovnaním na kladnú hodnotu, čo nám vráti logickú 1 alebo logickú 0 (vstup pre pin D3, respektíve pin D5). Opačný smer získame znegovaním výstupu porovnania (vstup pre pin D4, respektíve pin D6). Tieto operácie zabezpečia správne prepínanie vstupov EN1 až EN4 na základe hodnoty znamienka rýchlosti.

Spustite model tlačidlom Monitor & Tune a počas behu simulácie môžete meniť rýchlosti jednotlivých motorov v rozsahu -255 až 255.

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. 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.

Literatúra

[1] Interface L298N DC Motor Driver Module with Arduino (Last minute engineers)