PIC16F873 alapú digitális tároló oszcilloszkóp
avagy szegényember DSO-ja :-)



1KHz mért jelalak







    Jellemzők



Csatornák száma 1
Mérhető max. bemeneti feszültség Vp-p +/-15V
Maximális bemeneti feszültség +/- 150V
Maximális mintavételi sebesség 25usec(40 kHz)
Felbontás 10bit
Maximális mérhető frekvencia kb. 1-5kHz (jelalaktól függően)
Tárolható minták száma 16'000
Kommunikáció RS-232, 115kbaud
Mérési módok AC/DC, 4 féle trigger lehetőség
Mérési időtartam 0.4 - 80sec
Galvanikus leválasztás NINCS!
Mért adatok rögzítése merevlemezre Nincs





    Alapötlet


    A mini DSO ötletét a kényszer szülte. A munkahelyemen többször készítettünk - többek között - lámpák vizsgálatához használható berendezéseket. Tárolós szkóp híján a tranziens jelenségeket (amik a lámpák tesztelésénél meglehetősen jelentős szerepet töltenek be) nem igazán tudtuk megfigyelni illetve kiértékelni. Tárolós szkópok elég borsos áron kaphatóak, így saját DSO fejlesztésébe kezdtem. ( Persze azt sem tagadhatom le, hogy önös érdekek is vezéreltek, hiszen egyrészt egy ilyen műszer nagyon hasznos az elektronikai hobbistáknak is, másrészt számomra komoly kihívás volt a feladat.)






    Elmélet


    A cél természetesen többek között a minél nagyobb mintavételi frekvencia, minél nagyobb felbontás és minél több minta tárolásának lehetősége volt. Mivel alapjában véve képzettségemet és tapasztalataimat tekintve programozó vagyok, minél egyszerűbb áramköri kialakítást és minél könnyebben beszerezhető, kommersz áramköröket használok az általam tervezett szerkentyűkben. Mivel a munkahelyemen szinte kizárólagosan a 16-os sorozatú PIC kontrollereket használjuk, egyértelműen ezek közül választottam processzort. A 16F873-as típus minden igénynek megfelelt. (Egyedül a lábak számával voltak problémáim, de erről majd később. ) Ez a processzor rendelkezik 10 bites A/D átalakítóval és hardver USART-al.
    Az, hogy a processzor és nem egy külső A/D egység végzi az átalakítást eléggé lekorlátozza a mintavétel maximális sebességét. Nézzük meg, miből is tevődik össze az A/D átalakítás időtartama!
    Az A/D átalakítás órajele az oszcillátor frekvenciából kerül leosztásra. Ez az osztásarány az adatlap szerint Fosc/2, Fosc/8 vagy Fosc/32 ( az A/D modul belső RC oszcillátorát inkább nem használtam, egy kvarc talán mégis precízebb... :-) ) lehet. A teljes A/D átalakítás ideje 12 Tad, ( Tad egy bit átalakításának ideje az adatlap jelölése szerint ) a Tad minimális értéke pedig 1.6 usec.
    Ezen kívül a mintavevő- tartó áramkör (sample and hold) megfelelő működéséhez biztosítani kell két átalakítás között egy kis időt, ameddig az áramkört mintavételezésre állítva a mérendő jelre kapcsoljuk. Ez alatt az idő alatt a mintavevő kondenzátornak fel kell töltődnie a bemeneti jel értékére, hogy aztán azt az értéket az A/D áramkör át tudja alakítani. Ezt az időt angolul acqusition time-nak nevezzük. Ez az idő függ a környezeti hőmérséklettől, az analóg jel PIC felé mutatott kimeneti impedanciájától és a tápfeszültség nagyságától. (A tápfeszültség változásával változik a mitavevő- tartó áramkör ellenállása.)
    Könnyű belátni, hogy ezeket az időket minél kisebbre szorítva érhető el a legnagyobb mintavételi frekvencia. Az idők csökkentéséhez a fentiek alapján tehát minél nagyobb tápfeszültséget és minél kisebb bemeneti impedanciát kell biztosítani a PIC számára. így a tápfeszültséget 5V-ra választottam (ez lesz az A/D átalakítás referencia feszülstége is egyben), a bemenet pedig a minél kisebb impedancia érdekében műveleti erősítőn keresztül kapcsolódik a PIC-hez. A PIC maximális órajele 20 MHz. Egy teljes átalakítás ideje tehát :



            20'000'000
-------------------------------------------------------
    ( Tad * 12 ) + ACQUISITION TIME



    Az Fosc/32 beállítást választva:



            32
