Jednotka pro řízení pohybu s FPGA a operačním systémem RT Linux
Roman Bartosinski, Pavel Píša
Článek popisuje univerzální modul pro systém PC/104. Modul je určen pro řízení pohybu současně až čtyř pohonů vybavených inkrementálními snímači polohy. Jádrem jednotky je programovatelné logické pole (FPGA), které rovněž může zajišťovat obsluhu rozhraní sběrnic CAN a Profibus pro připojení dalších zařízení. V programovatelném poli lze implementovat procesorové jádro, a tak může celý modul pracovat samostatně bez základní desky PC/104. Navržené řešení umožňuje měnit funkce programovatelného pole za běhu z nadřazeného počítače PC/104, což zvyšuje flexibilitu modulu.
1. Úvod
V současné době jsou pro řízení stále častěji používány osobní počítače, především pro výhodný poměr mezi výkonem a pořizovacími náklady. Díky jejich výkonu je možné využívat výpočetně složitější řídicí algoritmy než v menších mikroprocesorových systémech.
Vzhledem ke svým rozměrům je standardní PC v mnoha aplikacích nepoužitelné, především ve vestavných (embedded) systémech. Jako vhodná alternativa založená na standardním PC byla vytvořena architektura PC/104. Základní modul PC/104 je vlastně kompaktní verze PC se sběrnicí ISA, jenž je optimalizován pro vestavné systémy. Standard PC/104 definovalo konsorcium průmyslových firem PC/104 Embedded Consortium [1]. Charakteristické vlastnosti komponent PC/104 jsou:
- velikost základní desky a modulů redukovaná na 90 × 96 mm,
- softwarová kompatibilita se standardním PC,
- samonosná průchozí sběrnice pro připojení přídavných modulů,
- přídavné moduly s osmi- nebo šestnáctibitovou datovou sběrnicí.
Rozšiřující moduly PC/104 vyrábí mnoho firem pro různé účely. Komerčně vyráběné moduly pro řízení pohonů jsou specializovány pouze pro řízení jednoho typu pohonu na jednom modulu (např. krokový motor, bezkartáčový motor, třífázový motor atd.) [2]. Při použití více typů pohonů v jedné aplikaci musí být proto použito více modulů. Každý modul může být od jiného výrobce, a tak spolu jednotlivé moduly, např. při koordinovaném pohybu v několika osách, komunikují přes společnou sběrnici PC/104. Řídicí algoritmus ovšem musí být vykonáván v hlavním procesoru. Standard PC/104 také omezuje počet modulů, které lze sběrnicí propojit, na čtyři.
2. Požadavky na vyvíjenou jednotku PC/104
Výchozí mechanické rozměry navrženého modulu jsou dány standardem PC/104. Naším nejdůležitějším požadavkem byla univerzálnost modulu, tj. možnost připojovat k němu různé typy pohonů. Je nutné, aby modul umožňoval řízení jednotlivých pohonů současně, tak aby byl možný koordinovaný pohyb ve všech řízených osách. Pro každý pohon musí být možné připojit k modulu inkrementální snímač polohy, jehož data musí být modul schopen zpracovat.
Měla by také existovat možnost připojit k modulu další senzory. Pro snížení množství vodičů a pro snadnější propojování senzorů a systémů od různých dodavatelů jsou moderní průmyslové senzory vybaveny rozhraním pro přenos údajů prostřednictvím provozních sběrnic. My jsme se rozhodli pro CAN a Profibus, které patří mezi nejčastěji používané.
3. Hardwarové řešení navrženého modulu
Na obr. 1 je blokové schéma navrženého řešení, které je založeno na použití programovatelného logického pole (FPGA, Field Programmable Gate Array).
Obr. 1. Blokové schéma navržené jednotky (IRC – inkrementální rotační snímač polohy od firmy LARM, a. s.; lze použít i jiné inkrementální snímače)
Zjednodušeně lze FPGA popsat jako pole konfigurovatelných logických bloků (CLB, Configurable Logic Block). Každý blok obsahuje kombinační logiku, registr a multiplexory. Kromě těchto bloků jsou v FPGA také vstupně-výstupní bloky (IOB, Input-Output Block), konfigurovatelné propojovací matice a propojení jednotlivých bloků. Běžně jsou součástí FPGA bloky pamětí, násobiček, popř. i hardwarových jader mikroprocesorů.
Požadovaná funkce FPGA je dána nastavením použitých bloků a jejich propojením. Toto nastavení generují vývojové nástroje podle zadaného funkčního popisu. Konfiguraci FPGA lze kdykoliv změnit, výhodou je tudíž flexibilita a univerzálnost modulu. Jednotlivé funkce běží v FPGA paralelně. To lze využít pro nezávislé řízení každého pohonu zvlášť nebo pro rychlé řízení koordinovaného pohybu.
Při výběru vhodného obvodu jsme se zaměřili na nabídku firem Xilinx a Altera, protože jejich obvody jsou nejvíce rozšířeny, lze je snadno konfigurovat z nadřazeného systému a vyrábějí se ve velkém rozsahu počtu logických buněk. Vzhledem k našim předchozím zkušenostem jsme zvolili FPGA od firmy Xilinx ze skupiny Spartan2E XC2S300E [3] (na obr. 1 červeně). Vybrané programovatelné pole má dostatečnou kapacitu (obsahuje 6 912 logických buněk) pro základní i komplexnější řídicí algoritmy i pro základní obsluhu sběrnic CAN a Profibus. Do tohoto FPGA může být nakonfigurováno také procesorové jádro; v tom případě se část FPGA chová jako procesor, který může využívat zbytek FPGA např. pro periferie. Vybrané FPGA pojme různá procesorová jádra od volně dostupného jádra x51 až po jádro 32bitového RISC procesoru Xilinx MicroBlaze. Při takto nakonfigurovaném FPGA a s použitím externí paměti může jednotka pracovat samostatně bez systému PC/104 např. jako rychlá verze standardní řídicí jednotky. Zvolený typ FPGA je vyráběn v pouzdru několika typů. Vzhledem k omezeným rozměrům jednotky PC/104 bychom měli zvolit co nejmenší pouzdro – tedy pouzdro s vývody v podobě matice kuliček pod pouzdrem (BGA, Ball Grid Array). To je ovšem náročné na osazení a nepraktické pro vývoj a testování. Proto jsme použili větší plastové pouzdro s vývody po stranách (PQFP, Plastic Quad Flat Pack).
Při výrobě FPGA se využívají nemodernější technologie integrovaných obvodů, takže se rozměry hradel v FPGA zmenšují, a proto musí být používáno stále nižší provozní napětí obvodů (3,3 V, 2,5 V, 1,8 V). Tím se také musí snižovat možné napětí na signálech jdoucích do FPGA, a tak mohou být k FPGA připojeny pouze součástky nízkonapěťových standardů (LVTTL, LVCMOS, PCI, AGP atd.). Vybraný typ FPGA je určen pro napěťový standard LVTTL, zatímco sběrnice PC/104 pro napěťový standard TTL. Proto nemůže být FPGA připojeno přímo na PC/104, ale musí mezi nimi být převodník úrovní.
V takových případech se k napěťovému oddělení sběrnice obvykle používají LVTTL budiče sběrnice se vstupy tolerantními k úrovním TTL. Pro dosažení větší flexibility jednotky a zároveň pro vyloučení dalších obvodů pro řízení budičů jsme použili ještě jednu programovatelnou součástku (CPLD, Complex Programmable Logic Device). Ta kromě funkce napěťového oddělení sběrnice PC/104 zajišťuje i řízení přístupu ze sběrnice PC/104 do vnitřní sběrnice jednotky, která propojuje FPGA, paměť a přes CPLD sběrnici PC/104. V CPLD je také nastaveno připojení sběrnice PC/104, výběr žádosti o přerušení IRQ (Interrupt Request Line), přístupu do paměti DMA (Direct Memory Access) a adresy. Protože je konfigurace CPLD uložena v paměti typu flash, zůstává konfigurace zachována i po odpojení napájení. Nastavení sběrnice lze programově měnit ze systému PC/104. V navrženém řešení jsme použili CPLD firmy Xilinx XC95144XL, které je pro naše účely nejvhodnější (v obr. 1 zeleně).
Pro zvětšení datového toku jsme na jednotce použili paměť typu SRAM (Static RAM) s kapacitou 16 Mb, která je připojena k FPGA přes interní sběrnice (mj. šestnáctibitovou datovou sběrnici). Díky tomu mohou funkce v FPGA využívat tuto paměť pro uložení a zpracování dat (např. naměřené a vypočítané hodnoty, nastavení atd.) nebo jako paměť programu pro mikroprocesor implementovaný v FPGA. Protože funkce v FPGA mohou využívat paměť SRAM namísto přistupování k datům přes společnou systémovou sběrnici PC/104, mohou algoritmy pracovat rychleji. Připojení interní sběrnice ke sběrnici PC/104 přes CPLD poskytuje také ostatním modulům PC/104 možnost tuto paměť využívat.
Na blokovém schématu jednotky (obr. 1) je zobrazena také paměť EEPROM (Electrically Erasable PROM). FPGA uchovává svoji konfiguraci v paměti typu RAM, a proto je nutné obvod po připojení k napájení vždy konfigurovat. To lze udělat buď programově ze systému prostřednictvím PC/104 nebo právě z připojené paměti EEPROM, kde jsou konfigurační data uložena. Takovou jednotku je potom možné použít samostatně, bez dalších částí systému PC/104.
Pro připojení dalších senzorů a zařízení k jednotce jsou navrženy tři porty. Dva porty jsou pro sběrnici CAN a jeden pro RS-485/Profibus (na obr. 1 modře). Všechny tři porty jsou galvanicky odděleny od zbytku jednotky. Pro galvanické oddělení jsou použity rychlé optoelektronické členy firmy Agilent s rychlostí až 25 Mb/s [4]. Tato rychlost je dostačující pro obě rozhraní. Jednotlivé budiče jsou připojeny přes optočleny přímo k FPGA, a jejich řízení je tedy určeno konfigurací FPGA. Díky tomu je možná kontrola rozhraní v FPGA z jiného modulu systému PC/104 nebo částečné řízení z FPGA i z dalšího modulu systému PC/104.
Podle specifikovaných požadavků je důležitou součástí jednotky rozhraní pro inkrementální snímače polohy. Pro každý pohon je navržen jeden port pro snímač s dvěma obdélníkovými výstupy posunutými o půl periody (použít lze např. snímače IRC vyráběné firmou LARM, a. s.). Snímač je připojen přes RS-422 do čtyřnásobného rozdílového přijímače, který konvertuje rozdílové signály na signály LVTTL. Ty jsou dále připojeny do FPGA, kde jsou dekódovány a zpracovány. Jednotlivé čítače jsou vytvořeny jako funkce v FPGA, takže každý čítač může mít rozdílný rozsah, jejž lze i dynamicky změnit.
Jednotka je navržena pro řízení čtyř pohonů, každý se čtyřmi řídicími signály a dvěma výstupními signály. Šest signálů je dostatečný počet pro většinu běžných pohonů. Všechny signály jsou přímo připojeny do FPGA, takže lze měnit jejich funkci i směr změnou konfigurace FPGA. Toto řešení umožňuje připojit i atypické pohony a snímače s různým počtem signálů. Z tohoto důvodu a také pro omezenou velikost jednotky nemají signály galvanické oddělení ani nejsou zakončeny výkonovou elektroniku. To může být pro řídicí FPGA potenciálně nebezpečné.
Všechny zbylé signály FPGA jsou vyvedeny na jeden společný konektor a jsou určeny k univerzálnímu použití. Mohou např. vytvářet samostatné sběrnice mezi několika jednotkami s FPGA. Takové propojení dovoluje řídit více než čtyři pohony současně. Zároveň tato sběrnice umožňuje přímou spolupráci jednotlivých funkcí v několika FPGA, popř. rozdělení složitější funkce do několika FPGA.
Obr. 2. Rozmístění konektorů a základních součástek
Jedním z konektorů je rozhraní JTAG (Joint Test Action Group) Dává jedinou možnost, jak nahrát konfiguraci do paměti EEPROM a nakonfigurovat funkci do obvodu CPLD, a může být také použito ke konfiguraci FPGA.
Jednotka je navržena na čtyřvrstvé desce plošných spojů. Ve standardu PC/104 je určeno umístění konektorů PC/104, velikosti a umístění oblastí s přesahem a rozměry desky. Rozmístění hlavních součástek a konektorů je zobrazeno na obr. 2. Celý modul je napájen 5 V ze sběrnice PC/104. Protože ale většina součástek potřebuje nižší napájecí napětí, jsou na jednotce dva step-down spínané zdroje; jeden s výstupním napětím 1,8 V pro napájení jádra FPGA, druhý s výstupním napětím 3,3 V spolu se vstupy a výstupy FPGA napájí všechny ostatní součástky.
4. Programové vybavení CPLD a FPGA
Programové vybavení zde představuje konfigurační řetězce, které jsou implementací požadovaných funkcí jednotlivých obvodů. Funkce FPGA a CPLD může být popsána svým chováním v některém z jazyků HDL (Hardware Description Language), např. VHDL nebo Verilog. Dalšími cestami jsou nakreslení logického schématu požadované funkce nebo použití jazyka vyšší úrovně, např. Synopsys SystemC nebo Celoxica Handle-C. Handle-C je jazyk založený na jazyku ANSI-C, přičemž jsou přidány konstrukce pro přímé generování popisu hardwaru ze zdrojového kódu. Kód v Handle-C tak může být zkompilován do jazyka VHDL. V některých případech lze použít Xilinx System Generator (XSG), nástroj určený pro Matlab a Simulink (od firmy Mathworks). Funkce FPGA je potom složena z jednotlivých bloků XSG a následně přeložena do VHDL.
Konfigurační řetězec pro FPGA a CPLD firmy Xilinx může být vytvořen také z logického popisu pouze pomocí nástrojů Xilinx Integrated Software Environment (Xilinx ISE). Pro některé typy FPGA a CPLD existuje volně šířená verze těchto nástrojů – mohou jí být naprogramována i FPGA a CPLD použitá ve zde popsaném řešení; to snižuje náklady na jeho vývoj.
Protože CPLD obstarává připojení jednotky k PC/104, a konfigurační řetězec CPLD tak obsahuje nastavení připojení, tj. IRQ, DMA a adresní prostor, musí být CPLD nakonfigurováno před připojením jednotky na sběrnici PC/104, jinak může jednotka způsobit konflikty s dalšími moduly PC/104. Hodnoty připojení k PC/104 mohou být programově změněny z hlavní desky. Zatímco CPLD a EEPROM nepřicházejí o konfiguraci při vypnutí napájení, FPGA musí být konfigurováno pokaždé znovu, buď přes rozhraní JTAG, nebo z paměti EEPROM, nebo přes osmibitovou paralelní sběrnici přes CPLD ze sběrnice PC/104. Poslední uvedená varianta umožňuje měnit konfiguraci FPGA za provozu. To zvyšuje univerzálnost a hlavně flexibilitu jednotky. Rozhraní JTAG a paralelní rozhraní dovolují také přečíst konfiguraci z FPGA, např. pro její kontrolu.
5. Možnosti použití jednotky
Jednotka je navržena pro řízení různých typů pohonů s pulsní šířkovou modulací (Pulse Width Modulation – PWM), používaných často v robotice a automatizaci. Jak bylo uvedeno, šest řídicích a snímacích signálů pro každý pohon je pro většinu druhů pohonů dostatečný počet, ale ve speciálních případech lze použít i více signálů. Například stejnosměrný motor řízený plným můstkem a PWM může další signály využít pro signalizaci nadproudu v motoru. Na obr. 3 jsou ukázány některé příklady připojení pohonů.
Obr. 3. Příklady připojení různých pohonů k jednotce
Vzhledem k omezeným mechanickým rozměrům je jednotka navržena k současnému řízení pouze čtyř pohonů. Pohyb více os může být vzájemně koordinován. Jednotlivé moduly mohou být propojeny přímo mezi FPGA až třiceti signály, jak je zobrazeno na obr. 4. To je výhodné, je-li třeba řídit více pohonů. Lze sice použít několik jednotek propojených sběrnicí PC/104, ale v takovém případě musí koordinovaný pohyb řídit hlavní procesor a veškerá komunikace pro zajištění synchronizace je přenášena přes sběrnici PC/104, což negativně ovlivňuje dobu odezvy.
Deska umožňuje v omezené míře číst konfiguraci FPGA nejen přes JTAG, ale i prostřednictvím PC/104. Tuto možnost lze využít pro vytvoření systému odolného proti chybám (fault-tolerant system). V takovém systému může hlavní počítač číst a kontrolovat konfiguraci FPGA a při výskytu chyby logické pole znovu nakonfigurovat.
6. Výběr operačního systému
S rychlejším řízením lze realizovat složitější řídicí algoritmy a plánovače trajektorie a tím dosáhnout lepší koordinace při pohybu ve více osách. Pro rychlejší řízení je zapotřebí kratší doba odezvy jednotky. Zároveň ale nemůže být celý algoritmus v FPGA, jehož kapacita je omezená. Proto mohou být některé zpětné vazby s pomalým vzorkováním a složitější nelineární funkce realizovány programově v hlavním procesoru PC/104.
Tyto požadavky je nutné splnit např. při řízení redundantních paralelních mechanických soustav, které vyvíjejí naši partneři v projektu GAČR. Požadované složité řídicí algoritmy jsou vyvíjeny ve spolupráci několika partnerů moderními vývojovými nástroji (Matlab, Simulink, Real-Time Workshop a speciální desky PowerPC pro vývoj aplikací se signálovým procesorem – DSP). Ovšem ani takové systémy nejsou nejvhodnější pro řízení složitějších plošných a prostorových struktur.
Obr. 4. Přímé propojení mezi několika jednotkami
Použití FPGA a speciálních rychlých aritmetik implementovaných v FPGA může zvýšit výkonnost řídicího obvodu, a proto také chceme přesunout vývoj řídicích algoritmů pro řízení pohybu na popisovaný modul. To vyžaduje použití rychlého operačního systému na hlavní procesorové jednotce (CPU) PC/104. Obyčejné RT (real-time) systémy nemohou bezpečně zajistit paralelní běh hlavní řídicí smyčky s dalšími nutnými procesy reálného času pro získávání dat, plánování a výpočty, které se běžně vyskytují v reálných číslicově řízených (NC) strojích:
- čtení souboru s daty pro NC stroj,
- korekce trajektorie respektující opotřebení nástroje,
- potlačení tepelných roztažností součástí,
- grafické uživatelské rozhraní operátorského panelu,
- vizualizace tvaru výrobku.
Vhodnou alternativou pro RT systém, který je hardwarově i softwarově náročný, je kombinace linuxového systému s RT rozšířením. Maximální doby odezvy standardního linuxového systému mohou být větší než 10 ms, ale mnoho aplikací používá RT Linux se vzorkovací frekvencí nad 10 kHz. Vývoj algoritmů pro RT Linux může být urychlen, jsou-li vyvíjeny v simulačním prostředí Matlab – Simulink, protože existuje podpora převodu RTW Target (Real Time Workshop) pro RT Linux [5]. Díky tomu, že Linux je systém často používaný v rozsáhlých sítích (internet) a v mnoha případech se na infrastruktuře těchto sítí podílí, je takový systém vhodný pro dálkovou obsluhu. Linux též poskytuje kvalitní základ a ovladače pro běh grafických uživatelských rozhraní a dalších časově méně kritických (soft real-time) procesů. RT Linux pak zajišťuje prioritní plánovač s časování pro běh časově kritických úloh a řídicích algoritmů.
Katedra, na níž byl modul vyvinut, je spoluúčastníkem projektu OCERA, zaměřeného na vylepšení RT linuxového systému na nízké úrovni a na vývoj komponent pro průmyslové sběrnice. Při vývoji modulu byly využity i výsledky tohoto projektu.
7. Závěr
Jednotka prezentovaná v tomto článku je navržena podle standardu PC/104 pro vestavné systémy. Hlavní funkcí jednotky je řízení až čtyř pohonů s inkrementálními snímači. Jádrem modulu je programovatelné hradlové pole, proto je jednotka schopna současně řídit různé typy pohonů s různým počtem řídicích a snímacích signálů. Z tohoto důvodu jednotka neobsahuje galvanické oddělení vstupů a výstupů ani výkonovou elektroniku, která bude na specializovaných modulech podle typu pohonu.
Použité hradlové pole může být nakonfigurováno přes rozhraní JTAG, z externí paměti nebo ze systému PC/104. V posledním případě lze FPGA konfigurovat za běhu, což zvyšuje flexibilitu modulu. Hradlové pole může také zastávat další funkce místo hlavního procesoru PC/104 a zároveň mohou být funkce vykonány s kratší časovou odezvou než při řízení hlavním procesorem PC/104. V FPGA může být implementováno i celé mikroprocesorové jádro, které spolu s externí pamětí SRAM umožňuje samostatné fungování i bez systému PC/104.
Jednotka obsahuje i dvě rozhraní sběrnice – CAN a Profibus, které jsou určeny především pro připojení dalších snímačů a zařízení. Všechny porty sběrnic je možné ovládat a monitorovat jak z FPGA, tak z nadřazeného systému PC/104.
Pro dosažení kvalitnějšího řízení s kratší časovou odezvou plánujeme použít operační systém RT Linux jako operační systém základní desky PC/104. Navíc budou rychlé části algoritmů implementovány v FPGA; tím se pro tyto části ještě více zkrátí doba odezvy.
Další práce na tomto projektu je zaměřena na vývoj a testování jednotlivých funkcí pro FPGA, tak aby mohla být jednotka použita pro řízení pohybu v dalších aplikacích.
Literatura:
[1] PC/104 Embedded Consortium: PC/104 Specification [online]. Poslední revize 2004-06-13 [cit. 2004-02-16]. Dostupné z: http://www.pc104.org/technology/pc104_tech.html
[2] Arrick Publishing: The PC104 Supplier Link Page [online]. [cit. 2004-02-17]. Dostupné z: http://www.pc104.com
[3] Xilinx: Spartan-IIE 1.8V FPGA Family: Complete Data Sheet [online]. Poslední revize 2003-02-14 [cit. 2004-02-16]. Dostupné z: http://direct.xilinx.com/bvdocs/publications/ds077.pdf
[4] Agilent Technologies: HCPL-0720 40 ns Propagation Delay CMOS Optocouplers [online]. cc2002, poslední revize 2002-07-24. Dostupné z: http://cp.literature.agilent.com/litweb/pdf/5988-7443EN.pdf
[5] GARCIA, R. M.: Simulink Target for RT Linux [online]. Poslední revize 2003-09-26 [cit. 2004-03-13]. Dostupné z http://www.sesd.gcal.ac.uk/raulm/St-rtl.htm
Ing. Roman Bartosinski, Ing. Pavel Píša,
katedra řídicí techniky, Fakulta elektrotechnická,
České vysoké učení technické v Praze
(bartosr@control.felk.cvut.cz, pisa@cmp.felk.cvut.cz)
Ing. Roman Bartosinski (1978) se jako postgraduální student na katedře řídicí techniky Fakulty elektrotechnické ČVUT zabývá implementací algoritmů v FPGA a embedded systémy.
Ing. Pavel Píša (1971) je vědeckým pracovníkem na katedře řídicí techniky Fakulty elektrotechnické ČVUT se zaměřením na vývoj a programování embedded a real-time aplikací.
|