Sadržaj:

Osciloskop s dvostrukim tragom: 11 koraka (sa slikama)
Osciloskop s dvostrukim tragom: 11 koraka (sa slikama)

Video: Osciloskop s dvostrukim tragom: 11 koraka (sa slikama)

Video: Osciloskop s dvostrukim tragom: 11 koraka (sa slikama)
Video: REVAN - THE COMPLETE STORY 2024, Srpanj
Anonim
Osciloskop s dvostrukim tragovima
Osciloskop s dvostrukim tragovima

Kad sam sastavljao svoj prethodni mini osciloskop, želio sam vidjeti koliko dobro mogu izvesti svoj najmanji ARM mikrokontroler sa STM32F030 (F030), i učinio je to lijepo.

U jednom od komentara sugerirano je da bi "Plava pilula" sa STM32F103 (F103) mogla biti bolja, manja od razvojne ploče s F030 i možda čak i jeftinija. No, za mini osciloskop nisam koristio razvojnu ploču nego F030 na još manjoj SMD-DIP ploči, tako da Plava pilula sigurno ne bi bila ništa manja, a sumnjam da bi bila i jeftinija.

Kôd je sada dostupan na Gitlabu:

gitlab.com/WilkoL/dual-trace-oscilloscope

Pribor

Popis dijelova: - plastična kutija - perfboard (dvostrana prototipna ploča 8x12cm) - Plava pilula - ST7735s TFT zaslon - litij -ionska baterija - HT7333 3.3V regulator niskog ispadanja - MCP6L92 dvostruki opamp - TSSOP8 do DIP8 ploča - kristal 12 MHz (nije potrebno) - okretni davač plus gumb (2x) - prekidač za napajanje - stezaljke za banane (4x) - litij -ionska ploča punjača - nekoliko otpornika i kondenzatora - najlonski odstojnici, matice i vijci

Alati:

- stanica za lemljenje - lemljenje 0,7 mm - malo žice - bočni rezač - čaše i lupa - bušilica - multimetar - osciloskop - STLink -V2

Softver:

- STM32IDE - STM32CubeMX - Uslužni program STLink - LowLayer knjižnica - prilagođena knjižnica za ST7735s - Notepad ++ - Kicad

Korak 1: Isprepletanje ili simultani način rada

Isprepletanje ili simultani način rada
Isprepletanje ili simultani način rada
Isprepletanje ili simultani način rada
Isprepletanje ili simultani način rada

Plava pilula

Ali ideja je bila tu, i znao sam da F103 ima dva ADC -a! Što ako sam ta dva ADC -a koristila zajedno u "interleave" načinu rada, nešto što sam već radila sa STM32F407 (F407). Brzina uzorkovanja udvostručila bi se. Kombinirajte to s bržim mikrokontrolerom i postat će veliki nasljednik mini osciloskopa.

Način isprepletanja Čudno, ADC -ovi u F103 su manje napredni od onog u F030 (i F407), ne možete odabrati rezoluciju. Važnije je da također ne možete promijeniti vrijeme između dva ADC -a. Sada, kada koristite način isprepletanja, obično želite da uzorkovanje bude što je moguće brže s najkraćim vremenom između bilo kojih uzoraka, ali osciloskopom je potrebno promijeniti vrijeme. Možda se to ipak može učiniti, nisam profesionalni dizajner osciloskopa, ali odustao sam od plana korištenja interleave-moda.

Simultani način rada

No, postojanje dva ADC-a daje mnogo više mogućnosti, dva ADC-a se također mogu postaviti na način "regularno-simultano". Što kažete na dvostruki osciloskop u tragovima?

Odlučivši pokušati napraviti osciloskop s dvostrukim tragom, također sam htio imati promjenjivu ulaznu osjetljivost, opciju koju nisam imao na mini osciloskopu. To znači prigušivač (i pojačalo) na ulazima. A možda sam htio još više? Tako sam napravio mali popis "lijepih za imati".

POPIS ŽELJA

dva kanala

promjenjiva osjetljivost na oba kanala

aktiviranje na oba kanala

promjenjiva razina okidača na oba kanala

promjenjivi pomak

jedna baterija

stane u istu kutiju kao mini osciloskop

Korak 2: Prototipiranje

Izrada prototipa
Izrada prototipa
Izrada prototipa
Izrada prototipa

Kao i obično, započeo sam ove projekte na ploči. (Pogledajte sliku) I prije lemljenja svega na ploču pokušavam saznati hoće li i kako stati u odabranu projektnu kutiju. Odgovara, ali samo pravedno. Neki su dijelovi skriveni ispod zaslona, drugi ispod Plave pilule. I opet, baš kao i za većinu mojih projekata, ovo je projekt koji se koristi samo jednom i neću za njega dizajnirati PCB.

