Skip to main content

Az összetett tervek egyszerűsítése feladatspecifikus mikrovezérlőkkel

Megjelent: 2022. március 18.

Microchip lidHa egy rendszer elsődleges mikrovezérlőjének feladatait részben egy-egy részműveletre optimalizált, „feladatspecifikus” mikrovezérlőkbe szervezzük ki, nemcsak a főprocesszort tehermentesítjük, de rendszerint egyszerűbbé válik a tervezés folyamata is. Az MCU-ba integrált magfüggetlen perifériák kreatív használatával pedig jelentős anyagköltség és NyÁK-terület takarítható meg.

 


A mai világban egyre gyakoribbá válik a valós idejű operációs rendszert (RTOS) futtató, nagy, 32 bites mikrovezérlők (MCU-k) és mikroprocesszorok (MPU-k) használata. Egy összetett alkalmazást kezelő egyetlen nagy mikrokontroller központi egysége azonban erőforrás-problémákba ütközhet az olyan kis méretű „háztartási feladatok” kezelése miatt, amelyek nem bonyolultak, de időigényesek.
A kisebb eszközök, mint például a 8 és 16 bites MCU-k, felhasználhatók a 32 bites eszköz tehermentesítésére, ami hajtóerőt ad az innovációnak és a fejlesztésnek a mikrokontrollerek kisebb képességű, 8-tól 32 bitesig terjedő tartományában is.
Sok feladat könnyebben kezelhető, ha a 32 bites eszközről e feladatok egy részét olyan alprocesszorokra ruházzuk át, amelyek csak egy vagy két feladatot látnak el, ám ezekhez csak kevés felügyeletet igényelnek. Ez CPU-erőforrásokat szabadít fel a főprocesszoron, ami csökkenti a szoftver bonyolultságát, miközben javítja a teljesítményt és a végrehajtási időt.
Például egy 8 bites MCU-t I/O-bővítő létrehozására is használhatunk. Az I/O-bővítők nem bonyolult eszközök, de a gyakori megszakításkiszolgálás sok processzoridőbe kerül. Ha ezt a feladatot egy, az adott célra szánt MCU-ra bízzuk, a nagyobb eszköz I/O-terhelése és az általa kiszolgált megszakítások száma csökkenthető. Ezenkívül lényeges, hogy az I/O-bővítő funkciókészletét szoftver határozza meg, amely lehetővé teszi annak testreszabását és finomhangolását az adott alkalmazás igényei szerint.
Az I/O-bővítő 8 bites MCU-alapú kialakításának legnagyobb előnye a rugalmasság. Ha az I/O-bővítőt ASIC (feladatspecifikus céláramkör) valósítja meg, annak szolgáltatáskészlete mereven bele van huzalozva az eszközbe, míg az MCU viselkedését az általa végrehajtott szoftver határozza meg. Ez a rugalmasság lehetővé teszi, hogy az MCU-alapú verziót a végső alkalmazás igényeihez igazítsuk.

 

Egy fejlett I/O-bővítő megvalósítása

Egy fejlett I/O-bővítő belső működése keresőtábla- (Look Up Table – LUT) alapú struktúrán alapul. Olvasás vagy írás előtt egy virtuális cím kerül elküldésre. Ez a cím nem közvetlenül hivatkozik a mikrokontroller regisztereire, hanem egy „címfordító” keresőtáblán (1. ábra) keresztül. Ez azt is jelenti, hogy a rendszer a mikrokontroller regisztereiben hardveresen meg nem valósított funkciókkal is transzparensen bővíthető. A táblázat bejegyzései könnyen át is rendezhetők, ha azt a meghatározott alkalmazási cél megkívánja. Ennek a struktúrának az is előnyös tulajdonsága, hogy a keresőtábla segítségével hozzáférési engedélyeket rendelhetünk az egyes I/O-csatornákhoz. Például egy „csak olvasható” regiszter létrehozásához egyszerűen ki kell hagyni a bejegyzést az írási, keresési táblázatból.

 

Mic 1

1. ábra Egy fejlett I/O-bővítő keresőtáblázata

 


