Mérési útmutató A/D konverteres mérés 1. Az A/D átalakítók főbb típusai és rövid leírásuk // Első lépésként tanulmányozzuk a digitális jelfeldolgozás előnyeit és határait. Csoportosítás polaritás szempontjából: Egy polaritású: nincs előjel, az átalakító csak az analóg jel nagyságát adja meg. Két polaritású: bipoláris mind pozitív, mind pedig negatív jelet képes mérni és átalakítani. Itt a leggyakoribb kódolások: előjel és abszolút érték, kettes komplemens, eltolt nullpontú, egyes komplemens. Az A/D átalakítók szokásos bemeneti jeltartománya: 0.. +5V ±5V 0.. +10V ±10V Típusaik: fokozatos közelítésű A/D átalakítók több komparátoros párhuzamos A/D D/A visszacsatolásos A/D átalakítók feszültség frekvencia átalakító típusú átalakító integráló típusú A/D átalakító kettős integráló
1.1. Fokozatos közelítésű A/D átalakító VAN POLARITÁS! 1. ábra Analóg digitális átalakítók: fokozatos közelítésű átalakító A mérés elve: kettő (2) különböző hatványainak megfelelő feszültség értékek ( súlyok ) be illetve kikapcsolása egy kiegyenlítési stratégia segítségével meghatározza hogy az adott bemeneti jelhez milyen bináris jel kombináció illeszkedik. Pillanatértékeket mér (zajérzékeny) A mérés ideje alatt a feszültségnek állandó értékűnek kell lennie (jeltartás!) Pontosságát a D/A átalakító, referencia feszültség, komparátor pontossága határozza meg. 2. ábra Fokozatos közelítésű átalakító működési ábrája
1.2. D/A visszacsatolásos A/D átalakító Mérés elve: az Ux mérendő feszültséget egy D/A átalakító kimeneti feszültségével hasonlítják össze, melyet egy számláló vezérel. VAN POLARITÁS! 3. ábra Analóg digitális átalakítók: digitális-analóg visszacsatolásos 4. ábra Digitális-analóg visszacsatolásos átalakító működési ábrája A mérés az órajel nagyságától és a bemeneti jeltől függő időtartamú. Például 10MHz órajel 10 bit felbontás ~ 100 μs mérési időt jelent. Zavarérzéken Gyors
1.3. Több komparátoros A/D átalakító A mérés elve: A mérendő jelet egy időben több komparátorral hasonlítjuk össze, melyeknek különböző a referencia feszültsége. A komparátorok akkor adnak kimenő jelet, ha a pozitív bemenetre kapcsolt Ux feszültség nagyobb, mint a negatív bemenetre kapcsolt referencia feszültség, vagy azzal egyenlő. NINCS POLARITÁS! 5. ábra Analóg digitális átalakítók: több komparátoros
1.4. Feszültség frekvencia A/D átalakító típusú Működési elve: A bemeneti jelet integráljuk, addig, amíg el nem érünk egy komparálási szintet, azután az átalakító egy ellenkező polaritású komparáló feszültséget kapcsol ΔT ideig az integrátorra, amely azt részben kisüti. A folyamat ezután ismétlődik, és a kimenő jel frekvenciája a bemeneti feszültség nagyságával arányos. A felírható összefüggések: 6. ábra Feszültség frekvencia átalakító működési ábrája NINCS POLARITÁS! 7. ábra Analóg digitális átalakítók: feszültség frekvencia átalakító
Ha az RC szorzat kicsiny a TI időhöz képest, akkor a második tag elhanyagolható, így: ahol: Nx az integrálási idő alatt létrejött impulzusok száma. Ux a mérendő feszültség átlagértéke. Ha a ΔT/TI állandó, akkor az Ux és Nx között egyenes arányosság van. Ha a számláló kapuidejét 20 msec-ra változtatjuk, az átalakító kiszűri az 50 Hz-es zavarjeleket. Átalakítási ideje: ~25msec (valamivel gyorsabb, mint a kettős integráló A/D) A zajelnyomási tulajdonsága olyan jó, hogy ipari perifériákban gyakran alkalmazzák. 1.5. Kettős meredekségű (Dual Slope) A/D átalakító Mérési elv: A mérendő feszültséget egy (külső) integrátor bemenetére vezetik, és rögzített Ti ideig (meghatározott órajel impulzus) integrálják. Ezután bekapcsolják az ellenkező előjelű referencia feszültséget. A kondenzátor kisülésének ideje alatt óraimpulzusokkal mérik az időt, ameddig a 0 (nulla) komparálást el nem érik. Az integrátor kisülésének időtartama arányos a bemeneti jel átlagértékével.
ahol f 0 egy a rendszerben alkalmazott órajel generátor frekvenciája. N x pedig a T x idő alatti impulzusok száma f 0 frekvenciájú generátorral. f 0 egy a rendszerben alkalmazott órajel generátor frekvenciája. N i pedig a T i idő alatti impulzusok száma f 0 frekvenciájú generátorral. VAN POLARITÁS! 8. ábra Analóg digitális átalakítók: kettős meredekségű (integráló) azért kettős meredekségű, mert integrálja a bemenetet és a referenciát is általában a hálózati feszültség (50 Hz) periódusidejének (20 ms) egész számú többszöröse a T i idő
9. ábra Kettős meredekségű (integráló) átalakító működési ábrája Előnyei: Az átalakítás pontossága nem függ az R, C elemek és az órajel pontosságától, mivel a töltéshez és a kisütéshez ugyanazokat az elemeket használják. Integrálással valósítják meg a szűrést. Mérési idő maximum 40 msec, de olcsó, ezért elterjedten alkalmazzák. Főként digitális multimétereknél használják ezt az eljárást, ugyanis a pillanatnyi zaj kevésbé befolyásolják a mérést. 2. Microchip TC500 // Ebben a mérésben megismerkedünk az TC500-as típusú A/D konverter működésével, amit egy kísérleti-panelon próbálunk majd ki. Jellemzői: Precíziós A / D átalakító (maximum 17 bit) 3 digitális láb (2 bemenet, 1 kimenet) --> az interfész és a mikroprocesszor közötti vezérlés Automatikus bemeneti feszültség polaritás érzékelés alacsony veszteségi teljesítmény: 10 mw Széles analóg bemeneti tartomány: ± 4.2V Közvetlen elfogadja a bipolár és differenciált bemeneti jeleket
Alkalmazás: Precíziós analóg jel processzoroknál Precíziós érzékelő felületeknél Nagy pontosságú DC méréseknél 10. ábra: TC500 lábkiosztása 11. ábra: A lábkiosztáshoz rendelt tulajdonságok
12. ábra: Működési ábrája Maximális abszolút értékei: TC500/TC500A tápfeszültség (VDD VSS között) +18 V TC500/TC500A pozitív tápfeszültség (VDD GND között) + 12V TC500/TC500A Negatív tápfeszültség (VSS GND között) -8V Analóg bemeneti feszültség (VIN + vagy VIN-) VDD VSS közé Logikai bemeneti feszültség VDD +0,3 V GND - 0,3 V Feszültség az OSC-n: -0,3 V (VDD 0,3 V) VDD <5.5V Környezeti működési hőmérséklet tartomány: 0 C-tól +70 C-ig Tárolási hőmérséklet tartomány: -65 C és +150 C között
13. ábra: Elvi felépítése Üzemmódok: Az alábbi AD konvertert a 2 digitális lábán keresztül lehet majd vezérelni. (A, B) beállítási értékek alapján lehet : A B 0 0 Integrator zero 0 1 Auto-zero 1 0 Integrate 1 1 De-integrate //Az RC tag kivételével szinte minden benne van az IC-ben, ebből kifolyólag már csak annak megtervezése és kiszámolása marad feladatként az integrálási időtartományhoz. A további hozzá tarozó leírása letölthető az alábbi linkről: http://ww1.microchip.com/downloads/en/devicedoc/21428e.pdf
4. A méréshez szükséges kontroller (Arduino) Az egyik legelterjedtebb panel az Arduino Uno. Ezek az Atmel AVR ATMega328-as mikrovezérlőre épülnek. Az ATMega328-as egy 28 lábú mikrovezérlő, ami 20db felhasználható I/O lábbal rendelkezik. Ebből a 20-ból 6db használható analóg bemenetnek, 6db használható PWM kimenetnek és két láb használható külső megszakításokhoz. Az Arduino panel a számítógéphez egy USB kábellel csatlakoztatható. Ezen keresztül történik a tápellátás, a mikrovezérlő programozása és a PC-vel történő kommunikáció. Ez a mikrovezérlő több ezerszer újraprogramozható. A panelt tartalmazó hüvelysorra könnyen, forrasztás nélkül tudunk csatlakozni. Az Arduino nemcsak a hardvert takarja, hanem az egész fejlesztőkörnyezetet is magában foglalja. A PC-n futó Arduino nevű programmal könnyen írható a mikrovezérlőre kód, ami lefordítás után az USB kábelen keresztül az Arduino panelre tölthető. A fejlesztőkörnyezet által használt Arduino programnyelv a C++ egy egyszerűsített változata, amely rengeteg beépített könyvtárat tartalmaz. Ezek a bonyolultabb programozási feladatokat nagymértékben leegyszerűsítik. 14.ábra: Arduino Uno lábkiosztása és kivezetései
5. Arduino, mint fejlesztőkörnyezet Az Arduino fejlesztőkörnyezet legfrissebb verziója letölthető az alábbi linkről: http://arduino.cc/en/main/software A programot először elindítva az alábbi képernyő fogad: A File/Preferences/Editor language menüpontban állíthatjuk át Magyar nyelvűre a programot. Mielőtt az Arduino panelt elkezdenénk használni, ahhoz hogy programozni tudjuk, az Eszközök/Alappanel menüpontban be kell állítani, hogy milyen típusú panelt használunk.
Az Eszközök/Soros port menüpontban pedig azt kell beállítani hogy a panel melyik COM port-ra van csatlakoztatva. A fentiek beállítása után a panelt már tudjuk programozni.
Az eszközsorban az alábbi 7 gomb található: Ellenőrzés: mielőtt a programot az Arduino panelba töltenénk, le kell fordítanunk. Ezzel a gombbal fordítható le a kód és ellenőrizhető, hogy a programunk hibamentes-e. Új: új projektet létrehozása Megnyitás: korábban létrehozott projekt megnyitása Mentés: a jelenlegi projekt elmentése Feltöltés: a lefordított kód feltöltése az Arduino-ba Soros Monitor: az Arduino panel által küldött soros adatok megjelenítése egy terminálablakban A program felépítése A program nem más, mint az Arduino által végrehajtandó utasítások sorozata. A program három fő részből áll: Változók megadása Setup () Általános Beállítások Loop () Főprogram Változók megadása Az Arduino programban használt változókat és azok típusát kell itt megadni. PL. bármelyik Arduino lábat átnevezhetjük, és a programban a későbbiek során ezzel az egyedi névvel hivatkozhatunk rá. Setup(){ } A kapcsos zárójelen belül lévő kód az Arduino bekapcsolása után csak egyetlen egyszer fut le, mielőtt a programunk fő ciklusa elindulna. Ezért a setup() részben adhatjuk meg a főbb beállításokat, általános utasításokat, eszköz inicializálásokat (pl. itt adjuk meg hogy mely lábak legyenek ki vagy bemenetek, a soros kommunikáció sebességét is itt kell beállítani stb ). Alapértelmezettként minden láb bemenet, ezért általában csak a kimeneteket definiáljuk.
Loop(){ } Ez a függvény lényegében a főprogram. Itt adjuk meg az Arduino-nak hogy mit is csináljon. Ez a függvény a setup() függvény lefutása után indul, és folyamatosan ismétlődik mindaddig, amíg az Arduino panel be van kapcsolva. Minden egyes alkalomkor, amikor a program a Loop függvény végére ér, átugrik a loop függvény elejére és kezdi újra előröl. Analóg és Digitális Jelek Az Arduino többfajta különböző jelet tud érzékelni és kiadni. A jeleket alapvetően két csoportra szoktuk osztani: analóg és digitális jelekre. A digitális jel csak kétfele értéket vehet fel: 0V vagy +5V. Az analóg jel ellenben bármilyen feszültségérték lehet 0V és +5V között. Digitális jelek Az Arduino Uno 14 darab digitális ki/bemenettel rendelkezik (D0-D13). A Setup részben minden egyes digitális láb a pinmode() parancs használatával külön-külön beállítható bemenetnek (INPUT) vagy kimenetnek (OUTPUT). Az Arduino-n a digitális jel logikai magas (HIGH) vagy logikai alacsony (LOW) szintű lehet. Attól függetlenül, hogy a láb kimenet vagy bemenet, ha a láb 5V-os feszültségszinten van, akkor magas logikai szintnek értelmezzük, és ha 0V-on van (föld / GND), akkor pedig logikai alacsony szintnek tekintjük. pinmode(láb, mód); - a lábak adatirányát állíthatjuk be ezzel az utasítással (INPUT: bemenet, OUTPUT: kimenet). Digitális kimenet A digitális kimenetekkel azt tudjuk megadni, hogy a kimeneti lábon magas szint (5V) vagy alacsony (0V) legyen. Így vezérelhetünk különféle eszközöket az Arduino-val. digitalwrite(láb, érték); - ha egy lábat kimenetnek állítottunk be, akkor ezzel az utasítással az állapotát magasra (HIGH - +5V), vagy alacsonyra (LOW 0V) állíthatjuk.
Azt azért figyelembe kell venni, hogy az Arduino lábanként maximum 40mA-es áramot képes felvenni vagy leadni, ezért a lábakra kötött eszközöket is ennek megfelelően kell megválasztani. micros(); Ennek a parancsnak a használatával egy olyan értéket kapunk mikro szekundumba, ami az aktuális program futásától mért időt adja eredményül. Ez a szám, túl tud csordulni (ekkor visszaáll nullára), melynek ideje körülbelül 70 perc. A hozzá szükséges unsigned long változóval használható. delay(); A delay által beállított értékkel, képesek vagyunk a programban futó rutinok közti időt késleltetni/időzíteni. (ezt az értéket milliszekundumban tudjuk megadni) Példa a használatukra: unsigned long time; void setup() { Serial.begin(9600); } void loop() { Serial.print("Time: "); time = micros(); Serial.println(time); delay(50); } // Ezek segítségével tudunk majd az elkészítendő programban időt mérni. // end_time = end_time - start_time;
5. Bevezető példa a program megírása előtt Analóg Jelek Arduino hat speciális bemeneti lábbal rendelkezik, amelyek képesek ezeket a feszültségértékeket beolvasni. Ez a hat bemenet rendelkezik egy 10 bites analóg-digitális átalakítóval (ADC), ami képes a 0V és 5V közé eső feszültséget mérni és egy ezzel arányos 0 és 1023 közé eső 10 bites számmá alakítani. // Nekünk majd nem ezt, hanem a T500-as IC AD konverterét kell majd használnunk Analóg bemenet Az analóg lábak alapértelmezettként bemenetek, és az analogread() utasítással lehet a rajtuk lévő feszültséget mérni. analogread(láb); - ezzel az utasítással mérhető meg ADC-vel egy analóg lábon lévő feszültség. A függvény 0-1023 közötti értéket ad vissza eredményül. Az alábbiakban az analóg bemenetek használatára látunk példát:
A potenciométer úgy viselkedik, mint egy feszültségosztó kapcsolás, amiben az ellenállások értékét változtatjuk. Ezáltal a potenciométer kimenetén megjelenő feszültség függ a tekerőgomb állásától. // ADC használata potenciométer-el int potpin = 5; // potenciométer A5-re kötve int val; // változó, a mért ADC értek tarolására void setup() { Serial.begin(9600); // 9600 baud-os soros port beállítása } void loop() { val = analogread(potpin); // ADC értek beolvasása Serial.println(val, DEC); // a mért ADC értek PC-re küldése delay(100); // várakozás /* (ennek a beállításával szabályozhatjuk az időzítőt,hogy majd mennyi ideig adja ki az intervallumokat)*/ } A setup() részben a serial.begin() paranccsal egy 9600 baud sebességű soros kommunikációs port-ot hozok létre, amivel adatokat lehet küldeni/fogadni az Arduino és pl. a PC között. A loop() részben a kód megméri a potenciométer feszültségét az analogread() utasítással, és a mért ADC értéket a Serial.println() paranccsal elküldi a PC-re. Az adatokat a PC-n a Soros monitoron keresztül követhetjük figyelemmel.
// Ezt követően a feladatunk, hogy az A/D-konverter és az Arduino programnak ismeretével, kipróbáljuk és vezéreljük a TC500-as IC-nek funkcióit, a port címeinek beállításával. 6. A program megírásához A saját programunkat egy előre elkészített programvázból kiindulva kell megírni. Ez a programváz tartalmazza az egyes feladatokhoz tartozó üres eljárásokat és a fő-eljárást. A program megírásakor követendő szempontok: 1. Lehetőleg kevés globális változót használjunk. 2. Lehetőleg kevés literált alkalmazzunk. Előnyösebb az érthető névvel ellátott változó, vagy konstans használata. 3. A jelek futás-, illetve periódus idejét az eljárás paraméter(ei)ében lehessen beállítani. 4. Mivel itt egy 16-bites A/D konverterről van szó, ennek értékkészlete 0-65536-ig (hexadecimális alakban $0000 - $FFFF) terjed. A teljes bemenő feszültség tartomány feléhez 32768, azaz $7FFF szám tartozik. 5. IIR szűrő alkalmazása, a stabilabb érték leolvasása érdekében. // old_time = (0.95 * old_time) + (0.05 * end_time);
A program felépítése: // Függvények inkludálása #include <string.h> #include <math.h> #include <floattostring.h> // Állandó értékek/lábak kiosztásai (A_pin, B_pin, Comparator_pin) const int rutin használatával // Változó értékek deklarálása (start_time, end_time, old_time) unsigned long használatával // 2 db 10-es Buffer tömb létrehozása void setup() { } // Digitális jelek, kimeneti (láb,érték) beállításai // Digitális jelek, bemeneti (láb,érték) beállításai Serial.begin(9600); void loop() { // Auto zero beállítása (A, B lábakkal) delay (50); // Integrálási időre beállítása (A, B lábakkal) delay (50); // De-Integrálási idő beállítása (A, B lábakkal) // AD kisütési idejének mérése (do, while ciklussal) // IIR szűrő alkalmazása // Értékek visszaolvasása/kiíratása a képernyőre Serial.println(""); delay(100); }
7. Feladatok 1, Méretezzen RC tagot a Microchip TC500-as IC-nek az integrálási időtartományához, majd rakja össze a már elkészített Arduino-s próbapanelen. 2, A kontroller segítségével mérje vissza az ADC kisütésének idejét: - Erre a célra készítsen egy olyan programot, ahol egy paraméter segítségével különböző értékeket lehet adni a bemenetre, majd a kisütésnek az időtartalmából visszaszámolva, a feszültséget átkonvertálni voltos értékbe. 3, Az Arduino programból vezérelve olvassa ki az adatokat és írattassa ki a képernyőre. 4, Az A/D konverter analóg bemenőjelét egy tárolós oszcilloszkópon is jelenítse meg, hogy ellenőrizhessük a program helyes működését. 5, Készítsen kalibrációs jegyzőkönyvet a lineáris karakterisztika vizsgálata érdekében.