Számításigényes projektek megoldása a ShieldBuddy segítségével
Contributed By DigiKey's North American Editors
2020-07-08
Sok hobbista, építő és barkácsoló használ Arduino mikroszámítógép-fejlesztő kártyákat projektjeik felügyeletére és vezérlésére. Ugyanígy egyre több hivatásos mérnök is, akik a fejlesztés felgyorsítására és az integrált áramkörök (IC-k), érzékelők és perifériák kiértékeléséhez kapcsolódó költségek csökkentésére alkalmazhatják őket kiértékelő és prototípuskészítő platformként. Amint azt a Használjon Arduino beépítőkártyákat érzékelők és perifériák gyors kiértékeléséhez című írásban tárgyaltuk, előfordulhat, hogy ezek a mérnökök kisebb csapatokban dolgoznak, szorosabb piacra jutási idő (TTM) mellett. Ezért több mérnöki területet és feladatot kell lefedniük, miközben meg kell találniuk a módját annak, hogy felgyorsítsák és csökkentsék az alkatrészek kiértékelésének költségeit.
Az egyik megoldás Arduino eszközök és nyílt forráskódú hardverek használata érzékelők és perifériák kifejtő kártyái (breakout board, BOB) formájában, a kapcsolódó könyvtárakkal és példaprogramokkal rendelkező nyílt forráskódú szoftverekkel együtt. Bár igen széles választék áll rendelkezésre Arduino kártyákból a különböző feldolgozási és memóriaigények kielégítésére, egyes számítások a fő processzor lelassulásának elkerülése érdekében mégis jobban elvégezhetők lebegőpontos egységgel (FPU). Ezt a problémát az Arduino rendszeren belül a ShieldBuddy oldotta meg.
Ez a cikk a különböző Arduino platformokat ismerteti, valamint azt, hogy az FPU képesség miért olyan fontos számos alkalmazás számára. Ezután bemutatja a ShieldBuddy-t, egy olyan kártyát, amely az Arduino kártyákhoz hasonló fizikai alapterületű, de három független 32 bites feldolgozómaggal rendelkezik, amelyek mindegyike 200 MHz-en fut, és mindegyik saját FPU-val is rendelkezik. A cikk ismerteti az eszköz programozási modelljét, valamint bemutatja, hogy az Eclipse alapú programozási környezet és az Arduino integrált fejlesztőkörnyezetének (IDE) támogatása hogyan teszi lehetővé a barkácsolók és a tervezők számára egyaránt a használat gyors megkezdését.
Arduino kezdőknek és profiknak is
Az Arduino univerzumba újonnan belépők általában az Arduino Uno Rev3-mal kezdik (1. ábra), amely a 8 bites, 16 MHz-en működő ATmega328P mikrovezérlőre épül. Ez a kártya mindössze 32 kilobájt flash (program) memóriával, 2 kilobájt SRAM memóriával, 14 digitális be-/kimenettel (I/O) és hat analóg bemenettel rendelkezik. A digitális lábak közül hat impulzusszélesség-modulációs (PWM) kimenet biztosítására képes, és az analóg lábak szükség esetén digitális I/O lábakként is használhatók.
1. ábra: Az Arduino Uno Rev3 fejlesztőkártya a 16 MHz-en működő 8 bites ATmega328P mikrovezérlőre épül. (Kép: Arduino.cc).
Az Arduino Uno Rev3 14 digitális I/O lábat, 6 analóg bemeneti lábat, valamint különböző táp-, föld- és referencialábakat tartalmazó csatlakozófelülete az alapja a modulok (shield-ek) formájában elérhető kiegészítő kártyák óriási rendszerének.
Az Uno Rev3 sok felhasználója később áttér az Arduino Mega 2560 Rev3 kártyára (2. ábra), amely a 16 MHz-en működő 8 bites ATmega2560 mikrovezérlőre épül. Ez a kártya 256 kilobájt flash memóriával és 8 kilobájt SRAM memóriával rendelkezik. Csatlakozófelülete ugyanazokat a modulokat támogatja, mint az Uno, azonban a további csatlakozók lehetővé teszik rajta 54 digitális I/O láb és 16 analóg bemeneti láb elhelyezését. Ebben az esetben a digitális lábak közül 15 PWM kimenetet biztosítására képes, és ennél is, szükség esetén az analóg lábak digitális I/O lábakként is használhatók.
2. ábra: Az Arduino Mega 2560 Rev3 fejlesztőkártya a 16 MHz-en működő 8 bites ATmega2560 mikrovezérlőre épül. Csatlakozófelülete ugyanazokat a modulokat támogatja, mint az Arduino Uno, azonban további csatlakozókkal együtt összesen 54 digitális I/O lábbal és 16 analóg bemeneti lábbal rendelkezik. (Kép: Arduino)
A 8 bites adatútvonal és a 16 MHz-es órajel miatti korlátozások mellett sem az Arduino Uno, sem az Arduino Mega mikrovezérlők nem tartalmaznak FPU-t, ami azt jelenti, hogy a lebegőpontos értékeket tartalmazó számítások drámai mértékben lelassítják ezeket a processzorokat.
A még nagyobb feldolgozási teljesítményt igénylő felhasználók számára a következő lépcsőfok az Arduino Due (3. ábra), amely hasonló fizikai helyigényű, mint az Arduino Mega, de a 32 bites Atmel/Microchip Technology SAM3X8E Arm® Cortex®-M3 processzorra épül, amely 84 MHz-en működik. Ez a kártya 512 kilobájt flash memóriával, 96 kilobájt SRAM memóriával, 54 digitális I/O lábbal, 12 analóg bemeneti lábbal és két analóg kimeneti lábbal rendelkezik, amelyeket digitális-analóg átalakítók (DAC) vezérelnek. Ebben az esetben a digitális lábak közül csupán 12 képes PWM kimenet biztosítására, és ismételten, szükség esetén az analóg lábak digitális I/O lábakként is használhatók. Sajnos az Arduino Uno és Mega processzorához hasonlóan az Arduino Due processzora sem tartalmaz FPU-t.
3. ábra: Az Arduino Due fejlesztőkártya a 84 MHz-en működő 32 bites SAM3X8E Arm Cortex- M3 mikrovezérlőre épül. Csatlakozófelülete ugyanaz, mint az Arduino Mega esetében. (Kép: Arduino.cc)
Sok felhasználó – hobbista és profi egyaránt – nagy örömére szolgál, hogy az Arduino Mega és az Arduino Due fejlesztőkártyák magas lábszámmal rendelkeznek. De még az Arduino Due 32 bites, 84 MHz-en futó processzora is elégtelen lehet egyes számításigényes feladatokhoz. Hasonlóképpen, a Due 512 kilobájt flash memóriája és 96 kilobájt SRAM-ja sem elegendő a nagyobb adatmennyiséggel dolgozó programokhoz.
Miközben a mikrovezérlők egyre nagyobb adatmennyiségek feldolgozására képesek, egyes számítások végrehajtása a nagyobb hatékonyság és a kisebb késleltetés miatt FPU-kkal jobban megvalósítható.
Mik azok az FPU-k és miért van rájuk szükség?
Az FPU-k hasznosságának oka arra vezethető vissza, hogy hogyan kezelik a számítógépek a számokat. A számok számítógépen belüli ábrázolásának legegyszerűbb módja az egész számok (racionális egész számok) használata. Továbbá, a számítások egész számokkal történő elvégzése számítási szempontból kevésbé igényes. Az egész számok azonban véges természetűek, és nem képesek széles dinamikatartományt leképezni.
Ez probléma a mérnökök és tudósok számára, mivel gyakran kell rendkívül nagy és kis értékeket is használniuk ugyanabban a számításban. Például a fizikusok számításaiban előfordulhat a fénysebesség (300000000) és Newton gravitációs állandójának (0,000000000000006674) számértéke is. Hasonlóképpen, a mérnököknek nagy dinamikatartományú értékekre van szükségük olyan feladatokhoz, mint a digitális jelfeldolgozás (DSP), valamint a mesterséges intelligenciás (AI) és a gépi tanulási (ML) alkalmazásokban való felhasználás.
A megoldás a lebegőpontos numerikus ábrázolás, ahol a tizedesvessző „lebeghet” a szám egyes számjegyeihez képest, így finomabb numerikus „felbontás” érhető el. A probléma az, hogy bár egy 32 bites lebegőpontos érték ugyanannyi memóriát használ, mint egy fixpontos 32 bites egész szám, a lebegőpontos értékekkel végzett számítások elvégzése lényegesen több számítási erőforrást igényel.
Ha a processzornak a lebegőpontos számításokat szabványos fixpontos hardverrel kell elvégeznie, az eredmény drámai hatással lesz a processzor teljesítményére. A megoldás az, hogy a processzort egy speciális FPU-val látják el. Ez lehetővé teszi a kifinomult lebegőpontos műveletek nagyon kevés órajelciklus felhasználásával történő végrehajtását.
Itt jön a képbe a ShieldBuddy.
A ShieldBuddy FPU-kat és nagy teljesítményt hoz be az Arduino rendszerbe
Az Arduino-kompatibilis környezet viszonylag új szereplőjeként az Infineon Technologies KITAURIXTC275ARDSBTOBO1, vagy ShieldBuddy (4. ábra) nevű eszköze az Infineon TC275T64F200WDCKXUMA1 TC275 AURIX TC2xx TriCore 32 bites mikrovezérlőjéhez készült beágyazott kiértékelő kártya.
4. ábra: A ShieldBuddy TC275 az Infineon TC275 32 bites többmagos processzorral van felszerelve egy olyan kártyán, amelynek alapterülete azonos az Arduino Mega és az Arduino Due kártyákéval, így kompatibilis a rendelkezésre álló számos shield-el.(Kép: Hitex.com)
Az Arduino Mega és Arduino Due modellekhez hasonló fizikai alapterületű ShieldBuddy kompatibilis számos alkalmazásmodullal, de megkülönböztethető azáltal, hogy a TC275-öt használja, amely három független 32 bites magot tartalmaz, ezek mindegyike 200 MHz-en fut és saját FPU-val rendelkezik. Továbbá a ShieldBuddy 4 megabájt flash memóriával rendelkezik (8-szoros az Arduino Due és 16-szoros az Arduino Mega memóriájához képest), valamint 500 kilobájt RAM-mal (5-szörös az Arduino Due és 62-szeres az Arduino Mega memóriájához képest).
Ez úgy is értelmezhető, hogy az Arduino Mega magja µs-onként csak körülbelül tizenhat 8 bites utasítást kezel. Összehasonlításképpen a TC275 minden egyes magja 5 ns-os ciklusidővel rendelkezik, ami azt jelenti, hogy mindegyik mag jellemzően 150-200 32 bites utasítás végrehajtására képes µs-onként. Mivel a ShieldBuddy processzormagjainak mindegyike saját FPU-val rendelkezik, a kártya képes lebegőpontos számításokat végezni, miközben teljesítménye alig, vagy egyáltalán nem romlik.
Fejlesztés a ShieldBuddy segítségével
A ShieldBuddy-val való munka során a professzionális szoftverfejlesztők az Eclipse IDE-t, míg a hobbisták és a készítők a jól ismert Arduino IDE-t használhatják. Mindkét lehetőség támogatott.
Az Arduino felhasználói ismerik azt a tényt, hogy minden skiccnek (programnak) tartalmaznia kell két szabványos függvényt, ezek a setup(), amely egyszer fut le, és a loop(), amely újra és újra lefut. A felhasználók saját funkciókat is létrehozhatnak.
A ShieldBuddy három magját Core 0-nak, Core 1-nek és Core 2-nek nevezik. Az Arduino IDE esetében a legtöbb meglévő skicc módosítás nélkül lefordítható a ShieldBuddy-n való használatra. Alapértelmezés szerint a setup() és a loop() függvények – és az általuk meghívott, felhasználó által létrehozott függvények – lefordítása a Core 0-n való futásra történik.
Új program készítésekor a felhasználó ugyanezt a hatást érheti el, ha a függvényeket setup0() és loop0() függvényeknek nevezi el. A felhasználó létrehozhat setup1() és loop1() függvényeket is, amelyek lefordítása – az általuk meghívott, felhasználó által létrehozott függvényekkel együtt – automatikusan a Core-1-en való futásra történik. Hasonlóképpen a setup2() és a loop2() függvények, illetve az általuk meghívott, létrehozott függvények lefordítása úgy valósul meg, hogy a Core 2-n fussanak.
Alapértelmezés szerint minden mag egymástól függetlenül működik, ami azt jelenti, hogy a ShieldBuddy-n egyszerre három teljesen különálló program is futhat. A magok továbbá egymással is kommunikálhatnak, például megosztott memória segítségével. Ezenkívül minden mag képes lágy megszakításokat kiváltani a többi magban.
Összegzés
A nyílt forráskódú Arduino koncepció rendkívül sikeresnek bizonyult, és a belőlük létrejött hardveres és szoftveres rendszerek több száz modult, illetve több ezer könyvtárat és alkalmazást foglalnak magukban.
Bár a korai Arduino fejlesztőkártyák, mint a 8 bites, 16 MHz-es Arduino Uno és Arduino Mega némileg korlátozottak voltak, az újabb implementációk, például a 32 bites, 84 MHz-es Arduino Due, jelentősen nagyobb teljesítményűek. Sok felhasználónak azonban több programhelyre (flash), több adathelyre (SRAM) és nagyobb feldolgozási teljesítményre van szüksége, mint amennyit egy hagyományos Arduino nyújtani tud.
A ShieldBuddy 4 megabájt flash memóriával, 500 kilobájt SRAM memóriával és három független, saját FPU-val rendelkező, 200 MHz-en futó 32 bites processzormaggal teljesen új szintre emeli az Arduino koncepciót, amely így az extrém barkácsolók és a professzionális mérnökök számára egyaránt érdekes lehet.
Ajánlott olvasnivaló:
- Teaching Electronics to Absolute Beginners (Elektronika tanítása abszolút kezdőknek)
- Quickly and Easily Apply FPGAs with the Arduino MKR Vidor 4000 (FPGA-k gyors és egyszerű alkalmazása az Arduino MKR Vidor 4000 segítségével)
- Join the Maker World with an Easy-to-Use Arduino Starter Kit (Csatlakozzon a Maker World-höz egy könnyen használható Arduino Starter Kit segítségével)
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




