„Adatgyűjtő kártya programozása mérésleírás” változatai közötti eltérés
(3 szerkesztő 58 közbeeső változata nincs mutatva) | |||
3. sor: | 3. sor: | ||
<wlatex> | <wlatex> | ||
[[Fájl:myDAQ_photo.jpg|right|thumb]] | [[Fájl:myDAQ_photo.jpg|right|thumb]] | ||
+ | '''This page is outdated. Read the description of the lab exercise in Moodle.''' | ||
__TOC__ | __TOC__ | ||
8. sor: | 9. sor: | ||
== Bevezetés == | == 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 | + | 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 olyan mérőfelületet készítünk, mellyel felvesszük egy bipoláris tranzisztor különböző karakterisztikáit. |
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: [http://www.ni.com/dataacquisition/nidaqmx.htm DAQmx]. A kártya működését az NI Measurement & Automation Explorer (MAX) program segítségével ellenőrizhetjük. | 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: [http://www.ni.com/dataacquisition/nidaqmx.htm DAQmx]. A kártya működését az NI Measurement & Automation Explorer (MAX) program segítségével ellenőrizhetjük. | ||
15. sor: | 16. sor: | ||
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, $\pm10\,$V-os méréstartományban $20\,$V$/2^{16}\approx0.3\,$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 $-10$ és $+10\,$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. | 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, $\pm10\,$V-os méréstartományban $20\,$V$/2^{16}\approx0.3\,$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 $-10$ és $+10\,$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. | ||
− | [[Fájl: | + | {| cellpadding="5" cellspacing="0" align="center" |
+ | |- | ||
+ | | [[Fájl:BT2.png|közép|500px|]] | ||
+ | |- | ||
+ | | align="center"|1. ábra. Bipoláris tranzisztor mérésére szolgáló elrendezés. (a) Mérési kapcsolás rajza. (b) Az analóg kimenetekre adott jelalakok (c) A használt 2N3904 tranzisztor lábkiosztása és rajza. | ||
+ | |} | ||
− | A mérési gyakorlat során egy analóg kimeneti | + | A mérési gyakorlat során az ábrán látható elrendezésben mérjük egy bipoláris tranzisztor kollektoráram-bázisfeszültség, bázisáram-bázisfeszültség és kollektoráram-bázisáram karakterisztikáit. A mérési feladat megoldásához a mérőkártya két analóg bemeneti és két analóg kimeneti csatornáját szükséges programozni. |
+ | |||
+ | == A bipoláris tranzisztor == | ||
+ | |||
+ | A bipoláris tranzisztor egy háromelektródás félvezető eszköz, amely elektromos jelek erősítésére vagy kapcsolására használatos, szilíciumból vagy germániumból készül, és egy pnp vagy npn típusú adalékolt struktúrából áll. A két szélső réteg kivezetéseit kollektornak (C) és emitternek (E), míg a középső réteget bázisnak (B) nevezzük. A bipoláris tranzisztor két szembekapcsolt diódaként (pn-átmenetként) fogható fel, amelyben a két középső, azonos adalékolású réteg helyett egyetlen közös, vékony réteget találunk. Ennek megfelelően, a bipoláris tranzisztor áramköri működését a dióda tulajdonságainak ismeretében érthetjük meg. | ||
+ | |||
+ | Egy dióda áram-feszültség karakterisztikája az alábbi egyenlettel írható le (kis nyitóirányú áramok esetén): | ||
+ | $$I=I_\text{S}(T)\cdot\left(e^{\frac{U}{mU_\text{T}}}-1\right)$$ | ||
+ | Ebben a képletben $I_S$ az elméleti visszáram, $U_T$ pedig a temperatúrafeszültség, amely szobahőmérsékleten az alábbi képletből számítható: | ||
+ | $$U_\text{T} = \frac{k_BT}{q_e} = 25,5\text{ mV,}$$ | ||
+ | ahol $k_B$ a Boltzmann-állandó, $T$ a hőmérséklet, $q_e$ az elektron töltése. Az $m$ korrekciós tényező 1 és 2 közötti érték, az egyszerű Shockley-diódaelmélettől való eltérést írja le. | ||
+ | |||
+ | A bipoláris tranzisztor $I_\text{C}(U_{\text{BE}})$ átviteli karakterisztikája a diódához hasonlóan exponenciális, viszont ebben az esetben a korrekciós tényező jó közelítéssel eggyel egyenlő: | ||
+ | $$I_\text{C}(U_{\text{BE}})=I_S^*(T,U_{\text{CE}})\cdot e^{\frac{U_{\text{BE}}}{U_\text{T}}},$$ | ||
+ | ahol $I_\text{C}$ a kollektoráram, $U_{\text{BE}}$ a bázis-emitter feszültség, $U_{\text{CE}}$ a kollektor-emitter feszültség és $I_S^*$ a záróáram ($I_\text{C} \gg I_S^*$ feltétel mellett teljesül). | ||
+ | |||
+ | A tranzisztort áram vezérli, azaz a bázisáram nem elhanyagolható értékű működés közben, bázis-emitter feszültségtől való függése szintén exponenciális, ám ebben az esetben $m$ nem egyenlő eggyel, így a korrekciós tényezőre is szükség van: | ||
+ | $$I_\text{B}(U_{\text{BE}})=I_{\text{B0}}\cdot e^{\frac{U_{\text{BE}}}{mU_\text{T}}}$$. | ||
== A mérőkártya tesztelése == | == 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 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 címkét célszerű átírni ''"myDAQ1"''-re, ha nem ez az alapbeállítás. 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 mérőkártya programozása == |
− | A csatlakoztatott mérőkártyát a program indulása után inicializálni kell: | + | 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 definíciókat 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 | + | A feladat megoldásához négy Taskra van szükségünk, melyek közül kettő olvas a ''"myDAQ1/ai0"'' és ''"myDAQ1/ai1"'' porton, a másik kettő pedig a mérőjeleket generálja a ''"myDAQ1/ao0"'' és ''"myDAQ1/ao1"'' kimeneteken. Ü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: [[DAQMX_kártya_példaprogram | példaprogram]]. |
== Feladatok == | == Feladatok == | ||
− | # | + | # Állítsuk össze a kapcsolást az ábra szerint! (Segítség: az 1 k$\Omega$-os ellenállás színkódja barna-fekete-fekete-barna-barna.) |
− | # Készítsünk mérőprogramot, mely egy Timer | + | # Készítsünk mérőprogramot, mely egy Timer objektum segítségével az ao1-es analóg kimenet feszültségét a felhasználó által megadott lépésszámmal és lépésközzel egy megadott minimum értékről egy maximum értékre növeli, majd a maximális feszültségszint elérése után visszaugrik a minimumértékre, és a feszültség növelését újból kezdi (fűrészfogjel generátor)! Legyenek a paraméterek kezdeti értékei az alábbiak: 100-as lépésszám, 10 ms-os lépésköz, 0 V minimumfeszültség, 0.8 V maximális feszültség. Jelenítsük meg egy Chart objektumon a kimenetre szánt feszültségértékeket! |
− | # A fűrészfogjel generátor futtatása közben mérjük a | + | # Helyezzünk el a mérőfelületen a fűrészfogjel generátor futtatására ill. leállítására szolgáló gombokat! |
− | # A | + | # A fűrészfogjel generátor futtatása közben mérjük az ai0 és ai1 csatornákon a feszültséget! A mért feszültségértékeket jelenítsük meg egy-egy Label segítségével! |
− | # Egy "mentés" gomb megnyomása után mentsük el egy fájlba az | + | # Számoljuk ki a bázisáramot! A számolt értéket jelenítsünk meg a mérőfelületen egy Label segítségével! Helyezzünk egy Chart objektumot a mérőprogram felületére, és ábrázoljuk rajta a mért bázisfeszültség-bázisáram karakterisztikát! |
− | # | + | # Módosítsuk a mérőprogramot úgy, hogy alkalmas legyen az ao0 csatorna feszültségének változtatására a felhasználó által megadott értékek szerint (adott tartományban és lépésközzel). Vizsgáljuk kezdetben a 0.5 V-tól 2 V-ig terjedő tartományt, 0.5 V-os lépésközzel. Szabjunk feltételeket a Tick eseményben, amelyekkel adott értékre állítható az ao0 csatornán kiadott feszültség, mialatt az ao1 csatornán kiadott fűrészfogjel egyetlen periódusa zajlik. |
− | + | # Számoljuk ki a kollektoráramot! A számolt értéket jelenítsünk meg a mérőfelületen egy Label segítségével! Helyezzünk egy újabb Chart objektumot a mérőfelületre, aminek segítségével jelenítsük meg a mért kollektoráram-bázisáram karakterisztikákat is! | |
− | # | + | # Egy "mentés" gomb megnyomása után mentsük el egy fájlba az utoljára mért karakterisztikákat! |
+ | # Illesszük a kollektoráram - bázisfeszültség és bázisáram - bázisfeszültség karakterisztikákat a megfelelő képletekkel! (Vegyük figyelembe, hogy az adatok véges offset értékkel terheltek lehetnek.) Számítsuk ki a korrekciós tényezőt, és diszkutáljuk az eredményeket. Reális-e a kapott érték? | ||
+ | # Mi a kollektoráram telítési értéke, és mitől függ? (Segítség: mekkora a kollektorfeszültség telítéskor?) | ||
+ | |||
+ | Az elkészült mérőprogram az alábbi objektumokat tartalmazza: Start gomb, Stop gomb, Timer, 4 db Chart (egy a kiadott fűrészfogjel ellenőrzésére, három a mért karakterisztikák ábrázolására), SaveFileDialog, Save gomb, Label-ek a mért/számolt értékek kijelzésére, TextBox-ok a felhasználótól bekért paraméterek beolvasására, Update gomb a beadott paraméterek beolvasására. | ||
+ | |||
+ | Segítség a Tick esemény elkészítéséhez: | ||
+ | |||
+ | <syntaxhighlight lang=csharp> | ||
+ | |||
+ | private void timer_Tick(object sender, EventArgs e) | ||
+ | { | ||
+ | // A kiadott feszültség számítása | ||
+ | |||
+ | // Feszültség(ek) kiadása és a válasz olvasása | ||
+ | |||
+ | // Aktuális értékek megjelenítése | ||
+ | // label.Text = ... | ||
+ | |||
+ | // Adatok ábrázolása grafikonon: | ||
+ | // chart.Series[*].Points.AddXY függvényekkel (* helyén index) | ||
+ | |||
+ | // Feltételrendszer a Timer leállítására/ao0 feszültség léptetésére | ||
+ | // if(...) ... else ... | ||
+ | // Érdemes globális változókban tárolni, hogy éppen hol tartunk. | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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 bipoláris tranzisztor mért karakterisztikáit é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 a user interface to measure the different characteristic of a bipolar transistor. | ||
+ | |||
+ | 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 [http://www.ni.com/dataacquisition/nidaqmx.htm 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 $\pm10\,$ V measurement range, it has a bit resolution of $20\,$V$/2^{16}\approx0.3\,$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 $ -10 $ and $ + 10 \, $ V, its resolution is also 16 bits and its maximum refresh rate is 200,000 Hz. | ||
+ | |||
+ | {| cellpadding="5" cellspacing="0" align="center" | ||
+ | |- | ||
+ | | [[Fájl:BT2.png|közép|500px|]] | ||
+ | |- | ||
+ | | align="center"|Figure 1. Arrangement for measuring a bipolar transistor. (a) Schematics of the measurement circuit. (b) Waveforms for the analog outputs (c) Channel assignment and drawing of the 2N3904 transistor. | ||
+ | |} | ||
+ | |||
+ | In the measurement exercise, we measure the collector current - base voltage, base current - base voltage and collector current - base current characteristics of a bipolar transistor in the arrangement shown in the figure. To solve the measurement exercise, the two analog input channels and two analog output channels of the myDAQ need to be programmed. | ||
+ | |||
+ | == The bipolar transistor == | ||
+ | |||
+ | The bipolar transistor is a three-electrode semiconductor device used for amplifying or switching electrical signals. It is usually made of silicon or germanium and consists of a pnp or npn-type doped structure. The terminals of the two outer layers are called the collector (C) and the emitter (E), while the middle layer is called the base (B). The bipolar transistor can be thought of as two diodes (pn junctions) connected in opposite directions, having a single, mutual thin layer in the middle (instead of the two adjacent middle layers with the same doping). Accordingly, the circuit operation of a bipolar transistor can be understood by taking in the diode characteristics first. | ||
+ | |||
+ | The current-voltage characteristics of a diode can be described by the following equation (for small opening currents): | ||
+ | $$I=I_\text{S}(T)\cdot\left(e^{\frac{U}{mU_\text{T}}}-1\right)$$ | ||
+ | In this formula, $I_S$ is the reverse-bias saturation current and $U_T$ is the thermal voltage, which can be calculated from the following formula at room temperature: | ||
+ | $$U_\text{T} = \frac{k_BT}{q_e} = 25,5\text{ mV,}$$ | ||
+ | where $k_B$ is the Boltzmann constant, $T$ is the temperature, $q_e$ is the electron charge. The ideality factor $m$ is a value between 1 and 2, describing the deviation from the simple Shockley diode theory. | ||
+ | |||
+ | The $I_{\text{C}}(U_{\text{BE}})$ transfer characteristic of the bipolar transistor is exponential, similarly to the diode, but in this case the ideality factor is approximately equal to one: | ||
+ | $$I_\text{C}(U_{\text{BE}})=I_S^*(T,U_{\text{CE}})\cdot e^{\frac{U_{\text{BE}}}{U_\text{T}}},$$ | ||
+ | where $I_{\text{C}}$ is the collector current, $U_{\text{BE}}$ is the base-emitter voltage, $U_{\text{CE}}$ is the collector-emitter voltage and $I_S^*$ is the termination current (as long as $I_{\text{C}} \gg I_S^*$ is satisfied). | ||
+ | |||
+ | The transistor is driven by current, i.e. the base current is not negligible during operation, its dependence on the base-emitter voltage is also exponential, but in this case $m$ is not equal to one, so the ideality factor is also needed for the description: | ||
+ | $$I_\text{B}(U_{\text{BE}})=I_{\text{B0}}\cdot e^{\frac{U_{\text{BE}}}{mU_\text{T}}}$$. | ||
+ | |||
+ | == 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". If the device is assigned a different name, you can rename it to "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 definitions 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'' directive. The created tasks can be deleted using the ''Dispose()'' method if they are no longer needed! | ||
+ | |||
+ | To solve the exercise we need four Tasks, two of which read the ''"myDAQ1/ai0"'' and ''"myDAQ1/ai1"'' ports, and the other two generate the measurement signals on the ''"myDAQ1/ao0"'' and ''"myDAQ1/ao1"'' outputs. Be careful not to exceed the minimum and maximum voltage values specified at initialization! For help in programming the card, the following example program is useful: [[DAQMX_kártya_példaprogram | example program]]. | ||
+ | |||
+ | == Exercises == | ||
+ | |||
+ | # Assemble the circuit as shown in Figure 1. (Help: the colour code of the 1 k$\Omega$ resistor is brown-black-black-brown-brown.) | ||
+ | # Create a timer object that increases the voltage of the analog output AO1 from a minimum value to a maximum value with a given number of steps and step intervals (all of these parameters are user-defined), then jumps back to the minimum value after reaching the maximum voltage level and starts increasing the voltage again (sawtooth signal generator)! Let the initial values of the parameters be: 100 steps, 10 ms step interval, 0 V minimum voltage, 0.8 V maximum voltage. Display the voltage values intended for the output using a Chart object. | ||
+ | # Place buttons for starting and stopping the sawtooth generator in the user interface. | ||
+ | # Measure the voltage on inputs AI0 and AI1 while the sawtooth generator is running! Display the measured voltage values using a Labels. | ||
+ | # Calculate the base current. Display the calculated value using a label. Place a Chart object in the GUI and plot the measured base voltage - base current characteristics. | ||
+ | # Modify the measurement program to be able to change the voltage of channel AO0 according to user-defined values (within a given range and step). Let's start by testing the range from 0.5 V to 2 V with a 0.5 V step interval. Set conditions in the Tick event to set the voltage applied to AO0 to a given value while a single period of the sawtooth signal is applied to AO1. | ||
+ | # Calculate the collector current. Display the calculated value on the GUI using a Label. Place two additional Chart objects on the GUI, and display the collector current - base voltage and collector current - base current characteristics. | ||
+ | # After pressing a "Save" button, save the last measured characteristics to a file! | ||
+ | # Fit the collector current - base voltage and base current - base voltage characteristics with appropriate formulae. (Note, that your data might have a finite offset.) Calculate the ideality factor and discuss the obtained value. Is is realistic? | ||
+ | # What is the saturation value of the collector current and what does it depend on? (Help: what is the collector voltage at saturation?) | ||
+ | |||
+ | The completed measurement program contains the following objects: Start button, Stop button, Timer, 4 Charts (one to check the output sawtooth signal, three to display the measured characteristics), SaveFileDialog, Save button, Labels to display the measured/calculated values, TextBoxes to read the parameters requested by the user, Update button to read the entered parameters. | ||
+ | |||
+ | Help for creating a Tick event: | ||
+ | |||
+ | <syntaxhighlight lang=csharp> | ||
+ | |||
+ | private void timer_Tick(object sender, EventArgs e) | ||
+ | { | ||
+ | // Calculation of the output voltage | ||
+ | |||
+ | // Output the voltage(s) and read the response | ||
+ | |||
+ | // Display measured/calculated values | ||
+ | // label.Text = ... | ||
+ | |||
+ | // Display data in a graph: | ||
+ | // chart.Series[*].Points.AddXY methods (* in place of index) | ||
+ | |||
+ | // Conditions for stopping the Timer/stepping the AO0 voltage | ||
+ | // if(...) ... else ... | ||
+ | // It's worth storing where you are in global variables. | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | The report should include instructions for using the finished measurement program. Describe the functions implemented, the handling of the graphical interface and provide details of any solutions that do not follow the structure described above. The source code of the measurement program should be attached to the report, and the report should also include the measured characteristics of the bipolar transistor and their discussion. | ||
− | |||
− | |||
</wlatex> | </wlatex> |
A lap jelenlegi, 2025. március 5., 00:27-kori változata
This page is outdated. Read the description of the lab exercise in Moodle.
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 olyan mérőfelületet készítünk, mellyel felvesszük egy bipoláris tranzisztor különböző karakterisztikáit.
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, V-os méréstartományban
V
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
és
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.
1. ábra. Bipoláris tranzisztor mérésére szolgáló elrendezés. (a) Mérési kapcsolás rajza. (b) Az analóg kimenetekre adott jelalakok (c) A használt 2N3904 tranzisztor lábkiosztása és rajza. |
A mérési gyakorlat során az ábrán látható elrendezésben mérjük egy bipoláris tranzisztor kollektoráram-bázisfeszültség, bázisáram-bázisfeszültség és kollektoráram-bázisáram karakterisztikáit. A mérési feladat megoldásához a mérőkártya két analóg bemeneti és két analóg kimeneti csatornáját szükséges programozni.
A bipoláris tranzisztor
A bipoláris tranzisztor egy háromelektródás félvezető eszköz, amely elektromos jelek erősítésére vagy kapcsolására használatos, szilíciumból vagy germániumból készül, és egy pnp vagy npn típusú adalékolt struktúrából áll. A két szélső réteg kivezetéseit kollektornak (C) és emitternek (E), míg a középső réteget bázisnak (B) nevezzük. A bipoláris tranzisztor két szembekapcsolt diódaként (pn-átmenetként) fogható fel, amelyben a két középső, azonos adalékolású réteg helyett egyetlen közös, vékony réteget találunk. Ennek megfelelően, a bipoláris tranzisztor áramköri működését a dióda tulajdonságainak ismeretében érthetjük meg.
Egy dióda áram-feszültség karakterisztikája az alábbi egyenlettel írható le (kis nyitóirányú áramok esetén):
![\[I=I_\text{S}(T)\cdot\left(e^{\frac{U}{mU_\text{T}}}-1\right)\]](/images/math/e/0/b/e0b53b74547d1ee1c8f2838be64ad981.png)
Ebben a képletben az elméleti visszáram,
pedig a temperatúrafeszültség, amely szobahőmérsékleten az alábbi képletből számítható:
![\[U_\text{T} = \frac{k_BT}{q_e} = 25,5\text{ mV,}\]](/images/math/6/8/4/684ab515f6315b99143b1c79d86b9c91.png)
ahol a Boltzmann-állandó,
a hőmérséklet,
az elektron töltése. Az
korrekciós tényező 1 és 2 közötti érték, az egyszerű Shockley-diódaelmélettől való eltérést írja le.
A bipoláris tranzisztor átviteli karakterisztikája a diódához hasonlóan exponenciális, viszont ebben az esetben a korrekciós tényező jó közelítéssel eggyel egyenlő:
![\[I_\text{C}(U_{\text{BE}})=I_S^*(T,U_{\text{CE}})\cdot e^{\frac{U_{\text{BE}}}{U_\text{T}}},\]](/images/math/4/9/4/494124fbee869047f0da704c236b4313.png)
ahol a kollektoráram,
a bázis-emitter feszültség,
a kollektor-emitter feszültség és
a záróáram (
feltétel mellett teljesül).
A tranzisztort áram vezérli, azaz a bázisáram nem elhanyagolható értékű működés közben, bázis-emitter feszültségtől való függése szintén exponenciális, ám ebben az esetben nem egyenlő eggyel, így a korrekciós tényezőre is szükség van:
![\[I_\text{B}(U_{\text{BE}})=I_{\text{B0}}\cdot e^{\frac{U_{\text{BE}}}{mU_\text{T}}}\]](/images/math/a/3/2/a324d0b264d9a86f0969f5bab5e5ddd5.png)
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 címkét célszerű átírni "myDAQ1"-re, ha nem ez az alapbeállítás. 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 definíciókat 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 négy Taskra van szükségünk, melyek közül kettő olvas a "myDAQ1/ai0" és "myDAQ1/ai1" porton, a másik kettő pedig a mérőjeleket generálja a "myDAQ1/ao0" és "myDAQ1/ao1" kimeneteken. Ü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
- Állítsuk össze a kapcsolást az ábra szerint! (Segítség: az 1 k
-os ellenállás színkódja barna-fekete-fekete-barna-barna.)
- Készítsünk mérőprogramot, mely egy Timer objektum segítségével az ao1-es analóg kimenet feszültségét a felhasználó által megadott lépésszámmal és lépésközzel egy megadott minimum értékről egy maximum értékre növeli, majd a maximális feszültségszint elérése után visszaugrik a minimumértékre, és a feszültség növelését újból kezdi (fűrészfogjel generátor)! Legyenek a paraméterek kezdeti értékei az alábbiak: 100-as lépésszám, 10 ms-os lépésköz, 0 V minimumfeszültség, 0.8 V maximális feszültség. Jelenítsük meg egy Chart objektumon a kimenetre szánt feszültségértékeket!
- Helyezzünk el a mérőfelületen a fűrészfogjel generátor futtatására ill. leállítására szolgáló gombokat!
- A fűrészfogjel generátor futtatása közben mérjük az ai0 és ai1 csatornákon a feszültséget! A mért feszültségértékeket jelenítsük meg egy-egy Label segítségével!
- Számoljuk ki a bázisáramot! A számolt értéket jelenítsünk meg a mérőfelületen egy Label segítségével! Helyezzünk egy Chart objektumot a mérőprogram felületére, és ábrázoljuk rajta a mért bázisfeszültség-bázisáram karakterisztikát!
- Módosítsuk a mérőprogramot úgy, hogy alkalmas legyen az ao0 csatorna feszültségének változtatására a felhasználó által megadott értékek szerint (adott tartományban és lépésközzel). Vizsgáljuk kezdetben a 0.5 V-tól 2 V-ig terjedő tartományt, 0.5 V-os lépésközzel. Szabjunk feltételeket a Tick eseményben, amelyekkel adott értékre állítható az ao0 csatornán kiadott feszültség, mialatt az ao1 csatornán kiadott fűrészfogjel egyetlen periódusa zajlik.
- Számoljuk ki a kollektoráramot! A számolt értéket jelenítsünk meg a mérőfelületen egy Label segítségével! Helyezzünk egy újabb Chart objektumot a mérőfelületre, aminek segítségével jelenítsük meg a mért kollektoráram-bázisáram karakterisztikákat is!
- Egy "mentés" gomb megnyomása után mentsük el egy fájlba az utoljára mért karakterisztikákat!
- Illesszük a kollektoráram - bázisfeszültség és bázisáram - bázisfeszültség karakterisztikákat a megfelelő képletekkel! (Vegyük figyelembe, hogy az adatok véges offset értékkel terheltek lehetnek.) Számítsuk ki a korrekciós tényezőt, és diszkutáljuk az eredményeket. Reális-e a kapott érték?
- Mi a kollektoráram telítési értéke, és mitől függ? (Segítség: mekkora a kollektorfeszültség telítéskor?)
Az elkészült mérőprogram az alábbi objektumokat tartalmazza: Start gomb, Stop gomb, Timer, 4 db Chart (egy a kiadott fűrészfogjel ellenőrzésére, három a mért karakterisztikák ábrázolására), SaveFileDialog, Save gomb, Label-ek a mért/számolt értékek kijelzésére, TextBox-ok a felhasználótól bekért paraméterek beolvasására, Update gomb a beadott paraméterek beolvasására.
Segítség a Tick esemény elkészítéséhez:
private void timer_Tick(object sender, EventArgs e) { // A kiadott feszültség számítása // Feszültség(ek) kiadása és a válasz olvasása // Aktuális értékek megjelenítése // label.Text = ... // Adatok ábrázolása grafikonon: // chart.Series[*].Points.AddXY függvényekkel (* helyén index) // Feltételrendszer a Timer leállítására/ao0 feszültség léptetésére // if(...) ... else ... // Érdemes globális változókban tárolni, hogy éppen hol tartunk. }
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 bipoláris tranzisztor mért karakterisztikáit é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 a user interface to measure the different characteristic of a bipolar transistor.
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 V measurement range, it has a bit resolution of
V
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
and
V, its resolution is also 16 bits and its maximum refresh rate is 200,000 Hz.
Figure 1. Arrangement for measuring a bipolar transistor. (a) Schematics of the measurement circuit. (b) Waveforms for the analog outputs (c) Channel assignment and drawing of the 2N3904 transistor. |
In the measurement exercise, we measure the collector current - base voltage, base current - base voltage and collector current - base current characteristics of a bipolar transistor in the arrangement shown in the figure. To solve the measurement exercise, the two analog input channels and two analog output channels of the myDAQ need to be programmed.
The bipolar transistor
The bipolar transistor is a three-electrode semiconductor device used for amplifying or switching electrical signals. It is usually made of silicon or germanium and consists of a pnp or npn-type doped structure. The terminals of the two outer layers are called the collector (C) and the emitter (E), while the middle layer is called the base (B). The bipolar transistor can be thought of as two diodes (pn junctions) connected in opposite directions, having a single, mutual thin layer in the middle (instead of the two adjacent middle layers with the same doping). Accordingly, the circuit operation of a bipolar transistor can be understood by taking in the diode characteristics first.
The current-voltage characteristics of a diode can be described by the following equation (for small opening currents):
![\[I=I_\text{S}(T)\cdot\left(e^{\frac{U}{mU_\text{T}}}-1\right)\]](/images/math/e/0/b/e0b53b74547d1ee1c8f2838be64ad981.png)
In this formula, is the reverse-bias saturation current and
is the thermal voltage, which can be calculated from the following formula at room temperature:
![\[U_\text{T} = \frac{k_BT}{q_e} = 25,5\text{ mV,}\]](/images/math/6/8/4/684ab515f6315b99143b1c79d86b9c91.png)
where is the Boltzmann constant,
is the temperature,
is the electron charge. The ideality factor
is a value between 1 and 2, describing the deviation from the simple Shockley diode theory.
The transfer characteristic of the bipolar transistor is exponential, similarly to the diode, but in this case the ideality factor is approximately equal to one:
![\[I_\text{C}(U_{\text{BE}})=I_S^*(T,U_{\text{CE}})\cdot e^{\frac{U_{\text{BE}}}{U_\text{T}}},\]](/images/math/4/9/4/494124fbee869047f0da704c236b4313.png)
where is the collector current,
is the base-emitter voltage,
is the collector-emitter voltage and
is the termination current (as long as
is satisfied).
The transistor is driven by current, i.e. the base current is not negligible during operation, its dependence on the base-emitter voltage is also exponential, but in this case is not equal to one, so the ideality factor is also needed for the description:
![\[I_\text{B}(U_{\text{BE}})=I_{\text{B0}}\cdot e^{\frac{U_{\text{BE}}}{mU_\text{T}}}\]](/images/math/a/3/2/a324d0b264d9a86f0969f5bab5e5ddd5.png)
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". If the device is assigned a different name, you can rename it to "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 definitions 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 directive. The created tasks can be deleted using the Dispose() method if they are no longer needed!
To solve the exercise we need four Tasks, two of which read the "myDAQ1/ai0" and "myDAQ1/ai1" ports, and the other two generate the measurement signals on the "myDAQ1/ao0" and "myDAQ1/ao1" outputs. Be careful not to exceed the minimum and maximum voltage values specified at initialization! For help in programming the card, the following example program is useful: example program.
Exercises
- Assemble the circuit as shown in Figure 1. (Help: the colour code of the 1 k
resistor is brown-black-black-brown-brown.)
- Create a timer object that increases the voltage of the analog output AO1 from a minimum value to a maximum value with a given number of steps and step intervals (all of these parameters are user-defined), then jumps back to the minimum value after reaching the maximum voltage level and starts increasing the voltage again (sawtooth signal generator)! Let the initial values of the parameters be: 100 steps, 10 ms step interval, 0 V minimum voltage, 0.8 V maximum voltage. Display the voltage values intended for the output using a Chart object.
- Place buttons for starting and stopping the sawtooth generator in the user interface.
- Measure the voltage on inputs AI0 and AI1 while the sawtooth generator is running! Display the measured voltage values using a Labels.
- Calculate the base current. Display the calculated value using a label. Place a Chart object in the GUI and plot the measured base voltage - base current characteristics.
- Modify the measurement program to be able to change the voltage of channel AO0 according to user-defined values (within a given range and step). Let's start by testing the range from 0.5 V to 2 V with a 0.5 V step interval. Set conditions in the Tick event to set the voltage applied to AO0 to a given value while a single period of the sawtooth signal is applied to AO1.
- Calculate the collector current. Display the calculated value on the GUI using a Label. Place two additional Chart objects on the GUI, and display the collector current - base voltage and collector current - base current characteristics.
- After pressing a "Save" button, save the last measured characteristics to a file!
- Fit the collector current - base voltage and base current - base voltage characteristics with appropriate formulae. (Note, that your data might have a finite offset.) Calculate the ideality factor and discuss the obtained value. Is is realistic?
- What is the saturation value of the collector current and what does it depend on? (Help: what is the collector voltage at saturation?)
The completed measurement program contains the following objects: Start button, Stop button, Timer, 4 Charts (one to check the output sawtooth signal, three to display the measured characteristics), SaveFileDialog, Save button, Labels to display the measured/calculated values, TextBoxes to read the parameters requested by the user, Update button to read the entered parameters.
Help for creating a Tick event:
private void timer_Tick(object sender, EventArgs e) { // Calculation of the output voltage // Output the voltage(s) and read the response // Display measured/calculated values // label.Text = ... // Display data in a graph: // chart.Series[*].Points.AddXY methods (* in place of index) // Conditions for stopping the Timer/stepping the AO0 voltage // if(...) ... else ... // It's worth storing where you are in global variables. }
The report should include instructions for using the finished measurement program. Describe the functions implemented, the handling of the graphical interface and provide details of any solutions that do not follow the structure described above. The source code of the measurement program should be attached to the report, and the report should also include the measured characteristics of the bipolar transistor and their discussion.