Ez a bonyolultabb szerkezet nem szabványos funkciókat is lehetővé tesz. A „MEM OP” funkció például lehetővé teszi, hogy az MCU mentse a memóriába (2. ábra) az általános célú bemeneti és kimeneti (GPIO) egység konfigurációs adatait (3. ábra), vagy visszaállítsa azokat a fordításkor1 érvényes állapotba.

 

Mic 2

2. ábra Konfigurációs adatok tárolása a memóriában

 


Opcionálisan a mikrokontroller beállítható úgy is, hogy bekapcsoláskor betöltse az elmentett beállításokat. Ha ez engedélyezve van, a mikrokontroller megpróbálja betölteni a 0. konfiguráció beállításait. Ha a betöltéskor az ellenőrzőösszeg érvénytelen, akkor az MCU visszatér a fordítási időben definiált, alapértelmezett beállításokhoz. Ha erre a megoldásra nincs szükség, a funkció a szoftverben letiltható.

 

Mic 3

3. ábra A MEM OP funkcionalitásai

 


A mikrovezérlő-alapú megoldás előnye a rendkívüli rugalmassága. A piacon található ASIC-ektől eltérően a mikrovezérlő nem szabványos, a konkrét alkalmazásra kidolgozott funkcionalitásokra is konfigurálható. Egy ilyen alkalmazást fejlesztettek ki például az általános célú PIC16F15244 MCU-családon való futtatásra. Az alkalmazás forráskódja megtalálható a Microchip Discover (discover.microchip.com) és a Github weblapjain.

 

Feszültség-frekvencia átalakító

A feszültség-frekvencia (Voltage-to-Frequency, V/F) átalakító példája azzal demonstrálja a hardverperifériák használatát, hogy olyan „magfüggetlen”2 funkciót valósít meg, amely a szokásos megoldásokban külső integrált áramkörök beépítését igényelné. Ennek a konfigurációnak az egyik legnagyobb előnye, hogy a perifériafunkciót szoftver definiálja, ami megkönnyíti a mintamegoldás módosítását. További előny, hogy a konverter a mikrokontrollerben van megvalósítva, ami csökkenti a szükséges alkatrészek számát és költségét, továbbá az elfoglalt NyÁK-felületet.
Az MCU-alapú megközelítés egyik kihívása, hogy nem teljesít olyan jól, mint az analóg megoldás, mivel a kimenet felbontását alapvetően korlátozza az A/D-konverter (ADC). Névlegesen az ADC 12 bites, de túlmintavételezéssel3 14 bites felbontást is megvalósíthat. Hasonlóképpen, a kimeneti frekvenciát szintetizáló, beépített, numerikusan vezérelt oszcillátor (NCO) is véges felbontású, és ez az ADC által mért értéktől függően jittert4 okozhat a kimeneten.
A feladat megoldásához három, a mikrovezérlőbe épített független perifériaegységet használhatunk fel: egy analóg mintavételezőt, egy kimeneti oszcillátort és egy kitöltési tényezőt meghatározó modult (4. ábra).

 

Mic 4

4. ábra A megoldás tömbvázlata

 

 

Az analóg mintavételező

Az analóg-digitális átalakításért az analóg mintavevő blokk (5. ábra) a felelős. Ahhoz, hogy az eszköz frekvenciahatárai mellett a 100 kHz-es kimeneti frekvencia lehetséges legyen, az ADC úgy van konfigurálva, hogy túlmintavételezzen, azaz több mintát gyűjtsön össze, majd ezek átlagolásával számítson ki egyetlen 14 bites eredményt. Ennek a túlmintavételezésnek a hátránya az eredményhez hozzáadott statisztikai zajtöbblet. A zajt a minták átlagolásával és hiszterézis hozzáadásával kompenzáljuk. A hiszterézis megvalósításához az ADC küszöbérték-megszakítási funkcióját használjuk. (Az egyszerűség kedvéért a mintamegoldásban csak a küszöbérték-megszakítási funkció használatának részleteit ismertetjük.) Amikor az ADC befejezi egy bizonyos mennyiségű minta átlagának kiszámítását, a kapott értéket összehasonlítja a perifériába épített alapérték-regiszter tartalmával. Ha a kettő közötti különbség nagyobb (vagy kisebb) a beállított küszöbértéknél, akkor programmegszakítás keletkezik. A CPU ezt a megszakítást figyelmen kívül hagyja, ugyanakkor az átlagolt túlmintavételezett eredmény közvetlen memória-hozzáféréssel (DMA) átmásolódik az ADC alapjelregiszterébe, amellyel új értéket ad a hiszterézis felezőpontját előíró regiszternek. Ha a jel a küszöbértékeket nem lépi túl, akkor ez a DMA-másolás nem történik meg, és nem kezdeményezi a kimeneti oszcil­látorblokk DMA-jának frissítését sem.

 

Mic 5

5. ábra Az analóg mintavételező blokk megvalósítása

 

 

Kimeneti oszcillátorblokk

Ennek a megoldásnak a kimeneti oszcillá­torblokkja a kívánt kimeneti frekvenciájú órajel generálásáért felel. Ez a kimeneti jel belsőleg kapcsolódik a kitöltésitényező-generátorhoz, amely 50%-os kitöltési tényezőjű jelet hoz létre, de ennek ára az, hogy felére csökkenti az oszcillátorkimenet frekvenciáját. Emiatt a kimeneti oszcillátorblokkal kétszer akkora frekvenciát kell előállítani, mint amit a kimeneten elvárunk.

 

Mic 6

6. ábra A kimeneti oszcillátorblokk felépítése

 


A kimeneti oszcillátorblokk szívét két magfüggetlen NCO periféria (Numerically Controlled Oscillator – numerikusan vezérelt oszcillátor) alkotja. Az NCO1 periféria úgy működik, hogy a bemeneti órajel felfutó élén egy, a periféria konfigurálása során beállított növekményt ad hozzá egy akkumulátorregiszterhez. Az akkumulátor túlcsordulásjele5 adja a periféria kimeneti jelét. (Az NCO működésének részletes magyarázata az adatlapon található.)
Ebben a példában az NCO2 úgy van beállítva, hogy úgy hozza létre a feszültség-frekvencia átalakító működéséhez szükséges frekvenciájú, 12,8 MHz-es bemeneti órajelet, hogy a 14 bites bemeneti adat maximális értékénél éppen 100 kHz-es kimenőjel keletkezzen. Azért használunk 14 bites eredményt, mert az ADC saját 12 bites eredményéből adódó frekvencia nem lenne elég nagy ahhoz, hogy külső órajelforrás nélkül, kizárólag az MCU belső magfüggetlen perifériájára támaszkodva legyen képes generálni a 100 kHz-es kimenetet. Az NCO1 kimeneti frekvenciájának az ADC mérési eredményétől való függését az 1. táblázat szemlélteti.

 

Mic tabla1

1. táblázat A 100 kHz-es feszültség-frekvencia konverter ideális kimeneti frekvenciái (kikapcsolt Watchdog funkciónál)

 


Ha az NCO2 kimeneti frekvenciáját megváltoztatjuk, vagy más frekvenciájú, külső alternatív órajelforrást használunk, az NCO1 kimeneti frekvenciája egy másik tartományra skálázódik át. Például, ha az NCO2 jelfrekvenciáját 1,28 MHz-re csökkentjük, az NCO1 kimeneti frekvenciájának maximális értéke 10 kHz-re változik (lásd a 2. táblázatot).

 

Mic tabla2

2. táblázat A 10 kHz-es feszültség-frekvencia konverter ideális kimeneti frekvenciái (kikapcsolt Watchdog funkciónál)

 

 

Kitöltésitényező-generátor

A megoldás „Kitöltésitényező-generátor” blokkja felelős az 50%-os kitöltési tényezőjű kimenet létrehozásáért. Ez a funkció nem kötelező – az NCO1 kimenete közvetlenül is használható, bár a jel kitöltési tényezője a kimeneti frekvenciától függően erősen változik6.

 

Mic 7

7. ábra A kitöltésitényező-generátor tömbvázlata

 


