Tartalomjegyzék:

Dual Trace oszcilloszkóp: 11 lépés (képekkel)
Dual Trace oszcilloszkóp: 11 lépés (képekkel)

Videó: Dual Trace oszcilloszkóp: 11 lépés (képekkel)

Videó: Dual Trace oszcilloszkóp: 11 lépés (képekkel)
Videó: 🟡 POCO X5 PRO - САМЫЙ ДЕТАЛЬНЫЙ ОБЗОР и ТЕСТЫ 2024, Július
Anonim
Kettős nyomú oszcilloszkóp
Kettős nyomú oszcilloszkóp

Amikor megépítettem az előző mini oszcilloszkópomat, látni akartam, hogy mennyire sikerül a legkisebb ARM mikrovezérlőmet STM32F030 (F030) teljesítményre késztetnem, és szép munkát végzett.

Az egyik megjegyzésben felmerült, hogy az STM32F103 -as (F103) "kék tabletta" jobb, kisebb lehet, mint az F030 -as fejlesztőlap és esetleg még olcsóbb is. De a mini oszcilloszkóphoz nem a fejlesztőkártyát használtam, hanem az F030-at egy még kisebb SMD-DIP kártyán, így ott a Blue Pill biztosan nem lenne kisebb, és kétlem, hogy olcsóbb is lenne.

A kód már elérhető a Gitlab -on:

gitlab.com/WilkoL/dual-trace-oscilloscope

Kellékek

Részlista: - műanyag doboz - perfboard (kétoldalas prototípus tábla 8x12 cm) - Kék pirula - ST7735s TFT kijelző - lítium -ion akkumulátor - HT7333 3.3V alacsony kiesésű szabályozó - MCP6L92 kettős opamp - TSSOP8 - DIP8 kártya - 12 MHz -es kristály (nem szükséges) - forgó jeladó és gomb (2x) - tápkapcsoló - banánkapcsok (4x) - lítium -ion töltőkártya - több ellenállás és kondenzátor - nejlon távtartók, anyák és csavarok

Eszközök:

- forrasztóállomás - forrasztó 0,7 mm - néhány huzal - oldalsó vágó - szemüveg és nagyító - fúró - multiméter - oszcilloszkóp - STLink -V2

Szoftver:

- STM32IDE - STM32CubeMX - STLink Utility - LowLayer könyvtár - ST7735s -hez adaptált könyvtár - Notepad ++ - Kicad

1. lépés: Interleave vagy SImultult Mode

Interleave vagy SI szimultán mód
Interleave vagy SI szimultán mód
Interleave vagy SI szimultán mód
Interleave vagy SI szimultán mód

Kék pirula

De az ötlet megvolt, és tudtam, hogy az F103 két ADC -vel rendelkezik! Mi lenne, ha ezt a két ADC -t együtt használnám "interleave" módban, amit már az STM32F407 (F407) esetében is megtettem. A mintavételi sebesség megduplázódik. Kombinálja ezt egy gyorsabb mikrokontrollerrel, és ez a mini oszcilloszkóp nagy utódja lesz.

Interleave mód Furcsa módon az F103 -ban az ADC -k kevésbé fejlettek, mint az F030 -ban (és az F407 -ben), nem választhatja ki a felbontást. Ennél is fontosabb, hogy a két ADC közötti időzítést sem módosíthatja. Most, amikor az interleave módot használja, általában azt szeretné, hogy a mintavétel a lehető leggyorsabb legyen, a minták közötti legrövidebb idő alatt, de oszcilloszkóppal szükség van az időzítés megváltoztatására. Talán még mindig meg lehet csinálni, nem vagyok professzionális oszcilloszkóptervező, de elejtettem az interleave mód használatának tervét.

Egyidejű üzemmód

Ha azonban két ADC-vel rendelkezik, sokkal több lehetőség közül választhat, a két ADC "normál-egyidejű" módra is beállítható. Mit szólna egy kettős nyomkövető oszcilloszkóphoz?