Korak 3: Prigušivači

Attenuatori
Attenuatori

U redovitim osciloskopima ulazni prigušivači su krugovi koji mijenjaju prigušenje i pojačanje uključivanjem i isključivanjem otpornika s malim signalnim relejima. Iako imam neke od tih releja, znam da se neće prebaciti na manje od 4 Volta, što znači da će raditi samo s potpuno napunjenom litij -ionskom baterijom (4,2 V). Pa mi je trebao drugi način da prebacim te otpornike. Naravno da sam mogao samo ugraditi mehaničke prekidače, ali to sigurno više ne bi stalo u okvir projekta, možda bih mogao ponovno pokušati s boljim digitalnim potenciometrom (ovaj koji imam je previše bučan).

Tada sam pomislio na "analogne prekidače", s onima mogu i sam napraviti digitalni potenciometar. U svojoj zbirci dijelova našao sam CD4066 s četiri analogna prekidača. Ideja je napraviti otpornik povratne sprege varijable opampa uključivanjem i isključivanjem otpornika paralelno s otpornikom povratne sprege.

Radi jako dobro, ali sa samo 4 prekidača u 4066 i s 2 kanala nije bilo moguće napraviti više od tri razine osjetljivosti. Odabrao sam 500mV, 1V i 2V po podjeli jer su to razine napona koje najviše koristim. Zaslon je podijeljen u 6 odjeljaka, tako da su rasponi od -1,5V do +1,5V, -3V do +3V i -6V do 6V.

S "virtualnim uzemljenjem" možete pomicati ove raspone gore-dolje tako da je moguće čak i 0v na +12V.

Korak 4: Virtualno tlo

Virtualno tlo
Virtualno tlo
Virtualno tlo
Virtualno tlo

Budući da osciloskop koristi jednu energetsku tračnicu (3,3 V), opampama je potrebna virtualna razina tla ili neće raditi. Ova virtualna razina tla izrađena je s PWM -om na jednom izlaznom kanalu TIM4, radni ciklus se mijenja sa samo nekoliko posto na gotovo sto posto. Niskopropusni filtar s 1k otpornikom i kondenzatorom od 10uF to pretvara u napon od (gotovo) 0V do (gotovo) 3,3 V. Učestalost kvadratnog vala je nešto ispod 100 kHz, pa je jednostavan niskopropusni filter dovoljno dobar.

Prilično kasno u izgradnji ovog osciloskopa shvatio sam da ne možete imati dva odvojena pomaka za kanale. To je zbog činjenice da s jednim napajanjem razina ulaz-tlo mora biti odvojena od stvarne razine tla opampa. Dakle, oba kanala se kreću na isti način dok mijenjate postavku GND.

Korak 5: Rotacijski koderi i ispravljanje pogrešaka

Rotacijski koderi i ispravljanje pogrešaka
Rotacijski koderi i ispravljanje pogrešaka
Rotacijski koderi i ispravljanje pogrešaka
Rotacijski koderi i ispravljanje pogrešaka

Na mini osciloskopu sam koristio samo jedan rotacijski davač za sve funkcije. To bi dvostruki osciloskop učinilo vrlo teškim za uporabu pa mi ovdje trebaju dva. Jedan koder za prigušivače i virtualnu razinu tla, a drugi koder za vremensku bazu i okidanje. Nažalost, baš kao i u mom drugom projektu, ovi rotacijski koderi su vrlo "bučni". Toliko su loši da jednostavno ne bi radili s mjeračima vremena u "encoder-modu", standardnom načinu čitanja. Morao sam napraviti mehanizam za otkazivanje s timerom TIM2, provjeravajući enkodere svakih 100us. Ovaj se mjerač vremena pokreće (samo) kada postoji neka aktivnost na koderima, to se provjerava pomoću EXTI funkcionalnosti na ulaznim priključcima. Sada koderi dobro rade.

Kao što vidite, zaslon također može biti vrlo zgodan za prikaz informacija o otklanjanju pogrešaka.

Korak 6: Prikaz i vremenska baza

Prikaz i vremenska baza
Prikaz i vremenska baza

Zaslon ima rezoluciju 160 x 128 piksela pa je za jedno snimanje potrebno 160 uzoraka, uspio sam ubrzati ADC -ove na 1,6 milijuna uzoraka u sekundi, a to s mnogo overclockanim mikrokontrolerom (o tome kasnije) daje minimalna vremenska baza od 20us po odjeljku (100us po ekranu). Tako će valni oblik od 10 kHz ispuniti cijeli zaslon.

To je samo dvostruko brže od mini osciloskopa koji sam napravio prije. Pa dobro, sad je s dva kanala:-).

Kao što je rečeno, zaslon je širok 160 piksela pa je potrebno samo 160 vrijednosti po zaslonu. No, svi međuspremnici zapravo sadrže 320 uzoraka. Dakle, DMA pohranjuje 320 vrijednosti prije nego što pokrene potpuni prekid prijenosa (TC). To je zato što se aktiviranje vrši u softveru. Uzorkovanje počinje u slučajnom trenutku, pa je mala vjerojatnost da je prva vrijednost u međuspremniku mjesto gdje bi trebala biti točka okidanja.

Stoga se točka okidača nalazi čitanjem kroz trace_x_buffer, ako je vrijednost na željenoj vrijednosti okidača en, ako je prethodna vrijednost odmah ispod nje, nalazi se točka_okidača. Ovo radi prilično dobro, ali trebate veći međuspremnik od stvarne veličine zaslona.

To je i razlog što je učestalost osvježavanja na nižim postavkama vremenske baze sporija nego što biste mogli očekivati. Kada koristite postavku 200 ms/div, jedan zaslon pun podataka je 1 sekunda, ali budući da se vrši dvostruka količina konverzija, to traje 2 sekunde. Na bržim postavkama vremenske baze to nećete primijetiti toliko.

TIM3 se koristi za generiranje vremenske baze. Pokreće ADC -ove brzinom potrebnom za odabranu postavku vremenske baze. Njegov sat TIM3 je 120MHz (vidi OVERCLOCKING), najveći broj na koji se računa (ARR) određuje kako se drugi prelijeva ili, na ST jeziku, ažurira. Putem TRGO -a ti impulsi ažuriranja pokreću ADC -ove. Najniža frekvencija koju generira je 160 Hz, a najviša 1,6 MHz.

Korak 7: ADC i DMA

ADC i DMA
ADC i DMA

Dva ADC -a pretvaraju napon na svojim ulazima istovremeno, te dvije 12 -bitne vrijednosti pohranjuju u jednu 32 -bitnu varijablu. Dakle, DMA ima samo jednu varijablu po (dvostrukoj) konverziji za prijenos.

Za korištenje ovih vrijednosti stoga ih je potrebno podijeliti u dvije vrijednosti kako bi se mogle koristiti za prikaz dva traga. Kao što je rečeno, ADC -ovi u F103 ne mogu se postaviti na druge rezolucije osim na 12 bita. Oni su uvijek u 12 -bitnom načinu rada pa konverzije uvijek uzimaju isti broj impulsa takta. Ipak, s overclockingom ADC -a može se napraviti 1,6 MS uzorka u sekundi (vidi Dodatno: Overclocking).

Referenca ADC -ova je Vdd, šina 3.3V. Da bih to pretvorio u prikladnije vrijednosti (po podjeli) izračunao sam vrijednosti prigušivača, jer nemam točne vrijednosti otpornika koje proizlaze iz tih izračuna, neke ispravke se rade u softveru.

U ovom projektu koristim DMA u "regularnom načinu rada". U ovom načinu rada DMA zaustavlja prijenos podataka (iz de ADC-ova u memoriju) kada se prenese sve riječi (ili polovične riječi ili bajtovi). U drugom mogućem načinu rada, "kružnom načinu", DMA se resetira i nastavlja prenos podataka bez prekida. To nije uspjelo s F103, toliko je brzo da prepisuje podatke u adc_buffer prije nego što ih ostatak programa pročita. Dakle, sada je proces sljedeći:

- postavite DMA na broj podataka za prijenos i omogućite DMA

- pokrenuti aktiviranje ADC -a, oni će zahtijevati DMA prijenose nakon svake (dvostruke) konverzije

- nakon što se prenese zadani broj konverzija, DMA prestaje

- također odmah zaustaviti aktiviranje ADC -a

- obavite sve potrebne manipulacije podacima u memoriji

- prikazuju tragove na ekranu

- ponovno pokrenite postupak

Korak 8: Korisničko sučelje

Korisničko sučelje
Korisničko sučelje

Zaslon 160 x 128 piksela nije velik i želim ga koristiti što je više moguće. Dakle, ne postoji njegov dio rezerviran za postavke struja. U posljednjih nekoliko redaka prikazana je vertikalna osjetljivost, vremenska baza, razina okidača i okidački kanal, ali kada su signali dovoljno veliki pojavit će se u istom području. Opcija koja je aktivna prikazana je žutom bojom, ostatak bijelom bojom.

Korak 9: Izgradnja i moguća poboljšanja

Izgradnja i moguća poboljšanja
Izgradnja i moguća poboljšanja
Izgradnja i moguća poboljšanja
Izgradnja i moguća poboljšanja
Izgradnja i moguća poboljšanja
Izgradnja i moguća poboljšanja
Izgradnja i moguća poboljšanja
Izgradnja i moguća poboljšanja

Vrlo sam sretan zbog ovog projekta. Radi dobro i radi posao, ali moglo bi biti i bolje.

Okvir za projekt je premalen da bi se sve udobno smjestilo, što za posljedicu ima stavljanje komponenti ispod Plave pilule. Kako bi to bilo moguće, Plava pilula nije se mogla lemiti izravno na "glavnu ploču". A budući da je zbog toga sve bilo previsoko, morao sam ukloniti mnoge dijelove iz Plave pilule, poput premosnica za odabir BOOT0 i BOOT1 (stvari koje ionako nikad ne koristim), pa sam čak morao pomaknuti kristal s vrha na dno PCB.

Otežao sam život korištenjem konektora za banane umjesto BNC ili SMA konektora, što je značilo da je veliki dio perfboarda "zabranjeno kretanje", da bih sebi to stavio do znanja da sam preko njega stavio kapton traku od stavljanja dijelova na njega.

Još jedan problem sa stavljanjem svega u tako malu projektnu kutiju je to što su analogni i digitalni krugovi vrlo bliski. Vidite da se na oba traga vidi dosta buke. Ovo nisam ni imao na ploči! Pomicanjem dalekovoda za analogne i digitalne krugove što je moguće udaljenije došlo je do malog poboljšanja, ali nedovoljno za moj ukus. Smanjivanje svih vrijednosti otpornika u analognim krugovima čak i dalje od mene (ulazni otpor je 100kOhm umjesto 1MOhm) nije pomoglo. Pretpostavljam da će se aktiviranje na najbržoj postavci vremenske baze (20us/div), što nije sjajno, također poboljšati s manje šuma u signalima.

Ako napravite ovaj dizajn na "pravoj" tiskanoj ploči, sa svim smd dijelovima i odvojenim slojevima za analogne, digitalne i napajanje (to su 4 sloja!), Vjerojatno će raditi jako dobro. Bit će mnogo manji, neće koristiti kompletnu Plavu pilulu već samo F103 i to će mu omogućiti isporuku zasebnog (čistog) analognog Vdda -a za ADC -ove.

Za kraj, odlučio sam kutiju poprskati crnom bojom, što čini promjenu u odnosu na sve bež kutije koje ima.

10. korak: Kôd i kratki video zapis

Korak 11: DODATNO: Overclocking

EXTRA: Overclocking
EXTRA: Overclocking

Baš kao što sam to učinio s F03, htio sam vidjeti koliko se F103 može overclockati. Specifikacije za ovaj mikrokontroler tvrde da maksimalna brzina takta ne smije prelaziti 72MHz (što je, naravno, već brže od F030), ali sam u nekoliko blogova čitao da je overklokiranje jednostavno, pa zašto ne?

Plava pilula ima kristal od 8 MHz, PLL to množi s faktorom od 9 do 72 MHz. PLL se može povećati do 16 što daje sat od 128MHz. To uopće nije bio problem za moju Plavu pilulu, zapravo, sve moje Plave pilule rade bez problema na 128MHz.

Ali sada sam htio saznati koja je prava granica. Pa sam uklonio kristal od 8 MHz i zamijenio ga jednim od 12 MHz. Ponovno sam povećavao PLL multiplikator sve dok mikrokontroler konačno nije odustao. To je bilo na 168MHz! Na 156MHz i dalje je dobro radio. Ostavio sam ga da radi tom brzinom satima i nikad nisam vidio da se srušio. U ovom osciloskopu zadovoljio sam 120MHz, brzinu koja se može odabrati s kristalom od 12 MHz i PLL -om na 10, kao i s kristalom od 8 MHz i PLL -om na 15. (vidi SystemClock_Config u main.c)

ADC -ovi sada također rade brže, imam ih na 30MHz (umjesto na 14), još su dobro radili na 60MHz, STMicroelectronics čini lijep hardver!

STMicroelectronics postavlja ta ograničenja u podatkovni list s dobrim razlogom, oni jamče da mikrokontroler radi na specificiranih 72MHz u svim uvjetima.

Ali kako ne koristim mikrokontroler na -40 Celzijevih, +85 Celzijevih stupnjeva, na samo 2,0 Volta ili 3,6 Volta, mislim da ga je sigurno overclockati. NEMOJTE to činiti ako namjeravate prodati uređaj s njihovim mikrokontrolerima, nikad ne znate gdje će se koristiti.

Preporučeni: