Analóg-digitális átalakító PC-re

Egy egyszerű hardverrel, részben szoftveres úton analóg jeleket mérhetünk. A printer portra illeszthető készülék négy csatornán, nyolc bites felbontásra képes. Kísérleti, demonstrációs vagy egyszerű mérési feladatok elvégzésére jól használható.

Az elvi működés megértéséhez tekintsünk az 1. ábrára. Belátható, hogy a digitális-analóg átalakítóra küldött jellel az összehasonlító komparátor kimenetét vizsgálva az analóg jel nagysága megállapítható (természetesen ha az a mérési tartományon belül van). Háromféle matematikai módszerrel dolgozhatunk, ezek programozása különösebb nehézség nélkül megoldható.



1. ábra

1. Számláló módszer

A digitális-analóg konverterre (továbbiakban "DAC") nullát írunk. Ezután egyesével növelve a kimeneti jelét megnézzük, hogy mikor billen át a komparátor. Amikor ez megtörtént, a DAC kimeneti jele közel azonos a mért jellel, tehát az utoljára kiküldött számérték megfelel az amplitúdónak. Egyszerű a módszer, azonban szerencsétlen esetben 255 lépésből áll egy mérés.

2. Követő módszer

Hasonló az előzőhöz, de minden újabb mérésnél nem nullázzuk a DAC-ot, hanem a komparátor kimenetének állapota függvényében lefelé vagy felfelé folytatjuk a számolást. Ekkor csak annyi lépést kell tennünk, amennyit az előző mérés óta változott a mérendő jel. Azonban még ez is lassú módszer és itt is adódhat olyan helyzet, hogy az összes (255) összehasonlítást el kell végeznünk.

3. Kétoldali közelítés

Programozása alig bonyolultabb, az átalakítás viszont gyorsabb, mert csak nyolc lépésből áll egy mérés és a lépések száma nem függ a mérendő jel nagyságától. Nullázzuk a DAC-ot. A legmagasabb bitet (D7) állítsuk magasra: DAC=DAC OR 128. Ha a komparátor átbillent, akkor már túlléptük a mérendő jel nagyságát, töröljük tehát a kérdéses bitet: DAC=DAC AND NOT 128. Ezután a második legmagasabb bitet (D6) kapcsoljuk be, tehát DAC=DAC OR 64. A komparátor kimenetét ismét megvizsgálva ha az alacsony, akkor úgy hagyjuk a D6-ot, ha magas, akkor töröljük (DAC=DAC AND NOT 64). Harmadik lépésben D5-el (32), negyedik lépésben D4-el (16)...stb. értelemszerűen végig ugyanígy. Nyolc lépésben, bitenkét eljuthatunk D7-től D0-ig. Az 1/2, 1/4, 1/8,..1/256 értékek kombinációival határoljuk be a mérendő jel nagyságát. A mérési eredmény természetesen itt is a DAC-on lévő végső érték.

A kapcsolás

A 2. ábrán látható. A DAC R-2R ellenálláshálózattal lett megvalósítva. Ennek előnye, hogy csak kétféle értéket kell használnunk. Érdemes ide kis tűrésű példányokat beszerezni, mert döntően befolyásolhatják az átalakító linearitását. A 74HCT373 ebben a beállításban csak, mint nyolc db meghajtó szerepel. Kimenetei korrektebb L-H szinteket adnak, mint a printer port és a saját tápfeszültség miatt stabilabbak is. Az ellenálláshálózat azért lett ilyen nagy értékekből elkészítve, hogy elhanyagolható legyen a meghajtók kimeneti impedanciája. A bemeneti 10 kΩ-ok csak a számítógép védelmét szolgálják, különösebb szerepük nincs. A printer port kimenetére (általában $278) írt bájtnak az "A" ponton analóg feszültségként meg kell jelennie (0..2,55 V). Ezt hasonlítjuk majd össze az analóg bemenetek jeleivel műveleti erősítők, mint komparátorok segítségével. Az LM324 négy egységet tartalmaz, a porton is található négy bemenet (sőt több is), tehát így lehet a közös DAC-al négy különböző analóg jelet mérni.



2. ábra

A port programozásához szükséges információk:

- A kimeneti 8 bitet a DAC részére a $278 portra kell írni. A D0..D7 bitek a 25 pólusú CANON csatlakozó 2..9 tűjei. Nem negált logikájú kimenetek.
- A négy bemeneti bit a $279 port olvasásával érhető el. A D3-D4-D5-D6 bitek a csatlakozó 15-13-12-10 tűjei. Ezek sem negált logikájúak.
- A csatlakozó 18..25 tűjei mind GND.

Ha valaki többet szeretne megtudni, ajánlom a "Sas Tibor: Vezérlések párhuzamos porton keresztül (A Turbo Pascal kapcsolata a külvilággal)" c. könyvet.

