Skip to main content

Új MCU generáció: könnyebb tervezés, több funkció, kevesebb fogyasztás

Megjelent: 2017. október 26.

01 abraMicrochipA hordozható, teleptáplálású rendszerek „Achilles-sarka” a hosszú újratöltés nélküli üzemidő megvalósítása kis méretben. A klasszikus módszer: mindent kikapcsolni, amit csak lehet. Azonban – amint a szerző is rámutat – az újgenerációs, nyolcbites, magfüggetlen perifériákkal „felturbózott” mikrovezérlőkkel számos más, a 32 bites „erőgépeket” is felülmúló megoldás is kínálkozik.

Bevezetés

A hordozható, teleptáplálású alkalmazások népszerűségének megnövekedése arra készteti a fejlesztőket, hogy egyre több funkcionalitást építsenek be egyre kisebb formafaktorú tokozatokba. Ez a funkcióbővülés – különösképpen a vezetékmentes kommunikáció belépése – egyre nagyobb igényeket támaszt a rendszert ellátó energiaforrás iránt. A kihívást így is meg lehet fogalmazni: hogyan valósíthatjuk meg a megkívánt rendszerszolgáltatásokat úgy, hogy közben az elem újratöltés nélküli üzemideje növekedjék. A legutóbbi idők fejlődése a mikrovezérlők (MCU-k) funkcionalitásában – különféle integrált szolgáltatások és perifériák megjelenését is beleértve – azt az eredményt hozta, hogy a beágyazott megoldások energiafogyasztás-menedzsmentje „okosabb” és könnyebben megvalósítható lett. Ezek az MCU-k egyben jobb tervezési eljárások alkalmazását is lehetővé tették.

Több funkció, kevesebb fogyasztással

Abban az esetben, ha az olvasó még nem vette volna észre, megjegyezzük: minden, ami körülvesz minket, egyre „okosabbá” válik, és ezek a „dolgok” egyre inkább összekapcsolódva végzik tevékenységüket. Már a cipőnkben is lehet olyan szenzor, amely képes megmondani, hogyan tehetjük kellemesebbé és hatékonyabbá a kocogással töltött időnket, az adatokat az okostelefonunk képernyőjén megjelenítve. A személymérleg a mért súlyadatokat automatikusan feltölti a felhőben futó, a testi állapotunkat követő alkalmazásba, és alkalmasint tudatja velünk, hogy az utolsó sütit megenni már nem volt jó ötlet – és a figyelmeztetést ugyancsak az okostelefon juttatja el a felhasználóhoz. Az otthonunk biztonsági rendszere szöveges üzenetben tudathatja velünk, hogy megfeledkeztünk a vízforralóról, és mindezt annak a kis vezetékmentes szenzornak köszönhetjük, amelyet mellette helyeztünk el.
A hordozható, teleptáplálású alkalmazások népszerűsége exponenciálisan növekszik az idők folyamán kidolgozott technológiai újításoknak köszönhetően. A mérnökökre komoly nyomás nehezedik, hogy az egymást követő termékgenerációk egyre több funkcionalitást valósítsanak meg egyre kisebb méretben. Ezek a többletképességek egyre nagyobb követelmények elé állítják a rendszer energiaellátását. A kihívás egyre inkább abban nyilvánul meg, hogyan lehet ezeket az új funkciókat úgy megvalósítani, hogy megnövekedjen az elem újratöltés nélküli üzemideje, és csökkenjenek a méretek.

A klasszikus megközelítés: az alvó üzemmód

