PIC16F873 alapú digitális tároló oszcilloszkóp
avagy szegényember DSO-ja :-)
![]() |
    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
   
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.
   
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.
   
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. :-)
   
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.
   
   
![]() |
A miniDSO nézeti képe |
![]() |
A miniDSO nézeti képe |
![]() |
Zener diódán mért, 50Hz-es feszültség jelalak, 25usec mintavételi idő. |
![]() |
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. |
![]() |
NYÁK-ba ültethető csipogón mért 1KHz-es jelalak, 25usec mintavételi idő. |
![]() |
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. |