------------------------------ = 0.000'001'6 sec
    20'000'000



    Azaz pontosan 1.6usec a Tad. Ez ideális számunkra. Tehát kiválasztottuk az A/D beállítását és a PIC oszcillátorának sebességét is.
    Az ACQUISITION TIME egyik összetevője (az erősítő beállási ideje, Amplifier Settling Time) 2usec, ehhez jön egy hőmérséklet által meghatázorott érték (hasra kb. 1usec) és a mintavevő kapacitás töltődésének ideje (ami a lehető legkisebb a műveleti erősítős illesztés és a magas tápfeszültség miatt) ami hasra kb. 5usec. Tehát egy teljes átalakítás ideje :



        ( 1.6 * 12 ) + ( 2 + 1 + 5 ) = 27.2 usec


    Ez azt jelenti, hogy a maximális mintavételi frekvencia :



            1
------------------------------ = 36'764 Hz
    27.2 usec



    Mint később a hitelesítés során kiderült, a hasalt értékekből le lehet faragni, így a maximális mintavételi időt be lehetett állítani pontosan 25usec-ra.
    Ez bizony elég sovány teljesítmény egy tárolós oszcilloszkóphoz. Felmerülhet a kérdés, hogy akkor mégis miért folytattam? Hiszen egy hangkártya ennek akár a dupláját is produkálja, sokkal jobb felbontásban.
    Nos, ez vitathatatlan tény. Azonban ne felejtsük el, hogy a hangkártyák bemenetén mindig van egy csatoló kondenzátor, ami lehetetlenné teszi a DC csatolású mérést! Volt szerencsém egy alkalommal egy ilyen problémába belefutnom. TTL jeleket kellett figyelnünk jobb híján hangkártya-szkóppal. Nagyon zavaró volt az AC csatolás miatt torzult jelek alakjának kiértékelése. Másrészt szerettem volna egy olyan szkópot, aminek a képernyője jóval nagyobb mint egy hagyományos szkóp mondjuk 9cm-es átmérőjű ernyője. (Csak saccoltam, nem tudom, hogy valóban 9 cm-es e egy szkópcső :-) ) Hangkártyát kezelő programok között sem találtam olyat, ami a teljes képernyőt kihasználná a mérési eredmények kirajzolására. (Lehet, hogy van ilyen, én nem találtam, bár nem is sokat kerestem :-) )
    És persze nem utolsó szempont volt a kihívás! Amikor nekikezdtem a projektnek, fogalmam sem volt, bár már sejtettem, hogy milyen nyelven fogom megcsinálni a PC-s kezelőprogramot. Programozói végzettségem ugyanis ipari vezérlők (PLC-k) és mikrokontrollerek programozására értendő. Végül a gyors és egyszerű fejlesztés érdekében a Visual Basic mellett döntöttem.







    A hardver


DSO bemeneti jelformáló erősítő rajzrészlet     Miután idáig eljutottam, nekiláttam a hardver kialakításának. A processzor, a mintavételi sebesség (tehát ezzel a határfrekvencia is) nem támasztott túlzottan komoly követelményeket.
    A mérendő jelet mindenképpen valamilyen jelformáló erősítőn kell keresztülvezetni, amelyet úgy kellett kialakítanom, hogy minél szélesebb amplitudó tartományban legyen képes fogadni a bejövő jelet és azt a PIC A/D 0-5 Volt-os szintjéhez illessze. (A PIC saját tápfeszültségét használja referenciafeszültségnek, külső referenciát a kevés láb miatt nem használhattam.)
    A jelformálás egyszerűen lett megoldva: egy műveleti erősítő egyik lábára egy potenciométer csúszkája, két vége pedig a +/- tápfeszültségre. Az erősítő másik bemenete fogadja a mérendő jelet. Az erősítés szintén egy potenciométerrel változtatható, 0.1 - 10-szeres érték között. (A schematic rajzon a TL082A, POT1 és POT2 elemekről van szó.) Tehát a POT1 a jel Y pozícióját, POT2 pedig az amplitudóját határozza meg. A műveleti erősítő +/- 5V-os táplálást kap, tehát a belőle maximálisan kivehető jel csúcstól csúcsig kb. 3-3.2V. Ez javítható rail-to-rail típus használatával. (Nem tudom, van-e TL082 lábkompatibilis típus.) Mivel a PIC tápfeszültsége és ezzel együtt a referenciafeszültsége 0-5V, a mérhető tartomány kb. 0-3.2 V. (Tehát az A/D átalakító 10 bites felbontását nem tudja kihasználni ez a kapcsolási elrendezés.)
    A bemeneti impedancia illesztését a másik műveleti erősítő végzi, amely feszültségkövető kapcsolásban működik. Ez biztosítja a bemenet nagyimpedanciás leválasztását.
    Az erősítés beállítását tehát nem többállású kapcsolóval, hanem potenciométerrel oldottam meg. Ennek előnye a kisebb anyagigény, hátránya, hogy adott beállításhoz tartozó erősítést komplikáltabb meghatározni. Az erősítés meghatározására a bemeneten található kalibrációs kapcsolók adnak lehetőséget.
    A J7 kapcsoló a szokásos AC/DC csatolás kiválasztására szolgál. A J3 kapcsolóval a PIC saját tápfeszültsége (5V) kapcsolható a bemenetre a külső jelek leválasztásával egyidőben. Ennek így azonban nem lenne sok értelme, hiszen a műveleti erősítő (lásd feljebb) csak kb. 3.5V-ot képes az A/D bemenetére vezetni. J6 2-3 pozícióba kapcsolásával azonban a bemeneti feszültséget leoszthatjuk egy előre beállított értékre. Ez jelen esetben:

        82 / ( 820 + 82 ) = 0.0909

    Tehát cirka 1/11-ed. Ez azt jelenti, hogy a műveleti erősítőre kb. 0.45V kerül.