Megépítés, élesztés

A nyomtatott áramkör a 3a és 3b ábrán, a beültetési vázlat a 4.-en található. A panel a beültetési oldalon is tartalmaz néhány vezetőcsíkot. Ügyeljünk rá, hogy a felső oldalon a négyzet alakú forrpontokat nem kell átfúrnunk, melyek közepén emiatt nincs is fehér pont (pl. a 10 kΩ-oknál). Az LM324 helyett nem használhatunk TL074-et! Előbbi ugyanis egyoldalas tápfeszültség esetén be- és kimenetein a teljes negatív (itt GND) tápfeszültségig használhatóak. A csillaggal jelölt 110 kΩ-al hitelesíthetjük készülékünket, hogy 2,55 V-os jelnél mérjen maximumot. Az ellenállás értéke nem kritikus. Van még egy csillagos ellenállás a 7805 kimenetén, ezt az esetek 99 %-ában biztosan nem kell beépítenünk. Évekkel ezelőtt találkoztam olyan 78xx típusú stabilizátorokkal, amelyek kimeneti feszültsége néhány mA terhelőáram nélkül nem állt be a névlegesre, jóval magasabb volt. Bár a készülékben az LM324 már önmagában is elegendő terhelés lehet, szükség esetén építsük be az említett ellenállást. Az analóg bemenetekkel párhuzamos 1 MΩ-ok nem szerepelnek a panelterven, a fólia oldalon, a csatlakozó aljzat kivezetéseihez vannak forrasztva.



3a. ábra (felső oldal)



3b. ábra (alsó oldal)



4. ábra

Tesztprogram

Mellékelek egy rövidke Turbo Pascal programot, ami bemutatja a működtetést. Az egyszerűség kedvéért csak az egyik csatornát használja. Szándékosan nem törekedtem elegáns, struktúrált programozási fogásokra, mert a működés megértésére helyeztem a hangsúlyt.

{ Analóg-digitális átalakítás kétoldali közelítéses módszerrel.  }
{ Csak egy bemeneten mér, példaprogram Turbo Pascal nyelven.     }
{                      D/A konverter: $278 port                  }
{ Összehasonlító komparátor kimenete: $279 port 3. bitje (15.tű) }

uses crt;
begin
port[$278]:= 0;

port[$278]:= port[$278] or 128; delay(1);
if port[$279] and 8 = 0 then port[$278]:= port[$278] and not 128;

port[$278]:= port[$278] or 64; delay(1);
if port[$279] and 8 = 0 then port[$278]:= port[$278] and not 64;

port[$278]:= port[$278] or 32; delay(1);
if port[$279] and 8 = 0 then port[$278]:= port[$278] and not 32;

port[$278]:= port[$278] or 16; delay(1);
if port[$279] and 8 = 0 then port[$278]:= port[$278] and not 16;

port[$278]:= port[$278] or 8; delay(1);
if port[$279] and 8 = 0 then port[$278]:= port[$278] and not 8;

port[$278]:= port[$278] or 4; delay(1);
if port[$279] and 8 = 0 then port[$278]:= port[$278] and not 4;

port[$278]:= port[$278] or 2; delay(1);
if port[$279] and 8 = 0 then port[$278]:= port[$278] and not 2;

port[$278]:= port[$278] or 1; delay(1);
if port[$279] and 8 = 0 then port[$278]:= port[$278] and not 1;

clrscr; writeln('Amplitúdó: ',port[$278]);
end.

Demópéldák

A szerkezet egyenszint vagy lassan változó jelek mérésére használható. 1 Hz körüli frekvenciájú négyszögjellel RC integráló tagot hajtottam meg (5. ábra). A kondenzátor feszültségének grafikus megjelenítése a 6. ábrán látható. Ha szeretnénk a néhány Hz-es tartományban is mérni, akkor az átalakító analóg bemeneteinek 100 nF-jait cseréljük kisebbekre vagy hagyjuk el. Érdekesebb a 7. ábra mérése. Itt izzólámpa feszültség-ellenállás karakterisztikájának meghatározása volt a feladat. A 8. ábráról leolvasható, hogyan változik az impedancia a feszültség függvényében. Izzólámpás stabilizálású hanggeneretátor méretezésekor könnyebben meghatározhatjuk az izzó munkapontját.



5. ábra



6. ábra



7. ábra



8. ábra

Az átalakító:



teszt.rar (A tesztprogram.)
folia1a.png (Az átalakító nyomtatott áramkörének felső fólia oldala, mérete: 81 mm x 41 mm.)
folia1b.png (Az átalakító nyomtatott áramkörének alsó fólia oldala, mérete: 81 mm x 41 mm.)