Adatgyűjtő kártya programozása mérésleírás

A Fizipedia wikiből


MyDAQ photo.jpg

See the English version at the bottom of the page.

Tartalomjegyzék


Bevezetés

A mérési gyakorlat célja egy számítógépes adatgyűjtő kártya programozásának megismerése: a kártya analóg kimeneteinek és bemeneteinek programozásával egy oszcilloszkóp jellegű mérőfelületet készítünk, mellyel felvesszük egy LED (Light Emitting Diode) feszültség-áram karakterisztikáját.

A gyakorlat során a National Instruments cég által, kifejezetten oktatási célra gyártott NI myDAQ típusú mérőkártyát programozunk. A mérőkártya USB porton keresztül vezérelhető, funkcióit Visual C# környezetben a NI DAQmx driver segítségével érhetjük el, ez ingyenesen letölthető a következő linken: DAQmx. A kártya működését az NI Measurement & Automation Explorer (MAX) program segítségével ellenőrizhetjük.

A számítógépes mérőkártyák önmagukban számos komplex mérésvezérlési feladat megvalósítását teszik lehetővé: a nagyszámú analóg bemeneti csatornán keresztül különböző kísérleti paraméterek változását vizsgálhatjuk nagy mintavételezési sebességgel; az analóg kimeneti csatornákkal DC vagy időben változó meghajtó jeleket generálhatunk; a digitális csatornákon keresztül logikai áramköröket vezérelhetünk; illetve a trigger bemeneti csatornákon keresztül mérésünket egy külső bemeneti jelhez szinkronizálhatjuk. A mérésen használt NI myDAQ mérőkártya 2 analóg bemeneti csatornával, 2 analóg kimeneti csatornával, 8 digitális kimeneti vagy bemeneti csatornával rendelkezik. Az analóg bemeneti csatornák felbontása 16 bit, azaz a maximális, \setbox0\hbox{$\pm10\,$}% \message{//depth:\the\dp0//}% \box0%V-os méréstartományban \setbox0\hbox{$20\,$}% \message{//depth:\the\dp0//}% \box0%V\setbox0\hbox{$/2^{16}\approx0.3\,$}% \message{//depth:\the\dp0//}% \box0%mV pontossággal mérhetünk. Az analóg bementek differenciális módban működnek, a + illetve - csatlakozó közötti feszültséget mérik (pl. AI0- és AI0+). A maximális mintavételezési sebesség 200000 adatpont/másodperc. Az analóg kimeneti csatorna \setbox0\hbox{$-10$}% \message{//depth:\the\dp0//}% \box0% és \setbox0\hbox{$+10\,$}% \message{//depth:\the\dp0//}% \box0%V közötti feszültségeket tud kiadni, felbontása szintén 16 bit, a maximális programozási sebessége 200000 adatpont/másodperc.

CSharp LED-IV v2.png

A mérési gyakorlat során egy analóg kimeneti csatorna segítségével fűrészfog jelet generálunk, melyet egy soros ellenállás segítségével áramjellé alakítunk. Az így kapott áramgenerátorral meghajtott LED-en eső feszültséget egy analóg bemeneti csatornán mérjük (ábra).

A mérőkártya tesztelése

A számítógéphez csatlakoztatott és felismert mérőkártyán található kék LED világítani kezd. Ezután az eszközt a NI Measurement & Automation Explorer (MAX) segítségével tesztelhetjük (Start / Programs / National Instruments / Measurement & Automation). A MAX szoftverfelületének baloldali sávjában láthatjuk a számítógéphez csatlakoztatott eszközöket és interfészeket. A mérőkártyát a My System / Devices and Interfaces / NI-DAQmx Devices / NI myDAQ:"myDAQ1" menüpont alatt érhetjük el. A kártyára a programozás során az idézőjelben található címke segítségével hivatkozhatunk. A gyakorlat során csak egy eszközt használunk, így a címke minden esetben "myDAQ1" lesz, több eszköz használata esetén a MAX programban leolvashatjuk illetve módosíthatjuk az eszközünknek osztott címkét. Az NI myDAQ:"myDAQ1" menüpontra jobb egérrel kattintva érhetjük el a tesztelő paneleket, melyek segítségével az analóg kimenetek és bemenetek működését ellenőrizhetjük.

A mérőkártya programozása

A csatlakoztatott mérőkártyát a program indulása után inicializálni kell: be kell állítani, hogy milyen csatornákat és milyen beállításokkal akarunk használni. Az egyes funkciókat úgynevezett Task típusú objektumok valósítják meg. A Task létrehozásakor ki kell választani, hogy melyik analóg be-/kimenetet szeretnénk használni, továbbá minden analóg be-/kimenethez meg kell adnunk a méréshatárt és a mintavételi frekvenciát. Valamint a feszültség kiírásához és beolvasásához AnalogSingleChannelWriter és AnalogSingleChannelReader osztályú objektumokat kell létrehozni, amit az egyes Task-okhoz kell rendelni. A szükséges prototípusokat a NationalInstruments.DAQmx és NationalInstruments.Common függvénygyűjtemény tartalmazza, ezért ezeket adjuk hozzá a project referenciáihoz! A forráskód elején szerepeljen a using NationalInstruments.DAQmx sor is. A létrehozott taskokat a Dispose() metódussal töröljük, amennyiben már nincs rájuk szükség!

A feladat megoldásához két Taskra van szükségünk, melyek közül az egyik olvas a "myDAQ1/ai0" porton, a másik pedig a mérőjelet generálja a "myDAQ1/ao0" kimeneten. Ügyeljünk arra, hogy az inicializáláskor megadott minimális és maximális feszültségértéket ne lépjük túl! A kártya programozásához az alábbi példaprogram nyújt segítséget: példaprogram.

Feladatok

  1. Állítsuk össze a kapcsolást és teszteljük a Measurement & Automation Explorer-t használva. Növeljük az analóg kimenet feszültségét, és ellenőrizzük hogy megfelelően nagy feszültség esetén elkezd-e világítani a LED!
  2. Készítsünk mérőprogramot, mely egy Timer esemény segítségével az analóg kimenet feszültségét 100 lépésben 10ms-os lépésközzel 0V-ról 10V-ra növeli, majd a 10 V-os szint elérése után visszaugrik 0V-ra, és a feszültség növelését újból kezdi (fűrészfogjel generátor)! A fűrészfogjel generátor futtatása közben mérjük a LED-en eső feszültséget a mérőkártya analóg bemenetén keresztül! A mért feszültséget jelenítsük meg egy TextBox-ban!
  3. A kiadott aktuális feszültség értékből a soros ellenállás értékének segítségével számoljuk ki a LED-en folyó áramot, amit egy TextBox segítségével jelenítsünk meg a mérőfelületen! Helyezzünk el a mérőfelületen a fűrészfog jel generátor futtatására ill. leállítására szolgáló gombot!
  4. Helyezzünk egy chart objektumot a mérőfelületre, aminek segítségével jelenítsük meg a mért feszültség-áram karakterisztikát!
  5. Egy "mentés" gomb megnyomása után mentsük el egy fájlba az utára mért feszültség-áram karakterisztikát!
  6. A fenti funkciók biztonságos működése esetén tegyük lehetővé a mérési paraméterek egyedi beállítását (Timer Interval; fűrészfogjel generátor maximális és minimális feszültsége; egy ciklushoz tartozó adatpontok száma).
  7. Vizsgáljuk meg, hogy a dióda áram-feszültség karakterisztikáját leírhatjuk-e az
    \[I(U)=I_0\left(e^{U/U_\textrm{T}}-1\right)\]
    képlettel! Ha igen, határozzuk meg az \setbox0\hbox{$I_0$}% \message{//depth:\the\dp0//}% \box0% szivárgási áram valamint az \setbox0\hbox{$U_\textrm{T}$}% \message{//depth:\the\dp0//}% \box0% feszültség értékét!
  8. Vizsgáljuk meg, hogy mikor teljesül az áramgenerátoros meghajtás feltétele. Mekkora feszültséget kell a LED-re kapcsolni, hogy az áramot a kiadott feszültség és a soros ellenállás hányadosaként számolva 1%-nál kisebb legyen az eltérés a tényleges értéktől?

A mérésről készített jegyzőkönyv tartalmazzon egy használati utasítást az elkészült felülethez. Ismertessük a megvalósított funkciókat, a grafikus felület kezelését, valamint részletesen térjünk ki az olyan megoldásokra, amelyek nem a fentiekben meghatározott felépítést követik. A jegyzőkönyvhöz csatoljuk a mérőprogram forráskódját, valamint a jegyzőköny tartalmazza a LED-en végzett feszültség-áram karakterisztika mérés eredményeit és azok diszkusszióját is.

Syllabus in English

Introduction

The objective of this measurement exercise is to learn out how to program a computer data acquisition card. By programming the analogue outputs and inputs of the card, we create an oscilloscope-like user interface to measure the voltage-current characteristic of an LED (Light Emitting Diode).

For this exercise, we are using an NI myDAQ card designed specifically for educational purposes by National Instruments. The data acquisition card (DAQ) can be connected via a USB port and it can be controlled from the Visual C # environment using the NI DAQmx driver, which can be downloaded free of charge from DAQmx. The DAQ card can be tested and controlled using the NI Measurement & Automation Explorer (MAX) program.

Computer controlled DAQ cards alone allow for a number of complex measurement and control tasks: a large number of analog input channels can be used to investigate changes in various experimental parameters at high sampling rates; analogue output channels can generate DC or time-varying drive signals; digital circuits can be used to control logic circuits; trigger input channels can be used to synchronize our measurement to an external input signal. The NI myDAQ measurement card used in this exercise has 2 analog input channels, 2 analog output channels, 8 digital output or input channels. The resolution of the analog input channels is 16 bits. It means, that in the maximum \setbox0\hbox{$\pm10\,$}% \message{//depth:\the\dp0//}% \box0% V measurement range, it has a bit resolution of \setbox0\hbox{$20\,$}% \message{//depth:\the\dp0//}% \box0%V\setbox0\hbox{$/2^{16}\approx0.3\,$}% \message{//depth:\the\dp0//}% \box0%mV. The analog input channels operate in differential mode: the voltage between the + and - terminals is measured (e.g. AI0- and AI0+). The maximum sampling rate is 200,000 sample/second. The analog output channel can output voltages between \setbox0\hbox{$ -10 $}% \message{//depth:\the\dp0//}% \box0% and \setbox0\hbox{$ + 10 \, $}% \message{//depth:\the\dp0//}% \box0% V, its resolution is also 16 bits and its maximum refresh rate is 200,000 Hz.

CSharp LED-IV v2.png

During the measurement exercise, an analogue output channel is used to generate a sawtooth shaped voltage signal, which is converted into current by the use of a series resistor. The voltage drop on the LED is measured using an analog input channel (see the Figure to the right).

Testing the DAQ card

After connecting the DAQ card, a blue LED indicates that the device is recognized by the computer. Then you can test the device with the NI Measurement & Automation Explorer (MAX) (Start / Programs / National Instruments / Measurement & Automation Explorer). On the left side of the MAX software interface, you can see the devices and interfaces connected to the computer. The DAQ card can be accessed under My System / Devices and Interfaces / NI-DAQmx Devices / NI myDAQ: "myDAQ1". During programming, you can refer to the card by using the tag inside the quotation marks. During the exercise, we will only use one device. When multiple devices are used, MAX can be used to read or modify the reference tag of each connected device. When right clicking on the NI myDAQ: "myDAQ1" device you can select "Test Panels" from the drop down menu. This opens the test panels window, where you can test the operation of all the analog/digital inputs and outputs of the device.

Programming the DAQ card

The DAQ card must be initialized after the start of the program: you need to set up which channels you want to use and configure its settings. Each function is realized by so-called 'Task' objects. When creating a task, you have to choose which analog input / output you want to use, and for each analog input / output, you need to specify the voltage range and sampling frequency. Furthermore, write and read voltage signals, "AnalogSingleChannelWriter" and "AnalogSingleChannelReader" class objects must be created, which are then assigned to the corresponding Task object. The required prototypes are included in the NationalInstruments.DAQmx and NationalInstruments.Common libraries, so add these to the project references! At the beginning of the source code, include using NationalInstruments.DAQmx. The created tasks can be deleted using the Dispose () method if they are no longer needed!

For this programming exercise, we need two Task objects, one of which reads the "myDAQ1/ai0" analog input channel, and the other generates the signal using the "myDAQ1/ao0" analog output channel. Make sure that the minimum and maximum voltage values ​​given during initialization of the Tasks are not exceeded. When programming the DAQ card, this example program can be used as a reference: példaprogram.

Exercises

  1. Assemble the circuit and test it using Measurement & Automation Explorer. Increase the voltage of the analogue output and check if the LED lights up for a sufficiently high voltage.
  2. Develop a measurement program that uses a timer event to increase the voltage of the analog output from 0V to 10V in 100 steps with a 10 ms wait time between increments. After reaching the 10V level, voltage should jump back to 0V and start increasing again (sawtooth generator). While running the sawtooth generator, measure the voltage drop on the LED using the analog input of the DAQ card. Display the measured voltage in a TextBox.
  3. Calculate the current flowing through the LED using the measured voltage drop and the value of the serial resistor. Display the result with a TextBox on the user interface. Place buttons on the user interface for starting/stopping the sawtooth generator.
  4. Display the measured voltage-current characteristic on the user interface with a chart object.
  5. Place a "save" button on the user interface. After clicking on the save button, the program should save the last measured voltage-current characteristics to a file.
  6. When the above functions are tested and working properly, place additional textBox objects to enable the user to change the measurement parameters (Timer Interval, maximum and minimum voltage of the sawtooth generator, number of data points per cycle)
  7. Examine whether the current-voltage characteristic of the diode can be described by
    \[I(U)=I_0\left(e^{U/U_\textrm{T}}-1\right).\]
    If so, determine the leakage current \setbox0\hbox{$I_0$}% \message{//depth:\the\dp0//}% \box0% and the value of \setbox0\hbox{$\;U_\textrm{T}$}% \message{//depth:\the\dp0//}% \box0%.
  8. Examine when can we use the current source approximation. How much voltage should be applied to the LED, so that the current calculated as the quotient of the output voltage and serial resistance differs less than 1% from the actual value of the current?