DSO bemenet rajzrészlet



    A J4 kapcsolóval (GND/MEAS.) 0V és a bemenő jel közül választhatjuk ki, hogy melyik kerüljön a bemenetre.
    Ezek alapján a kalibrálás menete kitalálható: a J6 kapcsolót 1/11-es osztás állásba kapcsoljuk, majd a J3 kapcsolót 5V állásba. Megnézzük, hogy a monitoron hol látható a 0.45V. Ezután J3 kapcsolót visszabillenytük és a J4-el földre (0V) kapcsoljuk a bemenetet. A két érték alapján a monitoron látható Volts/Div értéket kiszámíthatjuk. Érdemes ezt valamilyen egész értékre állítani. A beállítást a POT1 és POT2 potenciométerekkel végezhetjük el.
    Itt jelentkezik a kapcsolók helyett potméterrel való megvalósítás nagy problémája: amikor a POT2-vel változtatunk az erősítésen, akkor a 0V pozíciója is vándorol! (Hacsak nem pontosan 0V-ra sikerült beállítanunk POT1-et... :-) ) Ezért a kalibrálást úgy érdemes elvégezni, hogy először az erősítést állítjuk be a kívánt értékre és ezután az Y pozíciót. Mérés közben persze szintén figyelembe kell venni, hogy a kapcsolásnak megfelelően a hagyományos szkópoktól eltérően az erősítés változtatásakor a 0V is "elmászik". Hiába, olcsó húsnak híg a leve...
    Az erősítés értéke -0.1 - 10x értékű az ábrán feltüntetett értékekkel. Ez természetesen megváltoztatható, de akkor nehezebben lehet kezelni nagyobb erősítésértékeknél az Y pozíciót. Az erősítés negatív, mert az erősítő invertáló alapkapcsolásban működik. A polartiáshelyes megjelenítésről a szoftver gondoskodik.
    A minták tárolása egy 486-os alaplapból kibányászott W24257AK statikus RAM IC-be történik. Mivel a címzéshez nem lett volna elég láb, két 4-bites D-tárral (74LS175) oldottam meg a címdekódolást. A RAM 32kbyte-os, a mért értékek pedig 10 bitesek. Nem volt kedvem a tömörítgetéssel szenvedni, így 16'000 lett a tárolható minták maximális száma.
    DSO-PC RS-232 kábel bekötése A PC-PIC kapcsolatot RS-232 kommunikációval oldottam meg. A szintillesztést MAX232 IC végzi, amely nincs galvanikusan leválasztva a PC-ről. Az átvitel - akárcsak a minták tárolása - tömörítetlenül történik. A kommunikáció sebessége 115kbit/s, ez azt jelenti, hogy egy gyorsabb PC-t használva is a 16'000 minta átküldése kb. 4-5, a kirajzolás újabb 3-4 másodpercet igényel, tehát a maximális mintavételkor 8-10 másodpercenként frissül a képernyő tartalma.
    A kommunikációhoz használt kábel bekötését a mellékelt ábra mutatja. A kábel mindkét végén D9-es anya csatlakozó szükséges. 3 eres, lehetőleg árnyékolt kábelt használjunk! ( Az árnyékolás a kommunikáció zavarmentesítése miatt fontos. Hosszú, árnyékolatlan kábel és zajos környezet esetén a kommunikáció bizonytalanná válik. Erre akkor jöttem rá, amikor egy 250VA-es hálózati transzformátor környezetében képtelen volt a PC a DSO-ból használható kapcsolatot kicsikarni. )








    A szoftver





    A szoftver megírásához először is el kellett dönteni, hogy milyen nyelven készüljön. Mivel addigra már sok-sok munkaórán és szíváson voltam túl :-), a gyorsaság és egyszerűség elvéhez híven a Visual Basic mellett döntöttem. Így sem volt sétagalopp, de végül sikerült. :-)