Miután úgy döntöttem, hogy megpróbálok kettős nyomvonalú oszcilloszkópot készíteni, változó bemeneti érzékenységet is szerettem volna, ez a lehetőség nem volt a mini oszcilloszkópon. Ez csillapítót (és erősítőt) jelent a bemeneteken. És talán még többet akartam? Összeállítottam tehát egy kis listát a "kedvesekről".

KÍVÁNSÁG LISTA

két csatorna

változó érzékenység mindkét csatornán

mindkét csatornán aktiválódik

változó trigger szint mindkét csatornán

változó eltolás

egyetlen akkumulátorral

ugyanabba a dobozba illeszkedik, mint a mini-oszcilloszkóp

2. lépés: Prototípuskészítés

Prototípuskészítés
Prototípuskészítés
Prototípuskészítés
Prototípuskészítés

Szokásom szerint ezeket a projekteket kenyérsütőn kezdtem. (Lásd a képet) És mielőtt mindent forrasztanék a perfboardon, megpróbálom kideríteni, hogy és hogyan illeszkedik a kiválasztott projektdobozba. Elfér, de csak úgy. Egyes részek a képernyő alatt vannak elrejtve, mások a Kék pirula alatt. És ismét, mint a legtöbb projektemnél, ez is csak egyszeri projekt, és nem tervezek hozzá PCB-t.

3. lépés: Csillapítók

Csillapítók
Csillapítók

A szokásos oszcilloszkópokban a bemeneti csillapítók olyan áramkörök, amelyek megváltoztatják a csillapítást és az erősítést azáltal, hogy kis jelrelékkel be- és kikapcsolják az ellenállásokat. Bár van néhány ilyen relém, tudom, hogy nem kapcsolnak 4 V -nál kisebb feszültségre, ami azt jelenti, hogy csak teljesen feltöltött lítium -ion akkumulátorral (4,2 V) fognak működni. Tehát más módra volt szükségem az ellenállások kapcsolásához. Természetesen csak mechanikus kapcsolókat tudtam telepíteni, de ez már biztosan nem férne bele a projektdobozba, gondolva, talán megpróbálhatnék újra egy jobb digitális potenciométert (a túlságosan zajos).

Aztán "analóg kapcsolókra" gondoltam, ezekkel magam is készíthetek digitális potenciométert. Alkatrészgyűjteményemben találtam a CD4066 -ot négy analóg kapcsolóval. Az ötlet az, hogy az opamp visszacsatolási ellenállását változtathatóvá tegyük úgy, hogy a visszacsatolási ellenállással párhuzamosan be- és kikapcsoljuk az ellenállásokat.

Nagyon jól működik, de mivel mindössze 4 kapcsoló volt a 4066 -ban és 2 csatorna, nem lehetett háromnál több érzékenységi szintet beállítani. Osztályonként 500 mV, 1 V és 2 V -ot választottam, mivel ezeket használom a legtöbb feszültséget. A képernyő 6 részre van osztva, így a tartományok -1,5 V -tól +1,5 V -ig, -3 V -tól +3 V -ig és -6 V -tól 6 V -ig terjednek.

A "virtuális föld" segítségével felfelé és lefelé mozgathatja ezeket a tartományokat, így akár 0V-tól +12V-ig is lehetséges.

4. lépés: Virtuális föld

Virtuális föld
Virtuális föld
Virtuális föld
Virtuális föld

Mivel az oszcilloszkóp egyetlen tápegységet (3,3 V) használ, az opamp -eknek virtuális talajszintre van szükségük, különben nem működnek. Ez a virtuális talajszint a PWM segítségével készül a TIM4 egyik kimeneti csatornáján, amelynek működési ciklusa néhány százalékról csaknem száz százalékra változik. Az aluláteresztő szűrő 1k ellenállással és 10uF kondenzátorral ezt (majdnem) 0V és (majdnem) 3,3V közötti feszültséggé alakítja át. A négyzethullám frekvenciája alig 100kHz alatt van, így az egyszerű aluláteresztő szűrő elég jó.

