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 0 .. +10V
±5V ±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 f0 egy a rendszerben alkalmazott órajel generátor frekvenciája. Nx pedig a Tx idő alatti impulzusok száma f0 frekvenciájú generátorral.
f0 egy a rendszerben alkalmazott órajel generátor frekvenciája. Ni pedig a Ti idő alatti impulzusok száma f0 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 Ti 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
// Á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.