Slotcar Platoon Czech Notes

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

Popis hardware

Deska je osazena 0204 smd součástkami (odpory, kondenzátory), ARM procesorem STM32F303CC, rádiem NRF24L01SMD, H můskem, gyroskopem a akcelerometrem, senzorem pro měření proudu INA213, 16MHz krystalem ABM8, LDO regulátorem , proudovou pojistkou (provizorně na 4A) a vstupně-výstupními porty . Podrobné schéma se všemi součástkami a jejich hodnotami bude k dispozici online. První desky byly osazovány ručně. Napájení je realizováno pomocí kolejnic v autodráze. Auto se "zapne" po položení na dráhu. Správnou orientaci auta je možné ověřit díky blikání LED diody. Díky Schtottkyho diodě opačné položení auta na dráhu neodpálí elektroniku, ale je dobré ho hned otočit.

Jednotlivé součástky (+ datasheety):

ARM procesor STM32F303CC (www.st.com/web/en/resource/technical/document/datasheet/DM00058181.pdf)

rádio NRF24L01SMD (http://www.farnell.com/datasheets/12195.pdf)

gyroskop a akcelerometr (číslo datasheet u Míry)

H můstek Texas Instruments DRV8835DSSR (http://www.ti.com/lit/ds/symlink/drv8835.pdf)

krystal ABM8 (http://www.farnell.com/datasheets/97450.pdf)

senzor pro měření proudu INA213AIDCKT (http://www.farnell.com/datasheets/1633831.pdf)

LDO regulátor (http://www.farnell.com/datasheets/1633908.pdf)


Possibilities for new radios

A chip integrating both proprietary GFSK modulation with data rate up to 2Mbps and support for IEEE 802.15.4 http://www.analog.com/en/rfif-components/rfif-transceivers/adf7242/products/product.html

A similar chip by Microchip http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en561038#documentation

Potřebné toolboxy, knihovny, ...

Pro komunikaci s autem a řízení auta je potřeba mít v PC následující programy, knihovny a další soubory:

MATLAB s Real-Time Windows Target toolboxem a Simulinkem, který je schopen kompilovat .c soubory pro platformu, na které běží , pro kompilaci Simulinkového modelu je dále nutné mít v MATLABu Embedded Coder a MATLAB Coder (my jsme používali katederní licenci MATLABu verze 2013a 64bit)

Prostředí pro vývoj a komunikaci s ARM procesory YAGARTO (http://sourceforge.net/projects/yagarto/ )

(Pro kompilování .c souborů na ARM platformu je někdy potřeba také WinAVR (http://www.webring.org/l/rd?ring=avr;id=59;url=http%3A%2F%2Fwinavr%2Esourceforge%2Enet%2F) )

Knihovna libusb pro komunikaci přes radiový vysílač a přijímač Nordic (http://sourceforge.net/apps/trac/libusb-win32/wiki)

Adresářová struktura projektu

Ve složce projektu se nachází dvě hlavní podsložky onboard a sw. Ve složce onboard se nachází hlavně software, který běží přímo na desce v autíčku. V sw jsou umístěny soubory pro programování procesoru na desce z počítače a pro simulování v Simulinku.

Simulinkový model se nachází v andresáři sw/simulink_sfunction.

Podadresář onboard/fw/app slouží pro radiovou komunikaci PC <-> autíčko skrz příkazový řádek. Jak komunikovat s autíčkem je uvedeno níže. Také se zde nachází soubor hlavní main.c, ve kterém je kód obsluhující komunikaci a adresář simulink_reg připravený pro kód regulátoru (zkompilovaného simulinkového regulátoru).

Nastavení systému pro komunikaci

Pro komunikaci s autíčkem je použit Nordic radiový USB vysílač a přijímač. Ke správné funkci tohoto zařízení je nezbytné nainstalovat knihovnu libusb (http://sourceforge.net/apps/trac/libusb-win32/wiki). Úspěšnou instalaci knihovny lze ověřit ve správci zařízení (pro Windows).

Jelikož je třeba překompilovat .c soubory, je dále potřeba nainstalovat prostředí pro vývoj a komunikaci s ARM procesory YAGARTO (download: http://sourceforge.net/projects/yagarto/ ) a pro kompilaci souborů potřebných MATLABem ke komunikaci skrz Simulink je potřeba kompilátor, který dokáže spolupracovat právě s prostředím MATLAB.

Názvy takových kompilátorů lze v MATLABu najít po zadání příkazu mex -setup.

K samotné kompilaci, nejdříve je potřeba překompilovat soubory v podadresáři onboard/fw/app příkazem make v příkazové řádce. Makefile nezbytný k tomuto účelu je již ve složce připraven. Pro tento krok je důležitá úspěšná instalace YAGARTO a restart systému před kompilací. Tím se zajistí přenastavení cesty PATH v systému Windows a kompilace by měla proběhnout.

Dalším krokem je zkompilování souboru nrfsio.c v MATLABu. K tomu je připraven skript compile.m, který využívá libusb knihovny. Je důležité mít ve složce lib knihovnu libusb takovou, která je kompatibilní s kompilátorem, který je v MATLABu použit pro zkompilování nrfsio.c. (Spolu s projektem pošlu všechny knihovny libusb, co mi Míra poslal a mezi nimi je důležité najít svou (já používal verzi msvc_x64) a taky se musí v compile.m přepsat -llibusb na název, který se doopravdy používá s -l na začátku)

Jak komunikovat s autíčkem

Po úspěšném provedením kroků z bodu výše lze přistoupit ke komunikaci s autem pomocí radiového spojení. Po připojení Nordic USB radiového přijímače a vysílače do USB je následujícím krokem otevření příkazové řádky a navigování znovu do složky onboard/fw/app. Dále je třeba zadat příkaz set addr=X, který vytvoří Windows proměnnou a nastaví ji na hodnotu X, kde X je adresa auta, se kterým se chce začít komunikovat (pozn.: aktuálně - auto s dírou v motoru mám adresu 6 a druhé auto adresu 2). Nyní se napíše do příkazové řádky příkaz term, který pomocí .bat souboru spustí a.exe a začne komunikovat se zařízením na desce autíčka. Komunikace probíhá přeposíláním ASCII znaků. Je potřeba znovu stisknout klávesu ENTER.

Pro nahrání nového souboru (a vlastně i celého projektu) do autíčka se používá příkaz load, který je opět definován .bat souborem.

Navázání komunikace lze ověřit příkazem pwn 1000, který by měl roztočit motor a tím i kolečka.

Simulinkový model

Simulinkový model, který se nachází v projektovém podadresáři sw/simulink_sfunction, obsahuje strukturu Car 1. Ta obstarává komunikaci s autem. Vstup (motor) do podsystému musí být v rozmezí 0-1. Samotnou komunikaci zajišťuje blok nrfsio, který používá zkompilovanou funkci nrfsio.c z bodů výše. Struktura Car 1 nebude fungovat, pokud tento .c soubor nebude zkompilován pro systém, na kterém simulinková simulace běží. Časovou synchronizaci zajišťuje blok RTWin Real-Time Synchronization. Tento blok je součástí Real-Time Windows Target toolboxu do MATLABu. Je tedy nezbytné tento toolbox v MATLABu mít.

Packety používané pro přenos dat z auta do Simulinku mohou obsahovat až 20 čísel formátu short. Pro zobrazení těchto výstupů ze systému je potřeba rozšířit počet výstupů funkce nrfsio ve struktuře Car 1. Toho se docílí změnou parametru Signal Attributes/Port dimensions u bloku Raw Output na požadovaný počet výstupů. Dále je třeba také zvětšit dimenzi demultiplexeru a přidat příslušný blok pro výstup.

Tímto postupem dostane struktura Car 1 další výstup.

Kompilace regulátoru a nahrání do auta

Pro kompilaci regulátoru navrhnutého jako model v Simulinku je potřeba mít v MATLABu Embedded Coder a MATLAB Coder. Po sestavení modelu v Simulinku (přidání standardních vstupů, výstupů a regulátoru) je potřeba nastavit cílovou platformu kompilace. V menu Code->C/C++ Code->Code Generation Options se zvolí System taget file (pro auta s ARM Cortex procesorem jsem používali ert.tlc (Embedded Coder)). V záložce Hardware implementation je nadále nutné zvolit typ cílového procesoru (pro nás ARM Cortex).

Pozn.: Model (a tedy i regulátor) musí být navrhován jako diskrétní.

Model lze zkompilovat buď v menu Code->C/C++ Code->Build Model, zkratkou Ctrl+B nebo modrou ikonou v pravém horním rohu Simulinkovského modelu. V aktuální složce MATLABu se po úspěšné kompilaci vytvoří složka regulator_ert_rtw. Pro obsah této složky je připraveno místo ve struktuře projektu v adresáři onboard/fw/app/simulink_reg. Celý obsah složky regulator_ert_rtw je tedy potřeba zkopírovat do této připravené složky. Zakomponování tohoto regulátoru do kódu běžícího v autě je uvedeno níže.

Regulátor v .c kódu, soubor main.c

Hlavním souborem pro řízení autíčka je main.c. Metoda PWM_ISR() obsluhuje přerušení a běží na frekvenci 64kHz. V této metodě probíhá čtení senzoru rychlosti. Data z tohoto senzoru jsou čtena do proměnné ir_val a z té jsou se zpožděním jednoho kroku přesouvána do last_ir_val. Detekuje se vzestupná hrana (tedy přechod prahu jedním směrem). Mezi každými dvěma vzestupnými hranami se načítá proměnná incr_time, která udává časový rozdíl mezi dvěma barevnými přechody čtenými senzorem. Se znalostí obvodu kola a počtu přechodů na jednu otáčku je poté tento čas přepočítán na rychlost - do proměnné speed.

Zbytek hlavních příkazů se odehrává v metodě main, nejdříve jsou inicializovány všechny potřebné věci a dále se spustí nekonečná smyčka běžící na frekvenci 1kHz (s regulátorem v C je frekvence změněna na 100Hz (k lazení slouží dělící příkaz systick_init(640000);, pro vyšší frekvenci je třeba ubírat nuly v dělení). Tato smyčka se vypořádává s komunikací. Packety s rxid 10 jsou packety komiunikace s MATLABem a ve struktuře switch se zachytí. V této části metody se zpět posílají přečtené hodnoty ze senzorů. Hodnoty posílané do MATLABu se zapisují do pole buf, které může maximálně obsahovat 20 čísel typu short. Pomocí metody set_pwm_motor(int) se také nastavuje hodnota střídy pwm pro motor. Maximální hodnota je 512 a měla by fungovat i záporná.

Přidání regulátoru je jednoduché. Nejdříve je nutné přidat dva hlavičkové soubory do kódu v main.c a to: #include "regulator.h" #include "regulator_private.h" a samozřejmě přesunou vygenerované soubory z MATLABu do připravené složky simulink_reg, jak bylo již popsáno výše. Metodou, která obsluhuje výpočet stavů a výstupu z regulátoru je regulator_step() (pozn.: někdy vygenerovaný soubor regulator.c obsahuje i více step metod a tak je nutné volat např regulator_step1() ). Tuto metodu je třeba volat se stejnou frekvencí jako byla frekvence v simulinkovém modelu, ze kterého byla vygenerována. V našem případě je takovou frekvencí právě 100Hz, proto je tato metoda volána ve smyčce ve funkci main().

K jednotlivým vstupům a výstupů se přistupuje přes proměnné regulator_U.In1, regulator_U.In2, regulator_Y.Out1. V každé iteraci je také do vstupních proměnných nahrán aktuální stav, podle kterého se řídí (v současnosti rychlost).

Pro úspěšnou kompilaci souboru main.c musí být upraven soubor Makefile, podle kterého se celé kompilace provádí. Do proměnné SRC čítající všechny zdrojové .c soubory se přidají ještě 2: /app/simulink_reg/regulator_data.c a /app/simulink_reg/regulator.c a do prohledávaných složek v UINCDIR se připíše ./simulink_reg.

Back to Slotcar platooning