Egyszerűsítsük az életet – logikával
Megjelent: 2018. március 11.
Komplex logikai funkciók megvalósítása CLC-kkel
A logikai jelekből logikai függvényekkel gyakran kell más logikai jeleket előállítani. Ezt akár huzalozott logikával, akár mikrovezérlő programjával elő lehet állítani. Mindegyiknek megvan a maga előnye és hátránya. A szerző olyan megoldást mutat be, ahol az előnyök dominálnak a hátrányokhoz képest.
Ha valami egyszerű, annak óriási előnyei vannak. A legtöbb beágyazott tervezés során szükség lehet logikai jelekre és a köztük megvalósított logikai függvényekre a felhasználás igényeinek megfelelően. Néha összetett, huzalozott logikát kell megvalósítani ezen igények kielégítéséhez. De mi van, ha ennek az egyszerűségnek az ára az, hogy valamit bonyolultabban kell csinálnunk? Néhány mikrovezérlő rugalmas belső perifériákkal rendelkezik az összetett alkalmazások logikai igényeinek egyszerű megvalósításához.
Ez az a pont, ahol a konfigurálható logikai cellák (Configurable Logic Cell – CLC) lépnek a színre. A CLC perifériák ma már a Microchip PIC® mikrokontrollerek (MCU-k) perifériakészletének részei, és lehetővé teszik, hogy a felhasználó egyszerű logikai funkciókat valósíthasson meg általuk a logikai jeleknek az MCU-hoz való illesztésére. Ezzel a CLC perifériával a felhasználó a logikai jelek egy csoportját egy logikai függvény bemenetének tekinti, a kimenetét pedig vagy más perifériák vezérlésére használhatja, vagy kivezetheti az MCU valamelyik I/O-pontján, lehetővé téve számára, hogy tetszése szerint, rugalmasan használhassa fel azokat a tervezés céljaira.
Annak érdekében, hogy ezt a feladatot (is) egyszerűen oldhassuk meg, a CLC-kkel való tervezést a Microchip MPLAB® Code Configurator (MCC) szoftvereszköze is támogatja. Ez lehetővé teszi, hogy a tervező grafikus megjelenítés mellett, a logikai kapuk szimbólumát „megfogja” és a „helyükre illessze” (Drag and Drop), és a be- és kimeneteket megfelelően összehuzalozza. Ebből a szoftvereszköz egyetlen kattintással C nyelvű forráskódot generál, nagy mértékben egyszerűsítve ezzel a logikai függvények megvalósítását a CLC-modulok segítségével.
A CLC egyike a Microchip magfüggetlen perifériáinak (Core Independent Peripheral – CIP). Ez – a konfigurálás kivételével – minden további programkód, és a CPU által ellátott felügyelet nélkül képes ellátni feladatát. Ez egyszerűsíti az összetett irányítórendszerek megvalósítását, és – miközben a fejlesztőknek bőséges „mozgási szabadságot” biztosít – tehermentesíti a processzort, és ezzel jelentősen megnöveli annak eredő teljesítőképességét. A jelen cikkből az olvasó megismerheti, hogyan lehet a CLC-t felhasználni például két jel közötti fáziskülönbség detektálására, komplementer hullámforma-előállításra vagy több paraméter értékének egyidejű felügyeletére egy alkalmazásban.
A bemeneti és kimeneti jelek és az események időpontját meghatározó szinkronjelek (triggeresemények) végtelen kombinációs lehetőségeire tekintettel a CLC-k alkalmazására is rendkívül széles körű lehetőségek nyílnak.
1. ábra Fázisdetektor
Áttekintés
A CLC egy, a felhasználó által konfigurálható periféria, hasonlít a programozható logikai eszközökhöz (Programmable Logic Device – PLD), de mikrovezérlőbe integrálva. Belső és külső eredetű logikai jeleket, illetve más perifériák kimeneteit vagy valamely I/O-csatlakozópontra kapcsolt jeleket egyaránt használhatunk a CLC bemeneti jeleiként. Ezeket a jeleket a CLC – a konfigurált logikai feladatnak megfelelő logikai függvényérték előállításával – feldolgozza, és a kimeneti jel más perifériák vezérlésére, vagy kimeneti csatlakozópontra vezetve a mikrovezérlőn kívül használható fel.
A CLC érzékelhet olyan logikai jeleket is, mint egy belső órajel, amiből más periféria vagy perifériális esemény időzítésére alkalmas kimeneti jelet állíthat elő. A kiválasztott bemeneti jeleket a kívánt logikai funkció bemenetére a jelkapuzó fokozat juttatja el.
A CLC különféle (kombinációs) logikai függvények (mint az AND, OR, NOT, XOR, NAND, NOR és XNOR) megvalósítására egyaránt alkalmas. A CLC belsejében a jelkapuzó fokozat kimenete kapcsolódik a megfelelő logikai függvényt megvalósító kapu bemenetére. A CLC kimenetén a kimeneti jel polaritását meghatározó fokozat található, amellyel a jel kívánt polaritása beállítható.
A CLC önálló perifériaként használható kombinációs és sorrendi (szekvenciális) logikai funkciók megvalósítására, és – mint ilyen – triggeresemények és az azokra adott válaszok gyors előállítására. Ezenkívül más perifériákkal együtt is használható azok képességeinek kibővítésére azáltal, hogy komplex funkciók hardveres megvalósítását teszi lehetővé.
Mivel a CLC egy magfüggetlen periféria (értsd: az MCU többi részegységétől, így a processzortól is függetlenül is működőképes – A ford. megj.), hatékonyan képes csökkenteni az alkalmazásnak a CPU adatfeldolgozási sávszélesség-igényét azzal, hogy tehermentesíti a processzort attól, hogy szoftveresen kelljen előállítania számos egyszerű logikai függvényt, amellyel a CPU a perifériákat vezérli. Ezzel egyben csökkenti a flashmemória és a RAM-kapacitás iránti igényeket is, mivel a működéséhez programkódra és szoftveres algoritmusok futtatására nincs szükség.
Ráadásul a hardveresen megvalósított logikai funkciók gyorsabban reagálnak a bemeneteken történő eseményekre, mint azok, amelyeket szoftveres úton valósítottak meg. A CLC egyben magasabb szintű integrációt is lehetővé tesz, mivel az általa megvalósított funkcióhoz külső alkatrészek beépítésére nincs szükség, ami a végtermék NyÁK-lemezének méretét is csökkenti.
Fázisdetektor
A CLC sokoldalú felhasználási lehetősége és egyszerűsége kiterjeszti a PIC MCU-kban rejlő tervezési lehetőségeket, ennek jó példája egy CLC-vel megvalósított fázisdetektor. Fázisdetektorokkal számos olyan alkalmazásban találkozhatunk, amelyekben távolságmérésre van szükség. Ez azon az elven működik, hogy egy folytonos RF-hullámot küldünk a céltárgy felé, amely onnan visszaverődik. A kibocsátott és visszavert RF-hullám közötti fáziskülönbség a céltárgy távolságával arányos. A CLC-vel olyan logikai funkció is megvalósítható, amely két azonos frekvenciájú jel fáziskülönbségének meghatározására használható. Ha tehát a kibocsátott és a visszavert RF-hullámot a CLC bemeneteire vezetjük, és a CLC-t úgy konfiguráljuk, hogy a kimenete a két jel különböző fázisú időtartamával azonos idejű jelet állítson elő, ebből az időtartamból a céltárgy távolsága kiszámítható.
A fázisdetektor CLC-alapú megvalósításához a CLC ÉS–VAGY (AND–OR) logikai függvényét használjuk egy kizáró VAGY (XOR) függvény megvalósításához a fáziskülönbség mérésére, és a D-tároló logikai funkcióval határozzuk meg a jelek fáziskülönbségének előjelét (azt, hogy a visszavert jel fázisa siet-e vagy késik a kibocsátott jeléhez képest – A ford. megj.). A négyszöghullámokon kívül lehetséges más (analóg) jelek, például szinuszhullámok fáziskülönbségének mérése is. A CLC-vel megvalósított fázisdetektor logikai vázlatát az 1. ábra mutatja.
A bemeneti jelek, amelyeknek a fáziskülönbségét kívánjuk mérni, két komparátorra kapcsolódnak, amelyek nullátmenet-detektorként (Zero Cross Detector – ZCD) való működésre vannak konfigurálva. A ZCD-k a bemeneti analóg jeleket azonos frekvenciájú négyszöghullámokká alakítják át. Ha a bemeneti jelek eleve négyszöghullámok, a ZCD-k megvalósítására nincs szükség. A négyszöghullámokat belső összeköttetéseken át több CLC-modul bemenetére vezetjük.
A CLC1 és a bemeneti jelet érzékelő (Input Capture – IC) perifériák szerepe a fáziskülönbség nagyságának megállapítása.
A CLC1 úgy van konfigurálva, hogy az AND–OR logikai függvények egy XOR (kizáró VAGY) funkciót alkossanak. Ennek kimenete külső csatlakozással kapcsolódik az IC (Input Capture) bemenetéhez. Az XOR-funkció kimeneti jelének impulzusszélessége a kibocsátott és visszavert jel fáziskülönbségével arányos, amelyet az IC-vel mérünk meg. Ha a CLC1 kimenetén nincs jel, a két bemeneti jel azonos fázisú.
Annak érdekében, hogy a két bemeneti jel fáziskülönbségének előjelét (a fázissietést vagy -késést) meghatározhassuk, a CLC2-t D-tárolóként kell konfigurálni. A két bemeneti jel egyike a D-bemenetre, a másik a tároló órajel-bemenetére csatlakozik. Így a CLC2 kimenete aszerint magas vagy alacsony logikai szintű, hogy a D-bemenetre kapcsolt jel siet vagy késik az órajelbemenetre kapcsolt jelhez viszonyítva. Két jel egymáshoz képesti fázisszögének mérése számos alkalmazásban használható, a mechanikai mérésektől kezdve a digitálisan vezérelt energiaellátó és kommunikációs rendszereken át az orvostechnikai műszerekig.
2. ábra Élre illesztett üzemmódú, komplementer hullámforma-generátor CLC-modulok felhasználásával
Komplementer hullámforma generátor
A CLC alkalmazásának egy másik lehetséges módja egy komplementer hullámforma generátor (Complementary Waveform Generator – CWG). Ez egy a bemeneti jeléből két, egymástól holtidővel elválasztott ellenütemű hullámalakot állít elő. A két jel közé azért kell holtidőt beiktatni (értsd: olyan rövid időközt, amely alatt mindkét kimenet kikapcsolt állapotban van – A ford. megj.), hogy elkerüljük az egymásba vezetést, azaz a két, ellenütemű jellel vezérelt teljesítménykapcsoló ne tudjon egyidejűleg vezetni. Ez fontos biztonsági követelmény számos teljesítményelektronikai alkalmazásban.
Ez az alkalmazás a CLC-periféria éldetektálási és megszakítási képességét mutatja be egy ellenütemű jelpár előállításának példáján, amelynek egyetlen jelérzékelő, összehasonlító és impulzusszélesség-modulátor (Single Capture/Compare/PWM – SCCP) egység adja a bemeneti jelet.
Az olyan alkalmazásoknak, mint például a motorvezérlés is, a működésük vezérléséhez ellenütemű hullámalak-generátorokra van szükségük. A többszörös jelérzékelő, összehasonlító és impulzusszélesség-modulátor (MCCP) modul több ellenütemű hullámforma-párt képes előállítani úgy, hogy a jeleik páronként garantáltan nem fedik át egymást, hanem a vezető állapotokat biztonsági zóna (holtidő) választja el egymástól. Ha viszont az alkalmazás több MCCP-példányt igényel, mint amennyi az eszközbe beépített módon adva van, akkor kiegészítésül egy CLC-ből létrehozott SCCP-re is szükség lehet.
Az SCCP önmagában nem alkalmas a nem átlapolódó kimeneti jelek előállítására, a CLC felhasználásával azonban a szükséges holtidővel rendelkező ellenütemű jelpár is létrehozható.
A holtidőt a jel élére, illetve a jel éléhez viszonyítva középre illesztett kivitelben is elő lehet állítani. A 2. ábra a CLC1, a CLC2 és a CLC3 szükséges konfigurációját mutatja egy SCCP létrehozásához, amelynek időzítése a jelélre van illesztve.
Például egy teljeshidas motorvezérlő áramkör meghatározható egyetlen MCCP-perifériával, amelynek kimenetei komplementer jelpárokat állítanak elő. Ha viszont több teljeshidas motorvezérlőre van szükségünk, és az eszközbe épített MCCP-perifáriák száma nem elegendő, akkor egy CLC-kből előállított SCCP-perifária lehet a megoldás.
3. ábra Több paraméter egyidejű felügyelete CLC segítségével
Több paraméter egyidejű figyelése
Gyakran van szükség olyan alkalmazás megvalósítására, amely egyidejűleg többféle paramétert, például hőmérsékletet, nyomást vagy nedvességet felügyel. Ha ezek a paraméterek kilépnek az alsó és felső határértékük által kijelölt sávból, valamilyen beavatkozásra van szükség a káros következmények elkerülésére.
Ilyen esetben több komparátor áll rendelkezésre a felügyelt paraméterek ellenőrzésére, amelyek kimenetei adják a CLC bemeneti jeleit. Egy mikrovezérlőben egy komparátorral csak egy paraméter felügyelhető. A CLC felhasználásával összekapcsolt több komparátor több paraméter egyidejű felügyeletére alkalmas.
Beavatkozásra akkor van szükség, ha egy vagy több felügyelt paraméter értéke meghaladja a rá érvényes határértéket. A 3. ábrán annak a CLC-nek a konfigurációja látható, amely két különböző paramétert felügyel.
A gyakorlatban ez az alkalmazás egy ipari üzemben felügyelheti egy-egy mérőpont hőmérsékletét és nyomását, és az üzem leállhat, ha bármelyik paraméter meghaladja a saját – előre beállított – küszöbértékét, de használható a feszültségszintek figyelésére is egy szünetmentes energiaellátó rendszerben.
Összefoglalás
A mikrovezérlők perifériakészletének bővítése a konfigurálható logikai cellákkal lehetővé teszi, hogy a felhasználó egyszerű logikai funkciókat valósítson meg a PIC mikrovezérlőkbe integrált kivitelben. A különféle perifériák kimenetének feldolgozása logikai funkciókkal kiterjeszti a létező perifériák képességeit, és ezzel együtt azt az alkalmazási területet is, amelyre a perifériák használhatók.
Mivel a logikai funkciók hardveres megvalósítása gyorsabb választ tesz lehetővé a bemeneteken történő eseményekre, mintha a logikai funkciókat szoftverrel valósítanánk meg, a CLC hozzásegít a teljes rendszer működési sebességének növeléséhez. Ezenkívül magasabb fokú integrációt is lehetővé tesz anélkül, hogy külső logikai kapukat kellene beépítenünk a logikai funkciók megvalósítására. A kisebb alkatrészszám pedig csökkenti a szükséges NyÁK-méretet. A CLC abban is segítségünkre lehet, hogy a különféle bemeneti jelforrások jeleinek kombinálásával teljesen különböző logikai jeleket hozhassunk létre.
Mindezeket a rugalmas be- és kimeneteket és logikai funkciókat könnyen megvalósíthatjuk egy grafikus felhasználói interfésszel (GUI) működő, MPLAB Code Configurator (MCC) nevű szoftvereszközzel, amely könnyen olvasható C-nyelvű kóddá fordítja le a CLC-nek az alkalmazás megvalósításához szükséges konfiguráló adatait.
A témához kapcsolódó bővebb tájékoztatást az alábbi webhelyen talál az olvasó:
„Extending PIC MCU Capabilities Using CLC Application Note”: http://ww1.microchip.com/downloads/en/AppNotes/00002133a.pdf
szerző: Manu Venkategowda – Microchip Technology Inc.
www.microchip.com