Ennek az oszcilloszkópnak az elkészítésekor meglehetősen későn jöttem rá, hogy nem lehet két különálló eltolás a csatornákhoz. Ez annak a ténynek köszönhető, hogy egyetlen tápegység esetén a bemeneti földszintet el kell különíteni az opamp-ek valós földszintjétől. Tehát mindkét csatorna ugyanúgy mozog, mint a GND beállítás módosítása.

5. lépés: Rotációs kódolók és hibakeresés

Rotációs kódolók és hibakeresés
Rotációs kódolók és hibakeresés
Rotációs kódolók és hibakeresés
Rotációs kódolók és hibakeresés

A mini oszcilloszkópon minden funkcióhoz csak egy forgó jeladót használtam. Ez nagyon megnehezítené a kettős oszcilloszkóp használatát, ezért itt kettőre van szükségem. Az egyik kódoló a csillapítókhoz és a virtuális talajszinthez, a másik pedig az időalaphoz és a kiváltáshoz. Sajnos, ahogy a másik projektemben is, ezek a forgó jeladók nagyon "zajosak". Annyira rosszak, hogy egyszerűen nem működnének az időzítőkkel "kódoló módban", ami az olvasás szokásos módja. TIM2 időzítővel kellett lekapcsolási mechanizmust készíteni, 100us -onként ellenőrizni a kódolókat. Ez az időzítő viszont csak akkor indul el (csak), ha valamilyen tevékenység van a kódolókon, ezt a bemeneti portok EXTI funkciójával ellenőrzik. Most a kódolók jól működnek.

És amint láthatja, a kijelző is nagyon hasznos lehet a hibakeresési információk megjelenítéséhez.

6. lépés: Kijelző és időalap

Kijelző és időbázis
Kijelző és időbázis

A kijelző felbontása 160 x 128 képpont, így 160 képernyőre van szükség egy teljes képernyőhöz, sikerült felgyorsítanom az ADC -ket, hogy másodpercenként 1,6 millió mintát készítsenek, és ez a sokat túlhajtott mikrokontrollerrel (erről bővebben később) ad osztályonként minimum 20us (100us / képernyő). Így a 10 kHz -es hullámforma kitölti az egész képernyőt.

Ez csak kétszer olyan gyors, mint a korábban készített mini oszcilloszkóp. Na jó, most két csatornával van:-).

Mint már említettük, a kijelző 160 képpont széles, így csak 160 értékre van szükség képernyőnként. De minden puffer valójában 320 mintát tartalmaz. Tehát a DMA 320 értéket tárol, mielőtt az átvitel teljes megszakítását (TC) kiváltja. Ennek oka az, hogy a kiváltás szoftverben történik. A mintavétel véletlenszerűen kezdődik, ezért nagyon valószínűtlen, hogy a puffer első értéke az a hely, ahol a triggerpontnak lennie kell.

Ezért a triggerpont megtalálható a track_x_buffer olvasásával, ha az érték a kívánt trigger trigger értéken van en, ha az előző érték éppen alatta van, akkor a trigger_pont megtalálható. Ez elég jól működik, de nagyobb pufferre van szüksége, mint a tényleges kijelzőméret.

Ez az oka annak is, hogy az alacsonyabb időbázis -beállításokon a frissítési sebesség lassabb, mint amire számíthat. Ha a 200 ms/div beállítást használja, akkor egy adatokkal teli képernyő 1 másodperc, de mivel kétszer annyi konverzió történik, ez 2 másodpercet vesz igénybe. A gyorsabb időbázis -beállításoknál ezt nem fogja annyira észrevenni.

A TIM3 az időalap előállítására szolgál. A kiválasztott időbázis -beállítás által előírt sebességgel aktiválja az ADC -ket. A TIM3 órája 120MHz (lásd TÚLLÁTÁS), a maximális szám, amelyre számít (ARR) határozza meg, hogy más hogyan túlcsordul, vagy ST nyelven frissül. A TRGO -n keresztül ezek a frissítési impulzusok váltják ki az ADC -ket. A legalacsonyabb frekvencia 160 Hz, a legmagasabb 1,6 MHz.