A teleptáplálású alkalmazástervezés hagyományos válasza erre a kérdésre az, hogy olyan sok modult kell alvó állapotban tartani és olyan hosszú ideig, amennyit és ameddig csak lehetséges, amiből csak alkalmilag ébresztjük fel őket a megkívánt feladat végrehajtására, majd újra visszaküldjük azokat az alvó állapotba. Egy számos MCU-t és mikroprocesszort tartalmazó, összetett rendszerben gyakran használnak „rendszerfelügyelőként” egy kis kivezetésszámú, nyolcbites MCU-t, amely ellátja az olyan „háztartási” funkciókat, mint a modulok ki- és bekapcsolása szükség szerint, a teljes rendszer energiahatékonyságának maximalizálása érdekében. Azonban továbbra is az a jellemző, hogy a rendszer egyetlen fő MCU-t tartalmaz, amely integrált perifériáival valósítja meg a rendszerfunkciókat. Az MCU energiafogyasztása mindenképpen kritikus paraméter. Viszont nem minden MCU képes ezt ugyanazon a szinten ellátni. Ez az a tulajdonság, amelyben – sok esetben – egy nyolcbites MCU „túlteljesítheti” egy 32 bites eszköz képességeit. Néhány 8 bites MCU mindössze 20 nA-t fogyaszt a legkisebb teljesítményfogyasztású állapotban, miközben a 32 biteseké ennél a legjobb esetben is 10...20-szor több.
Egy MCU alvó állapotból történő felébresztésének számos módja létezik. Általánosan használt módszer például az MCU integrált időzítőinek használata a rendszer felébresztésére.
Az időzítőt lehet úgy konfigurálni, hogy programmegszakítást kezdeményezzen az időzítőszámláló túlcsordulásakor. Egy 16 bites időzítő egy 1:8 arányú előosztóval, a belső, kis fogyasztású, 31 kHz-es oszcillátoráról vagy külső kristályoszcillátorról futtatva a rendszert akár 17 másodpercig is képes alvó állapotában tartani. Egy másik lehetőség az MCU watchdog[1]-időzítője (Watchdog Timer – WDT) használata, amely kiválóan alkalmas akár 256 másodperces alvó állapot fenntartására, miközben csupán 440 nA-t fogyaszt. (Megismételjük: egy WDT-vel felszerelt 32 bites MCU legalább háromszor annyit fogyaszt, mint egy nyolcbites.)

Vegyünk egy alkalmazást, amit nem szükséges gyakran felébreszteni – ilyen például egy környezetmonitor, amelyet nagyjából négyóránként ébresztünk fel a légnedvesség-szenzor adatának kioldására, majd újra visszakapcsoljuk alvó állapotba. Ez vajon azt jelenti, hogy ennél gyakrabban kell felébreszteni a belső időzítő korlátozott időkésleltető képessége miatt? Nem szükségszerűen. Az egyik lehetőség egy saját rezgőkvarccal működő valós idejű óra (Real time Clock – RTC) használata, amely precíz időzítést tesz lehetővé órákra, napokra, hónapokra, sőt, akár évekre előre is, ha épp erre van szükség. Mivel nem minden MCU tartalmaz integrált RTC-t, ezért – gyakran költségmegfontolásból – különálló RTC használatát is érdemes megfontolni.

Magfüggetlen perifériák

Egy másik megoldási lehetőség is van arra, hogy külső alkatrészek és a teljesítményfelvétel megnövekedésének „büntetése” nélkül megnövelhessük a processzor tétlen állapotának időtartamát. Ehhez azokat a különleges perifériákat használhatjuk, amelyek néhány újgenerációs, nyolcbites mikrovezérlőben (például a Microchip PIC® sorozatú MCU-iban) megtalálhatók. Például a tervezők összekapcsolhatnak egyet az ilyen mikrovezérlőkben található konfigurálható logikai cellák (Configurable Logic Cell – CLC) közül az ugyancsak integrált kivitelű digitálisan vezérelt oszcillátorral (Numerically Controlled Oscillator – NCO) és egy 16 bites integrált időzítővel. Ez a konfiguráció az alvóperiódus 17 másodperces maximális idejét akár 205 napra is kiterjesztheti, mielőtt az MCU-t felébresztő programmegszakítást generálná (1. ábra). Természetesen ritka az az alkalmazás, amelyben ilyen hosszú időtartamú tétlen periódusokkal kellene számolni, de a lehetőség megvan és szükség esetén felhasználható.

 

01 abraMicrochip

1. ábra Egy nyolcbites mikrovezérlő magfüggetlen perifériáival további külső alkatrészek és többlet-teljesítményfelvétel nélkül lehet a processzor tétlen időtartamát akár 205 napra is kiterjeszteni