Ezt a generátort a konfigurálható logikai cellák (Configurable Logic Cell – CLC) egyikével valósítják meg. A CLC-k a diszkrét konfigurálható logika kis blokkjai, hasonlóan egy FPGA (Field Programmable Gate Array) egyetlen cellájához. A CLC-k diszkrét kétszintű logikai kapuhálózatként használhatók, például ÉS-VAGY vagy VAGY-XOR funkciók megvalósítására, illetve átmeneti (latch) tárolóként vagy flipflopként is konfigurálhatók. Ebben a megoldásban a CLC-t JK-flipflopként konfigurálták, alaphelyzetbe állító (reset) bemenettel. A J és K bemenetek logikai 1 (magas) értéken vannak tartva. A kimeneti oszcillátorblokk a flipflop órajelét szolgáltatja. Minden bemeneti órajelimpulzus a kimenet állapováltását okozza, ami – periodikus órajelnél – 50%-os kitöltési tényezőjű jelet generál. Figyelem: a kimeneti oszcillátorblokk frekvenciájának bizonytalansága, jittere befolyásolja a kitöltési tényezőt.
Ha az NCO2 a kimenetén nem produkál (emelkedő vagy csökkenő) jelváltást, akkor az időzítő túlcsordul, és óraimpulzust generál a CLC-nek. Ez teszi a kimeneti frekvenciatartományt alulról korlátossá. Ha ugyanis az NCO2 kimenete 0x000 bemeneti kódnál elérné a DC-t, a Timer6 kimenetén az NCO2 legkisebb, nullától különböző frekvenciájának a felével, 6 Hz frekvenciával jelenik meg a túlcsordulásjel.
A példa megvalósításához a PIC18-Q43 MCU családot választottuk a nagyszámú perifériája miatt. A projekt forráskódja elérhető a Microchip Discover (discover.microchip.com) és a Github oldalon.

 

Összefoglalás

Amíg a nagy teljesítményű mikrokontrollerek és mikroprocesszorok velünk maradnak, a 8 és 16 bites MCU-k felbecsülhetetlen értékű eszközt jelentenek a kicsiny, de speciális feladatok elvégzéséhez. Ezek a feladatok nem feltétlenül bonyolultak, de időigényesek vagy időkritikusak lehetnek. Ezzel nemcsak tehermenetesítik a 32 bites eszközöket, de egyszerűbb és áttekinthetőbb a megvalósítás. Ez javítja a megbízhatóságot, csökkenti a memóriahasználatot és az energiafogyasztást.

 

Jegyzetek

  • 1. A konfigurációs paraméterek alapértelmezett értékei a forráskódban is megadhatók, amely a fordításkor kerül a tárgykódba, de ha nem konstansként, hanem változóként vannak deklarálva, futásidőben is megváltoztathatók.
  • 2. Core Independent Peripheral (CIP), a mikrovezérlőbe integrált periféria, amely a konfigurációs adatok betöltésén vagy módosításán, illetve a CIP által generált megszakítások kiszolgálásán kívül nem igényel CPU-felügyeletet.
  • 3. Az „oversampling” kifejezés alapértelmezésben a Nyquist-kritérium általi minimumot jóval meghaladó gyakoriságú mintavételt jelent, itt az egyetlen minta helyett több minta átlagának számításaként használja a szerző. A jelen megoldás ennek felbontást javító hatását használja ki.
  • 4. A jitter egy – specifikáció szerint – periodikusnak tekintett jel fizikai megvalósításakor, a jel periódusidejében mérhető, zajszerű moduláció.
  • 5. Ennek a túlcsodulásjelnek a frekvenciája két mennyiséggel arányos: egyrészt a bemenő órafrekvenciával, azaz az NCO2 kimeneti frekvenciájával, másrészt az NCO1-ben beállított növekmény nagyságával.
  • 6. Ennek oka az, hogy az NCO1 túlcsodulásjelének T impulzusszélessége állandó, miközben a tp periódusidő a legkisebb (nullától külön­böző) kimeneti frekvenciától a maximumig nagyjából 16 000-szeres átfogású tartományban mozog, következésképpen a T/tp kitöltési tényező is hasonlóan széles tartományban változik. Ez egyes alkal­mazásokban elfogadható lehet, ilyenkor hagyható el a „felező” JK flipflop.

 

 

Szerző: Robert Perkel – Microchip Technology, Inc.

 

www.microchip.com