Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Mérnök Informatikus Szak, MSc
B EMENETI FOKOZAT ÉPÍTÉSE SZÁMÍTÓGÉP VEZÉRELT POTENCIOSZTÁTHOZ – Diplomaterv –
Vinis Ádám Lajos Témavezető: Tihanyi Attila Külső konzulens: Vesztergom Soma (ELTE)
Budapest, 2012.
Nyilatkozat Alulírott Vinis Ádám Lajos a Pázmány Péter Katolikus Egyetem Információs Technológiai Karának hallgatója kijelentem, hogy ezt a diplomatervet meg nem engedett segítség nélkül, saját magam készítettem, és a diplomatervben csak a megadott forrásokat használtam fel. Minden olyan részt, melyet szó szerint, vagy azonos értelemben, de átfogalmazva más forrásból átvettem, egyértelműen a forrás megadásával megjelöltem. Ezt a Diplomatervet más szakon még nem nyújtottam be.
Budapest, 2012.05.15.
_____________________________________ aláírás
2
Tartalomjegyzék Ábrajegyzék ............................................................................................................................4 Kivonat ..................................................................................................................................5 Abstract ..............................................................................................................................7 1.
Bevezetés ........................................................................................................................9 1.1.
1.1.1.
Elektrokémiai mérések, a potenciosztát.......................................................... 10
1.1.2.
Az elektrokémiai mérések értelmezési lehetőségei .......................................... 12
1.2.
3.
Bevezetés a digitális műszerek világába ..................................................................14
1.2.1.
Mikrokontrollerek ......................................................................................... 15
1.2.2.
Kommunikációs lehetőség a mikrokontrollerekkel ......................................... 17
1.2.3.
A/D és D/A konverterek általában.................................................................22
1.2.4.
Műveleti erősítők ........................................................................................... 24
1.3. 2.
Az elektrokémiáról általában ...................................................................................9
Rendszerterv ......................................................................................................... 25
A megvalósításhoz választott eszközök .......................................................................... 28 2.1.
PIC32 mikrokontroller .......................................................................................... 28
2.2.
16 bites A/D konverter.......................................................................................... 30
2.3.
A fejlesztői környezet ............................................................................................ 31
2.3.1.
Hardveres környezet ...................................................................................... 31
2.3.2.
Szoftveres környezet a mikrokontrolleren....................................................... 32
2.3.3.
Szoftveres környezet a PC-n .......................................................................... 33
Az implementáció módja .............................................................................................. 35 3.1.
Bevezetés .............................................................................................................. 35
3.2.
Megszakításkezelés................................................................................................ 35
Polling .......................................................................................................................... 35 Interrupt ....................................................................................................................... 36 DMA ........................................................................................................................... 38 Következtetés................................................................................................................ 40
4.
3.3.
A mikrokontroller vezérlőprogramja, USB és SPI kezelés ...................................... 41
3.4.
Értékelés ............................................................................................................... 44
Összefoglalás ................................................................................................................ 46
Irodalomjegyzék ................................................................................................................... 47
3
Ábrajegyzék 1. ábra - Standard háromelektródos cella, és a hozzákapcsolt potenciosztát elvi vázlata. [5] ...10 2. ábra – Egy potenciosztát kapcsolási rajza. [6] ....................................................................12 3. ábra – Elektrokémiai cellát helyettesítő kapcsolás. ............................................................. 13 4. ábra – Arany elektródon fölvett ciklikus voltammogram. ................................................... 13 5. ábra – Platina kénsavoldat ciklikus voltammogramja. ........................................................ 14 6. ábra – SPI kommunikáció. [8] .......................................................................................... 18 7. ábra – Az SPIx modulok blokkvázlata. [9] ........................................................................ 19 8. ábra – USB driver. [12]..................................................................................................... 21 9. ábra – A/D konverter........................................................................................................ 23 10. ábra – Műveleti erősítő. ..................................................................................................24 11. ábra – Rendszerterv......................................................................................................... 27 12. ábra – PIC32MX795F512L mikrokontroller. .................................................................28 13. ábra – PIC32 mikrokontroller a fejlesztőkártyán. ............................................................ 29 14. ábra – A választott PIC32 mikrokontroller főbb paraméterei. .......................................... 29 15. ábra – Az LTC1865ACMS A/D konverter főbb adatai. ................................................. 30 16. ábra – Explorer 16 fejlesztőkártya layoutja. ...................................................................... 31 17. ábra – A bejövő adatforgalom sebességének tesztelése LabVIEW programmal. ............... 34 18. ábra – Interrupt prologue. ............................................................................................... 37 19. ábra – Interrupt epilogue. ................................................................................................ 37 20. ábra – USB adatküldés a host (PC) felé. .......................................................................... 41 21. ábra – SPI1 csatorna inicializálása. .................................................................................. 42 22. ábra – SPI – a konvertálás kezdete. ................................................................................. 42 23. ábra – SPI – két csatorna kiolvasása................................................................................. 43 24. ábra – SPI – teli buffer esetén csere. ................................................................................ 43 25. ábra – A LabVIEW program futása. ............................................................................... 44
4
Kivonat Elektrokémiai mérésekkel mind az iparban, mind kutatás-fejlesztési területeken is találkozhatunk. Ezen mérések a kémia azon területéhez tartoznak, amely az elektromos áram (tágabb értelemben véve az elektromos tér) és a kémiai kölcsönhatások kapcsolatát vizsgálja. Ez a tudományág kutat például olyan fontos témákat, mint a vezető polimerek, a hosszú élettartamú akkumulátorok, a tüzelőanyagcellák előállítása, stb. Az ilyen jellegű mérésekhez mindig speciális elektronikai mérőműszereket alkalmaznak – melyek elektródok segítségével képesek méréseket végezni – így az elektródon zajló reakciókat befolyásolni tudják, és a mérésekből többek között az éppen zajló reakció fontosabb jellemzőire tudnak következtetni. Az ilyen méréseknek, amelyek segítségével ezek összefüggések leginkább feltárhatók, elsődleges eszköze a potenciosztát. Ez egy a kereskedelmi forgalomban kapható műszercsoportot jelent, amelynek felhasználása ipari környezetben elterjedt, azonban egyre nagyobb az igény, hogy ezeket az eszközöket a kutatások során is munkába állítsák. Ez a felhasználás a rutineljárásokon túl új, eddig nem alkalmazott mérési feladatok kidolgozását is jelenti. Ezeket viszont nem mindig tudjuk a piacon kapható potenciosztátokkal kivitelezni. Az ELTE (Eötvös Lóránd Tudományegyetem) Kémiai Intézetének Elektrokémiai és Elektroanalitikai Laboratóriumában igény merült fel egy mérőrendszer építésére, ugyanis itt foglalkoznak elektrokémiai kutatásokkal. Az ELTE-n már korábban végeztek automatizálási lépéseket, szoftveres fejlesztések történtek főként LabVIEW-ban, amellyel a meglévő potenciosztátok vezérlésére törekedtek. A Pázmány Péter Katolikus Egyetem Elektronikus Mérőlaboratóriumának műszerfejlesztési tapasztalatait és az ELTE-n gyűjtött (főként LabVIEW-val végzett) szoftveres mérésvezérlési tapasztalatait ötvözve érdemesnek látszott egy műszerfejlesztési projektbe kezdeni, amelynek célja egy számítógép vezérelt potenciosztát építése. A kapcsot a két intézet között Vesztergom Soma az ELTE Kémiai Intézetének PHD kutatója jelenti. Az Elektronikus Mérőlabor (PPKE) méréstechnikai részről kívánt bekapcsolódni a fejlesztésbe. A közös terv a két egyetem részéről egy számítógép vezérelt potenciosztát elkészítése. Ez a felhasználó oldaláról közelítve egy PC-n futó LabVIEW-ban írt vezérlőprogrammal kezdődik. A PC kapcsolatban áll, kommunikál egy mikrokontrollerrel USB kapcsolaton keresztül. A mikrokontroller kimeneteire van kapcsolva többek között egy digitális-analóg átalakító, amelyhez egy analóg áramkör kapcsolódik. Így a generált jel elérkezik az analóg áramkörrel az elektrokémiai cellához. Innen a választ az analóg áramkörön, majd analóg-digitális átalakítón keresztül kapja a mikrokontroller. Ezt továbbítja a számítógép felé, ahol lehetőség van a mért adatok feldolgozására, tárolására. 5
A kitűzött feladat számomra a mikrokontrolleres mérésnek, azaz a bemeneti fokozatnak a megvalósítása. Ehhez azonban szükséges megismerkedni röviden az elektrokémiai mérések alapjaival, az analóg-digitális (A/D) konverterek működésével, a mikrokontrollerek általános működésével, programozásával, a megszakításkezeléssel és az USB és SPI protokollokkal is.
6
Abstract The electrochemical measurements are typically used in industry and in research and development. These measurements related to that field of chemistry, where researchers test the connectivity between chemical reactions and electronic current (or electric field.) This discipline explores important issues like conductive polymers, long-life batteries, fuel cell producing, etc. They always use some kind of electronic measuring instruments. These instruments use electrodes for measuring. With these instruments they can influence the reaction which acting between the electrodes, and they can measure things and for example they can conclude about the parameters of the ongoing reaction. The measurements which such relationships can be revealed primary made with potentiostat. This is a commercially available instrument group widely used in industry. However there is a growing demand for use these instruments in researches. This kind of use above the routine measurements requires developing new measuring methods. However, it’s difficult to achieve with commercially available potentiostat sometimes. The Laboratory of Electrochemistry & Electroanalytical Chemistry at ELTE (Eötvös Lóránd University) had a demand to build up a measuring system because they make electrochemical researches. They made some steps to automate systems in ELTE, so they made mostly software developing with LabVIEW which controlled the existing potentiostats. The Electronic Laboratory at Pazmany Peter Catholic University (PPCU) has experience with electronic instruments developing and researchers at ELTE have experience with measurement software developing (with LabVIEW) so put these things together can be a good combination to start to develop a measuring instrument. The goal is to develop a computer controlled potentiostat. The connection between the Universities is Soma Vesztergom who is a PHD researcher at ELTE Institute of Chemistry. The Electronic Laboratory (at PPCU) wants to join to this project from sense of measuring technology. The long term goal is to build up a computer controlled potentiostat. User point of view, the process starts with a controller program written in LabVIEW that running on a computer. The computer connects to a microcontroller and communicates with USB. There is a digital-analog converter connected to the microcontroller’s output and for this DAC joins an analogue electronic circuit. Thus, the generated signal comes to the electrochemical cell in analogue form. The microcontroller receives the answer signal from the electrochemical cell through analogue circuit and through an analogue-digital converter. The microcontroller sends it toward to the computer, where we can process and store it. 7
My task in this project is to measure the reaction (the signals) so implement the input phase. However, first we need to get to know with basics of the electrochemical measurements, basics of the analogue-digital converter operation, the microcontrollers, the interrupt handling and the USB and SPI interfaces as well.
8
1. Bevezetés 1.1.
Az elektrokémiáról általában
Dolgozatomban egy olyan munkát fogok bemutatni, amellyel egy elektrokémiai kísérletekhez szükséges mérőműszer elkészítésébe kapcsolódtam be. Ezt a munkát Taróczy-Tóth Zsigmond diáktársam kezdte meg Vesztergom Soma, az ELTE Kémiai intézetének Elektrokémiai és Elektroanalitikai Laboratóriumának kutatója, mint külső konzulens, és Tihanyi Attila laborvezető konzulensi vezetésével. Zsigmond munkájából korábban már egy Tudományos Diákköri (TDK) dolgozat is született [1]. Annak érdekében, hogy e munka lényegét minden Olvasóm számára érthetővé tegyem, először is rövid bevezetőjét szeretném adni az elektrokémiai méréseknek. Elektrokémiának nevezzük a kémia azon területét, amely az elektromos áram (vagy tágabb értelemben véve: az elektromos tér) és a kémiai kölcsönhatások kapcsolatát vizsgálja. Ez a tudományág kutatja az olyan fontos témákat, mint a vezető polimerek, a hosszú élettartamú akkumulátorok, a tüzelőanyagcellák előállítása, stb. A tudományághoz tartozó területeket sokféleképpen csoportosíthatjuk, mi itt azonban a csoportosításnak csak egy lehetőségét említjük, amennyiben a bockrisi (J. O'M. Bockris neves elektrokémikus) tematizációt követve megkülönböztetjük az elektrokémián belül az iónika (ionokat tartalmazó homogén fázisok, pl. elektrolitoldatok viselkedését leíró) területét az elektródikától, amely olyan fázishatárokat vizsgál, amely két, különbözőképpen vezető fázist választanak el. Itt csak röviden, mintegy dióhéjban igyekszünk bemutatni, mit is nevezünk elektródikának, és mindenekelőtt rámutatunk arra, hogy az előbbi, kissé bonyolultnak tűnő megfogalmazás valójában nem is annyira bonyolult, hiszen az pusztán annyit állít, hogy az elektródika olyan tudomány, amely az elektródokkal foglalkozik. Más kérdés, hogy az elektródot a fizikai kémiában (szemben a villamosmérnöki tudományokkal) így szokás definiálni: az elektród olyan kétfázisú rendszer, amelyben az egyik fázis elsőfajú vezető (tehát fém vagy legalábbis félvezető), a másik pedig ionos vezető (rendszerint valamiféle elektrolitoldat) [2]. Egészen hétköznapi példával élve, egy pohár sós vízbe lógatott vasszög tehát elektród, (ám sem a vasszöget önmagában, sem a sóoldatot önmagában nem lehet a szó szoros értelmében elektródnak nevezni.) Az elektród ilyeténképpen történő definiálása után fizikai tanulmányaink alapján rögtön tehetünk két megállapítást: az egyik, hogy az elektródnak létezik (egy másik elektróddal szemben mérhető) potenciálja, másik pedig az, hogy az elektródon spontán módon (mint az 9
áramforrásokban), vagy külső kényszer hatására (mint az elektrolizáló kádakban), áram folyhat. Az is világos, természetesen, hogy e két mennyiség, áram és potenciál között kapcsolat van, és mivel az elektród potenciáljának változtatásával az elektródon zajló reakciókat befolyásolni lehet (pl. nagy feszültséggel gyorsabban végezhető elektrolízis mint kisebb feszültséggel, stb.), valamint az elektródon folyó áram éppen az ott zajló folyamat sebességéről árulkodik, nyilvánvaló, hogy ezen összefüggések tanulmányozása az elektrokémikusok számára igen fontos. Az olyan méréseknek, amelyek segítségével ez összefüggések a leginkább feltárhatók, elsődleges eszköze a potenciosztát [3].
1.1.1.
Elektrokémiai mérések, a potenciosztát
Az elektrokémiai mérések elsődleges eszköze tehát a potenciosztát. Ezzel az eszközzel egy vizsgált elektród a munkaelektród egy másik elektróddal a referencia elektróddal szembeni potenciáljának beállítására és az ehhez szükséges áramerősség mérésére van alapvetően lehetőségünk [4]. A korábban említettek szerint tehát a számunkra az elektródok között mért potenciál a reakciók aktiválási energiájáról ad információt, a mért áramerősség pedig a reakció sebességével áll kapcsolatban.
1. ábra - Standard háromelektródos cella, és a hozzákapcsolt potenciosztát elvi vázlata. [5] Az elektrokémiai cella (1.ábra) részei az M jelzésű munkaelektród, az R jelzésű referencia-elektród, az S jelzésű segédelektród, valamint a referencia- és a munkaelektród terét összeköttetésbe hozó L jelű Luggin-kapilláris. A jobb oldali rész az úgynevezett referenciatér, a bal oldali térrész pedig a munkaelektród-tér. A két térrész azonos összetételű elektrolittal van 10
feltöltve, amelyek között a kapcsolatot teremtő Luggin-kapillárist úgy képzik ki, hogy annak vékony vége a jobb oldali munkaelektród-tétben az ohmikus potenciálesés jelenségét csökkentse. A referencia elektród potenciáljának stabilnak kell lennie, ugyanis ekkor biztosítható, hogy a mért feszültség változás valóban a munkaelektród potenciáljának megváltozásából ered. Az elektródpotenciálok stabilitásának érdekében ezért alkalmazunk egy segédelektródot. Így alakul ki tehát a 3 elektródos cella. A további elemek a potenciosztát sematikus kapcsolási rajzán: –
UPR: beállítani kívánt elektródpotenciál
–
: műveleti erősítő
–
A: áramerősség-mérő
–
I: munka- és a segédelektród között folyó áramerősség
–
U: munka- és a referencia-elektród között mért feszültség
A potenciosztáton beállítjuk az általunk kívánt feszültség értéket a munka- és a referencia-elektród között. Ez jöhet klasszikusan egy függvénygenerátorról, vagy a manapság elterjedt digitális műszerek révén egy D/A konverterről. Ekkor jön a potenciosztát szabályzó szerepe: méri a fellépő valós U feszültséget és a δ műveleti erősítő előállítja és erősíti ezek különbségét. Majd a potenciosztát csak annyi áramot (I) folyat át, hogy a feszültségkülönbség lecsökkenjen és végül zérus értékű legyen.
Az így átfolyó áramerősséget és a tényleges
feszültséget mérjük, műszeresen, vagy gráfpapíros rekorderen megjelenítjük, újabban A/D konverter segítségével digitalizáljuk. Itt ki kell jelentenünk, hogy az ilyen jellegű kapcsolás csak alapkapcsolás, és ugyan alkalmas a potenciosztát működésének megértésére, ám egy ilyen kapcsolásnak már pusztán a szimulációja is képes megmutatni, hogy a potenciosztát ezen egyszerű formája (amennyiben az alkatrészek, elsősorban a műveleti erősítők működése nem ideális), nem alkalmazható. Csoportunk természetesen működőképes eszközt is tervezett, de részben mert ez az eszköz még csak szimulációkban létezik, részben pedig szorosabban
nem
kapcsolódott
feladataimhoz
azért mert az áramkörök tervezése (elsősorban
a
digitális
adatgyűjtésre
koncentráltam), itt csak egy kapcsolást mutatok be (2. ábra), egy rövid magyarázattal, pusztán annak érzékeltetésére, hogy a helyzet a fentebbi 1. ábrán vázoltnál jóval bonyolultabb.
11
2. ábra – Egy potenciosztát kapcsolási rajza. [6] Ezen az ábrán (2. ábra) a bal oldali D/A konvertertől (LTC2642) érkező már analóg jellel perturbáljuk a rendszert és a cél a jobb oldali kimeneteken (ADC1 és ADC2) analógdigitális átalakítást követően mérni a rendszer válaszát. Látható, hogy egy valós a potenciosztáthoz szükséges kapcsolás bonyolult, több műveleti erősítőt, tranzisztort és ellenállást tartalmaz, így ezt részletesebben nem tárgyalom. Megemlítendő még, hogy a kör különlegesen jó tulajdonsága, hogy benne a segédelektród (és nem a munkaelektród) kerül földre, így a későbbiekben több ilyen eszköz összekapcsolásával egyszerűen készíthető multipotenciosztát is.
1.1.2.
Az elektrokémiai mérések értelmezési lehetőségei
Az elektrokémiai mérések során alkalmazott primer műszert, a potenciosztátot az előző pontban már bemutattuk, arról azonban nem beszéltünk, miként lehet egy kémiai rendszeren végzett elektronikai mérést értelmezni. Az alábbiakban erre látunk egy példát.
12
3. ábra – Elektrokémiai cellát helyettesítő kapcsolás. Képzeljük el, hogy potenciosztátunk segítségével a 3. ábrán látható WE munkapont potenciálját a RE referenciapont potenciáljához képest egy v sebességű háromszögjel szerint vezéreljük úgy, hogy (az ábrán egyébként R-rel ekvipotenciális) CE pont és a WE munkapont között áramot hajtunk át a rendszeren. Egy ilyen egyszerű kapcsolás esetén az áram-feszültség karakterisztikát könnyen megállapíthatjuk: az áram ugyanis a feszültség függvényében olyan egyenes lesz, amelynek meredeksége 1/R, tengelymetszete pedig ±vC, attól függően, hogy a háromszögjellel éppen fölfelé vagy lefelé tartunk-e. Egyedül a háromszögjel vertexeinél látunk majd ettől való eltérést: itt ugyanis megfigyelhető lesz a kondenzátor áttöltődése, aminek kezeléséhez a rendszert leíró differenciálegyenletek megoldására lenne szükség, ettől azonban most eltekintünk, és megelégszünk a fent adott kvalitatív képpel. Látható, hogy eddig kémiáról nem igazán volt szó, most azonban tekintsük meg, mi történik akkor, ha hasonló kísérletet ténylegesen létező elektrokémiai rendszereken végzünk. A 4. ábra egy olyan arany elektródon fölvett választ (ún. ciklikus voltammogrammot) mutat, amely egy ionos folyadékkal érintkezett.
4. ábra – Arany elektródon fölvett ciklikus voltammogram. 13
Látható, hogy nem sok különbséget látunk az előbbi elektronikai kapcsolás válaszához képest: egy ilyen rendszer tehát valószínűleg jól leírható egy, a 3. ábrán látható kapcsolással is. Valóban: ez egy igen egyszerű elektród, ahol a (kondenzátorszerű viselkedést eredményező) kettősréteg kialakulás mellett igen kis mértékű töltésátlépés játszódik csak le (utóbbi mint a C kapacitással párhuzamosan kapcsolt R ellenállás viselkedik majd). Természetesen léteznek ennél bonyolultabb rendszerek is, ahol a hasonló vizsgálatok összetettebb voltammogrammokat eredményeznek. Ezek részletes vizsgálata már nem a mi feladatunk, de illusztráció képpen bemutatunk egyet az 5. ábrán: ez a platina kénsavoldatban felvett ciklikus voltammogramja, amin már sokkal több „csúcs” látható. Az ábrán feltüntettük, ezek milyen elektródfolyamatokkal állnak összefüggésben.
5. ábra – Platina kénsavoldat ciklikus voltammogramja.
1.2.
Bevezetés a digitális műszerek világába
Egy tudományos műszer lehet bármilyen típusú eszköz, berendezés, készülék, amelyet speciális feladatok megoldására terveztek, építettek. Ezeket gyakran próbálgatásokon és hibákon keresztül a jól ismert fizikai törvények felhasználásával tökéletesítik, finomítják azért, hogy a lehető leghatékonyabban tudják használni a mérésekhez. A tudományos műszerek a laboratóriumi felszerelés részei, de kifinomultabbak, és specializáltabbak, mint például egy mérleg, mérőpálca, időmérő, hőmérő, vagy akár egy 14
függvénygenerátor. Ezek egyre jobban a számítógépek műszerekbe integrálásán alapulnak azért, hogy javítsák és egyszerűsítsék a vezérlést, kiterjesszék a mérési funkciókat, a paraméterállítást és mintavételezést, a gyűjtött adatok körét és felbontását, az adat analizálási, tárolási és visszakeresési lehetőségeket. Az egyes eszközök gyakran csatlakoztathatók helyi (LAN) hálózatokhoz és laboratóriumi információ rendszerekbe integrálhatók. Mindemellett akár hozzáférhetnek internet kapcsolaton keresztül más laboratóriumok adatbázisához, és így akár összehasonlíthatják a saját eredményeiket a korábban mások által mért adatokkal. Ezek az eszközök lehetnek nagyméretűek, mint például az asztrofizikában alkalmazott rádióteleszkóp antennatömb, de lehetnek egészen kisméretűek is a nanotechnológia térnyerésével. Kezdetben az akkori technológia lehetőségek miatt voltak méretükben behatároltak, és igen korlátozottan hordozhatók. A technológiai fejlődéssel megjelentek a műszerekbe integrált számítógépek, nagyobb számítási kapacitással rendelkező chipek. Ezen műszerek vezérlését a méretcsökkentési és egyre nagyobb fokú integrálási tendenciák miatt egyre kisebb, akár egy chipbe zsúfolt processzorokba próbálták meg besűríteni. Így olyan megoldások születtek, mint például a manapság népszerű mikrokontrollerek, amelyek kiválóan alkalmasak digitális műszerek vezérlésére.
1.2.1.
Mikrokontrollerek
A mikrokontrollerek (más néven mikrovezérlők) megjelenése a korszerű elektronikai ipar eredményei. Az integráltsági fok látványos növekedése egyrészt jelentősen növelte a processzorok bonyolultsági fokát, javította teljesítőképességüket, másrészt lehetővé tette a memóriákat és perifériákat tartalmazó áramkörök egy tokban való integrálását a központi egységgel. A mikrokontrollerek a PC-kel ellentétben külön programmemóriával és külön adatmemóriával rendelkeznek (Harvard arhitektúra.) A mikrovezérlők felhasználási köre igen széles. Összességében elmondható, hogy minden olyan feladat, ahol valamit elektronikusan kell/lehet mérni, illetve vezérelni, az mikrokontroller használatával eredményesen megoldható. A mikrokontrollerekre jellemző, hogy költséghatékony, kis méretű, kis fogyasztású eszközök. A mikrokontrollerek jelentős része MIPS architektúrájú, így hasznos megismerkedni vele, hogy ez milyen előnyökkel, hátrányokkal jár. A MIPS (az angol Microprocessor without
Interlocked Pipeline Stages rövidítése) egy 32/64 bites RISC utasításkészlet-architektúra, amelyet a MIPS Computer Systems (jelenleg MIPS Technologies) cég fejlesztett ki az 1980as évek elején. Eredetileg a MIPS architektúra 32-bites volt, a 64-bites felépítés későbbi fejlesztés eredménye. A MIPS utasításkészletnek több változata létezik, ezek a következők: 15
MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V, MIPS32 és MIPS64. Jelenleg a MIPS32 és MIPS64 revíziókat használják a 32- és 64-bites rendszerekhez, ezek a regiszterkészletet is meghatározzák az utasításkészlet mellett [7]. A MIPS fő tervezési szempontja az volt, hogy minden egyes utasítás-fázis, a gyorsítótár-hozzáférést is beleértve, egy ciklus alatt végrehajtható legyen, megszüntetve az összefonódó zárolásokat, és lehetővé téve az egyciklusos utasítás-végrehajtást. Bár a tervezés során kihagytak néhány hasznos utasítást, mint pl. a szorzást és osztást, mégis érezhető volt, hogy egy ilyen rendszer összteljesítménye drámaian megnövekszik, mert lehetővé teszi magasabb órajelen működő chipek előállítását. A sebességnövekedést nehéz lett volna a központi zárolás megtartásával elérni, mivel a zárolás kezeléséhez szükséges idő éppen úgy függ az áramkör lapkaméretétől, mit az órajeltől. Egy fontos különbség a MIPS, és a konkurens Berkeley RISC felépítés között a szubrutinhívások kezelése. A RISC architektúra ún. regiszterablakokat használ erre az igen gyakori feladatra, azonban ez korlátozza többszintű hívások esetén az elérhető hívási mélységet. Minden szubrutinhívásnál külön regiszterkészletre van szükség, ami növeli a processzor területigényét, ezzel együtt a kialakítás bonyolultságát is. Egy ”figyelmes” compiler mindig talál szabad regisztereket, mielőtt hardveres megvalósításhoz kellene fordulni, és a regiszterek számának egyszerű növelése nemcsak hogy leegyszerűsíti ezt a feladatot, hanem még növeli is a teljesítményt. Más tekintetben a MIPS egy tipikus RISC típusú konstrukció. Az utasításkódok lerövidítése érdekében a RISC kialakításokban csökkentették a kódolandó utasítások számát. A MIPS esetében a 32 bites utasításszóból 6 bitet foglal el az utasítás kódja (opkód), a maradék 26 bit tartalmazhat egy ugrási címet, vagy 4 db 5-bites mezőn 3 regisztercímet, egy eltolási értéket és az utasításkód másik 6 bitjét. Egy másik formátum – a sok egyéb közül – meghatározhat 2 regisztert és egy 16 bites értéket, stb. Ez az utasításkód-kialakítás lehetővé teszi, hogy a processzor egy órajel-ciklus alatt beolvassa a művelet kódját és a hozzá tartozó adatokat; ellentétben a korábbi, nem-RISC kialakítású processzorokkal: pl. a MOS Technology 6502 külön órajel-ciklusok alatt olvasta be az opkódot és az adatokat. Ez az egyik legjelentősebb teljesítménynövelő tényező a RISC kialakítások esetén. Újabban a nem-RISC kialakítású processzorok is képesek hasonló sebességet elérni, más módszerek használatával.
16
1.2.2.
Kommunikációs lehetőség a mikrokontrollerekkel
Szükséges áttekintenünk, hogy hogyan kommunikál egy mikrokontroller, hiszen az adatokat magában műszerben nem tudjuk tárolni, ezért szükséges megvizsgálnunk, hogy milyen lehetőségünk van, ha folyamatos adatcserét szeretnénk végezni a számítógépünk felé. Itt azonban két részre kell osztanunk a kapcsolatot. Lesz kapcsolatunk az eszközön és annak perifériáin, és lesz kapcsolatunk az eszköz és a számítógépünk között.
1.2.2.1.
Kommunikáció az eszközben: SPI
Az eszközön zajló, és az eszközhöz csatolt ki- és bemeneti csatornák hozzákapcsolásának számtalan lehetősége van. Számunkra szükséges lehet például különálló A/D és D/A konverterek hozzákapcsolására egy csatorna. Egy igen elterjedt és szabványosított kommunikációs csatorna mikrokontrollerek esetében az SPI (Serial Peripherial Interface), azaz a soros periféria csatoló szabvány. Az SPI soros átviteli rendszert a National Semiconductor fejlesztette ki, de ma már igen sok IC gyártó alkalmazza. Tipikusan 4 SPI vonallal rendelkezik egy mikrokontroller. A mi esetünkben várhatóan 2 SPI vonalra lesz szükségünk. Az A/D és D/A átalakítóknál is előszeretettel alkalmazzák a gyártók az SPI adatátvitelt, így ez egy jó választás lehet a mi esetünkben is. A megoldás egyszerű, az adattranszfer formátuma lehetővé teszi, hogy speciális interfész nélkül is kezelhetőek legyenek az áramkörök. Az SPI egy nagy sebességű soros szinkron I/O rendszer. Az SPI alkalmas egy CPU és kiegészítő áramkörei összekapcsolására, de több processzor együttműködését is lehetővé teszi. Az órajel fázisa és polaritása szoftverrel választható, így különféle megoldású soros elemek is összekapcsolhatók az SPI rendszerrel. A kiegészítő áramkörökben a Slave jelleg rögzített. A rendszer működését a 6. ábra mutatja be. A jelvezetékek: –
MOSI (Master Output Slave Input - Master kimenet Slave bemenet)
–
MISO (Master Input Slave Output - Master bemenet Slave kimenet)
–
SCK (Serial ClocK - Soros órajel, a Master küldi ki)
–
SS (Slave Select - Slave kiválasztás)
„Nyolc SCK óraciklus valósít meg egy adattranszfert. Miközben a Master eszköz kiküld egy adatot a Slave-hez (MOSI), a Slave is kiléptet egy másikat a Master számára (MISO). Ezt a kétirányú folyamatot az egyetlen órajelsorozat szinkronizálja.” [8] A Master és a Slave szerep hardver módon rögzített, eleve beépített (pl. sok memória IC készül ezzel a megoldással, mind 17
Slave jellegű). A rendszert használó gyártók megegyeztek, hogy melyik áramkörtípushoz melyik címet használják – a Slave-nél a cím is rögzített, beépített.
6. ábra – SPI kommunikáció. [8] „Az SPI adattranszfer is tartalmaz parancsot, amit a Master küld. A parancsok az IC kapcsolatokat támogatják, pl. egy EEPROM terület folyamatos feltöltése adatokkal – egyetlen paranccsal előírható.” [8]. Az SPIx egységek blokkvázlata a 7. ábrán látható. Bár különleges beállításokra is lehetőség van, normális esetekben a master egység (a mi esetünkben a mikrokontroller) szolgáltatja az adatforgalom szinkronizálásához szükséges órajelet, amelyet az FCY órajelből állíthatunk elő az elsődleges és a másodlagos frekvenciaosztók segítségével. Az elsődleges osztónál 1:1, 1:4, 1:16 és 1:64 frekvencia osztási arány választható. A másodlagos osztónál 1:1 és 1:8 között osztásarány állítható be.
18
7. ábra – Az SPIx modulok blokkvázlata. [9] „Az SPI kommunikáció duplex módban történik, tehát amikor egy adatbit kilép az MOSI vonalon, akkor egy bitet beléptetünk a MISO vonalon is. Így, mire 8 adatbitet kiléptetünk, addigra egy 8 bites adatot be is olvastunk. A ki- vagy beléptetett adat nem feltétlenül értelmes információ, hiszen a kommunikáció kezdetén a slave még nem tudhatja, hogy milyen adatot várunk tőle. A fordítottja is előfordulhat: egy külső memória adatainak beolvasásakor a master eszköznek már "nincs mondanivalója". A kommunikáció azonban megköveteli, hogy ilyenkor is küldjünk ki valamit, például haszontalan nullákat.” [9] Például a PIC mikrovezérlők SPI egységei maximálisan 10 MHz-es buszfrekvenciával képesek működni. Ha a megcímzett eszköz ennél lassúbb, akkor a neki megfelelő kisebb buszfrekvenciát kell használni.
1.2.2.2.
Kommunikáció az eszköz és a gép között: USB
Rengeteg féle lehetőség adódik számítógép és eszköz vezetékes összekapcsolására. A teljesség igénye nélkül például, soros (COM), párhuzamos (LPT), FireWire, Ethernet (RJ45) portok. Ezek azonban régebbi, mára kevésbé népszerű, háttérbe szoruló szabványok, vagy éppen feleslegesen bonyolult implementációt jelentenének számunkra, és a mikrokontrollerek többsége nem is támogatja ezeket. Praktikusabb úgy választanunk a kommunikációs csatornát,
19
hogy egy minél elterjedtebb, jól implementálható szabvány szerinti kapcsolatunk legyen. Adódik tehát egy kézenfekvő választás: az igen elterjedt szabvány, az USB. Először szükséges megvizsgálni, hogy az USB kapcsolat eleget tesz-e a várakozásainknak. Az USB felépítését érdemes először áttekinteni. Minden USB rendszer egy hierarchikusan kialakított un. fa-struktúrájú és csillag topológiájú rendszer, melynek középpontjában a host (gazdagép) áll. A host tartalmazza a fő-vezérlőt (Host Controller) és a kiindulási pontot (Root Hub). Ehhez további eszközök és/vagy Hub-ok csatlakoztathatók. Az eszközök számára, a hálózat kialakítására nincsen különösebb megkötés, adatátviteli sebességkorlátai azonban vannak. Ez USB 1.0 illetve 1.1 esetén Low Speed módban 1,5 Mbit/s, Full Speed módban 12 Mbit/s (1,5 MB/s) sebességet jelent. Ez még kissé kevésnek tűnhet, de USB 2.0 szabvány esetén 480 Mbit/s (60 MB/s) névleges átviteli sebességet érhetünk el, ami USB 3.0 esetén egészen 5 Gbit/sec-ra (640 MB/s) nőtt [10]. „A távtáplálást használó eszközök maximum 100mA-t vehetnek fel összesen, és a terhelési csúcs nem haladhatja meg az 500mA-t. Ez egy kicsit szigorúnak hat, de ha nagyobb teljesítményre van szükségünk, használjunk külön tápegységet. A tipikusan alkalmazott eszközöknek ez a kis teljesítmény is elegendő.” [11] Az USB szoftvere egy kicsit bonyolult, hiszen az alkalmazások, a csatlakoztatott eszközök is egyre bonyolultabbak. A PC-ben futó szoftver két fő részből áll. Az egyik a Host controller amely az operációs rendszer részeként vezérli és ütemezi az egész USB buszt. Ehhez csatlakoznak az USB device driver-ek, melyek az eszközt szoftver oldalról kezelik. Az USB feladata csak annyi, hogy továbbítsa az adatokat az eszköz és drivere között (8. ábra). A másik oldalról pedig az eszközök is tartalmaznak valamilyen szoftvert, ami rendszerint egy mikrokontrollerben futó program. A Host foglal tehát csak erőforrást a PC-nkben, az eszközöket azután a host kezeli. Ez alapvetően eltér az eddigi gyakorlattól (hagyományos soros portok), és érthetővé teszi, hogy miért nem ütköznek az interruptok. Az egész hasonlatos egy szerver kliens rendszerhez, ami igen hatékonyan képes működni.
20
8. ábra – USB driver. [12] A kommunikációnak többféle fajtája van USB-n. A sokféle eszköz sokféle adatátviteli módot is igényel. Négy különféle és tipikus adatátviteli módszert honosítottak meg Control, Isochronous, Bulk és Interrupt elnevezéssel. A kommunikáció alapvetően csomagkapcsolt szisztémával működik, de az egyes módok között jelentős eltérés van.
Control adatátviteli mód: Ez az alapmód, amit minden USB eszköznek ismernie kell. Ezzel a módszerrel kommunikál egymással az eszköz és a host a csatlakoztatást követően. Ha szükséges, akkor később váltanak. Teljesen normál csomagkapcsolt üzemmód. Tartalmaz CRC ellenőrzést, és garantált az adatátvitel hibamentessége. Minden esetben kétirányú.
Isochronous adatátviteli mód: Ezt az adatátviteli módszert videó és audió jelek átvitelére fejlesztették ki. Valós idejű átvitelt támogat. Nincs CRC ellenőrzés az adatok ömlesztve közlekednek. Mindkét irányban kialakítható.
Bulk adatátviteli mód: Ezt is nagy mennyiségű adat átvitelére fejlesztették ki, azonban ez tartalmaz ellenőrzést és garanciát az adatok integritását illetően. Cserébe a valósidejűségről kell lemondanunk. Mindkét irányt tudja.
Interrupt adatátviteli mód: Nem a megszokott értelembe vett interruptról van itt szó. Ezt kifejezetten kis adatmennyiség rendszeres átvitelére fejlesztették ki. A Host ciklikusan lekérdezi az eszközt, és ha van adat, akkor azt interruptszerűen átviszi. Legfontosabb jellemzője, hogy nem foglal jelentős sávszélességet, és az adatátvitel egyirányú, mégpedig mindig az eszköztől a PC felé [12]. Látható tehát, hogy az igen elterjedt USB 2.0 szabvány adatátviteli sebessége a tipikus mérési feladatokhoz elegendő lehet. A külső tápellátás amennyiben szükséges könnyedén
21
megoldható, és Bulk adatátviteli módban, pedig az adatok integritása is garantált, ami a mérések hitelessége szempontjából fontos.
1.2.3.
A/D és D/A konverterek általában
Mivel az én feladatom az analóg-digitális (A/D) átalakítás köré összpontosult, most csak röviden szeretném bemutatni a digitális-analóg (D/A) átalakítást. A D/A konverter az elektronikában használt eszköz, amely átkonvertálja a digitális (általában bináris) kódot analóg feszültéség, elektromos töltés, vagy áram értékké. A jeleket könnyű tárolhatóság és továbbíthatóság miatt érdemes digitális formában kezelni, de bizonyos esetekben, például emberi érzékelés, vagy bármilyen analóg áramköri feldolgozás esetén szükséges lehet az adatokat átalakítani analóg jellé. A D/A átalakító feladata, hogy a digitális jelet hozzuk analóg formára. A ma kapható D/A átalakítók rendszerint rendelkeznek SPI csatornával, amely számunkra szükséges kritérium. Rengeteg fajta D/A átalakító létezik, mint például feszültség osztó típusú, súlyozásos eljárású, számlálót alkalmazó, súlyozott áramok összegén alapuló, szorzó típusú, inverz létrakapcsolást alkalmazó, stb. D/A átalakítók. Ezekkel most nem foglalkozunk részletesebben, helyette tekintsük át a számunkra fontos analóg-digitális átalakítók működését. Az A/D átalakító egy olyan áramköri kapcsolás, amely egy analóg (folytonos) elektromos feszültséget, vagy áramerősséget digitális formára alakít át, digitalizál. Végeredményben így időben és amplitúdójában is diszkrét számértéket kapunk. Az elektronikában sok helyen az analóg formánál megbízhatóbb, robosztusabb digitális formát részesítik előnyben, ezért egy fontos terület az analóg-digitális átalakítás. Az analóg- digitális átalakító (angolul: ADC – Analog to Digital Converter) feladata tehát, hogy a bemenetre érkező „A” analóg jelnek megfelelő „D” digitális jelet állítson elő a kimeneten (9. ábra). A működéshez szükséges egy R referencia (általában egy U R referenciafeszültség), amelyhez az A/D átalakítók az A analóg mennyiséget viszonyítják (D = k*A/R) és amely a kimeneti feszültség maximális értékét is meghatározza.
22
9. ábra – A/D konverter. Az analóg jelet – vagyis a 0…R tartomány minden pontjában értelmezett jelet (feszültséget) – egyenlő részekre kell osztani, és minden egyes szakaszhoz egy-egy számot (digitális mennyiséget) kell rendelni a lehető legkisebb hibával. Az analóg jel tengelyének egyegy elemi szakasza (ΔA), amelyhez ugyanaz a digitális kód tartozik, a kvantum. Egy analóg jel annál pontosabban ábrázolható digitális értékekkel, minél kisebb egy elemi lépcső, vagy kvantum nagyság. Az analóg jelábrázolással ellentétben, ahol a mérendő mennyiségeket folyamatos mérő jelé alakítják át, a digitális mérési jel ábrázolásánál csak diszkrét mérőjelek fordulnak elő, amelyeket mintavételezéssel, kvantálással és kódolással állítanak elő. A kvantálásnál elkerülhetetlen az információvesztéség. Az ésszerű kvantálás a fizikai mérőjel fajtájától és az előirányzott alkalmazásától függ. Az A/D átalakítók bemeneti jele a legritkább esetben egyenfeszültség. Az átalakítandó jel, attól függően, hogy milyen forrásból származik, lassan vagy gyorsan változhat az idő függvényében. Az időben változó analóg jelek esetén- ahhoz, hogy a jelből képzett digitális információt megfelelő legyen – meghatározott időközönként a jelből mintát kell venni. A mintavételezés gyakoriságát annál gyorsabban kell venni, minél gyorsabban változik az analóg jel. Az analóg jel mintavételezési gyakoriságának legalább kétszer akkorának kell lennie, mint a jel változásának legnagyobb frekvenciája. Analóg-digitális átalakítók jellemzői: –
felbontás: A/D átalakító felbontása kifejezhető egy kimeneti egységnek megfelelő bemeneti lépcsővel is.
–
a bemeneti feszültség változásának tartománya: A/D átalakító bemenetén jelentkező analóg mennyiség változásának maximális tartományát képviseli.
–
nemlinearitási
hiba:
A/D
átalakító
valós
karakterisztikájának
ideális
karakterisztikától való maximális eltérését fejezi ki: A nemlinearitási hiba mértékegysége az LSB. 23
–
átalakítási sebesség: az időintervallumot adja meg, amely egy átalakításhoz szükséges. Mértékegysége: (µs) vagy (ms).
–
offszet hiba: Átviteli karakterisztikának a kedvezőponthoz viszonyított elérése. Mértékegysége: LSB [13]
Az A/D konvertereknek is sok fajtája van, ezek közül néhány: fokozatos közelítésű, feszültség frekvencia átalakítás, kompenzációs elv szerinti, sample and hold, stb. Az egyes A/D konverterek működési elvére nem térek ki részletesebben, mert erre nincs szükség. A konverterek paraméterei alapján kit tudunk választani egy számunkra megfelelő A/D átalakítót, ehhez nem kell ismernünk a pontos áramköri kapcsolását és áramköri működését, elég csupán az átalakítás elvi mentét és a főbb jellemzőket általánosságban megismerni.
1.2.4.
Műveleti erősítők
A potenciosztáttal leegyszerűsítve két elektród potenciálkülönbségét szeretném mérni és szabályozni is. Ahhoz, hogy a potenciosztát szabályozzon szükségünk lesz műveleti erősítőre, ahogy azt az 1. ábrán is láttuk a potenciosztát elvi felépítésénél.
10. ábra – Műveleti erősítő. Nézzük meg, hogyan működik a műveleti erősítő (10. ábra). Bal oldalon a található két bemenet egy + és egy - láb, alul és felül található a negatív és pozitív tápfeszültség bementi lába, jobb oldalon pedig a kimenet. Tekintsük most ezt, mint ideális műveleti erősítőt. Ekkor a kimeneten pontosan a bemenetek + és - lábai közti feszültség különbséget kapjuk megszorozva a nyílt hurkú erősítési tényezővel (angolul open loop gain, jele: A.) Ha a bemenetek közötti különbség nulla, akkor a kimenet is nulla, egyébként pedig ideális esetben, ha a különbség akármilyen kicsi is a végtelen erősítés miatt a kimenet is végtelen. Ez a gyakorlatban maximum a tápfeszültség érétke lehet, ami tipikusan ±15V. A cél gyakran, hogy ez az erősítés tényező (A) minél nagyobb legyen, és így pici eltérésre is gyorsan kivezérlődjön valamelyik irányba az erősítő. A valóságban természetesen az erősítők jóval rosszabbak az ideálisnál. 24
Az műveleti erősítőket sokféle célra lehet felhasználni, a nem invertáló erősítővel például a bement egy számszorosát tudjuk előállítani, a differenciálerősítővel két jel amplitúdójának különbségét tudjuk erősíteni, az erősítők szorzásra is használhatók, stb. Figyelembe kell vennünk, hogy ezek az erősítők nem ideálisak, es ezek problémát is okozhatnak. Látható tehát, hogy mindenképpen szükségünk van műveleti erősítőre egy potenciosztát építése kapcsán, azonban ennek részleteibe most nem kívánok betekinteni, ez inkább a villamosmérnöki, áramkörtervezői feladatok közé tartozik.
1.3.
Rendszerterv
Célunk egy teljesen számítógép-vezérelt potenciosztát építése, ezért az analóg jelgenerálást valamiféle digitális-analóg konverzióval kell megoldani, a gyűjtendő adatot pedig analógdigitális konverzió után tudjuk tárolni, utófeldolgozni. A rendszert hosszú idejű folyamatos elektrokémiai mérésekre szeretnénk használni, ezért fontos a rendszer folyamatos, stabil működése. A műszaki követelményeket is ennek megfelelően alakítottuk ki. A rendszer alapvető működési paramétereit már korábban lefektettük. Ezeket külső konzulensem Vesztergom Soma és diáktársam Taróczy-Tóth Zsigmond dolgozták ki az elektrokémiai és általános elektronikai méréseknél fellépő kritériumok alapján. A követelmények így már korábban megjelentek Zsigmond TDK dolgozatában, így én is ezeket tekintettem, mint a rendszerünk műszaki követelményei. „Az általunk az analóg potenciosztát áramkörrel szemben támasztott követelményeink a következőek: –
az átfolyó áram nagysága legyen legalább ±2 A, a műszer legyen képes az áramot több méréshatáron mérni, a legkisebb méréshatáron legalább 0,1 nA pontossággal
–
a beállítható feszültség érték maximuma legyen legalább ±4 V a referencia elektróddal szemben
–
a nyílthurkú erősítési tényező az 1 mHz – 100 kHz tartományon ne essen 10 5 nagyságrend alá
–
az egységnyi erősítés határfrekvenciája legyen nagyobb, mint 10 MHz
–
Heaviside jellegű bemeneti jel esetén az erősítő kimenenti fokozatának maximális változási sebessége (az úgynevezett slew rate) legyen legalább 50 V/µs
–
a potenciosztát beállási ideje legyen legalább 5 µs-nál alacsonyabb” [1]
Mérési oldalról alapvetően az A/D konvertáló feldolgozási sebességét, valamint a további adatátvitelek sebességét kell vizsgálnunk egészen, amíg az adatot eljuttatjuk a PC-hez, 25
ahol a feldolgozás fog megtörténni. A mi A/D konverterünkkel szemben támasztott követelményeink (a megfelelő pontosságon és alacsony zajszinten túlmenően) a kétcsatornás működés, a legalább 100 kSample/s-os mintavételezési frekvencia, illetve legalább 16 bites felbontás. További követelményünk az átvitellel kapcsolatban, hogy ezt az átkonvertált digitális adatot kell továbbítanunk. Ez a gyakorlatban azt jelenti, hogy minimum 100 kSample/s-os mintavétellel és 16bites felbontással megkaphatjuk, hogy 100*16, vagyis 1600 kbit/s-os adatátvitel várható minimálisan 1 csatorna esetén. Ez két csatornánál duplázódik, vagyis 2*1600=3200 kbit/s-os minimális adatátviteli sebesség elvárható, ami átszámítva byte-ra 400 kbyte/s-ot ad. Mivel ez egy minimális adatátviteli sebesség, ezért érdemes ennek jóval fölé tervezni. Látható, hogy a körülbelül 1 Mbyte/s-os adatátviteli sebesség várhatóan már bőségesen elegendő lehet, ami egy mai rendszernél nem számít kiemelkedően magasnak, így nem is okozhat problémát a megvalósítása. Az én szemszögemből a rendszer építőkövei az elektrokémiai cella, az analóg potenciosztát áramkör, a digitalizálást végző két csatornás A/D átalakító, az adatátvitelt végző mikrokontroller és a feldolgozást és tárolást végző személyi számítógép. Ezeket a részegységeket kell összeköttetésbe hoznunk egymással. Tehát az elektrokémiai cellában található elektródokról érkező analóg feszültség és áramerősség értékeket kell egy áramköri előfeldolgozást követően A/D konverter segítségével digitalizálnunk. A fordított irányú kapcsolat, azaz a digitális-analóg átalakítás, illetve a küldött és fogadott adatok számítógépes feldolgozása nem része ennek a dolgozatnak. A rendszerterv a 11. ábrán látható. Én tehát az ábra felső részén látható adatátvitel megvalósításával foglalkoztam, amelynek a része az A/D átalakító használata, a mikrokontroller programozása.
26
11. ábra – Rendszerterv.
27
2. A megvalósításhoz választott eszközök 2.1.
PIC32 mikrokontroller
A Microchip által gyártott PIC (Peripheral Interface Controller) mikrokontroller család termékei mind az ipari felhasználás, mind az amatőr felhasználók körében igen népszerűek. Köszönhető ez alacsony áruknak, széles spektrumú felhasználhatóságuknak, a kiterjedt leírásoknak
és
kódgyűjteményeknek,
az
ingyenes
fejlesztőkörnyezetnek,
és
újraprogramozhatóságuknak is. A egyetemi laboratóriumban több PIC eszköz volt már felhasználva a legkülönfélébb eszközfejlesztések során, így a mi választásunk is a PIC mikrokontroller családra esett, azon belül pedig a jelenleg kapható legnagyobb teljesítményű 32 bites mikrovezérlőre a PIC32MX795F512L-re (12. ábra) [14].
12. ábra – PIC32MX795F512L mikrokontroller. Ez a mikrokontroller egy 100 lábú 80 Mhz-en működő nagysebességű mikrokontroller sokcélú felhasználhatósággal. A számunkra fontos kommunikációs lehetőségek, azaz az USB kapcsolat a számítógéppel, és az SPI csatorna A/D és D/A konverterek összekötéséhez rendelkezésünkre állnak ezen a mikrokontrolleren. Ahhoz, hogy ezt a mikrovezérlőt programozni, tesztelni tudjuk, mint más eszközfejlesztők, mi is egy fejlesztőpanelt alkalmaztunk először. 28
Az általunk választott mikrokontrollert egy Microchip Explorer 16 fejlesztőpanelbe ültettük [15]. Ez a panel többek között lehetőséget ad arra, hogy sajátkészítésű kiegészítő eszközöket illesszünk hozzá, USB kapcsolatot létesítsünk egy PC-vel, programozzuk a mikrokontrollert egy külön programozó eszköz hozzákapcsolásával. A fejlesztőpanelbe ültetett, és tesztelésre a számítógéppel összekapcsolt mikrokontrollerünk látható a 13. ábrán.
13. ábra – PIC32 mikrokontroller a fejlesztőkártyán. A mikrokontroller számunkra fontosabb paraméterei láthatók a 14. ábrán.
Paraméter Érték Termékcsalád PIC32MX7xx Architektúra 32 bit Órajel 80 MHz Programmemória 512 kByte RAM 128 kByte Tápfeszültség 2,3 – 3,6 V DMA csatornák száma 8 db SPI vonalak száma 4 db USB v2.0 (host és OTG is) Belső A/D csatornák száma 16 db Digitális időzítők 5 db (16 bit) Komparátorok 2 db Belső oszcillátorok 8 Mhz, 32 kHz Digitális I/O vonalak 85 db
14. ábra – A választott PIC32 mikrokontroller főbb paraméterei. 29
A mikrokontroller programozása a Microchip MPLAB Integrated Development Environment (IDE) szoftverével lehetséges [16], amelyet később tárgyalunk részletesen.
2.2.
16 bites A/D konverter
A meglévő kritériumoknak megfelelően ki kell választanunk egy konkrét A/D átalakítót. Választásunk során a Linear Technology termékpalettáját tekintettük át. A választás az LTC1865ACMS típusú A/D konverterre esett, amelynek főbb paraméterei a 15. ábrán láthatóak [17].
Adat Felbontás Csatornák száma Bemeneti jel Mintavételezési frekvencia Tápfeszültség (VDD) Referencia-veszültség (VREF) Bemeneti tartomány Analóg bemenet Teljesítmény Digitális kommunikáció Kiszerelés
Érték 16 bit 2 feszültség 250 kSample/s 5V 0–5V ± VREF differenciális 4,25 mW SPI MSOP-8
15. ábra – Az LTC1865ACMS A/D konverter főbb adatai. A konverter SPI kommunikációképes, így képes lesz együttműködni SPI csatornán keresztül a mikrokontrollerünkkel. A 16 bites mintavételi felbontás és a két csatorna szintén követelmény volt. A mintavételi frekvencia 250 kSample/s ami két csatornára leosztva 125 kSample/s, ami meghaladja a kívánt 100 kSample/s értéket. Itt szükséges újraszámolni az eddig kiszámolt adatátviteli sebességeket, hiszen a konkrét A/D konverter miatt változott az értéke. 250 kSample/s szimbólumsebesség 16 biten megfelel 4 Mbit/s adatátviteli sebességnek, ami pedig átszámítva 0,5 Mbyte/s sebesség. Az USB kapcsolat által előirányzott 1 Mbyte/s PC irányú adatátviteli képesség tehát még mindig elegendő a konverterünk számára.
30
2.3.
A fejlesztői környezet
A következőkben áttekintem a fejlesztés során rendelkezésünkre álló eszközöket. A hardveres környezetet a Microchip Explorer 16-os fejlesztőkártyája és az általunk választott, beleültetett PIC32MX795F512L típusú mikrokontroller adja. A mikrokontroller programozására szolgáló szoftveres környezetet a PC-n futó MPLAB IDE 8.76-os verziójú szoftvere biztosítja, amellyel a mikrokontrollert C-ben tudjuk programozni. A PC oldali adatfeldolgozáshoz pedig LabVIEW-t használtunk.
2.3.1.
Hardveres környezet
Hardveres oldalról magán a mikrokontrolleren kívül szükségünk volt egy fejlesztőkártyára is. Ennek a segítségével tudtuk elkezdeni az ismerkedést a mikrokontrollerrel. Ezen a kártyán kívül szükségünk volt még egy eszközre, ami a megírt kód felprogramozásáért felelős. Ez az eszköz nálunk a Microchip ICD3-as programozó és hibakereső eszköze volt. Ez a kis doboz egyik oldalról USB-vel csatlakozott a számítógépünkhöz, másik oldalról pedig egy RJ-11 porton keresztül kapcsolódott a fejlesztőkártyához. Így ennek segítségével bármilyen USB-vel, és feltelepített MPLAB IDE szoftverrel rendelkező számítógépről lehetőségünk van programozni a mikrokontrollert. Érdemes megvizsgálnunk, hogy az Explorer 16-os fejlesztőkártya milyen lehetőségeket kínál számunkra a fejlesztés során.
16. ábra – Explorer 16 fejlesztőkártya layoutja. 31
Az Explorer 16 kártya fontosabb részei (16. ábra): –
100 tüskés csatlakozó a PIC mikrokontroller csatlakoztatására (1)
–
9V-os egyenáramú tápcsatlakozó, az áramellátásért felel (2)
–
USB csatlakozás, ezen keresztül valósíthatók meg az USB-s adatkommunikációk (6)
–
RJ-11
port
az
ICD
(In
Circuit
Debugger)
csatlakozója
az
eszköz
programozásához (7) –
kétsoros 16 karakteres LCD kijelző (9)
–
8 ledes visszajelző (13)
–
nyomtatott áramköri előkészítés egyéni fejlesztések hozzákapcsolására (17)
–
PICtail Plus kártya foglalat és csatlakozósor (18) A fejlesztés során elsőként a 100 tüskés foglalatba rögzítettük a mi PIC32-es
mikrokontrollerünket. A fejlesztőkártyához minden használatnál csatlakoztattuk a tápegységet, az ICD programozót az RJ-11 porton keresztül, és összekötöttük még a kártyát a PC-nkkel USB-n keresztül. A kezdeti ismerkedés során, és a későbbi tesztelések során hasznát vettük a ledeknek, amelyekkel a program normális futásáról győződtünk meg. A fejlesztés elején a 16. ábrán 18-as sorszámmal jelölt jobb szélső érintkezőket használtuk a saját kis áramkörünk hozzákapcsolására, majd később felhasználtunk részeket a 17-es sorszámú nyomtatott áramköri részből is például tápfeszültség és föld biztosítására. Ezen dolgozat elkészülésekor már folyamatban van egy új nyomtatot áramkör készítése. Ez a tervek szerint tartalmazni fogja a teljes potenciosztát áramkört és az Explorer 16 fejlesztőkártya alapján azokat a részeket, amelyek a beültetéshez szükségesek. Így a saját áramköri rész és a mikrokontrollert kiszolgáló áramkör egy lapra kerülhet. Ezzel teljesen kiváltható lesz a fejlesztőkártya, amelynek, mint a neve is mutatja a fejlesztés, építkezés során van fontos szerepe.
2.3.2.
Szoftveres környezet a mikrokontrolleren
Miután összekapcsoltuk a fejlesztőpanelünket a számítógéppel, szükséges volt elkezdenünk a programkód (firmware) megírását. A mikrokontroller programozására a Microhip által ajánlott MPLAB IDE 8.76-os verziójú szoftverét használtam. AZ MPLAB IDE (Integrated Development Environment) egy ingyenes grafikus fejlesztőkörnyezet beágyazott alkalmazások írására, azaz a Microchip PIC sorozatú mikrokontrollereinek programozására. Ez több dologra alkalmas, mint például alkalmazásfejlesztés, hardveres emulálás, hibakeresés. Az alkalmazások írása történhet Assemby és C nyelven is. Én C nyelven írt kódot készítettem vele. A hagyományos számítógépre írt programoktól egy beágyazott eszközre való fejlesztés során eggyel több lépésünk van, ha ki akarjuk próbálni a kódunkat: itt a lefordított kódot fel is kell 32
tölteni az eszközre. Szerencsére az interneten sok példakód rendelkezésre állt, amelyekkel könnyebben el lehetett kezdeni az ismerkedést a mikrokontrollerünkkel. Például a fejlesztőkártyán lévő ledek és a kijelző tesztelésére is léteznek elérhető, kész programkódok.
2.3.3.
Szoftveres környezet a PC-n
A mérések kezelésére készített szoftveres környezet, azaz maga a potecisztátot kezelő szoftver egy PC-n futó LabVIEW program. A LabVIEW (Laboratory Virtual Instrumentation Engineering Workbench) egy rendszertervező szoftver, amely lehetőséget biztosít a mérnökök számára, hogy virtuális szoftveres mérőrendszereket hozzanak létre, amelyhez valódi hardver hozzákapcsolás is lehetséges, és így teljes értékű mérőrendszert kiépíthetnek vele. Leggyakoribb felhasználási területei az adatgyűjtés, elektronikus műszerek vezérlése és ipari automatizálás. Használható különféle platformokon úgy, mint Microsoft Windows, különféle UNIX alapú rendszerek és Mac OS X. Ellentétben a hagyományos programozási nyelvekkel a LabVIEW egy vizuális programozási nyelv, amely ötvözi a jól ismert programozási elemeket (változók használata, értékadás, stb.) a grafikus programtervezéssel, így kezdő programkészítők számára átláthatóbb, egyszerűbb vele dolgozni a „fogd és húzd” elv (drag and drop) miatt. Sok előre definiált építőelemből válogathatunk, melyek között akár találhatunk komplex feladatokat megvalósító egységeket is (például egy oszcilloszkóp.) A LabVIEW a PC-be érkező adatok fogadását, tárolását és megjelenítését, illetve a kimenetre küldött jelalak előállítását végezte. A LabVIEW-s program fejlesztése az ELTE-n történt. Ott korábban is foglalkoztak már mérésadatgyűjtéssel, ezért jelentős tapasztalattal és forrással rendelkeztek ezen a téren. Több program is készült már ott, ezen vezérlőprogram is ennek a szoftvercsomagnak része lett. Teszteket végeztünk a bejövő adatforgalomról LabVIEW segítségével, hogy meghatározzuk az USB kapcsolat maximális sebességét. Egy tesztelésre szolgáló stringet folyamatosan küldtünk a mikrokontrollerről a gép felé, és a tesztelést végző LabVIEW program kiszámította az időegység alatt érkező adatmennyiséget, amely a 17. ábrán látható. A mérést végző programrészletet Taróczy-Tóth Zsigmond készítette el korábban [18].
33
17. ábra – A bejövő adatforgalom sebességének tesztelése LabVIEW programmal. Az átvitel 1 Mbyte/s sebességgel még biztosan zajlik akkor is, ha a fogadással párhuzamosan nagysebességű adatküldést végzünk. Ezek az eredmények meggyőző bizonyítékai annak, hogy az eszköz alkalmas a megfelelő adatátviteli sebességű USB kommunikációra, hiszen a bejövő átvitel sebessége várhatóan egy csatorna esetén 250 kbyte/s körül alakul, ami két csatorna esetén is csak 500 kbyte/s, amely alatta marad az 1 Mbyte/s-os mért átviteli sebességnek. Tehát az USB-s adatátvitelünk képes lesz átvinni az általunk tervezett terhelést.
34
3. Az implementáció módja 3.1.
Bevezetés
Áttekintettem a rendelkezésemre álló eszközöket, amelyekre a megvalósítás során szükségem lesz. A következőkben az általam választott megszakításkezelési technikákat, és a mérésadatgyűjtés szoftverének működését fogom bemutatni.
3.2.
Megszakításkezelés
A következőkben a mikrokontrollerünk várható terheltségének számítását végeztem el, és áttekintettem a lehetséges megszakításkezelési, ütemezési technikákat. A mikrovezérlőnek programfutás közben sok esetben kell különböző eseményekre reagálnia. Ilyen lehet például egy nyomógomb állapotváltozása. Ennél sokkal bonyolultabb esetek is adódnak, amikor például a mikrovezérlő USB vagy soros vonalon kommunikál a számítógéppel, vagy más időkritikus folyamatot kell kiszolgálni, például a mért adatok konvertálásáért felelős A/D átalakítót. Az A/D átalakítónk 250 kSample/s sebességgel képes dolgozni. Ez azt jelenti, hogy 4 µs-onként 16 bit új adatot kell beolvasni, és beleírni a bemeneti bufferbe. Az ilyen jellegű feladatok ellátásának megtervezésekor fel kell mérni, hogy elég hatékony lesz-e a programunk, vagy belefullad a teendőkbe. Lehetőségünk van a processzor által kezelt kétféle megszakításkezelési stratégia használtára, amelyek a polling és az interrupt típusú megszakításkezelés. A polling egy lekérdezés alapú módszer, amely folyamatosan ismétlődve lekérdezi, hogy van-e készen álló adatküldés, vagy fogadás. Az interrupt módszernél megszakítás érkezik, amely egy olyan esemény, ami megállítja jelenleg futó folyamatot a CPU-ban így a CPU képes elvégezni a szükséges új feladatot. További lehetőség a DMA alkalmazása, amely közvetlen memóriahozzáférést jelent. Ilyenkor a folyamatos adatküldésünk csak a szükséges vezérlőjelek küldésének idejére veszi igénybe a processzort, egyébként pedig annak megkerülésével tárolja el a beérkező adatokat a memóriába. Így jóval több idő marad az egyéb kérések feldolgozására. Polling
A Polling egy adott jellemző változásának figyelése az arra vonatkozó adatok folyamatos újrakérésén, és az előző állapottal történő összehasonlításán keresztül. A polling igen erőforrás35
pazarló megoldásnak számít, hiszen az ilyen módon megvalósított változás-figyelés akkor is időt és feldolgozási kapacitást emészt fel, ha változás valójában nem történt. A polling nem túl hatékony módszer, mert a CPU időt arra pazaroljuk, hogy lekérdezéseket hajtson végre, illetve tovább rontja a hatékonyságot, ha túl ritkán, vagy túl gyakran végezzük a lekérdezést. Folyamatos adatátvitel mellett a mi rendszerünknél nem érdemes ezt a megszakításkezelést választani. Interrupt
Sokkal hatékonyabb módszer, ha programmegszakításokat várok. Ha érkezik egy megszakítás, akkor abbahagyom az eddig végzett folyamatot, és kiszolgálom a megszakítást, majd visszatérek a korábbi tevékenységhez. Az Interrupt a megszakítási kérelem által elindított folyamat. A megszakítás kezelése során a processzor először a verembe menti az aktuális végrehajtási állapotot leíró regisztereinek tartalmát, majd a megszakítás kezelő eljárásnak adja át a vezérlést. Ennek befejezése után a korábban elmentett regisztereket visszatölti, majd folytatja a megszakított feldolgozási műveletet. A megszakításokat a processzorok időzítési feladatok, illetve be-/kiviteli folyamatok megvalósításában használják fel. A mikrovezérlők felépítése a programmegszakítások révén lehetővé teszi, hogy a program hasznos tevékenységgel töltse az idejét, míg az események bekövetkezésére vár, az esemény bekövetkeztekor viszont haladéktalanul reagáljon. A programmegszakítás (interrupt) azt jelenti, hogy a program futása egy külső vagy belső eseménybe következte miatt megszakad, s majd csak a programmemória egy másik helyén elhelyezett utasítássorozat (a progammegszakítás kiszolgálását végző kód) lefutása után tér vissza a CPU az eredeti program folytatásához. Természetesen ahhoz, hogy a programmegszakítás kiszolgálása után zavartalanul folytatódhasson a program futása, programmegszakításkor el kell menteni a futó program állapotát (beleértve azt is, hogy melyik a soron következő utasítás, s hogy mi volt a státuszbitek tartalma), visszatéréskor pedig helyre kell állítani. A 18. ábrán látható a PIC32 mikrokontroller interrupt rutin eljárásának eleje, az úgynevezett prologue. Ekkor menti el a mikrokontroller az éppen futó folyamat állapotát.
36
18. ábra – Interrupt prologue. Megszámolható, hogy 29 utasítás végrehajtása szükséges már az interrupt kezdetén. A megszakítás során végrehajtott utasítások után a program visszatér az eredeti utasításához. Az interrupt rutin végén visszamásolja az adatokat a regiszterekbe, ez az úgynevezett epilogue, amely a 19. ábrán látható.
19. ábra – Interrupt epilogue. Itt is megszámolható tehát, hogy 24 utasítás végrehajtása szükséges az interrupt végén. Ez összesen 53 utasítás egyetlen interrupt érkezése miatt. Az 53 utasítás 106 (53*2) órajel ciklus alatt hajtódik végre, hiszen egy utasítás végrehajtásához 2 ciklus szükséges. A 37
mikrokontroller 80 MHz-es processzora üres járatban, ha csak interruptokat hajtok végre 80 Mhz / 106 ciklus = 0,7547 MHz (754,7 kHz) maximális processzor foglaltság (100%) mellett, a maximális interruptfrekvencia, úgy hogy az interrupt lekezelése 0 hosszúságú, azaz nem végzünk tényleges műveletet. 125 kSample-s üres járatás estén 125 / 754,7 = 16,5 %-os processzorterhelést
érünk
el.
További
utasítás
ciklusok
szükségesek,
a
tényleges
mintavételezéshez. Például ha még további 100 ciklust felhasználok, akkor már közel 30 %-os processzorterhelést kapunk. Tehát alapjáraton a folyamatosan beérkező mintavételi adatokkal már a processzort jelentősen leterheltem. Ehhez hozzájön még az USB kapcsolat kiszolgálása is. Látható tehát, hogy elég nagymértékben kihasználjuk a processzort, de a rendszer működőképes lesz. DMA
Ha nagyobb adatmennyiségeket kívánunk a memória egyes részei között mozgatni, vagy egy perifériális eszközről a memóriába beolvasni, akkor ehhez igénybe vehetjük a processzor utasításait. A folyamat óhatatlanul lassú lesz, mert mind az olvasási, mind az írási művelet legalább egy-egy buszciklust igényel, nem is említve még címek számolgatásához szükséges időket. A műveletek céljaira egy önálló, cél-processzort érdemes használni, amelyik az írási és olvasási címeket automatikusan, és igen gyorsan egyesével növeli, és a beolvasott adatot késlekedés nélkül írja a cél-helyre. Természetesen ezen folyamat alatt az igazi processzornak hallgatnia kell, nehogy a cím- vagy adatbuszon helyrehozhatatlan keveredés álljon elő. A DMA használatának előnye pontosan a processzor munkájának zavartalanságából fakad. A rendszer kérheti az adatok elhelyezését adott memóriaterületen, és a művelet befejezéséig nyugodtan foglalkozhat egyéb teendőivel. Az olyan rendszereknél, mint ADC, DAC és PWM rögzítés,
a legfontosabb követelmény a gyakori és rendszeres
memóriamozgatási feladat. A DMA-t lehet úgy konfigurálni, hogy kezelje a mozgatását az összegyűjtött adatoknak a periféria modulról, és behelyezze azt egy sokkal hasznosabb memóriaegységbe (például tömbökbe. [19]) Az órajel egyik fázisában van memória művelet, a másikban nincs. A DMA azon fázist használja, ahol a processzor nem végez memória műveletet. Interruptot pedig csak a blokkok végén használ. A DMA működése a mikorkontrolleren is ezen elvek alapján zajlik. A DMA csatorna átviszi az adatokat a forrástól a célig a processzor beavatkozása nélkül. A forrásnak és a célnak is van függetlenül konfigurálható mérete, és az átvitt bájtok száma független a forrás és a cél méreteitől. Az átvitelt kezdeményezheti mind a szoftver, mind egy interrupt kérés. Az átvitel megindulása után a DMA vezérlő végezni fogja a cell átvitelt, és a csatorna engedélyezett marad, amíg egy block átvitel befejeződik. Amikor a csatorna tiltott a további átvitel tilos lesz, 38
amíg a csatorna újra engedélyeződik. A DMA csatorna elkülönített pointereket használ az aktuális szó elhelyezkedésének nyomon követésre a forrás és a cél esetében.
Fogalmak: –
esemény:
minden
olyan
rendszeresemény,
ami
kezdeményezhet,
vagy
megszakíthat egy DMA átvitelt. –
tranzakció: egy egyszerű szó átvitele (4 byte-ig), ami egy olvasás és egy írás műveletből áll.
–
cell átvitel: az átvitt byte-ok száma, amikor a DMA csatorna átvitelt kezdeményezett egy másik eseményre várás előtt. A cell átvitel egy vagy több tranzakcióból áll.
–
block átvitel: az átvitt byte-ok száma, amikor a csatorna engedélyezett. A block átvitel egy vagy több cell átvitelből áll.
Tekintsük át a létező DMA működési módokat a mikrokontrollerünk esetén.
Basic Transfer mode: A DMA csatorna átviszi az adatot a source regiszterből a destination regiszterbe a processzor beavatkozása nélkül.
A Channel Soruce Start Address regiszter meghatározza a fizikai
kezdőcímét a forrásnak. A Channel Destination Start Address regiszter meghatározza a fizikai kezdőcímét a célnak. A forrás és a cél is függetlenül konfigurálható.
Pattern Match Termination mode: A Minta Illeszkedő mód engedi a felhasználónak, hogy befejezzen egy átvitelt, ha egy bájtnyi adat íródik, miközben az átvitel illeszkedik egy bizonyos mintához. Egy minta egyezését hasonló módon kezeli, mint egy block transfer befejezését. Ez a funkció olyan alkalmazásoknál hasznos, ahol egy változó méretű adatokra van szükség, és megkönnyíti a felállítását a DMA csatornának. Az UART (Universal Asynchronous Receiver/Transmitter) egy jó példa, ahol ezt hatékonyan lehet használni.
Channel Chaining mode: A Csatorna Láncolás mód egy kiterjesztés a DMA csatorna működtetéshez. A csatorna (slave csatorna) hozzáláncolható egy szomszédos csatornához (master csatorna.) A slave csatorna engedélyezve lesz, amikor a block transzfer a master csatornán végez. Ezen a ponton minden esemény a slave csatornán kezdeményezni fog egy cell transzfert. Amennyiben a csatornának van egy függő eseménye, a cell transzfer azonnal elkezdődik. A master csatorna átállítja az interrupt zászlót normálra, nincs tudomása a lánc állapotáról a slave csatornán. A csatornák természetes prioritási sorrendjében a 0-s csatorna a legmagasabb prioritású, és a 7-es csatorna a legalacsonyabb.
39
A következő példáknál hasznos lehet ez a mód: –
Adatátvitel egy perifériáról (pl. UART1-ből, DMA channel 0, SRAM-ba) egy másik perifériára (pl. SRAM-ból
UART2-be, DMA channel 1.) Amikor a
channel 0 befejezte az átvitelt, channel 1 engedélyeződik, és az adatátvitel azonnal megkezdődik. –
A/D konverter adatot visz át egy bufferba (csatlakozva channel 0-hoz.) Amikor a cél buffer0 megtelt (block transzfer végzett), a channel 1 engedélyeződik, és a további konverzió a buffer1-be kerül.
Channel Auto-Enable mode: A csatorna automatikus-engedélyező mód lehetővé teszi, hogy egy csatornát aktívan tartson még akkor is, ha egy block átvitel befejeződik, vagy minta egyezés következik be. Ez megakadályozza a felhasználót attól, hogy újra engedélyeznie kelljen a csatornát minden alkalommal amikor egy block transzfer megtörténik. Az üzemmód használatához a felhasználó fogja konfigurálni a csatornát. A csatorna normál viselkedést fog produkálni kivéve amikor az átvitel normál megszűnése nem eredményezi a csatorna letiltását. A normál block átvitel befejezésének definiálása: –
Block átvitel befejeződött
–
Minta egyezés felismerve
Ez a mód az olyan alkalmazásoknál hasznos, amelyek ismétlődő mintaillesztést végeznek. A mi adatátviteli céljainkra, azaz a folyamatos nagy sebességű azonos hosszúságú (16 bites) adatátvitelre leginkább a Channel Chaining mode a legmegfelelőbb. Mi ugyanis folyamatosan szeretnénk küldeni az adatokat az A/D konverterről, és amikor a buffer0 megtelik, akkor átváltunk a buffer1-re, ahogy azt a Channel Chainig mode második példájánál láthatjuk. Ez lényegét tekintve egy 2 bufferes buffert felcserélgető megoldás. Következtetés
A kívánt adatátvitelt nem célszerű polling technikával biztosítani, mert a folyamatos lekérdezés esetén nincs elég idő az adatátvitelre. Interrupt technikával ugyan nagyrészt lefoglalom a processzoridőt, de megvalósítható az átvitel. DMA lehet egy ésszerű választás, amely csak kevés processzor időt igényel, hiszen csak a blokkok írásának végén használ interruptot. Azonban az idő szűkössége miatt alapvetően mi az A/D és D/A konverziók működőképességének
elérésére
összpontosítottunk.
Így
egyszerű
interrupt
kezelést
alkalmaztunk, és nem valósítottuk meg a DMA átvitelt, amelyre egyébként a mikrokontrollerünk alkalmas lenne. A DMA használatát későbbre, a kód optimalizálásakor tervezzük bevezetni. 40
3.3.
A mikrokontroller vezérlőprogramja, USB és SPI kezelés
A mikrokontroller teljes vezérlőprogramjából én annak csak egy részének írásával, a méréshez, azaz a bemenethez kapcsolódó folyamatokkal foglalkoztam. Az általam készített kódrészletek közül most tekintsük át a megvalósítás szempontjából legfontosabbakat. A 20. ábrán látható az USB adatküldés kódjának egy részlete. Indításkor inicializálás után ez a kódrészlet újra és újra végrehajtásra kerül a main függvényben. Bemeneti irány esetén egy pár buffert: az EP3INEven-EP3INOdd (páros-páratlan) bufferpárt használjuk a mikrokontrollerünkben történő ideiglenes tárolásra. Amikor mért (A/D konvertált) adat érkezik az SPI csatornán, azt itt tároljuk el, majd amikor a két bufferből az egyik megtelik, akkor azt USB-n keresztül továbbküldjük a host (PC) felé. Eközben váltunk páros és páratlan buffer között, és a másik tömbbe elkezdhetjük feltölteni az új mérési adatokat. A kód egész pontosan azt jeleni, hogy csak akkor történik a host felé adatátvitel, amikor a FloodFlag 1-re vált, vagyis megtelik az egyik buffer. Ekkor az EP3INEvenNeedsServicingNext logikai változóból tudjuk, hogy melyik az éppen teli buffer, amelyet az USBTransferOnePacket függvény küld el a host felé.
20. ábra – USB adatküldés a host (PC) felé. A másik oldal a mikrokontroller és A/D átalakító közti SPI interfész kommunikációjának megvalósítása, amelyet a 21. ábrán látható kóddal kezdésképp inicializálunk. A/D átalakítótól jövő jelek fogadására az SPI 1-es csatornát használjuk.
41
21. ábra – SPI1 csatorna inicializálása. Látható, hogy igen sok lépésből áll az inicializálás, amelynek megértésére és beállítására a mikrokontrollerünk jól dokumentált Serial Peripherial Interface (SPI) referencia kézikönyvét használtam [20].
22. ábra – SPI – a konvertálás kezdete. A 22. ábrán látható az AD konvertálás forráskódjának első része. Az első sorban látható
SamplesRequested változó figyelésével kezdjük el a mérést. Ha ez a változó nem nulla, akkor van mérendő mintánk. Ha van mérendő mintánk, akkor a MeasNow változót állítjuk át ellenkező értékre. Ezzel azt kívánjuk elérni, hogy ne történjen minden megszakítás során mérés, mivel ekkor túl sok, felesleges gyakori méréssel túlcsordulás következne be. Ezért csak minden második megszakításra történik mérés. Mivel az AD konverterünk kétcsatornás, de ez egyetlen SPI interfészen keresztül kommunikál, ezért egy rövid 2 lépéses ciklusban végezzük el a két csatornánk konvertálását és adattovábbítását. Az ADConvert() függvény átbillent egy bitet az SPI csatorna vezérlésében, ezzel jelezve, hogy kezdődjön a konvertálás. Ezt követően egy 500 lépéses üres ciklus következik. Be kell látnunk, hogy ez nem egy szép megoldás arra, hogy a programunk várakozzon, amíg a konvertálás megtörténik az A/D-n, de egyelőre ezt 42
tűnt a legegyszerűbbnek. Itt szükséges megjegyezni, hogy emiatt a fordítóprogramban ki kellett kapcsolnunk a kódoptimalizálás funkciót, hogy a lefordított kódban valóban megtörténjen az üres ciklusok végrehajtása. A ciklusok végrehajtása kb. 3 s-nyi időbe telik. Ezután az ADTalk() függvény visszabillenti a konvertálást engedélyező bitet, és ezzel elkezdhetjük kiolvasni az adatokat az A/D konverterünktől a mikrokontrollerbe.
23. ábra – SPI – két csatorna kiolvasása. A 23. ábrán láthatóan a kétcsatornás A/D konverter egyik csatornájának kiválasztását az
SPI1BUF írásával tesszük meg. Ezután várunk, amíg a buffer fogadóképes lesz, vagyis az SPIRBF státusz bit át nem billen. Ekkor 6 lépésben kiolvassuk az SPI-n az adatokat és az éppen soron következő páros, vagy páratlan (even, vagy odd) bufferbe tároljuk le azokat, majd növeljük a soron következő adatot jelző számláló (NumberOfMeasData) értékét.
24. ábra – SPI – teli buffer esetén csere. A 24. ábrán látható módon a következő lépésben, ha már elértük a belső bufferunk méretének határát, akkor nullázzuk a NumberOfMeasData számlálót, és jelezzük, hogy telítve van a buffer a FloodFlag egyre állításával. Váltunk páros és páratlan buffer között, és az átvitel folytatódik tovább a ciklus újraindulásával. Eközben a 20. ábrán korábban látott kód alapján a mikrokontroller amint elég adat gyűlik össze, azt folyamatosan továbbküldi a host (PC) felé. Gyakorlatilag így folyamatosan tud zajlani a mérés.
43
3.4.
Értékelés
Az elkészült C kód mikrokontrolleren történő futtatásával, és a LabVIEW kód PC-n történő egyidejű futtatásával teszteltük a rendszert. A 25. ábrán látható a LabVIEW-s program képernyőfotója, mellyel a tesztet végeztük.
25. ábra – A LabVIEW program futása. Először feltöltöttük a kódot a mikrokontrollerre, majd futtattuk. Ezután az ábrán látható ablakból elindítottuk a LabVIEW-s programot is. Tesztelés céljára az analóg kimenetet összekötöttük a bemenettel. A mérés azonnal elkezdődik, és amint kiküldünk egy jelet a kimenetre az megjelenik a két alsó nagy grafikonon. Ez a két grafikon a mért, A/D átalakítóval digitalizált feszültség jel két csatornán. Fontos kiemelni, hogy ezek az én munkám szempontjából érdekes eredmények. A Waveform Generation hosszú fehér mezőjébe tetszőleges jelalakot formálisan megadva tudjuk tesztelni a rendszert. A Repeat mezőben tudjuk beállítani, hogy hányszor ismétlődjön meg a jel kiküldése. A kimenő jel számított érétke a jobb felső hosszúkás grafikonon látszik. Ahogy ezen az ábrán is látható, a teszt során generált jelalak megegyezik a két bemeneti csatornán mért jelalakkal. Ezt oszcilloszkóppal visszamérve az analóg bemeneti helyen, ugyan ezt az eredményt kaptuk. Ebből arra következtethetünk, hogy az általunk tervezett rendszer jól működik, ugyanis sikerült saját jelet előállítani, és ezt utána visszamérni. Ez azonban önmagában, így még nem egy potenciosztát. Ehhez a rendszerhez szükséges hozzácsatolnunk az analóg szabályzó áramkört, amelynek pedig 3 elektródban kell végződnie. Ezeket az elektródokat belehelyezve egy elektrokémiai cellába (ionos oldatba) már valódi elektrokémiai méréseket tudnánk végezni. Jelenleg folyik a tervezése annak a komplex 44
áramkörnek, amellyel a rendszerünk teljes értékű potenciosztátként tudjuk majd működtetni. Azonban az eddig létrejött rendszer már alkalmas lenne meglévő analóg potenciosztátokat vezérelni, és azokat hosszú idejű mérésre használni. Ezek tesztelésére idáig nem került sor, jobbnak látjuk megvárni, amíg elkészül a saját végleges áramkörünk, és majd azon fogunk teljes értékű elektrokémiai méréseket végezni.
45
4. Összefoglalás A dolgozat elején áttekintettem az elektrokémiai mérések mikéntjét, a potenciosztátok alapvető működését mérnöki szempontból. Kitűztük a célt, amely egy teljesen számítógép vezért potenciosztát mérőműszer építése. A rendszert hosszú idejű folyamatos elektrokémiai mérésekre szeretnénk használni, ezért fontos a rendszer folyamatos, stabil működése. A műszaki követelményeket is ennek megfelelően alakítottuk ki. A feladatok két irányba mutattak. A számítógépet tekintve a kezdőpontnak egyrészt egy kifelé irányuló fokozatot kellett megvalósítani, ahol az analóg jel előállítása (D/A konvertálás) után az analóg áramkörön keresztül a jelet kellett eljuttatni az elektródákhoz, másrészt egy bemenő fokozatott kellett megvalósítani, ahol az elektródáktól jövő analóg mérendő elektromos jeleket (A/D konverter segítségével) kellett digitalizálni, fogadni. Ez a dolgozat a második iránnyal, azaz a műszer bemeneti fokozatának építésével foglalkozik. Először áttekintettem és kiválasztottam a megvalósításhoz szükséges eszközöket, összekapcsolási lehetőségeket. A/D konvertálás céljára a Linear Techology LTC1865 típusú konvertert választottam, feldolgozó egységünk a Microchip által gyártott PIC32MX795F512L típusú mikrokontroller lett. Az adatküldés során kihasználtam az USB szabvány és az SPI interfész nyújtotta lehetőségeket. A mikrokontroller programjának írása C programozási nyelven történt. A programírás során nagy segítséget nyújtottak a mikrokontroller és az A/D átalakító adatlapjai és részletes dokumentációi, valamint a különböző szabványok dokumentációi. Végeredményben csapatunknak sikerült megvalósítani mindkét irányt, olyan tekintetben, hogy analóg jelet generálni és azt visszamérni is tudtunk számítógépről. Jövőbeni tervünkhöz, hogy ez az eszköz valódi potenciosztátként tudjon működni szükséges egy analóg áramkör, melynek feladata a szabályzás, és a mérendő jelek áramköri erősítése, kondicionálása. Már elkezdődött a tervezése annak a komplex áramkörnek, amelyre fel fog kerülni az analóg potenciosztát áramkör, az A/D és D/A konverterek, valamint a mikrokontroller és hozzá szükséges kiegészítő áramköri részek (USB, tápegység csatlakozás, stb.) is. Ezzel kapcsolatban már be is adtunk a jelentkezést a National Instruments a Virtuális Műszerezésért Alapítvány 2012. évi pályázatára [6]. További feladat lesz még a mikrokontroller kódjának javítása, optimalizálása.
46
Irodalomjegyzék [1] Taróczy-Tóth Zsigmond, „Számítógép-vezérelt potenciosztát építése, számítógéphez kapcsolása USB-RAW eszközként, és a műszer tesztelése LabVIEW környezetben,” TDK dolgozat, Pázmány Péter Katolikus Egyetem, Budapest, 2011 [2] Bard A.J. and Faulkner L.R., Electrochemical methods: Fundamentals and Applications, 2nd Edition, New York: John Wiley & Sons, 2000, ISBN 0471405213 [3] Dobos, Dezso, Electronic electrochemical measuring instruments. Budapest: Terra, 1966 [4] von Fraunhofer J.A. and Banks C.H., Potentiostat and Its Applications, Butterworths, 1972, ISBN 9780408702393 [5] Kiss László, Bevezetés az elektrokémiába. Budapest: Nemzeti Tankönyvkiadó, 1997, ISBN 9631882470 [6] Taróczy-Tóth Zsigmond, Lorántfy László, „Számítógép-vezérelt potenciosztát építése elektrokémiai kísérleti módszerek fejlesztéséhez,” Pályamunka a National Instruments a Virtuális Műszerezésért Alapítvány Pályázatára, 2012 [7] Dominic Sweetman, See MIPS run, 2nd Edition, San Fransisco: Morgan Kaufmann, 2007, ISBN 978-0-12-088421-6 [8] “Kommunikáció alapjai – Soros adatátvitel,” Feb. 3, 2007. [Online]. Available: http://www.hobbielektronika.hu/cikkek/kommunikacio_alapjai__soros_adatatvitel.html?pg=4 [9] Cserny István, „Az SPI kommunikációs csatorna,” [Online]. Available: http://esca.atomki.hu/PIC24/spi.html#Az_SPI_kommunik%C3%A1ci%C3%B3s_csatorna [10] Universal Serial Bus 3.0 Specification, 1st Revision, 2008. [11] „Univerzális Soros Busz (USB),” [Online]. Available: http://www.muszeroldal.hu/assistance/usb.pdf [12] Unviersal Serial Bus 2.0 Specification, 2nd Revision, 2000. [13] Cs. Kovács, A digitális elektronika alapjai, General Press Kiadó, 2007, ISBN 9789636430108 [14] „Microchip PIC32MX795F512L Data Sheet,” [Online]. Available: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en545660 [15] “Explorer 16 Development Board,” [Online]. Available: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dD ocName=en024858&part=DM240001 47
[16] „ Microchip MPLAB Integrated Development Environment,” [Online]. Available: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dD ocName=en019469&part=SW007002 [17] „Linear Technology LTC1865 ADC Data Sheet,” [Online]. Available: http://cds.linear.com/docs/Datasheet/18645fb.pdf [18] Taróczy-Tóth Zsigmond, „Számítógép-vezérelt potenciosztát építése, számítógéphez kapcsolása USB-RAW eszközként, és a műszer tesztelése LabVIEW környezetben,” TDK dolgozat, Pázmány Péter Katolikus Egyetem, Budapest, 2011, pp. 30-31 [19] CJ Ganier, “What is Direct Memory Access (DMA)?,” [Online]. Available: http://cnx.org/content/m11867/latest/ [20] „Microchip Serial Peripherial Interface Reference Manual,” [Online]. Available: http://ww1.microchip.com/downloads/en/DeviceDoc/61106G.pdf
48