www.rexcontrols.cz www.contlab.eu www.pidlab.com Ovladač systému REX pro Raspberry Pi (modul RPiDrv) Uživatelská příručka REX Controls s.r.o. Verze 2.10.7 Plzeň 17.8.2015
Obsah 1 Ovladač RPiDrv a systém REX 2 1.1 Úvod....................................... 2 1.2 Požadavky na systém.............................. 2 1.3 Instalace ovladače na vývojovém počítači.................. 2 1.4 Instalace ovladače na cílovém počítači (Raspberry Pi)........... 3 1.4.1 Pouze pro kartu PiFace Digital.................... 3 1.4.2 Pouze pro kartu UniPi......................... 4 2 Zařazení ovladače do projektu aplikace 6 2.1 Přidání ovladače RPiDrv do projektu..................... 6 2.2 Připojení vstupů a výstupů do řídicího algoritmu.............. 7 2.2.1 GPIO piny Raspberry Pi....................... 7 2.2.2 Rozšiřující deska PiFace Digital.................... 9 2.2.3 Rozšiřující deska Intellisys PIO.................... 12 2.2.4 Rozšiřující deska UniPi........................ 14 3 Co dělat při problémech 17 A Analogový výstup na UniPi v1.0 18 Literatura 20 1
Kapitola 1 Ovladač RPiDrv a systém REX 1.1 Úvod V této příručce je popsáno používání ovladače RPiDrv pro zpřístupnění GPIO pinů minipočítače Raspberry Pi 1 [1] v řídicím systému REX. Jsou podpořeny vstupní i výstupní režimy pinů. Ovladač také podporuje rozšiřující desky PiFace Digital [2], Intellisys PIO [3] a UniPi [4]. Ovladač byl vyvinut firmou REX Controls. 1.2 Požadavky na systém Ovladač RPiDrv lze provozovat pouze na Raspberry Pi. Podporovány jsou všechny modely A, B, A+, B+, v2. Aby bylo možno ovladač využívat, musí být na vývojovém (konfiguračním) počítači a na cílovém zařízení nainstalováno následující programové vybavení: Vývojový počítač Operační systém jeden ze systémů: Windows XP, Vista, 7 nebo 8 Vývojové prostředí systému REX verze pro operační systém Windows Cílové zařízení Runtime jádro systému verze pro Raspberry Pi s Raspbian distribucí GNU/Linux REX Ovladač IO verze pro Raspberry Pi 1.3 Instalace ovladače na vývojovém počítači Ovladač RPiDrv se instaluje jako součást řídicího systému REX. Je obsažen v instalátoru vývojových nástrojů systému REX, pro jeho nainstalování je pouze nutné ho v instalačním programu systému REX zaškrtnout. Po typické instalaci se řídicí systém REX 1 Raspberry Pi je registrovaná obchodní známka Raspberry Pi Foundation. 2
nainstaluje do cílového adresáře C:\Program Files\REX Controls\REX_<version>, kde <version> označuje verzi systému REX. Po úspěšné instalaci se do cílového adresáře zkopírují soubory: bin\rpidrv_h.dll Konfigurační část ovladače RPiDrv. DOC\RPiDrv_CZ.pdf Tato uživatelská příručka. 1.4 Instalace ovladače na cílovém počítači (Raspberry Pi) Pokud ještě nemáte nainstalovaný runtime modul RexCore řídicího systému REX, nainstalujte jej nejdříve podle příručky Začínáme se systémem REX [5]. Pro přístup ke GPIO pinům Raspberry Pi nebo vstupům a výstupům rozšiřujících desek (PiFace Digital, Intellisys PIO, UniPi) ze systému REX musíme nainstalovat ovladač systému REX pro Raspberry Pi, což provedeme z příkazové řádky pomocí příkazu sudo apt-get install rex-rpidrvt 1.4.1 Pouze pro kartu PiFace Digital Pro použití přídavné karty PiFace Digital je dále potřeba povolit použití sběrnice SPI a natáhnout příslušný modul jádra. Povolení SPI nejnovější firmware (kernel 3.18) V editoru nano otevřete soubor /boot/config.txt sudo nano /boot/config.txt Na jeho konec přidejte řádku dtparam=spi=on Soubor uložte stisknutím Ctrl+X, pak Y a pak Enter. Restartujte vaše Raspberry Pi. sudo reboot Povolení SPI starší firmware (kernel <3.18) V editoru nano otevřete soubor /etc/modprobe.d/raspi-blacklist.conf. sudo nano /etc/modprobe.d/raspi-blacklist.conf V něm pomocí symbolu # zakomentujte řádek "blacklist spi-bcm2708". Soubor uložte stisknutím Ctrl+X, pak Y a pak Enter. Aby se modul pro sběrnici SPI natáhl automaticky při startu, přidáme jej do souboru /etc/modules, opět pomocí editoru nano. Tedy sudo nano /etc/modules 3
Na konec souboru přidáme řádku spi-bcm2708 Soubor uložte stisknutím Ctrl+X, pak Y a pak Enter. Restartujte Raspberry Pi. sudo reboot 1.4.2 Pouze pro kartu UniPi Pro použití přídavné karty UniPi je dále potřeba povolit použití sběrnice I2C a natáhnout příslušný modul jádra. Povolení I2C nejnovější firmware (kernel 3.18) V editoru nano otevřete soubor /boot/config.txt sudo nano /boot/config.txt Na jeho konec přidejte řádku dtparam=i2c=on Soubor uložte stisknutím Ctrl+X, pak Y a pak Enter. Pokračujte natažením modulů jádra, viz dále. Povolení I2C starší firmware (kernel <3.18) V editoru nano otevřete soubor /etc/modprobe.d/raspi-blacklist.conf. sudo nano /etc/modprobe.d/raspi-blacklist.conf V něm pomocí symbolu # zakomentujte řádek "blacklist i2c-bcm2708". Soubor uložte stisknutím Ctrl+X, pak Y a pak Enter. Natažení modulů jádra Aby se modul pro sběrnici I2C natáhl automaticky při startu, přidáme jej do souboru /etc/modules, opět pomocí editoru nano. Tedy sudo nano /etc/modules Na konec souboru přidáme řádku i2c-dev Pokud z nějakého důvodu používáte starší firmware (kernel <3.18), přidejte ještě řádku i2c-bcm2708 4
Soubor uložte stisknutím Ctrl+X, pak Y a pak Enter. Restartujte Raspberry Pi. sudo reboot 5
Kapitola 2 Zařazení ovladače do projektu aplikace Zařazení ovladače do projektu aplikace spočívá v přidání ovladače do hlavního souboru projektu a z připojení vstupů a výstupů ovladače v řídicích algoritmech. 2.1 Přidání ovladače RPiDrv do projektu Přidání ovladače RPiDrv do hlavního souboru projektu je znázorněno na obr. 2.1. Pro zařazení ovladače do projektu slouží dva bloky. Nejprve je na výstup Modules bloku exekutivy EXEC připojen blok typu MODULE s názvem RPiDrv, který nemá žádné další parametry. Druhý blok typu IODRV pojmenovaný RPI (nebo PIO pro desku Intellisys PIO či UNP pro desku UniPi) musí být připojen na výstup exekutivy Drivers a mít nastaveny tři nejdůležitější parametry: module jméno modulu, ke kterému se ovladač váže, v tomto případě RPiDrv POZOR, jméno rozlišuje velká a malá písmena! classname jméno třídy ovladače, pro GPIO piny a kartu PiFace Digital je to RPiDrv, pro kartu Intellisys PIO je to PioDrv, pro desku UniPi je to UnpDrv POZOR, jméno rozlišuje velká a malá písmena! cfgname jméno konfiguračního souboru ovladače, který však pro tento ovladač není potřeba Jménem tohoto bloku, na obr. 2.1 zadaným jako RPI, začínají názvy všech vstupních a výstupních signálů poskytovaných tímto ovladačem. Právě popsané parametry bloku IODRV se konfigurují v programu RexDraw v dialogovém okně, které je rovněž ukázáno na obrázku 2.1. 6
Obrázek 2.1: Příklad zařazení ovladače RPiDrv do projektu aplikace 2.2 Připojení vstupů a výstupů do řídicího algoritmu Vstupy a výstupy z ovladače se umísťují do jednotlivých úloh projektu (souborů s příponou.mdl). Na tyto úlohy vedou z hlavního souboru projektu odkazy ve formě bloků typu TASK nebo QTASK připojovaných na výstupy QTask, Level0,..., Level3 hlavního konfiguračního bloku exekutivy (blok EXEC). 2.2.1 GPIO piny Raspberry Pi Pro připojení vstupů a výstupů z ovladače RPiDrv do řídicího systému REX lze použít bloky, znázorněné na obr. 2.2. Jeden blok typu From sloužící pro připojení jednoho vstupu má parametr Goto tag roven RPI GPIO21U, druhý RPI GPIO22U. Číslo ve vlajce odpovídá číslu použitého GPIO pinu, písmeno U aktivuje pull-up rezistor. Blok typu Goto používaný pro připojení jednoho výstupu má hodnotu parametru Goto tag rovnu RPI GPIO23, další výstup je realizován pomocí vlajky RPI GPIO24. Bloky mají vždy přímo na začátku svého jména 7
Obrázek 2.2: Příklady použití vstupně-výstupních bloků s ovladačem RPiDrv prefix RPI následovaný dvěma znaky _ (podtržítko). Obdobně pro další piny bychom použili například vlajky: Goto, RPI GPIO22 digitální výstup 22 Goto, RPI GPIO23H digitální výstup 23, který je okamžitě při inicializaci nastaven na logickou 1 (HIGH, ON) Goto, RPI PWM18 PWM výstup na pinu 18 From, RPI GPIO7U digitální vstup 7 s interním pull-up rezistorem From, RPI GPIO8D digitální vstup 8 s interním pull-down rezistorem From, RPI GPIO21 digitální vstup 21 bez pull up/down rezistoru Napojení na GPIO pin se tedy skládá ze jména driveru RPI, dvou podtržítek, režimu pinu (GPIO nebo PWM), čísla pinu a volitelného symbolu u vstupů pro interní pull-up (U) nebo pull-down (D) rezistor, u výstupů pro nastavení počátečního stavu (H = on = 1 nebo L = off = 0). Číslování pinů na Raspberry Pi REVISION 2 ukazuje obrázek 2.2 Pro detailnější informace o jednotlivých pinech navštivte stránku http://elinux.org/rpi_low-level_peripherals. 8
Modely A a B, rev.2 Modely A+, B+ a RPi2 Obrázek 2.3: Číslování GPIO pinů na Raspberry Pi 2.2.2 Rozšiřující deska PiFace Digital V případě použití rozšiřující karty PiFace Digital je potřeba pouze drobně upravit pojmenování vstupních a výstupních vlajek, místo GPIO se ve jménech vstupních signálů objevuje PFI a u výstupů PFO, tak jak je ukázáno na obrázku 2.5. Narozdíl od GPIO pinů Raspberry Pi má deska PiFace Digital na svých vstupech pouze pull-up rezistory, které mohou být aktivovány pomocí volitelného symbolu U ve jméně signálu. Číslování svorek na přídavné kartě PiFace Digital ukazuje obrázek 2.5. Ovladač také umožňuje získávat/nastavovat všech 8 vstupů či výstupů PiFace Digital najednou, což je z hlediska rychlosti vykonávání algoritmu výhodnější. V takovém případě se využijí bloky osminásobných vstupů a výstupů INOCT a OUTOCT, jejichž jména musí být RPI PFI respektive RPI PFO. 9
Obrázek 2.4: Vstupně-výstupní bloky při použití PiFace Digital Použití více karet PiFace Digital najednou V základním nastavení se předpokládá, že adresa karty PiFace Digital je nastavena na 0. Pokud tomu tak není, musí být adresa zanesena do vstupních/výstupních vlajek. Např. RPI PFO3C2 odkazuje na čtvrtý výstup karty PiFace Digital s adresou 2. Příklady konfigurací Všechny vstupní a výstupní vlajky ovladače jsou připraveny v souboru RPI_flags.mdl, který je součástí instalátoru vývojových nástrojů systému REX. Tento soubor se standardně nachází v adresáři C:\Program Files\REX Controls\REX_<version>\EXAMPLES\IODRV\RPI_Example 10
Obrázek 2.5: Číslování svorek přídavné karty PiFace Digital 11
2.2.3 Rozšiřující deska Intellisys PIO Jak už bylo zmíněno, v případě použití rozšiřující karty Intellisys PIO je potřeba nastavit v konfiguraci ovladače parametr classname = PioDrv a tento konfigurační blok typu IODRV by měl být přejmenován na PIO. Následně lze přistupovat k jednotlivým signálům pomocí vlajek, které respektují označení a číslování svorek na desce PIO, tak jak jsou ukázány na obrázku 2.6. Konkrétně jsou k dispozici následující vlajky: Typ vlajky Řetězec Význam Zpracování Goto PIO DO1 relé 1 Goto PIO DO2 relé 2 Goto PIO AO1 analogový napěťový výstup 1, 0... 10 V 40 ms Goto PIO AO2 analogový napěťový výstup 2, 0... 10 V 40 ms Goto PIO LED_GREEN1 LED 1 na desce (zelená) Goto PIO LED_GREEN2 LED 2 na desce (zelená) Goto PIO LED_RED LED 5 na desce (červená) From PIO DI1 digitální vstup 1 From PIO DI2 digitální vstup 2 From PIO DI3 digitální vstup 3 From PIO DI4 digitální vstup 4 From PIO SW1 tlačítko SW1 na desce From PIO UI1V univ. vstup 1, napěťový režim, 0... 10 V 67 ms From PIO UI1C univ. vstup 1, proudový režim, 0... 20 ma 67 ms From PIO UI1T univ. vstup 1, čidlo NTC 10k, -20... 110 C 267 ms From PIO UI1R univ. vstup 1, měření rezistoru, 500Ω... 95kΩ 267 ms From PIO UI1D univ. vstup 1, režim digitálního vstupu 5 ms From PIO UI2V univ. vstup 2, napěťový režim, 0... 10 V 67 ms From PIO UI2C univ. vstup 2, proudový režim, 0... 20 ma 67 ms From PIO UI2T univ. vstup 2, čidlo NTC 10k, -20... 110 C 267 ms From PIO UI2R univ. vstup 2, měření rezistoru, 500Ω... 95kΩ 267 ms From PIO UI2D univ. vstup 2, režim digitálního vstupu 5 ms INOCT PIO RTC čtení času z RTC čipu OUTOCT PIO RTC_WRITE nastavení času do RTC čipu INHEXD PIO DATA čtení dat z perzistentní paměti OUTOCT PIO DATA_WRITE ukládání dat do perzistentní paměti Příklady konfigurací Všechny vstupní a výstupní vlajky ovladače jsou připraveny v souboru RPI_flags_PIO.mdl, standardně v adresáři C:\Program Files\REX Controls\REX_<version>\EXAMPLES\IODRV\PIO_Example 12
NC C NO NC C NO AO1 GND AO2 GND DO1 RELAY 1 DO1 RELAY 2 +12 DI1 DI2 DI3 DI4 GND +12 UI1 UI2 GND Obrázek 2.6: Označení a číslování svorek přídavné karty Intellisys PIO 13
2.2.4 Rozšiřující deska UniPi Jak už bylo zmíněno, v případě použití rozšiřující desky UniPi je potřeba nastavit v konfiguraci ovladače parametr classname = UnpDrv a tento konfigurační blok typu IODRV by měl být přejmenován na UNP. Následně lze přistupovat k jednotlivým signálům pomocí vlajek, které respektují označení a číslování svorek na desce UniPi, tak jak jsou ukázány na obrázku 2.6. Konkrétně jsou k dispozici následující vlajky: Typ vlajky Řetězec Význam Zpracování Goto UNP RLY1 relé 1 Goto UNP RLY2 relé 2 Goto UNP RLY3 relé 3......... Goto UNP RLY8 relé 8 OUTOCT UNP RLY relé 1... 8 Goto UNP AO analogový napěťový výstup viz sekce 2.2.4 Goto UNP AO1X PWM, 0... 1023 viz sekce 2.2.4 From UNP I01 digitální vstup 1 From UNP I02 digitální vstup 2 From UNP I03 digitální vstup 3......... From UNP I12 digitální vstup 12 From UNP AI1 AI1, 0... 10 V, 16-bit 67 ms From UNP AIA1 AI1 asynchronní, 0... 10 V, 16-bit asynchronní From UNP AI2 AI2, 0... 10 V, 16-bit 67 ms From UNP AIA2 AI2 asynchronní, 0... 10 V, 16-bit asynchronní From UNP AI1V12 AI1, 0... 10 V, 12-bit 5 ms From UNP AI1X18 AI1, data přímo z ADC, 18-bit 267 ms From UNP AIA2V14 AI2 asynchronní, 0... 10 V, 14-bit asynchronní From UNP AIA2X18G2 AI2 asynchronní, 18-bit, zesílení 2 asynchronní......... INOCT UNP RTC čtení času z RTC čipu OUTOCT UNP RTC_WRITE nastavení času do RTC čipu INHEXD UNP DATA čtení dat z perzistentní paměti OUTOCT UNP DATA_WRITE ukládání dat do perzistentní paměti Konfigurace analogových vstupů Asynchronní režim analogových vstupů použijte, když je vzorkovací perioda kratší než čas potřebný ke zpracování analogových signálů. Synchronní režim naopak použijte vždy, když je vzorkovací perioda nízká (T S > 1s). Podporované přesnosti A/D převodníku jsou: 12, 14, 16 a 18-bit. 14
Podporovaná vnitřní zesílení (PGA) jsou: 1, 2, 4 a 8. Konfigurace analogového výstupu Před použitím analogového výstupu důkladně prostudujte dokumentaci desky UniPi [4]. Analogový výstup se nejčastěji používá tak, že na svorku referenčního napětí AOV se přivede 12V ze samotné desky UniPi a pomocí trimru se nastaví maximální hodnota výstupního napětí na 10V, čímž získáme pracovní rozsah analogového výstupu 0... 10V. UniPi v1.1 Pro maximální hodnotu analogového výstupu pošlete na vlajku UNP AO hodnotu 10 a pomocí trimru R49 upravte napětí na výstupu AO na 10V. Následně je možno použít rozsah 0..10, čemuž bude odpovídat výstupní napětí ve voltech. Pokud potřebujete přímo ovládat PWM výstup, kterým je ovládán analogový výstup AO, použijte vlajku UNP AO1X a rozsah 0..1023. Tuto vlajku je možné využít pro přesnou kalibraci analogového výstupu, společně s funkčním blokem CNDR (podrobnosti naleznete v referenční příručce [6]). UniPi v1.0 Pokud používáte původní verzi desky UniPi v1.0, naleznete informace o použití analogového výstupu v příloze A. Reléová rozšiřující karta Reléová rozšiřující karta EMO-R-8 je rovněž podpořena. Vlajky pro ovládání jednotlivých relé jsou podobné jako pro relé přímo na desce UniPi, pouze je potřeba přidat I2C adresu zařízení, která se nastavuje pomocí jumperů A0-A2 na reléové desce. Rozsah přípustných adres je 32... 39, hexadecimálně 0x20... 0x27, přičemž adresa 32 (0x20) je rezervována pro interní čip desky UniPi. Pro ovládání jednotlivých relé tedy použijte např. následující vlajky: Typ vlajky Řetězec Význam I2C adresa desky Goto UNP RLY1_A33 relé 1 33, hexadecimálně 0x21 Goto UNP RLY2_A0x21 relé 2 33, hexadecimálně 0x21 Goto UNP RLY3_A39 relé 3 39, hexadecimálně 0x27......... Goto UNP RLY8_A0x27 relé 8 39, hexadecimálně 0x27 OUTOCT UNP RLY_A33 relé 1... 8 33, hexadecimálně 0x21 OUTOCT UNP RLY_A0x27 relé 1... 8 39, hexadecimálně 0x27 Jak je vidět z tabulky, I2C adresa může být zadána v desítkové nebo šestnáctkové soustavě. Vždy se však musí shodovat s nastavením jumperů na reléové desce. Příklady konfigurací Všechny vstupní a výstupní vlajky ovladače jsou připraveny v souboru RPI_flags_UNP.mdl, který je součástí instalátoru vývojových nástrojů systému REX. Tento soubor se stan- 15
Obrázek 2.7: Detailní zobrazení a popis desky UniPi dardně nachází v adresáři C:\Program Files\REX Controls\REX_<version>\EXAMPLES\IODRV\UNP_Example 1-Wire čidla a aktuátory Rozšiřující deska UniPi podporuje také sběrnici 1-Wire, má na sobě I2C čip DS2482100 s adresou 0x18. Aby bylo možné používat 1-Wire čidla a aktuátory přímo z řídicího algoritmu, je potřeba nainstalovat ovladač 1-Wire pro systém REX [7]. 16
Kapitola 3 Co dělat při problémech V případě, že v diagnostických prostředcích systému REX, např. v programu RexView jsou neočekávané nebo nesprávné hodnoty vstupů nebo výstupů, je vhodné nejdříve ověřit jejich funkci nezávisle na systému REX. Dále je nutné překontrolovat konfiguraci. Nejčastější chyby jsou: Chyba v hardware - špatné zapojení Použitý (nakonfigurovaný) GPIO pin je používán jiným zařízením (SPI sběrnice, I2C sběrnice, sériová linka) nebo programem V případě, že daný vstup či výstup funguje pomocí jiných softwarových nástrojů správně a při shodném zapojení v systému REX nefunguje, prosíme o zaslání informace o problému emailem na adresu podpora@rexcontrols.cz. Pro co nejrychlejší vyřešení problému by informace by měla obsahovat: Identifikační údaje Vaší instalace vyexportované pomocí programu RexView (Target Licence Export). Stručný a výstižný popis problému. Co možná nejvíce zjednodušenou konfiguraci řídicího systému REX, ve které se problém vyskytuje (ve formátu souboru s příponou.mdl). 17
Příloha A Analogový výstup na UniPi v1.0 Na původní a nyní již nedostupné verzi desky UniPi v1.0 byl analogový výstup řešen jinak než na aktuální verzi v1.1, jeho původní popis je zachován v této příloze. Na UniPi v1.0 pošlete pro maximální hodnotu analogového výstupu na vlajku UNP AO hodnotu 100 a pomocí trimru R48 upravte napětí na výstupu AO na 10V. Vlajka UNP AO je určena pouze pro nejčastější případ použití, kdy referenční napětí AOV je 12V ze samotné desky UniPi. Výstupní hodnoty z algoritmu (0... 100%) jsou interně převedeny na PWM (na pinu GPIO18) dle tabulky A.1. V případě, že potřebujete použít jiné referenční napětí nebo rozsah výstupu (např. 0... 5V), použijte vlajku AO1X, pomocí které můžete přímo ovládat PWM výstup Raspberry Pi, kterým je ovládán analogový výstup AO. Pozor však na nelinearitu a obrácenou logiku signálu, viz tabulka výše. Pro realizaci vlastní převodní tabulky je doporučeno použít funkční blok CNDR, podrobnosti naleznete v referenční příručce [6]. 18
Platí pouze pro UniPi v1.0 Hodnota z algoritmu řízení [%] Hodnota PWM Výstupní napětí [V] 1,05 1023 0,11 1,06 1000 0,11 1,40 500 0,14 1,78 330 0,18 2,14 300 0,21 3,36 280 0,34 6,80 260 0,68 12,46 240 1,25 18,80 220 1,88 25,45 200 2,54 32,36 180 3,24 39,44 160 3,94 46,69 140 4,67 54,08 120 5,41 61,57 100 6,16 67,27 85 6,73 73,01 70 7,30 78,02 57 7,80 83,43 43 8,34 88,84 29 8,88 94,26 15 9,43 100,00 0 10,00 Tabulka A.1: Převodní tabulka pro analogový výstup na původní desce UniPi v1.0 19
Literatura [1] The Raspberry Pi Foundation. Raspberry Pi. http://www.raspberrypi.org, 2013. [2] University of Manchester. PiFace Digital Interface. http://www.piface.org.uk, 2013. [3] Intellisys S.r.l. PIO programmable input-output interface. http://www.intellisys.it, 2014. [4] Faster CZ s.r.o. Universal Raspberry Pi add-on board. http://www.unipi.technology, 2014. [5] REX Controls s.r.o.. Začínáme se systémem REX na platformě Raspberry Pi, 2013. [6] REX Controls s.r.o.. Funkční bloky systému REX Referenční příručka, 2013. [7] REX Controls s.r.o.. Ovladač OwsDrv systému REX pro 1-Wire zařízení Uživatelská příručka, 2013. Referenční číslo dokumentace: 5386 20