Ha egy beépített, kis fogyasztású (31 kHz-es) oszcillátort alkalmazunk az előbb vázolt összetett időzítő órajel-generátoraként, a legalacsonyabb költségű megoldást érhetjük el. Azonban ennek az áramfelvételét további 50%-kal (nagyjából 2,3 µA-re) is csökkenthetjük alig magasabb költséggel, ha egy külső, 32 kHz-es kristályoszcillátor kimenetét kapcsoljuk a processzor másodlagos órajel-bemenetére (Secondary Oscillator – SOSC).
A mikrovezérlő felébresztésére az időzítőn kívül más – külső – forrásból (például kapcsolóból vagy szenzorból) származó vezérlőjelet is felhasználhatunk. A nagyobb konfigurációjú MCU-k vagy processzorok közül több is rendelkezik több, prioritásszintekkel megkülönböztetett megszakításbemenettel, de ezek a képességek gyakran nem találhatók meg a piacon fellelhető, kis kivezetésszámú mikrovezérlőknél. Emlékszik az olvasó a konfigurálható logikai modulra (CLC), amelyet az előző példánkban arra használtunk, hogy meghosszabbítsuk vele az időzítő késleltetési időtartamát? A CLC nem csak erre használható, hanem arra is, hogy további megszakítás-bemeneteket állítson elő, még ha az MCU csak egyetlen, rendszerszintű INT bemenettel rendelkezik is. A CLC arra is lehetőséget ad a tervezőnek, hogy kombinációs vagy szekvenciális logikai hardverrel támogassa az MCU-t felébresztő rutint, amely ezáltal úgy lesz „okosabb”, hogy nem jár az áramfelvétel növekedésével. Ha a rendszer több jelet igényel, amelyek egy-egy specifikus állapothoz vannak rendelve annak érdekében, hogy felébresszék a processzort az adott feltétel ellenőrzésére, az gyakran csak egyetlen jelváltozásra „ébred fel”, és ekkor kezd hozzá, hogy azonosítsa, vajon milyen ok váltotta ki az ébresztő programmegszakítást. A CLC-t – vagy akár több CLC-modult együttesen is – fel lehet arra használni, hogy kombinációs logikai hálózatként vagy állapotgépként konfigurálva specifikus ébresztési feltételeket ismerjen fel, illetve segítsen kiszűrni a hamis megszakításjeleket és az ezzel járó felesleges ébresztéseket a szükségtelen többlet-energiafelvétel elkerülése érdekében.
Az eszköz felébresztésének időtartama jelentős részét képezheti egy periodikus ébresztéseken alapuló alkalmazás teljes futásidejének. Míg egy nyolcbites MCU-nál ez a belső óragenerátor 3…5 órajelciklusát veszi igénybe (ami 200 ns…1 µs közötti időt jelent), egy 32 bites architektúránál, amely a „mélyalvás” módszerét használja a szivárgóáram miatti energiaveszteség minimalizálására, akár többször 10 µs-ot is igénybe vehet, ami részben vagy egészben semmivé teheti mindazt az előnyt, amit a felébresztés utáni gyorsabb programfutás kínál a felhasználónak. Hiába szeretnénk mindent a processzor alvó üzemmódjában elintézni, bizonyos feladatokat csak a processzor aktív üzemmódjában végeztethetünk el, amikor az MCU processzormagjának fogyasztása messze meghaladja az összes többi modul együttes energiaigényét. És ez az a pont, ahol a dolgok kicsit „trükkössé” válhatnak. A 2. ábra a rendszer áramfelvételének egyszerűsített időfüggvényét mutatja. Az áramfogyasztási görbe alatti terület azt a töltést mutatja Coulombban (1 Cb = 1 As) kifejezve. Ha az alvó üzemmód szakaszát mutató görbe alatti terület sokkal nagyobb, mint amit az aktív üzemmódnál látunk, akkor az alvó állapotú áramfelvétel a kritikusabb, mivel az energiafogyasztás jelentősebb része keletkezik a kis áramfelvételű üzemmód időtartama alatt. És fordítva, ha az aktív üzemmód görbéje alatti terület a jelentősen nagyobb, akkor az alvóáram értéke és az alvó állapotban töltött idő érdektelenné válik.

 

02 abraMicrochip

2. ábra Egy mikrovezérlő áramfelvételének időfüggvénye


A vezetékmentes kommunikációt (például Wi-Fi®-t vagy Bluetooth® LE-t) is használó alkalmazások tervezése különösen nagy kihívást jelent az energiafogyasztás csökkentése szempontjából. Az ilyen rendszerek fejlesztőinek számításba kell vennie, mekkora az adni vagy venni szándékozott adat mennyisége, mivel ezek közvetlen hatást gyakorolnak a teljes áramfelvételre. A vezetékmentes modulokat lehet „beacon”[2] üzemmódban is használni, amelyek periodikusan felébredve jelet keresnek, vagy készenléti állapotba kapcsolódnak, ha éppen nincsenek használatban.
Az ilyen vezetékmentes rendszerekben az MCU utasítás-végrehajtási sebessége valójában érdektelen, mivel az alkalmazás a legtöbbet az I/O-műveletekkel foglalkozik, ám a mikrovezérlő felébredési ideje jelentős hatással van az alkalmazás energiafelvételi profiljára, mivel meghosszabbítja a 10…20 mA áramfelvételű rádióáramkör bekapcsolási idejét, amely domináns szereplője az alkalmazás energiaháztartásának.
Az analóg érzékelők jelének feldolgozása az MCU integrált AD-konverterének használatát igényli. Tipikus, hogy az ADC mintavételi ideje a konverziós időnél sokkal hosszabb. Minél többet tölt a rendszer aktív állapotban, annál nagyobb az áramfogyasztás. Van viszont néhány olyan MCU-típus, amelynél az ADC-modul konverziója a processzormag alvó állapotában is lehetséges. Ez azáltal takarít meg energiát, hogy minimálisra csökkenti a processzormag aktív állapotban töltött idejét.
Néhány MCU-modellben a kis fogyasztású, aktív üzemmódok széles választékát valósították meg. Ezek lehetővé teszik, hogy kikapcsoljuk, vagy csökkentett sebességgel futtassuk a processzormagot, miközben az integrált perifériák futási sebességét továbbra is az aktív állapotra jellemző rendszer-órajel határozza meg.
Gyakran halljuk azt az állítást, hogy „minél nagyobb a processzormag számítási teljesítménye, annál gyorsabb a feladatok végrehajtása, tehát annál hamarabb térhet vissza az alvó állapotába”. Miközben ez akár igaz is lehet néhány esetben, az állítás logikája hibás. Emlékeztetnünk kell arra, hogy a processzormag többet fogyaszt, mint a mikrovezérlő bármelyik másik modulja. Ráadásul mindazok a feladatok, amelyeket a processzormag hajt végre egymás után, FIFO[3]-elven kerülnek feldolgozásra, a sebességre való tekintet nélkül. Következésképpen a processzormagot addig nem lehet kikapcsolni, míg az utolsó feladat is végre nincs hajtva. Ha viszont a mikrovezérlő képes az általa végrehajtandó feladatoknak legalább egy részét párhuzamosan feldolgozni – a processzormagtól függetlenül működni képes integrált perifériákat felhasználva –, ez a processzormag végrehajtási sebességét érdektelenné teszi, miközben a teljes rendszer fogyasztása jelentősen csökken. A magfüggetlen perifériák ugyanis teljesen működőképesek, még ha közben a processzormag alvó állapotban van is.
A teleptáplálású alkalmazások tervezése egyre bonyolultabbá válik az általuk megvalósítandó egyre több funkcionalitás miatt. A mérnököknek minden alkatrész és részegység áramfelvételi profilját elemezniük kell és teljesen meg is kell érteniük azokat a különböző teljesítményfelvételi és aktivitási üzemmódokban annak érdekében, hogy a legnagyobb hatékonysággal használhassák fel az elemben tárolt energiát. A magfüggetlen perifériakészlet, amely az újgenerációs nyolcbites mikrovezérlőkben található, lehetővé teszi, hogy a mérnökök kreatívabban készíthessék el készülékeik tervét anélkül, hogy a teljesítőképességük terén kompromisszumokat kellene vállalniuk.

Megjegyzés: a PIC a Microchip Technology Incorporated kereskedelmi védjegye az USA-ban és más országokban. Az összes többi említett védjegy a megfelelő vállalatok tulajdona.

 

Szerző: Jin Xu[4] – üzletfejlesztési igazgató, Microchip Technology


www.microchip.com

Még több Microchip

 


[1] Jobb magyar fordítás híján inkább körülírjuk: a programok helyes futásának ellenőrzésére használt számláló, amelyet a helyesen futó programba írt utasítással időről időre nullázunk, mielőtt túlcsordulhatna. Ha a programfutás helytelen útra téved, esetleg a program „lefagy”, a watchdog-számláló újraindítása elmarad, a számláló túlcsordul, és a megfelelő hardveren keresztül újraindítja a processzort. – A ford. megj.

[2] Nem sikerült szemléletes magyar fordítást találni erre a kifejezésre, ezért inkább körülírjuk: a „beacon” jelentése villogó fényjelet adó torony vagy bója. Erre emlékeztet a „beacon-üzemmódú”, periodikusan bekapcsolódó és eközben a környezetükben megjelenő mozgó vezetékmentes készülékeket felderítő, telepített vezetékmentes készülék működése. – A ford. megj.

[3] FIFO (First In, First Out): „sorban állás”, érkezési sorrendben történő kiszolgálás – A ford. megj.

[4] Üzletfejlesztési igazgató, Microchip Technology Ázsia és Csendes-óceáni régió, MCU8 divízió