Számítógép-vezérelt potenciosztát bemeneti fokozatának építése speciális és rutinszerű elektrokémiai mérésekhez Mérnöki tervezés beszámoló
Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Mérnök Informatikus MSc Vinis Ádám Lajos Témavezető: Tihanyi Attila Külső konzulens: Vesztergom Soma 2011.
Tartalomjegyzék Ábrajegyzék ............................................................................................................................3 1.
Absztrakt ........................................................................................................................4
2.
Potenciosztát ..................................................................................................................6
3.
4.
5.
6.
2.1.
Nagysebességű jel digitalizálása ..............................................................................9
2.2.
Rendszerterv ......................................................................................................... 10
Mintavételezés ............................................................................................................. 12 3.1.
Mintavételezés számítógépen ............................................................................... 12
3.2.
Mintavételezés saját eszközön .............................................................................. 14
3.2.1.
USB kapcsolat ................................................................................................ 14
3.2.2.
Microchip PIC 32 mikrokontroller .................................................................. 16
Adatátvitel a mikrokontroller és az A/D átalakító között................................................ 21 4.1.
SPI – Serial Peripherial Interface ............................................................................ 21
4.2.
A/D átalakító kiválasztása ...................................................................................... 24
A mikrokontroller sebesség vizsgálata ........................................................................... 25 5.1.
Polling és interrupt ................................................................................................ 25
5.2.
DMA...................................................................................................................... 28
5.3.
FPGA ..................................................................................................................... 30
5.4.
Következtetés ....................................................................................................... 31
Összefoglalás és kitekintés ............................................................................................ 32
Irodalomjegyzék ................................................................................................................... 33
2
Ábrajegyzék 1. ábra – A komplett mérőrendszer terve ...............................................................................5 2. ábra – Standard háromelektródos cella...............................................................................7 3. ábra – Piacon kapható potenciosztátok ...............................................................................8 4. ábra – A/D konverter ..........................................................................................................9 5. ábra - Kezdeti rendszerterv ............................................................................................... 11 6. ábra – Egy kereskedelmi forgalomban kapható hangkártya ............................................... 13 7. ábra – USB driver .............................................................................................................. 15 8. ábra – PIC32MX795F512L mikrokontroller ........................................................................ 17 9. ábra – PIC32 mikrokontroller a fejlesztőkártyán ................................................................ 18 10. ábra – A választott PIC32 mikrokontroller paraméterei ................................................... 19 11. ábra – A bejövő adatforgalom sebességének tesztelésére írt LabVIEW program ............. 20 12. ábra – SPI kommunikáció ................................................................................................ 22 13. ábra – Az SPIx modulok blokkvázlata ............................................................................... 23 14. ábra – Az LTC1865ACMS A/D konverter főbb adatai ........................................................ 24 15. ábra – Interrupt prologue ............................................................................................... 27 16. ábra – Interrupt epilogue ................................................................................................ 27 17. ábra – A kialakult megvalósítási terv ............................................................................... 32
3
1. Absztrakt Elektrokémiai mérésekkel az ipar, a környezetvédelem és a korrózióvédelem számos területén találkozhatunk. Az elektrokémiai méréseket kisméretű, egyszerű műszerek segítségével könnyen, gyorsan és olcsón el lehet végezni. Az elektrokémiai mérések egyik legalapvetőbb, legáltalánosabb, gyakorlatilag primer műszere a potenciosztát. Ilyen eszköz szinte minden elektronikai mérőeszközt gyártó vállalatnál fellelhető. A piacon is kapható potenciosztát segítségével az elektrokémiai vizsgálatok, alapkutatások alapvető kísérleteit könnyedén elvégezhetjük. Ezeket a méréseket kezdetben analóg műszerekkel végezték, amelyet mára felváltottak a digitális műszerek. A digitalizált mérésnek köszönhetően – ahol a műszert összekapcsolták egy személyi számítógéppel – egyszerűen szoftveresen megoldott a mérés vezérlése és az adatok gyűjtése, megjelenítése a számítógépen. Az így elvégzett mérések alkalmasak az iparban, a gyakorlatban alkalmazott elektrokémiai mérések elvégzéséhez. Ez azonban gyakran nem elegendő, ha már az alapkutatáshoz
szeretnénk
felhasználni
egy
gyártótól
rendelt
potenciosztátot.
A
potenciosztát és az azt vezérlő szoftver már nem elégíti ki az alapkutatásokat végző kísérletező elektrokémikus igényeit. Ugyanis az alapkutatások feltétele, hogy a mérőeszköz ne csak valamely ismert kísérleti technikával történő mérés elvégzésére legyen alkalmas, hanem újszerű mérések elvégzéséhez, új méréséi módszerek kidolgozásához is alkalmazható legyen. Ezt azonban a legtöbb gyártó nem veszi figyelembe, így az eszközeik, csak a standard, ismert alapmérések elvégzéséhez alkalmazhatók. Ezen megszorítások következhetnek hardveres és szoftveres korlátokból, korlátozásokból is. Az ELTE Elektrokémiai és Elektroanalitikai Laboratóriumában történt fejlesztések ezeket a megszorításokat igyekeztek feloldani az elmúlt évek során. Főként szoftveres fejlesztések történtek, amelynek célja egy olyan mérőrendszer kiépítése volt, amely eleget tesz az alapkutatások nyújtotta követelményeknek. Ilyen fontos követelmény, hogy az elektrokémiai rendszert hosszú idejű jelekkel perturbálva tudjuk vizsgálni. Tovább, hogy az ilyen mérések eredményeit a számítógépen tárolni, majd később feldolgozni lehessen. Az ELTE-n LabVIEW fejlesztői környezetben készült szoftver a National Instruments PCI-6014-es és PCI-4461 adatgyűjtő kártyáit használja régebbi, és újabb típusú piacon kapható potenciosztátok vezérléséhez. E fejlesztésnek köszönhetően új tudományos eredmények is születtek. Az alapkutatásokhoz azonban nem elegendőek az ismert pl. háromszögjel, négyszögjel, fűrészfogjel kimenetek, amelyeket a potenciosztát kimenetére tudunk kapcsolni.
4
Szeretnénk saját egyedileg zárt matematikai formában definiált függvényeket is a kimenetre helyezni. Elérkeztünk, tehát az igényhez, amely a meglévő LabVIEW szoftverrel vezérelhető saját potenciosztát építése. A műszerfejlesztési munka az Eötvös Lóránd Tudományegyetem Kémiai Intézete Elektrokémiai és Elektroanalitikai Laboratóriumának kezdeményezésére kezdődött el. A külső konzulensem Vesztergom Soma az Elektrokémiai és Elektroanalitikai Laboratóriumának PhD hallgatója. A jelenleg is folyó LabVIEW-s szoftver fejlesztését teljes egészében az ELTE Elektrokémiai és Elektroanalitikai laboratóriuma végzi. A műszerfejlesztés mérnöki mivolta miatt kapcsolódott be a munkába a PPKE-ITK Elektronikus Mérőlaborja Tihanyi Attila tanár úr konzulensi vezetésével. A munkát Taróczy-Tóth Zsigmond diáktársam kezdte meg a tavalyi évben, amikor is önálló laboratórium dolgozat keretében kezdett foglalkozni a témával. Én a mérnöki tervezés feladatválasztáskor kapcsolódtam be a munkába. Zsigmond foglalkozott az USB kapcsolat kiépítésével a fejlesztendő eszköz és a számítógép között, illetve a kimeneti fokozat építésével, azaz a számítógép generált jelek eszközre való küldésével. Az én feladatom pedig a bemeneti fokozat fejlesztése, azaz a mért adatok A/D konverziója és átküldése a számítógépre. A végső cél az 1. ábrán látható működőképes mérőrendszer kiépítése. Ezen munkálatok egy fejezetével, az analóg-digitális konverzióval, és a jelek számítógépre való továbbításával foglalkozik ez a dolgozat.
1. ábra – A komplett mérőrendszer terve
5
2. Potenciosztát A potenciosztát egy olyan műszer, ami nem mindennap kerül elő az mérnök informatikai, sőt még a villamosmérnöki gyakorlatban sem. A potenciosztát az elektrokémiában használt mérőműszer. Az ELTE Elektrokémiai és Elektroanalitikai laboratóriumában például elektrokémiai kutatásokhoz használt eszköz. Az eszköz azon méréseknek primer műszere, ahol egy első fajú vezető (jellemzően egy fémdarab) és egy másodfajú vezető (jellemzően egy elektrolitos oldat) fázis határfelületén végbemenő reakció (úgynevezett elektródreakció) kinetikáját tanulmányozzák [1]. A potenciosztát tehát egy elektromos eszköz, melynek feladata egy 3 elektródos cella vezérlése és elektroanalitikai kísérletek futtatása. Felhasználva a 3 elektródos rendszert vizsgálhatjuk
a
reakciómechanizmust
különféle
elektrokémiai
jelenségeknél.
A
bipotenciosztát és a polypotenciosztát olyan potenciosztát, amelyek képesek kettő, illetve több munkaelektródot vezérelni. A mi rendszerünk esetében csak egy munkaelektróddal dolgozunk. A három elektród a munkaelektród, referenciaelektród és a segédelektród. Az elsőfajú vezető a vizsgálat szempontjából lényeges munkaelektród. Ezen elektród referencia elektróddal szemben értelmezett potenciáljának beállítását és az ehhez szükséges áramerősség mérését végezzük a potenciosztáttal. Ezeknek a fizikai mennyiségeknek, tehát a beállított feszültség és a mért áramerősség értékének nagyságából következtethetünk a lejátszódó folyamat kinetikájára. A potenciál a reakciók aktiválási energiáját befolyásolja, a mért áramerősségből pedig a lejátszódó folyamat sebességére következtethetünk [2]. Jelen összefoglalás nem kíván mélyebben megismerkedni a potenciosztát működésének kémiai hátterével, az eszközt csupán elektronikai, méréstechnikai működése szempontjából kívánjuk megvizsgálni. Az elektródpotenciál beállítása csak akkor történhet többé-kevésbé pontosan, ha az alkalmazott referencia elektród potenciálja stabil. A referencia elektród stabilitásának az a feltétele, hogy azon áram nem, vagy csak igen kis mértékben folyhat át. A munkaelektród potenciáljának megváltoztatása a legtöbb esetben csak akkor valósítható meg, ha alkalmazunk egy harmadik, úgynevezett segédelektródát is. A potenciosztát ilyenkor éppen annyi áramot képes átfolyatni a segédelektród-munkaelektród ágon, hogy a munkaelektród és a referencia-elektród között a kívánt potenciálkülönbség jelenjen meg. Ezt a gyakorlatban is így alkalmazzák, és ezzel megkaptuk a standard háromelektródos elektrokémiai cellát, amelyet az 2. ábrán láthatunk. 6
2. ábra – Standard háromelektródos cella
Az 2. ábrán láthatjuk tehát a standard háromelektródos cellát a hozzá kapcsolt potenciosztát elvi vázlatával. Az elektrokémiai cella alkotói az M jelzésű munkaelektród, az R jelzésű referencia elektród és az S jelzésű segédelektród. A két elkülönülő térrészt azaz a bal oldali referenciaelektród-teret és a jobb oldali munkaelektród-teret az L jelzésű Lugginkapilláris kapcsolja össze. A kapilláris vékonyra húzott vége a munkaelektród közelében, oly módon helyezkedik el, hogy a fellépő ohmikus potenciálesést csökkentse. A két térrész azonos elektrolit oldattal van feltöltve, amely a másodfajú vezető szerepét tölti be, és amely az elektrokémiai vizsgálatok tárgyát képezi. A potenciosztátra kiküldjük az általunk beállítani kívánt munka- és referenciaelektród közötti UPR feszültség értéket. Ez érkezhet például egy függvénygenerátorról, vagy egy D/A konverter által előállított analóg jel alkalmazásával. A potenciosztát méri a munka- és referenciaelektród között fellépő tényleges U feszültséget, majd a műveleti erősítő képzi ezek különbségét, és az így kapott hibajelet felerősíti. Ezután a potenciosztát éppen annyi áramot hajt át a munka- és segédelektród között, hogy a feszültségkülönbség zérus értékű legyen. Így a munkaelektródot pont olyan mértékben polarizálja, ahogy azt elvárjuk, az U feszültségérték megegyezik az általunk választott U PR értékkel. Ez a kapcsolás a 2. ábrán felül látható. A szükséges áramerősséget és a tényleges feszültségértéket a műszer kijelzőjén,
7
mutatóján olvashatjuk le, vagy a hozzá kapcsolt XY-rekorder rögzíti, illetve A/D konverterek alkalmazásával digitalizálhatjuk. Az 3. ábrán néhány laboratóriumban használt potenciosztátot láthatunk. Van közöttük igen csak régi készülékek (például 3. ábra bal felső kép), amelyek szinte minden eszköztől függetlenül tudtak működni (személyi számítógépet legalábbis nem igényel a működése). A bemenetein szükség van egy klasszikus függvénygenerátorra, a kimenetüket általában gráfpapíros rekorderre kapcsolták. Ezeket is lehet automatizálni, úgy, hogy a bemeneteket D/A konverter által biztosítjuk, a méréseket pedig A/D konverzióval végezzük. De az automatizálás igen korlátozott, ugyanis a kézzel használt kapcsolókat, potmétereket nem tudjuk kiváltani automatizálással. A modern potenciosztátok (például 3. ábra alsó kép) úgy lettek tervezve, hogy kapcsolódni tudjanak egy személyi számítógéphez és egy dedikált szoftvercsomagon keresztül üzemeltethetők. Az ilyen eszközök akár teljes mértékben automatizáltak, viszont ez sajnos nem biztos, hogy minden esetben előnyt jelent. Nem egyszer maga az a szoftver, ami az eszközön fut, illetve az a szoftver, ami ezen eszközöket kiszolgáló számítógépen fut nem adja meg nekünk azokat a lehetőségeket, hogy például tetszőleges jelalakkal perturbáljuk a rendszerünket. Ezáltal bizonyos esetekben az ilyen automatizált eszközökkel még annyit sem tudunk elérni, mint a régiekkel.
3. ábra – Piacon kapható potenciosztátok
8
2.1.
Nagysebességű jel digitalizálása
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. Az analóg- digitális átalakító (angolul: ADC – Analog to Digital Converter) feladata, hogy a bemenetre érkező „A” analóg jelnek megfelelő „D” digitális jelet állítson elő a kimeneten (4. ábra). A működéshez szükséges egy R referencia (általában egy UR 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.
4. á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 9
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. -
á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 [3]
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 (természetesen a megfelelő feszültségtartományokon értve.)
2.2.
Rendszerterv
A feladat a rendszer potenciosztátként való működtetése. A potenciosztáttal közöljük az általunk beállítani kívánt feszültségértéket a munkaelektródon, és mérjük a munka- és referencia elektród között fellépő U feszültségkülönbséget. A potenciosztát ekkor szabályoz, és csak annyi I áramot hajt át a munka- és segédelektróda között, hogy e különbség zérus értékű legyen. Az ehhez szükséges I áramerősséget és az eszközön ténylegesen megjelenő feszültségkülönbséget mérjük, és a mi esetünkben A/D konverterek segítségével digitalizáljuk. 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 10
-
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 105 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
Az rendszer építőkövei az elektrokémiai cella, két darab A/D átalakító (ami a gyakorlatban egy darab kétcsatornás konverter), és a 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 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 a dolgozatnak. A rendszerterv az 5. ábrán látható.
5. ábra - Kezdeti rendszerterv
A következő fejezetek a rendszer magvalósításának lépéseit tárgyalják.
11
3. Mintavételezés Az
A/D
konvertálással
kapcsolatos
általános követelményünk
a
100
kSample/s
szimbólumsebességű 16 bites minták digitalizálása két csatornán. A mintavételezésre többféle stratégia is kínálkozik. Egyik legegyszerűbb módja, ha valahogyan a PC-nk adta lehetőségeket kihasználva szeretnénk mintát venni, digitalizálni. Erre a célra léteznek kimondott célkártyák, illetve kihasználhatjuk a számítógép adta alapvető beviteli egységeket, mint például a hangkártyát. Például a hang is analóg formában kerül rögzítésre, amelyet aztán a hangkártya digitalizál. A másik elterjedt lehetőség, hogy különálló A/D konverter chip segítségével végezzük el a feladatot. Itt szükségünk lesz valamiféle vezérlő, adatátvitelt kezelő egység közbeiktatására, hiszen maga a konverter közvetlenül nem kapcsolható össze egy számítógéppel. Ezeket a megoldási módszeretek fogjuk részletesebben áttekinteni.
3.1.
Mintavételezés számítógépen
Az mérendő adatokat tehát digitalizálni kell és eljuttatni egy személyi számítógépre. Erre a feladatra sokkféle megoldás kínálkozik. Az egyik legegyszerűbb és így legkézenfekvőbb választás lenne, ha a PC-nk egy beépített interfészét, vagy egy bővítőkártyát használnánk erre a célra. A multimédiás ki- és bemeneti egységek áttekintésével érdemes elkezdeni a vizsgálódást. Napjainkban egyre elterjedtebbek a multimédiás alkalmazások, melyek használata elképzelhetetlen lenne speciális ki- és bemeneti egységek nélkül. Ezek közül egyik legegyszerűbb eszköz a hangkártya (6. ábra), amely manapság minden számítógépben megtalálható. A hangkártyák általában legalább négy funkciót töltenek be: -
Szintetizátorhoz hasonlatos módon hangot generálnak. (Szintetizátor)
-
Egy hullámtábla segítségével MIDI-formátumban megírt fájlokból zenei hangokat állítanak elő. Ekkor a hangkártya fejlettségétől függően életszerűbb zenei hangokat generálnak. (MIDI interfész)
-
Mikrofonból vagy más analóg hangforrásból jövő jelet digitalizálnak. (A/D konverter) 12
-
Digitális jelekből (fájlokból) állítanak elő analóg hangokat. (D/A konverter)
6. ábra – Egy kereskedelmi forgalomban kapható hangkártya
Számunkra a négy funkcióból egyedül a 3. pont érdekes, azaz a mikrofonból vagy más analóg hangforrásból jövő jelet digitalizálnak. Itt nem kell feltétlenül csak hangforrásra korlátozni a digitalizálást, egy megfelelő szoftverrel a hangkártya analóg line-in bemenetén más jellegű bemeneti jelet is digitalizálhatunk, az eszközt A/D konverterként használhatjuk. Ahhoz, hogy a kártyát így tudjuk használni, teljesítenie kellene az A/D konverterünkkel szemben támasztott követelményeket, azaz kétcsatornás, legalább 100 kSample/s fogadására képes, 16 bites konvertálás szükséges. Hangkártya esetén teljesül a kétcsatornás bemenet, hiszen a line-in bemeneten a legtöbb ma kapható kártya két csatornát tud fogadni. A legtöbb ma kapható hangkártya 16 biten képes adatokat fogadni, így ez a feltétel is teljesül. A 100 kSample/s 16 bites minta esetén 100*16=1600 kbit/s-os mintavételezési sebességre lenne szükség. A ma kapható jobb hangkártyák is csak 96 kbit/sos sebességgel képesek mintát venni. Látható, hogy az eltérés nagyságrendbeli. Ezen problémán felül, egy másik probléma az ilyen kártyák használatánál, hogy az egyenáramú komponenst nem tudok átvinni rajta, mert alsó határfrekvenciája van, tehát statikus mérésre alkalmatlan. Lehetne ugyan még keresgélni különféle fejlettebb PC-be építhető digitalizáló kártyák között, de be kell látnunk, hogy egyik sem lenne alkalmas. Látható tehát, hogy ezek a kártyák nem alkalmasak a feladat ellátására. Ilyen sebesség mellett már szükséges egy jó minőségű, nagysebességű dedikált A/D chipet választanunk. Ez azért is hasznos, mert nagysebességű D/A konverziót is kell végeznünk a jelek generálásához, és ott szintén ésszerű választás lehet egy dedikált D/A chip alkalmazása. 13
Ehhez azonban már szükségünk lesz egy saját kis eszközre(processzorra), ami összeköti a PCnket az A/D chippel.
3.2.
Mintavételezés saját eszközön
Kell tehát találnunk egy megoldást arra, hogy egy A/D konvertert össze tudjuk kötni a számítógépünkkel. Mivel nagy sebességű (várhatóan több mint 1600 kbit/s = 200 kbyte/s) adatátvitelre lesz szükségünk, illetve ellenkező irányban hasonló sebességű kommunikációra lesz szükségünk, ezért nagysebességű adatátviteli módot kell választanunk. Adatátvitelhez használhatnánk egy PC-be illeszthető kártyát, de ez korlátozná az eszköz univerzális felhasználhatóságát. Praktikusabb úgy választanunk a kommunikációs csatornát, hogy egy minél elterjedtebb szabvány szerinti kapcsolatunk legyen. Adódik tehát egy kézenfekvő választás: az igen elterjedt szabvány, az USB.
3.2.1. USB kapcsolat 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 PC áll. A PC 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 [4]. 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. Az alkalmazott eszközöknek ez a kis teljesítmény is elegendő [5]. 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 14
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 (7. á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.
7. ábra – USB driver
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 video é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. 15
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é [6]. Látható tehát, hogy az igen elterjedt USB 2.0 szabvány bőven elegendő a mi adatátviteli sebesség igényeinkhez. A külső tápellátás amennyiben szükséges könnyedén megoldható, és Bulk adatátviteli módban, pedig az adatok integritása is garantált, ami a mérés hitelessége szempontjából fontos. Az USB kapcsolat és az A/D konverter közé azonban szükséges egy eszköz, ami ezt a kapcsolatot kezeli. Választanunk kell tehát egy olyan USB-s eszközt, ami képes biztosítani a szükséges adatátviteli sebességet USB-n, összeköthető A/D és D/A konverterekkel és alapvető vezérlési feladatok biztosítására képes. Úgy találtunk, hogy az ilyen jellegű adatátviteli és irányítási feladatokra a legalkalmasabb eszköz egy mikrokontroller. 3.2.2. Microchip PIC 32 mikrokontroller A mikrokontroller egyetlen lapkára integrált, általában vezérlési feladatokra optimalizált számítógép. Ez az eszköz költséghatékonyan képes ellátni egyszerű, kis számítási teljesítményt és operatív tárat igénylő műveleteket. Már a tervezésnél arra törekednek, hogy minél kevesebb járulékos alkatrésszel lehessen megoldani minél szélesebb skálájú feladatokat. Az eszköz fogyasztását, méretét és költségét megpróbálják minimalizálni, amit például a lábak többszörös felhasználásával és beépített perifériákkal érnek el. A Microchip Technology mikrokontrollerei a fejlesztők között széles körben ismertek és közkedveltek. A laboratóriumban viszonylag sok tapasztalat gyűlt már össze e termékcsalád bizonyos tagjainak beágyazott rendszerekbe történő fejlesztése során. Ezért kézenfekvő választás volt, hogy a feladatunkhoz is egy ilyen mikrokontrollert válasszunk. A mi választásunk a PIC32MX795F512L mikrokontrollerre esett (8. ábra) [7].
16
8. ábra – PIC32MX795F512L mikrokontroller
A PIC32 mikrokontrollerek MIPS architektúrájúak, így szükséges 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 1980-as é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: 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 [8]. 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 17
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. Az általunk választott PIC32MX795F512L mikrokontrollert egy Microchip Explorer 16 fejlesztőpanelbe ültettük [9]. Ez a panel lehetőséget ad arra, hogy sajátkészítésű kiegészítő eszközöket illesszünk hozzá. Az fejlesztőpanelbe ültetett mikrokontroller látható a 9. ábrán.
9. ábra – PIC32 mikrokontroller a fejlesztőkártyán
A mikrokontroller paraméterei pedig a 10. ábrán olvashatók. 18
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 Lábak 100 db 10. ábra – A választott PIC32 mikrokontroller paraméterei
A mikrokontroller programozása a Microchip MPLAB Integrated Development Environment szoftverével lehetséges [10]. Van tehát egy mikrokontrollerünk egy fejlesztőpanelen, amelyhez egy USB framework Taróczy-Tóth Zsigmond a csapat másik tagja fejlesztette ez előző félévben. A hozzá kapcsolódó LabVIEW programot pedig, amely a PC-n fut Veszergom Soma a külső konzulensem készítette az ELTE-n. Méréseket végeztünk a bejövő adatforgalomról, hogy meghatározzuk a 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 11. ábrán látható.
19
11. ábra – A bejövő adatforgalom sebességének tesztelésére írt LabVIEW program
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 az elvárt átviteli sebesség várhatóan egy csatorna esetén 200 kbyte/s körül alakul, ami két csatorna esetén is csak 400 kbyte/s, amely alatta marad az 1 Mbyte/s-os mért átviteli sebességnek. Még vizsgálatra szorul a processzor terheltsége folyamatos nagysebességű USB átvitel mellett. Meg kell majd mérnünk, hogy ilyen adatküldési sebességek mellett, a processzor mennyire van leterhelve, a processzor teljes munkaidejének hány százalékát viszi el a folyamatos adatátvitel. Tehát folyamatos kétirányú a specifikációban meghatározott adatátviteli sebesség mellett, mekkora a processzor terheltsége. A maradék processzoridővel fogjuk tudni majd az A/D konverziót vezérelni, irányítani. Ez a mérés a következő beszámoló idejére el fog készülni.
20
4. Adatátvitel a mikrokontroller és az A/D átalakító között A mikrokontrollert és a számítógép között már megvalósítottuk az adatkapcsolatot USB összeköttetéssel. Meg kell valósítani az összeköttetést a mikrokontroller és az A/D átalakító között is, azaz ki kell szolgálnom az A/D átalakítót a processzor oldalról. Az USB szabvány nyújtotta keret könnyen implementálható, jól működő kapcsolatot eredményezett. Célszerű tehát itt is egy ismert, elterjedt szabványt alkalmazni. Erre egy kiváló lehetőség az SPI (Serial Peripherial Interface), amely népszerű, így a ma kapható mikrokontrollerek és A/D átalakítók többségében is alkalmazzák.
4.1.
SPI – Serial Peripherial Interface
A 200 kbyte/s-os adatátviteli sebességhez az A/D átalakító oldaláról is olyan csatlakozási felületet kell keresni, ami alkalmas ennek kiszolgálására. Az SPI soros átviteli rendszert a National Semiconductor fejlesztette ki, de ma már igen sok IC gyártó alkalmazza. 4 SPI vonallal rendelkezik a kiválasztott PIC32 mikrokontroller. AZ A/D á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 (Serial Peripheral Interface) 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 12. ábra mutatja be. A jelvezetékek: -
MOSI (Master kimenet, Slave bemenet)
-
MISO (Master bemenet, Slave kimenet)
-
SCK (soros órajel, a Master küldi ki)
-
SS (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 21
kétirányú folyamatot az egyetlen órajelsorozat szinkronizálja. 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 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.
12. ábra – SPI kommunikáció
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ó. Az SPI buszt általában 2 MHz-ig használják, de pl. a Xicor cég X25650 soros adatkezelésű EEPROM memória IC-je, mely SPI jelleggel kezelhető, 5 MHz-es adatsebességet is megenged [11]. Az SPIx egységek blokkvázlata a 13. á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 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. A másodlagos osztó valójában egy 3 bites számláló, s az SPIxCON<4:2> bitek ezen számláló periódus-regiszterét alkotják.
22
13. ábra – Az SPIx modulok blokkvázlata
Az SPIx modulok legfontosabb eleme a kimenő és bejövő adatvonalakhoz csatlakozó SPIxSR shift regiszter, melynek léptetése az órajellel szinkronban történik. A többi soros perifériához (I2C, UART) hasonlóan az SPI is kettős bufferelésű, az SPIxSR regiszter tehát a felhasználó által nem elérhető. A kiküldeni kívánt adatokat az SPIxBUF regiszterbe kell írni, ami íráskor valójában az SPIxTXB regisztert jelenti. Innen adáskor automatikusan kerül tovább az adat az SPIxSR shift regiszterbe. Olvasáskor pedig, ha az SPIxSR regiszterbe beérkezett nyolc adatbit, akkor automatikusan átmásolódnak az SPIxRXB regiszterbe, ahonnan az SPIxBUF regisztert címezve tudjuk kiolvasni. Az SPIxBUF írásakor tehát az SPIxTXB regisztert, olvasásakor pedig az SPIxRXB regisztert érjük el. 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. 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 [12]. 23
4.2.
A/D átalakító kiválasztása
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 14. ábrán láthatóak [13].
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
14. ábra – Az LTC1865ACMS A/D konverter főbb adatai
A konverter SPI kommunikációképes, így ezt a feltételt teljesíti. 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 kapcsolatunk által biztosított stabil 1 Mbyte/s PC irányú adatátviteli képesség tehát még mindig elegendő a konverterünk számára. Az adatátviteli kritériumok teljesülnek, azonban szükséges megvizsgálni, hogy az A/D konverter kiszolgálása a mikroprocesszor oldaláról processzor idő, megszakítások tekintetében is teljesíthető-e.
24
5. A mikrokontroller sebesség vizsgálata 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 az A/D konvertert. Például 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ória-hozzá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. Egy ettől is gyorsabb, még hardver orientáltabb megoldás, ha külön célhardvert alkalmazunk az adatátvitel kezelésére. Ilyen lehet például egy FPGA chip alkalmazása, melynek feladata nem más, mint az adatok folyamatos eltárolása egy osztott memóriába, teljesen kikerülve ezzel a mikrokontrollert, amely így nem terhelődik. Ezeket a megoldási módszereket fogjuk megvizsgálni a következőkben.
5.1.
Polling és interrupt
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ás-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 25
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. 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. Az 15. á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.
26
15. á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 16. ábrán látható.
16. á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 27
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 túl nagy mértékben használjuk a processzort. Keresnünk kell egy kevésbé processzor intenzív adatátviteli megoldást.
5.2.
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.) [14] 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 28
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, 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 29
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. 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 cserélgető megoldás.
5.3.
FPGA
A harmadik lehetőségünk, hogy egy FPGA chipet alkalmazzunk külön az adatátvitel kezelésére. Ez általában úgy valósul meg, hogy az FPGA processzor felelős az adatátvitelért, 30
egy másik főprocesszor pedig csak az általános feladatok, mint például a vezérlő, és számítást igénylő feladatok elvégzéséért felel. Az FPGA feladata a perifériáról (ami jelen esetünkben az A/D konverter) beérkező adat minél gyorsabban történő fogadása és eltárolása egy olyan osztott memóriába, amelyet a főprocesszor is elér. Ilyen megoldást alkalmaznak például professzionális oszcilloszkópokban, ahol az FPGA processzor felel a beérkező adatok osztott memóriában történő tárolásáért, a főprocesszor pedig a megjelenítési, vezérlési és számolási feladatokat látja el a beérkezett adathalmaz és egyéb inputok (gombok, kapcsolók, stb.) alapján. Ez a módszer ugyan jelentősen levenné a terhet a mikrokontrollerünk válláról, hiszen itt nincs a mikrokontrolleren plusz processzorterhelés. Azonban ez a megoldás nagyon időigényes lenne fejlesztési szempontból és az FPGA chipek és fejlesztőkártyák magas ára miatt drága megoldás, ezért nem alkalmazzuk.
5.4.
Következtetés
A kívánt adatátvitelt nem tudom biztosítani polling technikával, mert a folyamatos lekérdezés esetén nincs elég idő az adatátvitelre. Interrupt technikával sem tudom megvalósítani, mert az interrupt rutin hosszúsága (regiszterek mentése - visszaállítása) túl sok időt vesz el a processzortól. Egy FPGA kártya használata ugyan gyors és hatékony lenne, de a kártya ára drága, és beiktatása tovább bonyolítaná a feladatot. 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. További feladat ennek a módszernek a megvalósítása.
31
6. Összefoglalás és kitekintés A dolgozat elején áttekintettük a potenciosztátok alapvető működését mérnöki szempontból, megvizsgáltuk a piacon kapható ilyen eszközöket és azok alkalmazhatóságát az alapkutatásokban. 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. Ez a dolgozat a műszer bemeneti fokozatának építésével foglalkozik. Az építés első lépése az A/D átalakítás problémájának felvetése volt. A rendszer igénye egy kétcsatornás 16 bites A/D átalakító, amelyet egy PC-től különálló A/D konverter segítségével szeretnénk megvalósítani. Ehhez a konverterhez szükséges volt egy olcsó, egyszerű célprocesszor kiválasztása, amely az adatátvitelt megvalósítja. Választásunk a Microchip PIC32MX795F512L típusú mikrokontrollerre esett. Ezt a mikroprocesszort a számítógép oldaláról USB 2.0 szabvány szerint kapcsoltuk össze, az A/D konverter oldaláról pedig SPI interfészt használtunk. Az A/D átalakítónk pedig a Linear Techology LTC1865ACMS típusú konvertere lett, mely megfelelt a specifikációnk követelményeinek. Végül a processzor terheltségét és a megszakítást kezelés lehetőségeit tekintettük át, hiszen folyamatos adatküldés mellett, nem elhanyagolható, hogy milyen stratégiát válasszunk. A DMA direkt memória-hozzáférés módszerét választottuk megoldásul. Jövőbeni feladat a DMA elérés programozása, hogy egy működő, megvalósított adatátvitelt kapjuk DMA-n keresztül. További feladat a teljes rendszer integrálása. A munkám végére kialakult megvalósítási terv látható a 17. ábrán.
17. ábra – A kialakult megvalósítási terv
32
Irodalomjegyzék [1]Bard A.J. and Faulkner L.R., Electrochemical methods: Fundamentals and Applications, 2nd Edition, New York: John Wiley & Sons, 2000, ISBN 0471405213 [2]von Fraunhofer J.A. and Banks C.H., Potentiostat and Its Applications, Butterworths, 1972, ISBN 9780408702393 [3+ Cs. Kovács, A digitális elektronika alapjai, General Press Kiadó, 2007, ISBN 9789636430108 [4] Universal Serial Bus 3.0 Specification, 1st Revision, 2008. [5] „Univerzális Soros Busz (USB),” *Online+. Available: http://www.muszeroldal.hu/assistance/usb.pdf [6] Unviersal Serial Bus 2.0 Specification, 2nd Revision, 2000. [7] „Microchip PIC32MX795F512L Data Sheet,” *Online+. Available: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en545660 [8] Dominic Sweetman, See MIPS run, 2nd Edition, San Fransisco: Morgan Kaufmann, 2007, ISBN 978-0-12088421-6 [9] “Explorer 16 Development Board,” [Online]. Available: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en024858&part =DM240001 [10] „ Microchip MPLAB Integrated Development Environment,” *Online+. Available: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part =SW007002 [11+ “Kommunikáció alapjai – Soros adatátvitel,” Feb. 3, 2007. *Online+. Available: http://www.hobbielektronika.hu/cikkek/kommunikacio_alapjai_-_soros_adatatvitel.html?pg=4 [12+ 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 [13+ „Linear Technology LTC1865 ADC Data Sheet,” *Online+. Available: http://cds.linear.com/docs/Datasheet/18645fb.pdf [14] CJ Ganier, “What is Direct Memory Access (DMA)?,” *Online+. Available: http://cnx.org/content/m11867/latest/
33