KURZ: Multiplexování výstupů
- Podrobnosti
- Mgr. Jan Baťko
- Aktualizováno: 01.04.2014
Při programování robotické stavebnice nalezneme velké množství členů, které slouží jako přepínače vstupů či výstupů řídící jednotky. V tomto článku se zaměříme na multiplexování výstupů. Popíšeme si ho na multiplexeru NXTMMX-v2 od společnosti Mindsensors. Ten dokáže po připojení k řídící jednotce NXT pracovat s jedním připojeným senzorem a dvěma připojenými motory. Na obrázku můžete vidět schéma multiplexeru. Červeně jsou označeny porty pro připojení motorů (M1 a M2). Zeleně zvýrazněný je port k připojení řídící jednotky NXT a žlutě port k připojení senzoru.
Multiplexer je připojen k některému ze vstupních portů (1-4). Umožní nám tak pracovat až se dvěma motory a jedním senzorem prostřednictvím jediného vstupního portu. Pro jeho chod je zapotřebí, aby byl připojen ke zdroji napájení. Je možné jej například připojit pomocí jeho dvou vodičů k alkalinové baterii o napětí 9V, což k jeho napájení postačí.
Pro praktické využití v programování robotické stavebnice LEGO Mindstorms NXT se multiplexer hodí spíše jako rozšiřující zařízení umožňující pracovat s dalšími dvěma motory připojenými ke vstupnímu portu. Možnosti připojení senzorů jsou totiž značně omezené. Multiplexer podporuje pro připojení ke vstupu SENSOR pouze senzory I2C, digitální senzory nebo další multiplexery.
PRÁCE S multiplexerem V PROGRAMOVACÍCH PROSTŘEDÍCH
NXT-G
Blok pro ovládání multiplexeru
Rozcestník
Umístění bloku
Multiplexování výstupů je v programovacím prostředí NXT-G řízeno pomocí bloku NXT MMX. Tento blok není součástí základní instalace. Pro jeho použití je nutné jej do prostředí importovat. Návod k importu rozšiřujících modulů naleznete v kapitole Instalace rozšiřujících modulů.
Poznámka: Blok naleznete ke stažení na stránkách výrobce ZDE.
Popis bloku
Blok NXT MMX obsahuje celkem deset konektorů pro propojení s dalšími programovými bloky:
Operate On - vyjadřuje, jaká operace je prováděna (ovládání motorů, čtení hodnoty čítače otáček motoru nebo zjišťování hodnoty připojeného elektrického napětí).
Power - intenzita otáčení motoru.
Direction - vyjadřuje směr otáčení motoru (vpřed, vzad nebo stůj).
Duration - označuje dobu trvání otáčení motoru.
Next Action - vyjadřuje, zda bude po ukončení akce motor pokračovat v činnosti či nikoliv.
Wait for Completion - ukončení činnosti před dalším krokem programu.
Power Ramp - označuje, zda je zapnuta regulace relativních změn intenzity otáčení motoru.
Encoder M1 - čítač otáček motoru M1.
Encoder M2 - čítač otáček motoru M2.
Voltage - označuje úroveň elektrického napětí připojeného napájení.
Parametry bloku
Port: označuje, ke kterému portu je multiplexer připojen a jeho I2C adresu v hexadecimálním vyjádření.
Direction: směr otáčení motoru.
Power Ramping: vyjadřuje, zda je zapnuta regulace relativních změn intenzity otáčení motoru (Disabled - vypnuta, Enabled - zapnuta).
Power: tažítkem nebo zadáním hodnoty nastavitelná hodnota intenzity otáčení motoru.
Operation: vyjadřuje, jaká operace je prováděna:
- Operate Motors - ovládání motorů,
- Read Encoders - čtení hodnoty čítače otáček motoru,
- Read Voltage - zjišťování hodnoty připojeného elektrického napětí.
Duration: pole pro zadání doby provádění pohybu motoru, která může být vyjádřena v:
- Degrees - úhlové stupně,
- Rotations - počet otáček motoru,
- Seconds - vteřiny,
- Unlimited - nekonečný pohyb,
- To Encoder Position - pohyb prováděný do určitého počtu otáček nasčítaných pomocí čítače.
Wait: možnost, po jejímž zaškrnutí bude ukončena činnosti před dalším krokem programu.
Next Action: udává, zda se má po ukončení akce motor zastavit (Brake the Motors) nebo pokračovat v chodu (Coast the Motors).
RobotC
Příkazy a metody pro ovládání mutliplexeru
Úspěšné ovládání multiplexeru výstupů se skládá z několika kroků, jejichž dílčí provedení vede k bezproblémovému ovládání. Z důvodu, že multiplexer nepodporuje žádný z běžných LEGO senzorů, se zaměříme pouze na ovládání k němu připojených motorů.
Rozcestník
Volání vývojové knihovny
Prvním krokem pro správné nastavení multiplexeru je zavolání příslušné vývojové knihovny, která obsahuje jeho deklaraci a definované metody a příkazy, které budeme k ovládání potřebovat. Potřebnou knihovnu nalezneme ke stažení na stránkách výrobce ZDE.
Po umístění knihovny do příslušného kořenového adresáře instalačních souborů programového prostředí je nutné knihovnu v našem programu zavolat. Volání knihovny a jeho zápis vypadá následovně:
#include "NXTMMX-lib.h"
Inicializace multiplexeru
V počáteční inicializaci v našem programu definujeme, k jakému portu řídící jednotky je multiplexer připojen a jaká je jeho adresa. Multiplexeru musíme přiřadit I2C adresu, která je vyjádřena hexadecimálně proto, aby byla zajištěna jeho správná komunikace na datové sběrnici.
K počátečnímu nastavení slouží příkaz MMX_Init(). Jeho prvním parametrem v závorce je označení portu, ke kterému je multiplexer připojen (S1-S4). Druhý parametr označuje I2C adresu. Poslední parametr označuje, zda je aktivována regulace otáček motoru (PID). Jedná se o logickou hodnotu (1 = True(Pravda), 0 = False(Nepravda)).
MMX_Init( S1, 0x06, 0 );
Příkazy k ovládání motorů
Motor připojený k řídící jednotce prostřednictvím multiplexeru nám nabízí stejné možnosti řízení, jako motor připojený k jednotce přímo. Jelikož je ovšem ovládání multiplexeru závislé na knihovně, ve které jsou všechny příkazy a metody pro jeho ovládání definovány, jsou i příkazy pro řízení motorů odlišné.
V následující části uvedeme příkazy, které můžeme v programování využít nejčastěji. Po otevření zdrojového kódu vývojové knihovny naleznete mnoho dalších, které jsou však spíše rozšiřujícího charakteru. Pro naše potřeby vystačí níže uvedené. Můžete vždy vidět název metody a v závorce výčet parametrů, které jsou nezbytné pro její použití.
// prikaz pro nekonecne otaceni motoru int MMX_Run_Unlimited( port, byte I2C_adresa, byte oznaceni_motoru, byte smer_otaceni, byte rychlost); // prikaz pro nastaveni otaceni motoru po urcitou dobu vyjadrenou v sekundach int MMX_Run_Seconds( port, byte I2C_adresa, byte oznaceni_motoru, byte smer_otaceni, byte rychlost, byte trvani_pohybu, byte pockat_na_dokonceni, byte dalsi_akce) ; // prikaz pro moznost natoceni motoru o urcity pocet uhlovych stupnu int MMX_Run_Degrees(port, byte I2C_adresa, byte oznaceni_motoru, byte smer_otaceni, byte rychlost, long stupne, byte pockat_na_dokonceni, byte dalsi_akce ); // prikaz pro natoceni motoru o urcity pocet otacek int MMX_Run_Rotations( port, byte I2C_adresa, byte oznaceni_motoru, byte smer_otaceni, byte rychlost, byte pocet_otacek, byte pockat_na_dokonceni, byte dalsi_akce ) ;
Parametry příkazů
Port: zadáváme označení vstupního portu, ke kterému je multiplexer připojen (S1, S2, S3 nebo S4).
I2C adresa: udáváme adresu I2C v hexadecimálním vyjádření (zadáváme například 0x06, 0x07 atd.).
Označení motoru: specifikujeme, který z motorů připojených k multiplexeru chceme ovládat.
- MMX_Motor_1 - pokud se jedná o motor na portu M1,
- MMX_Motor_2 - pokud se jedná o motor na portu M2,
- MMX_Motor_Both - pokud se jedná o oba motory zároveň.
Směr otáčení: vyjadřuje, jakým směrem se bude motor otáčet.
- MMX_Direction_Forward - pro otáčení směrem vpřed,
- MMX_Direction_Reverse - pro otáčení směrem vzad.
Rychlost: číselná hodnota udávající intenzitu otáčení motoru (0-100). Využít můžeme také nadefinované konstanty.
- MMX_Speed_Full - rychlost 90%,
- MMX_Speed_Medium - rychlost 60%,
- MMX_Speed_Slow - rychlost 25%.
Trvání pohybu: číselná hodnota udávající dobu trvání pohybu v sekundách.
Stupně: číselná hodnota udávající úhel natočení ve stupních ( zadáváme hodnotu 0-360).
Počet otáček: číselná hodnota udávající počet otáček motoru.
Počkat na dokončení: možnost, která udává, zda se má počkat na dokončení vykonávání pohybu motoru a až poté začít vykonávat další příkaz. Jako parametr můžeme využít dvě nadefinované konstanty:
- MMX_Completion_Wait_For - bude se čekat na dokončení,
- MMX_Completion_Dont_Wait - nebude se čekat na dokončení.
Další akce: možnost, která udává, zda se má po dokončení úkonu motor zastavit nebo pokračovat v chodu.
- MMX_Next_Action_Float - motor pokračuje v chodu,
- MMX_Next_Action_Brake - motor se zastaví (čítačem otáček nejsou zaznamenávány další pohyby motoru),
- MMX_Next_Action_BrakeHold - motor je zastaven (otáčky motoru budou zaznamenány i po zastavení motoru - například pootočení motoru uživatelem).