KURZ: Multiplexování výstupů

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.

NXTMMX v2

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 Multiplexer blok maly 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.

Multiplexer blok

 

Popis bloku

Blok Multiplexer blok maly NXT MMX obsahuje celkem deset konektorů pro propojení s dalšími programovými bloky:

Number 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 Power - intenzita otáčení motoru.

Direction Direction - vyjadřuje směr otáčení motoru (vpřed, vzad nebo stůj).

Number Duration  - označuje dobu trvání otáčení motoru.

Action Next Action - vyjadřuje, zda bude po ukončení akce motor pokračovat v činnosti či nikoliv.

Boolean Wait for Completion - ukončení činnosti před dalším krokem programu.

Number Power Ramp - označuje, zda je zapnuta regulace relativních změn intenzity otáčení motoru.

EncoderM1 Encoder M1 - čítač otáček motoru M1.

EncoderM1 Encoder M2 - čítač otáček motoru M2.

Voltage Voltage - označuje úroveň elektrického napětí připojeného napájení.

 

Parametry bloku

 Multiplexer

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

1 1 1 1 1 1 1 1 1 1 Hodnocení 0.00 (0 hodnocení)

Nemáte oprávnění přidat komentář.
Komentáře mohou přidávat pouze registrovaní uživatelé, kteří neporušují pravidla diskuze.