7. lépés: ADC és DMA

ADC és DMA
ADC és DMA

A két ADC egyszerre konvertálja a feszültséget a bemenetükön, és tárolja ezt a két 12 bites értéket egyetlen 32 bites változóban. Tehát a DMA -nak csak egy változója van (kettős) konverziónként.

Ezeknek az értékeknek a használatához ezért fel kell osztani őket a két értékre, hogy a két nyom megjelenítésére használhatók legyenek. Mint már említettük, az F103 -ban az ADC -k nem állíthatók 12 bites felbontásra. Mindig 12 bites módban vannak, így a konverziók mindig ugyanannyi óraimpulzust vesznek igénybe. Ennek ellenére az ADC -k túlhajtásával másodpercenként 1,6 MSpélda állítható elő (lásd Extra: Overclocking).

Az ADC -k referenciája a Vdd, a 3,3 V -os sín. Ahhoz, hogy ezt kényelmesebb értékekké konvertálhassam (osztásonként), kiszámítottam a csillapítók értékeit, mivel nem rendelkezem a pontos ellenállásértékekkel, amelyek ezekből a számításokból származnak, bizonyos javításokat szoftveresen végeznek.

Ebben a projektben a DMA-t "normál módban" használom. Ebben az üzemmódban a DMA leállítja az adatok átvitelét (de ADC-kből a memóriába), ha a szavak (vagy félszavak vagy bájtok) száma át van adva. A másik lehetséges módban, a "körkörös üzemmódban" a DMA visszaállítja magát, és megszakítás nélkül folytatja az adatátvitelt. Ez nem működött az F103 esetében, olyan gyors, hogy felülírja az adc_buffer adatait, mielőtt a program többi része el tudná olvasni. Tehát most a folyamat a következő:

- állítsa be a DMA -t az átadandó adatok számához, és engedélyezze a DMA -t

- indítsa el az ADC -k aktiválását, ezek minden (kettős) konverzió után kérni fognak DMA átvitelt

- a megadott számú konverzió átvitele után a DMA leáll

- azonnal állítsa le az ADC -k aktiválását is

- végezzen el minden szükséges manipulációt a memóriában lévő adatokkal

- nyomok megjelenítése a képernyőn

- kezdje újra a folyamatot

8. lépés: Felhasználói felület

Felhasználói felület
Felhasználói felület

A 160 x 128 képpontos képernyő nem túl nagy, és a lehető legtöbbet szeretném használni. Tehát nincs része fenntartva az árambeállításoknak. Az utolsó néhány sorban megjelenik a függőleges érzékenység, az időalap, a trigger szint és a triggercsatorna, de ha a jelek elég nagyok, akkor ugyanazon a területen jelennek meg. Az aktív opció sárga, a többi fehér színű.

9. lépés: Építés és lehetséges fejlesztések

Építés és lehetséges fejlesztések
Építés és lehetséges fejlesztések
Építés és lehetséges fejlesztések
Építés és lehetséges fejlesztések
Építés és lehetséges fejlesztések
Építés és lehetséges fejlesztések
Építés és lehetséges fejlesztések
Építés és lehetséges fejlesztések

Nagyon örülök ennek a projektnek. Jól működik és teszi a dolgát, de lehetne jobb is.

A projektdoboz túl kicsi ahhoz, hogy minden kényelmesen elférjen benne, ami azt eredményezi, hogy az alkatrészeket a kék pirula alá kell helyezni. Ennek érdekében a kék pirulát nem lehetett közvetlenül az "alaplapra" forrasztani. És mivel ez túlságosan magas lett, sok alkatrészt el kellett távolítanom a Blue Pill -ről, például a BOOT0 és a BOOT1 kiválasztására szolgáló áthidalókat (amiket egyébként soha nem használok), sőt a kristályt felülről lefelé kellett mozgatnom. a pcb.

Megnehezítettem az életet, ha banán csatlakozókat használtam a BNC vagy az SMA csatlakozók helyett, ez azt jelentette, hogy a parfüm nagy része "tiltott terület" volt, hogy tisztázzam magam, kapton szalagot tettem rá, hogy megakadályozzam magam attól, hogy alkatrészeket tegyen rá.

Egy másik probléma, hogy mindezt egy ilyen kis projektdobozba kell helyezni, hogy az analóg és a digitális áramkör nagyon közel van egymáshoz. Látható, hogy mindkét nyomon meglehetősen sok zaj látható. Ez még a kenyértáblán sem volt! Azzal, hogy az analóg és digitális áramkörök távvezetékeit a lehető legtávolabb helyezték, egy kis javulás történt, de ez nem volt elég a kedvemhez. Az analóg áramkörök összes ellenállási értékének csökkentése még nálam is tovább (a bemeneti ellenállás 1 kOhm helyett 100 kOhm) nem segített. Gyanítom, hogy a leggyorsabb időbázis -beállításon (20us/div) történő aktiválás, ami nem nagyszerű, szintén javul, ha kevesebb a zaj a jeleken.

Ha ezt a formatervezést egy "valódi" PCB -n készíted, minden smd alkatrésszel és külön rétegekkel az analóg, digitális és tápellátáshoz (ez 4 réteg!), Akkor valószínűleg nagyon jól fog működni. Sokkal kisebb lesz, nem teljes kék pirulát használ, hanem csak az F103 -at, és ez lehetővé teszi, hogy külön (tiszta) analóg Vdda -t szállítson az ADC -khez.

Utolsó simításként úgy döntöttem, hogy feketére szórom a dobozt, ez megváltoztatja az összes bézs színű dobozt.

10. lépés: A kód és egy rövid videó

11. lépés: EXTRA: Túlhajtás

EXTRA: Túlhajtás
EXTRA: Túlhajtás

Csakúgy, mint az F03 esetében, látni akartam, hogy egy F103 -at mennyire lehet túlhajtani. Ennek a mikrokontrollernek a specifikációi azt állítják, hogy a maximális órajel nem haladhatja meg a 72 MHz -et (ami persze már gyorsabb, mint az F030), de több blogban olvastam, hogy a gyorsítás egyszerű, akkor miért ne?

A Blue Pill 8MHz -es kristállyal van ellátva, a PLL 9-72 MHz -es szorzóval. A PLL 16 -ig növelhető, így 128 MHz -es órajelet kapunk. Ez egyáltalán nem jelentett problémát a kék pirulám számára, sőt, minden kék tablettám gond nélkül működik 128 MHz -en.

De most azt akartam megtudni, hogy mi az igazi határ. Tehát eltávolítottam a 8 MHz -es kristályt, és kicseréltem egy 12 MHz -esre. Ismét növeltem a PLL szorzót, amíg a mikrokontroller végül feladta. Ez 168 MHz -en volt! 156 MHz -en még mindig jól működött. Órákig ezen a sebességen hagytam futni, és soha nem láttam lezuhanni. Ebben az oszcilloszkópban 120MHz -re állítottam be, ez a sebesség választható 12 MHz -es kristályokkal és PLL -vel 10 -en, valamint 8 MHz -es kristályokkal és a PLL -vel 15 -en (lásd SystemClock_Config in main.c)

Az ADC -k most is gyorsabban működnek, nekem 30 MHz -en (14 helyett) futnak, még mindig jól működtek 60 MHz -en, az STMicroelectronics szép hardvert készít!

Az STMicroelectronics jó okkal írja be ezeket a határokat az adatlapba, és garantálják, hogy a mikrokontroller minden körülmények között a megadott 72 MHz -en működik.

De mivel nem használom a mikrokontrollert -40 Celsius -fokon, +85 Celsius -fokon, mindössze 2,0 vagy 3,6 V -os feszültségnél, úgy gondolom, hogy biztonságos a túlhajtás. NE tegye ezt, ha egy eszközt a mikrokontrollerével kíván eladni, soha nem tudhatja, hol fogják használni.

Ajánlott: