Kazalo:

Osciloskop z dvojnim sledom: 11 korakov (s slikami)
Osciloskop z dvojnim sledom: 11 korakov (s slikami)

Video: Osciloskop z dvojnim sledom: 11 korakov (s slikami)

Video: Osciloskop z dvojnim sledom: 11 korakov (s slikami)
Video: Дмитрий Павлов: Это способ заглянуть в прошлое! Как сделать хроноскоп и 4-D Телескопы? 2024, December
Anonim
Osciloskop z dvojnim sledom
Osciloskop z dvojnim sledom

Ko sem sestavljal svoj prejšnji mini osciloskop, sem hotel videti, kako dobro bi lahko naredil svoj najmanjši mikrokrmilnik ARM STM32F030 (F030), in to mi je odlično uspelo.

V enem od komentarjev je bilo predlagano, da bi bila "modra tabletka" s STM32F103 (F103) boljša, manjša od razvojne plošče s F030 in morda celo cenejša. Toda za mini osciloskop nisem uporabil razvojne plošče, ampak F030 na še manjši plošči SMD-DIP, zato tam modra tabletka zagotovo ne bi bila nič manjša in dvomim, da bi bila tudi cenejša.

Koda je zdaj na voljo na Gitlabu:

gitlab.com/WilkoL/dual-trace-oscilloscope

Zaloge

Seznam delov: - plastična škatla - perfboard (dvostranska prototipna plošča 8x12cm) - modra tableta - ST7735s TFT zaslon - litij -ionska baterija - regulator nizkega izpada HT7333 3.3V - dvojni opamp MCP6L92 - plošča TSSOP8 do DIP8 - kristal 12 MHz (ni potrebno)) - vrtljivi dajalnik in gumb (2x) - stikalo za napajanje - bananine sponke (4x) - litij -ionska polnilna plošča - več uporov in kondenzatorjev - najlonski distančniki, matice in vijaki

Orodja:

- spajkalna postaja - spajkanje 0,7 mm - nekaj žice - stranski rezalnik - stekla in lupa - vrtalnik - multimeter - osciloskop - STLink -V2

Programska oprema:

- STM32IDE - STM32CubeMX - STLink Utility - knjižnica LowLayer - prilagojena knjižnica za ST7735s - Notepad ++ - Kicad

Korak: Prepletanje ali simultani način

Prepletanje ali simultani način
Prepletanje ali simultani način
Prepletanje ali simultani način
Prepletanje ali simultani način

Modra tabletka

Toda ideja je bila tam in vedel sem, da ima F103 dva ADC -ja! Kaj pa, če bi ta dva ADC -ja uporabljal skupaj v načinu "prepletanja", kar sem že storil s STM32F407 (F407). Hitrost vzorčenja bi se podvojila. Če to združite s hitrejšim mikrokrmilnikom, bi to postalo odličen naslednik mini osciloskopa.

Način prepletanja Nenavadno so ADC -ji v F103 manj napredni kot v F030 (in F407), ločljivosti ne morete izbrati. Bolj pomembno je, da tudi ne morete spremeniti časa med obema ADC -jema. Zdaj, ko uporabljate način prepletanja, običajno želite čim hitrejše vzorčenje z najkrajšim časom med vsemi vzorci, vendar je z osciloskopom potrebno spremeniti časovni razpored. Mogoče je to še mogoče, nisem profesionalni oblikovalec osciloskopov, vendar sem opustil načrt uporabe načina prepletanja.

Hkratni način

Če pa imate dva ADC-ja, imate veliko več možnosti, lahko oba ADC-ja nastavite tudi na način "redno-istočasno". Kaj pa osciloskop z dvojnim sledom?

Ko sem se odločil, da bom poskusil izdelati osciloskop z dvojno sledjo, sem želel imeti tudi spremenljivo vhodno občutljivost, ki je pri mini osciloskopu nisem imel. To pomeni oslabelec (in ojačevalnik) na vhodih. In morda sem hotel še več? Tako sem naredil majhen seznam "lepih za imeti".

SEZNAM ŽELJ

dva kanala

spremenljiva občutljivost na obeh kanalih

sproži na obeh kanalih

spremenljiva raven sprožilca na obeh kanalih

spremenljiv odmik

moč ene baterije

v isti škatli kot mini osciloskop

2. korak: izdelava prototipov

Izdelava prototipov
Izdelava prototipov
Izdelava prototipov
Izdelava prototipov

Kot običajno sem te projekte začel na podlagi. (Glej sliko) In preden spajkam vse na perfboard, poskušam ugotoviti, ali in kako se bo prilegalo izbranemu projektnemu polju. Ustreza, vendar samo pravično. Nekateri deli so skriti pod zaslonom, drugi pod modro tableto. In spet, tako kot pri večini mojih projektov, je to enkratni projekt in zanj ne bom oblikoval tiskanega vezja.

3. korak: Dušilci

Dušilci
Dušilci

V običajnih osciloskopih so vhodni dušilci vezja, ki spreminjajo dušenje in ojačanje z vklopom in izhodom uporov z majhnimi signalnimi releji. Čeprav imam nekaj teh relejev, vem, da se ne bodo preklopili pri manj kot 4 voltih, kar pomeni, da bodo delovali le s polno naloženo litij -ionsko baterijo (4,2 V). Zato sem potreboval drug način za zamenjavo teh uporov. Seveda bi lahko namestil samo mehanska stikala, vendar v mislih to zagotovo ne bi več ustrezalo okvirju projekta, morda bi lahko poskusil še z boljšim digitalnim potenciometrom (tisti, ki ga imam, je preveč hrupen).

Nato sem pomislil na "analogna stikala", s tistimi lahko sam naredim digitalni potenciometer. V svoji zbirki delov sem našel CD4066 s štirimi analognimi stikali. Zamisel je, da je povratni upor spremenljivke opampa z vklopom in izklopom uporov vzporednim z uporom.

Deluje zelo dobro, vendar s samo 4 stikali v sistemu 4066 in dvema kanaloma ni bilo mogoče določiti več kot treh ravni občutljivosti. Odločil sem se za 500mV, 1V in 2V na delitev, saj so to ravni napetosti, ki jih največ uporabljam. Zaslon je razdeljen na 6 oddelkov, tako da je v razponih od -1,5V do +1,5V, -3V do +3V in -6V do 6V.

Z "navideznim ozemljem" lahko te razpone premikate navzgor in navzdol, tako da je možno celo 0V do +12V.

4. korak: Virtual Ground

Virtualno zemljišče
Virtualno zemljišče
Virtualno zemljišče
Virtualno zemljišče

Ker osciloskop uporablja eno samo napajalno tirnico (3,3 V), opampi potrebujejo virtualno raven tal ali pa ne bodo delovali. Ta navidezni nivo tal je narejen s PWM na enem izhodnem kanalu TIM4, njegov delovni cikel se spreminja iz le nekaj odstotkov na skoraj sto odstotkov. Nizkoprepustni filter z 1k uporom in kondenzatorjem 10uF to pretvori v napetost (skoraj) 0V do (skoraj) 3.3V. Frekvenca kvadratnega vala je nekaj manj kot 100 kHz, zato je preprost nizkoprepustni filter dovolj dober.

Precej pozno pri izdelavi tega osciloskopa sem spoznal, da ne moreš imeti dveh ločenih odmikov za kanale. To je posledica dejstva, da mora biti z enim napajanjem vhodna-talna raven ločena od dejanske talne ravni opampov. Tako se oba kanala premikata na enak način, kot spremenite nastavitev GND.

5. korak: Rotacijski dajalniki in odpravljanje napak

Rotacijski dajalniki in odpravljanje napak
Rotacijski dajalniki in odpravljanje napak
Rotacijski dajalniki in odpravljanje napak
Rotacijski dajalniki in odpravljanje napak

Na mini osciloskopu sem za vse funkcije uporabil samo en rotacijski dajalnik. Zaradi tega bi bil dvojni osciloskop zelo težak za uporabo, zato potrebujem dva. En kodirnik za dušilce in navidezni nivo tal, drugi dajalnik za časovno osnovo in sprožitev. Na žalost so tako kot v mojem drugem projektu ti rotacijski dajalniki zelo "hrupni". Tako so slabe, da preprosto ne bi delovale s časovniki v "načinu dajalnika", standardnem načinu njihovega branja. Moral sem narediti mehanizem za odstranjevanje s časovnikom TIM2, ki je preverjal dajalnike vsakih 100us. Ta časovnik se zažene (samo), ko je na kodirnikih nekaj dejavnosti, to se preveri s funkcijo EXTI na vhodnih vratih. Zdaj kodirniki dobro delujejo.

Kot lahko vidite, je zaslon lahko zelo priročen tudi za prikaz informacij o odpravljanju napak.

6. korak: Prikaz in časovni okvir

Prikaz in časovni okvir
Prikaz in časovni okvir

Zaslon ima ločljivost 160 x 128 slikovnih pik, zato je za en zaslon potrebnih 160 vzorcev, uspel sem pospešiti ADC -je, da naredijo 1,6 milijona vzorcev na sekundo, kar z močno overclocked mikrokrmilnikom (več o tem kasneje) daje minimalna časovna baza 20us na oddelek (100us na zaslon). Tako bo valovna oblika 10 kHz zapolnila celoten zaslon.

To je le dvakrat hitreje od mini osciloskopa, ki sem ga naredil prej. No, zdaj je z dvema kanaloma:-).

Kot rečeno, je zaslon širok 160 slikovnih pik, zato je na zaslon potrebno le 160 vrednosti. Toda vsi pufri dejansko vsebujejo 320 vzorcev. Tako DMA shrani 320 vrednosti, preden sproži popolno prekinitev prenosa (TC). To je zato, ker se sprožitev izvaja v programski opremi. Vzorčenje se začne v naključnem trenutku, zato je zelo malo verjetno, da bo prva vrednost v vmesnem pomnilniku kraj, kjer bi morala biti sprožilna točka.

Zato se sprožilna točka odčita z odčitavanjem vmesnika trace_x_buffer, če je vrednost na želeni sprožilni vrednosti en, če je prejšnja vrednost tik pod njo, pa se najde sprožilna točka. To deluje precej dobro, vendar potrebujete večji medpomnilnik od dejanske velikosti zaslona.

Tudi to je razlog, da je hitrost osveževanja v nastavitvah nižje časovne baze počasnejša, kot bi pričakovali. Ko uporabljate nastavitev 200 ms/div, je en zaslon poln podatkov 1 sekunda, ker pa se izvede dvojna količina pretvorb, to traja 2 sekundi. Pri hitrejših nastavitvah časovne baze tega ne boste opazili toliko.

TIM3 se uporablja za ustvarjanje časovne baze. Sproži ADC -je s hitrostjo, ki jo zahteva izbrana nastavitev časovne baze. Njegova ura TIM3 je 120 MHz (glejte OVERCLOCKING), največje število, na katero šteje (ARR), določa, kako se druga preliva ali, v jeziku ST, posodablja. Preko TRGO ti posodobitveni impulzi sprožijo ADC -je. Najnižja frekvenca, ki jo ustvari, je 160 Hz, najvišja 1,6 MHz.

7. korak: ADC -ji in DMA

ADC in DMA
ADC in DMA

Oba ADC -ja hkrati pretvarjata napetost na svojih vhodih, ti dve 12 -bitni vrednosti shranita v eno 32 -bitno spremenljivko. Tako ima DMA samo eno spremenljivko na (dvojno) pretvorbo za prenos.

Za uporabo teh vrednosti jih je zato treba razdeliti na dve vrednosti, da se lahko uporabijo za prikaz dveh sledi. Kot rečeno, ADC -jev v F103 ni mogoče nastaviti na druge ločljivosti razen na 12 bitov. Vedno so v 12 -bitnem načinu, zato pretvorbe vedno vzamejo enako število taktnih impulzov. Kljub temu je s overclockingom ADC -jev mogoče narediti 1,6 MS vzorcev na sekundo (glejte Extra: Overclocking).

Referenca ADC -jev je Vdd, tirnica 3.3V. Za pretvorbo tega v primernejše vrednosti (na delitev) sem izračunal vrednosti dušilcev, ker nimam natančnih vrednosti upora, ki izhajajo iz teh izračunov, so v programski opremi izvedeni nekateri popravki.

V tem projektu uporabljam DMA v "rednem načinu". V tem načinu DMA preneha prenašati podatke (iz de ADC-jev v pomnilnik), ko se prenese vse besede (ali polovice besed ali bajtov). V drugem možnem načinu, "krožnem načinu", se DMA ponastavi in neprekinjeno prenaša podatke. To ni delovalo s F103, tako hitro je, da prepiše podatke v adc_buffer , preden jih lahko prebere preostali program. Zdaj je postopek naslednji:

- nastavite DMA na število podatkov za prenos in omogočite DMA

- zaženite sprožitev ADC -jev, ti bodo zahtevali prenose DMA po vsaki (dvojni) pretvorbi

- po prenosu nastavljenega števila konverzij se DMA ustavi

- takoj ustavite tudi sprožanje ADC -jev

- opravite vse potrebne manipulacije s podatki v pomnilniku

- prikaži sledi na zaslonu

- znova zaženite postopek

8. korak: uporabniški vmesnik

Uporabniški vmesnik
Uporabniški vmesnik

Zaslon velikosti 160 x 128 slikovnih pik ni zelo velik in želim ga čim več uporabiti. Tako da njegov del ni rezerviran za nastavitve tokov. V zadnjih nekaj vrsticah so prikazane navpična občutljivost, časovna baza, raven sprožilca in sprožilni kanal, ko pa so signali dovolj veliki, se bodo pojavili na istem območju. Aktivna možnost je prikazana rumeno, ostalo pa belo.

9. korak: Gradnja in možne izboljšave

Gradnja in možne izboljšave
Gradnja in možne izboljšave
Gradnja in možne izboljšave
Gradnja in možne izboljšave
Gradnja in možne izboljšave
Gradnja in možne izboljšave
Gradnja in možne izboljšave
Gradnja in možne izboljšave

Zelo sem vesel tega projekta. Deluje dobro in opravlja svoje delo, lahko pa bi bilo bolje.

Projektna škatla je premajhna, da bi lahko vse udobno namestili, zato je treba komponente postaviti pod modro tableto. Da bi bilo to mogoče, modre tablete ni bilo mogoče spajati neposredno na "matično ploščo". In ker je bilo zaradi tega vse previsoko, sem moral odstraniti veliko delov iz modre tablete, na primer skakalce za izbiro BOOT0 in BOOT1 (stvari, ki jih tako ali tako nikoli ne uporabljam), in celo kristal sem moral premakniti z vrha na dno pcb.

Življenje sem si otežil z uporabo banana priključkov namesto priključkov BNC ali SMA, kar je pomenilo, da je velik del perfboard-a "nedostopno območje". od tega, da bi vanj postavili dele.

Druga težava pri postavitvi vsega v tako majhen projektni okvir je, da sta analogno in digitalno vezje zelo blizu skupaj. Vidite lahko, da je na obeh sledovih vidno precej hrupa. Tega sploh nisem imel na krovu! S premikanjem daljnovodov za analogna in digitalna vezja čim bolj narazen je bil dosežen majhen napredek, vendar ne dovolj, da bi mi bil všeč. Zmanjšanje vseh vrednosti upora v analognih vezjih še dlje kot jaz (vhodni upor je 100kOhm namesto 1MOhm) ni pomagalo. Sumim, da se bo sprožitev pri najhitrejši nastavitvi časovne baze (20us/div), ki ni dobra, izboljšala tudi z manj hrupa v signalih.

Če to zasnovo naredite na "pravem" tiskanem vezju, z vsemi deli smd in ločenimi sloji za analogne, digitalne in napajalne (to so 4 plasti!), Bo verjetno delovalo zelo dobro. Bo veliko manjši, ne bo uporabljal celotne modre tablete, ampak samo F103, kar mu bo omogočilo dobavo ločenega (čistega) analognega Vdda za ADC -je.

Za konec sem se odločil, da škatlo poškropim v črno, kar naredi spremembo od vseh bež škatel, ki jih ima.

10. korak: Koda in kratek video

11. korak: EXTRA: Overclocking

EXTRA: Overclocking
EXTRA: Overclocking

Tako kot pri F03 sem želel videti, kako dobro je F103 mogoče overclockati. Specifikacije tega mikrokrmilnika trdijo, da največja ura ne sme presegati 72 MHz (kar je seveda že hitreje kot F030), vendar sem v več blogih prebral, da je bilo overclocking enostavno, zakaj pa ne?

Modra tabletka je opremljena s kristalom 8 MHz, PLL to pomnoži s faktorjem od 9 do 72 MHz. PLL se lahko poveča do 16, kar daje uro 128 MHz. Za mojo modro tableto to sploh ni bil problem, pravzaprav vse moje modre tablete delujejo brez težav na 128 MHz.

Zdaj pa sem hotel ugotoviti, kakšna je resnična meja. Zato sem odstranil 8MHz kristal in ga zamenjal z enim od 12MHz. Spet sem povečeval množitelj PLL, dokler mikrokrmilnik ni končno odnehal. To je bilo pri 168MHz! Na 156MHz je še vedno dobro deloval. Pustil sem ga pri tej hitrosti ure in nikoli nisem videl, da bi se zrušil. V tem osciloskopu sem se odločil za 120 MHz, hitrost, ki jo lahko izberemo s kristalom 12 MHz in PLL na 10, pa tudi s kristalom 8 MHz in PLL na 15. (glej SystemClock_Config v main.c)

ADC -ji zdaj delujejo tudi hitreje, imam jih na 30MHz (namesto na 14), še vedno so dobro delovali na 60MHz, STMicroelectronics naredi nekaj lepe strojne opreme!

STMicroelectronics te omejitve postavlja v podatkovni list z dobrim razlogom, saj zagotavljajo, da mikrokrmilnik deluje pod določenimi 72 MHz v vseh pogojih.

Ker pa mikrokontrolerja ne uporabljam pri -40 stopinjah Celzija, +85 stopinj Celzija, samo pri 2 volti ali 3,6 volta, se mi zdi varno, da ga overklokiram. NE delajte tega, če nameravate prodati napravo z njenimi mikrokrmilniki, nikoli ne veste, kje se bodo uporabljali.

Priporočena: