KURZ: Synchronizace pohybu dvou motorů
- Podrobnosti
- Mgr. Jan Baťko
- Aktualizováno: 06.09.2017
- Zobrazení: 14888
KAPITOLY
Pokud vytváříme pohyblivá autíčka, vozítka nebo mechanismy vyžadující řízení, použijeme kombinaci dvou motorů. Při jejich využití můžeme libovolně zasílat příkazy každému z nich zvlášť a dosahovat tak požadovaného pohybu robota. Pro práci s více motory využijeme znalosti získané v předchozí kapitole s názvem Motor a jeho pohyb.
Synchronizace dvou motorů v programovacím prostředí
NXT-G
BLOK PRO OVLÁDÁNÍ MOTORU
Rozcestník
Umístění bloku
Programový blok Move je umístěn v paletě Complete >Common.
Popis bloku
Blok Move obsahuje po rozbalení osm konektorů pro propojení s dalšími programovými bloky.
Left Motor - označuje, ke kterému vstupnímu portu je připojen levý motor (A, B, C).
Right Motor - označuje, ke kterému vstupnímu portu je připojen pravý motor (A, B, C).
Other Motor - označuje, ke kterému vstupnímu portu je připojen další (třetí) motor (A, B, C).
Direction - hodnota logického datového typu, která vyjadřuje směr otáčení (True = vpřed, False = vzad).
Steering - konektor pro řízení, který označuje, kterým z motorů bude řízen pohyb (pokud bude nastavené řízení < 0 - řízeno levým motorem, pokud > 0 - řízeno pravým motorem).
Power - označuje intenzitu otáčení motoru na stupnici od 0 do 100.
Duration - hodnota označující délku trvání pohybu (udávána ve stupních, otáčkách motoru, sekundách nebo jako neomezené otáčení).
Next Action - vyjadřuje, zda bude po ukončení akce motor pokračovat v činnosti či nikoliv.
Parametry bloku
Při sychronizaci pohybu více motorů využijeme blok Move. Tento blok dokáže synchronizovat kombinaci až tří motorů.
Port: udává porty řídící jednotky (A, B, C), ke kterým jsou motory připojeny.
Direction: určuje směr otáčení motorů (vpřed, vzad či zastavení).
Steering: udává, kterým motorem je řízen pohyb. Pokud je tažítko uprostřed, zabírají oba motory současně. Mírným přetažením posuvníku do strany dosáhneme zakřiveného pohybu, protože otáčivá síla bude více přenesena na zvolený motor. Pokud přetáhneme posuvník na maximum, robot se bude otáčet na místě. Řízení lze využít pouze při připojení dvou motorů.
Power: intenzita (rychlost) otáčení motoru nastavitelná v procentech (100% je maximum).
Duration: možnost nastavení délky trvání pohybu. Skýtá čtyři možnosti nastavení:
- míra natočení ve stupních (Degrees),
- míra natočení vyjádřená pomocí otáček motoru (Rotations),
- doba chodu motoru při daném výkonu v sekundách (Seconds),
- neomezený běh motoru po dobu průběhu programu (Unlimited).
Next Action: udává, zda se má po ukončení akce motor zastavit (Brake) nebo pokračovat v chodu (Coast).
RobotC
PŘÍKAZY A METODY pro sychronizaci dvou motorů
Synchronizace dvou a více motorů v programovacím prostředí RobotC je realizována na podobných principech jako ovládání pohybu jednoho motoru, které jsme si popsali v kapitole Motor a jeho pohyb. Musíme dbát na to, abychom správně označovali v příkazech příslušné motory, aby naše zařízení pracovalo tak, jak potřebujeme.
Rozcestník
NASTAVENÍ A OVLÁDÁNÍ MOTORů
Veškeré ovládání motorů, ať už určení portu, vyjádření směru otáčení nebo určení intenzity otáčení, se provádí pomocí příkazu motor[].
Port: určení portů, ke kterým jsou motory připojeny je vyjádřeno výrazem v závorce (motorA, motorB, motorC).
motor[motorC] = 100; // Motor C je v pohybu smerem vpred s maximalnim vykonem. motor[motorB] = 100; // Motor B je v pohybu smerem vpred s maximalnim vykonem.
Směr otáčení: vyjádření, kterým směrem se jednotlivé motory otáčí, je udáno znaménkem před číslem udávajícím intenzitu otáčení motoru.
motor[motorC] = 100; // Motor C je v pohybu smerem vpred s maximalnim vykonem. motor[motorB] = -100; // Motor B je v pohybu smerem vzad s maximalnim vykonem.
Při použití dvou motorů k pohybu autíček, vozítek a pohyblivých strojů se nejčastěji využívá otáčení motorů stejným směrem. Pokud by se motory využili každý s opačným směrem otáčení jako v předchozím případě, otáčelo by se vozítko dokola. Rozdílný směr otáčení je využitelný v případech, že každý motor pohání jinou část stroje.
Intenzita otáčení motorů: číslo udávající výkon motoru na stupnici od 0 do 100 (%).
motor[motorC] = 100; // Motor C je v pohybu smerem vpred s maximalnim vykonem. motor[motorB] = -75; // Motor B je v pohybu smerem vzad s vykonem 75%.
OVLIVNĚNÍ DOBY OTÁČENÍ MOTORU
Doba trvání otáčení je ovlivňována píkazem wait1Msec(), u kterého se délka trvání udává v milisekundách nebo příkazem wait10Msec(), u nějž je udávána v desítkách milisekund.
motor[motorC] = 100; // Motor C je v pohybu smerem vpred s maximalnim vykonem. motor[motorB] = 100; // Motor B je v pohybu smerem vpred s maximalnim vykonem. wait1Msec(4000); // Otaceni motoru je provadeno 4 sekundy, po kterych je pohyb ukoncen a program pokracuje dale.
MOŽNOSTI NATOČENÍ MOTORU
V programovacím prostředí RobotC máme možnost natáčet motory o 180 stupňů nebo o libovolný úhel. Pro tyto potřeby využijeme příkazy bMotorReflected[] a nMotorEncoderTarget[].
Natočení motoru o 180 stupňů: provádí se příkazem bMotorReflected[], který nabývá hodnot true a false.
bMotorReflected[motorA] = true; // Motor A se pootoci o 180 stupnu. bMotorReflected[motorB] = false; // Motor B se nepootoci o 180 stupnu.
Natočení motoru o libovolný úhel: je možné jej ovlivnit pomocí příkazu nMotorEncoderTarget[]. V následujícím příkladu je proveden pohyb robota vpřed o úsek, který se rovná 180 stupňům natočení čítače otáček motoru.
task main() { nMotorEncoder[motorB] = 0; // Nulovani encoderu motoru B. nMotorEncoder[motorC] = 0; // Nulovani encoderu motoru C. nMotorEncoderTarget[motorB] = 180; // Nastaveni cilove pozice motoru B (otoceni o 180 stupnu). nMotorEncoderTarget[motorC] = 180; // Nastaveni cilove pozice motoru C (otoceni o 180 stupnu). motor[motorB] = 30; // Nastaveni rychlosti otaceni motoru B na 30%. motor[motorC] = 30; // Nastaveni rychlosti otaceni motoru C na 30%. while (nMotorRunState[motorB] != runStateIdle || nMotorRunState[motorC] != runStateIdle) { // Tento cyklus ceka na to, az je dokonceno natoceni encoderu o pozadovany uhel. // Neprovadi se zadny dalsi prikaz. } motor[motorB] = 0; // Uvedeni motoru B do klidu. motor[motorC] = 0; // Uvedeni motoru C do klidu. }
EV3
BLOK PRO Řízení dvou MOTORů
Rozcestník
- Umístění bloku
- Výběr výstupního portu
- Změna režimu
- Přidání vstupního portu
- Režimy programového bloku
Blok pro řízení pásového vozidla
Rozcestník
- Umístění bloku
- Výběr výstupního portu
- Změna režimu
- Přidání vstupního portu
- Režimy programového bloku
UMÍSTĚNÍ BLOKU pro řízení dvou motorů
Programový blok Move Steering je umístěn v paletě Action.
Výběr výstupního portu
Před započetím práce s motory je nejprve nutné zvolit kombinaci výstupních portů (A, B, C, D) řídící jednotky, ke kterým jsou motory připojeny (červeně zvýrazněno).
Změna režimu
Programový blok Move Steering můžeme využívat v pěti režimech. Přepínání mezi nimi se provádí pomocí tlačítka v levé spodní části (červeně zvýrazněno).
Přidání vstupního portu
Po kliknutí do pole pro výběr výstupních portů pro řízení motorů je možné vybrat první možnost Wired, po které se do programového bloku přidá vstupní port Port (červeně zvýrazněno).
Režimy programového bloku
Off (Vypnuto)
Vypnutí chodu obou motorů. V tomto řežimu je aktivní pouze jediný vstupní port.
Break at End - způsob zastavení motoru. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On (Zapnuto)
Neomezený běh motorů zadanou rychlostí a směrech po dobu průběhu programu. V tomto řežimu jsou aktivní dva vstupní porty.
Steering - řížení směru natáčení robota.
Power - rychlost otáčení motorů udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
On for Seconds (otáčení po zvolený časový úsek)
Ovlivnění chodu motorů pomocí času. V tomto režimu máme k dispozici čtyři vstupní porty.
Steering - řížení směru natáčení robota.
Power - rychlost otáčení motorů udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Seconds - doba otáčení motorů udávaná ve vteřinách.
Break at End - způsob zastavení motorů. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On for Degrees (otočení o zadaný úhel)
Ovlivnění chodu motorů pomocí úhlových stupňů. V tomto režimu máme k dispozici čtyři vstupní porty.
Steering - řížení směru natáčení robota.
Power - rychlost otáčení motorů udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Degrees - míra natočení motorů zadávaná v úhlových stupních od 0 do 360°.
Break at End - způsob zastavení motorů. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On for Rotations (otočení o určitý počet otáček)
Ovlivnění chodu motorů pomocí počtu nastavených otáček. V tomto režimu máme k dispozici čtyři vstupní porty.
Steering - řížení směru natáčení robota.
Power - rychlost otáčení motorů udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Rotations - počet prováděných otáček motorů.
Break at End - způsob zastavení motorů. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
Umístění bloku pro řízení pásového vozidla
Programový blok Move Tank je umístěn v paletě Action.
Výběr výstupního portu
Před započetím práce s motory je nejprve nutné zvolit kombinaci výstupních portů (A, B, C, D) řídící jednotky, ke kterým jsou motory připojeny (červeně zvýrazněno). Řízení pomocí pásů je specifické tím, že každý motor (pás) ovládáme individuálně a nastavujeme tak každému vlastní rychlost otáčení v závislosti na požadovaném směru pohybu.
Změna režimu
Programový blok Move Tank můžeme využívat v pěti režimech. Přepínání mezi nimi se provádí pomocí tlačítka v levé spodní části (červeně zvýrazněno).
Přidání vstupního portu
Po kliknutí do pole pro výběr výstupních portů pro řízení motorů je možné vybrat první možnost Wired, po které se do programového bloku přidá vstupní port Port (červeně zvýrazněno).
Režimy programového bloku
Off (Vypnuto)
Vypnutí chodu obou motorů. V tomto řežimu je aktivní pouze jediný vstupní port.
Break at End - způsob zastavení motorů. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On (Zapnuto)
Neomezený běh obou motorů po dobu průběhu programu. V tomto řežimu jsou aktivní dva vstupní porty.
2x Power - rychlost otáčení motorů udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad). Při zadání stejných hodnot se pásové vozidlo pohybuje v před, snížením nebo zvýšením některé z hodnot docílíme natáčení.
On for Seconds (otáčení po zvolený časový úsek)
Ovlivnění chodu motorů pohánějících pásy pomocí času. V tomto režimu máme k dispozici čtyři vstupní porty.
2x Power - rychlost otáčení motorů udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Seconds - doba otáčení motorů udávaná ve vteřinách.
Break at End - způsob zastavení motorů. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On for Degrees (otočení o zadaný úhel)
Ovlivnění chodu motorů pohánějících pásy pomocí úhlových stupňů. V tomto režimu máme k dispozici čtyři vstupní porty.
2x Power - rychlost otáčení motorů udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Degrees - míra natočení motorů zadávaná v úhlových stupních od 0 do 360°.
Break at End - způsob zastavení motorů. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.
On for Rotations (otočení o počet otáček)
Ovlivnění chodu motorů pohánějících pásy pomocí počtu nastavených otáček. V tomto režimu máme k dispozici čtyři vstupní porty.
2x Power - rychlost otáčení motorů udávaná v procentech na stupnici od 100 (vpřed) do -100 (vzad).
Rotations - počet prováděných otáček motorů.
Break at End - způsob zastavení motorů. Okamžité zastavení (Break) reprezentuje logická hodnota True a pozvolné dojetí (Coast) hodnota False.