DSO szoftver menü     A beállításokban választhatunk mintavételi sebességet, trigger módot, trigger szintet és irányt, kijelzéshez Time/div értéket, és a tárolni kívánt minták számát. Továbbá megadhatjuk, hogy folyamatos vonalként (Line) vagy mérési pontonként (Dot) szeretnénk a mérést látni. A Volts/Div opciót bepipálva a kirajzolás függőleges mértékét felére csökkenthetjük. Erre azért lehet szükség, mert pl. 1024x768 pixeles felbontásban (az A/D 0-1024 értéket ad) a mérési pontok "lecsúszhatnak" a képernyő látható részéről.
    A trigger szint megadása 8 biten történik, az alsó két bit figyelmen kívül hagyásával. Ez biztosít némi hiszterézist a triggereléshez. Ennek (mármint a trigger hiszterézisnek) a változtatására nincs lehetőség.
    Pontonkénti rajzolás esetén a pontok 2x2 pixel méretűek a jobb láthatóság érdekében. Vonal (Line) rajzolás esetén a mérési pontok lineáris interpolációval kerülnek összekötésre. (Tehát tulajdonképpen egyenes vonalakkal össze vannak kötve.)
    A triggerelésre (mérés indítására) négyféle lehetőség kínálkozik. Az Ext./Single funkció kiválasztásánál a mérés a START gomb megnyomására azonnal indul és csak egyszer történik mérés.
    Az Ext./Cont. funkciónál a mérés folyamatos. Tehát a mérés csak akkor fejeződik be, ha megnyomjuk a STOP gombot.
    Trig./Single üzemmódban a START megnyomása után a kontroller figyelni kezdi a bemeneti jelet. A bállított trigger irányának megfelelően (Rise: felfutóél, Fall: lefutóél) a mérés akkor indul el, ha a jel a beállított irányban átlépi a triggerként beállított feszültségszintet. A mérést egyetlen alkalommal végzi el.
    Trig./Cont. üzemmódban a mérések addig folytatódnak, amíg a STOP gombbal le nem állítjuk a méréseket. Ebben az üzemmódban tulajdonképpen úgy használhatjuk a DSO-t, mintha hagyományos, analóg oszcilloszkóp lenne.






    Értékelés



    Az egész project tulajdonképpen csak egy próbának indult, bizonyítandó, hogy képes vagyok mind a hardver, mind a szoftver összehozására. Ezért nem igazán fordítottam különösebb gondot a dobozolhatóságra. Az elsődleges szempontok az egyszerűség és a gazdaságosság volt.
    A készülék paraméterei - és az ára is! :-) - jóval alatta maradnak a kereskedelmi forgalomban kapható tárolós szkópokénak, bár a 16'000 mintavétel figyelemre méltó. (Hát még ha nem lettem volna lusta valamilyen tömörítési eljárást is kiatalálni :-) ) Az eredeti célra, az 50Hz-es hálózati tranziensek vizsgálatára tökéletesen megfelel. Bátran ajánlom megépítésre mindekinek, aki kisfrekvenciás elektronikai készülékekkel foglalkozik és szeret barkácsolni.
   
   

DSO nézeti kép A miniDSO nézeti képe
DSO nézeti kép A miniDSO nézeti képe
50Hz mért jelalak Zener diódán mért, 50Hz-es feszültség jelalak, 25usec mintavételi idő.
50Hz mért jelalak, mérési pontonkénti ábrázolással Zener diódán mért, 50Hz-es feszültség jelalak, 25usec mintavételi idő. A mérés eredménye mérési pontonként került ábrázolásra.
1KHz mért jelalak NYÁK-ba ültethető csipogón mért 1KHz-es jelalak, 25usec mintavételi idő.
1KHz mért jelalak, mérési pontonkénti ábrázolással NYÁK-ba ültethető csipogón mért 1KHz-es jelalak, 25usec mintavételi idő. A mérés eredménye mérési pontonként került ábrázolásra.

E-mail címem: hozso_001@freemail.hu