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, Juli
Anonim
Osciloskop sa dvostrukim tragom
Osciloskop sa dvostrukim tragom

Kad sam pravio svoj prethodni mini osciloskop, želio sam vidjeti koliko dobro mogu napraviti svoj najmanji ARM mikrokontroler sa STM32F030 (F030), i to mi je odlično uspjelo.

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

Kôd je sada dostupan na Gitlabu:

gitlab.com/WilkoL/dual-trace-oscilloscope

Supplies

Popis dijelova: - plastična kutija - perfboard (dvostrana prototipna ploča 8x12cm) - Plava pilula - ST7735s TFT ekran - 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 dugme (2x) - prekidač za napajanje - stezaljke za banane (4x) - litijum -jonska 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 biblioteka - prilagođena biblioteka za ST7735s - Notepad ++ - Kicad

Korak 1: Prepletanje ili simultani način rada

Prepletanje ili simultani način rada
Prepletanje ili simultani način rada
Prepletanje ili simultani način rada
Prepletanje ili simultani način rada

Plava pilula

Ali ideja je bila tu, i znao sam da F103 ima dva ADC -a! Šta ako sam koristio ta dva ADC -a zajedno u "interleave" modu, nešto što sam već radio sa STM32F407 (F407). Brzina uzorkovanja bi se udvostručila. To, u kombinaciji s bržim mikrokontrolerom, postalo bi odličan 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 sam odustao 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 "regularno-simultani" način rada. Šta kažete na dvostruki osciloskop u tragovima?

Odlučivši pokušati napraviti osciloskop s dvostrukim tragom, također sam želio 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 malu listu "lijepih stvari za imati".

LISTA ŽELJA

dva kanala

promenljiva osetljivost na oba kanala

aktiviranje na oba kanala

promenljiv nivo okidača na oba kanala

varijabilni pomak

jedna baterija

stane u istu kutiju kao mini osciloskop

Korak 2: Izrada prototipa

Prototipiranje
Prototipiranje
Prototipiranje
Prototipiranje

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 tako. Neki dijelovi su skriveni ispod ekrana, drugi ispod Plave pilule. I opet, kao i za većinu mojih projekata, ovo je projekt koji se koristi samo jednom i neću dizajnirati PCB za njega.

Korak 3: Prigušivači

Attenuatori
Attenuatori

U redovnim osciloskopima ulazni prigušivači su kola koja mijenjaju slabljenje 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 promijenim te otpornike. Naravno da sam mogao samo instalirati mehaničke prekidače, ali to se sigurno više ne bi uklapalo u okvir projekta, možda bih mogao ponovo pokušati s boljim digitalnim potenciometrom (ovaj koji imam je previše bučan).

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

Radi jako dobro, ali sa samo 4 prekidača u 4066 i sa 2 kanala nije bilo moguće napraviti više od tri nivoa osjetljivosti. Odabrao sam 500mV, 1V i 2V po podjeli jer su to naponski nivoi koje najviše koristim. Ekran je podijeljen u 6 odjeljaka, tako da je u rasponu 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: Virtuelna podloga

Virtual Ground
Virtual Ground
Virtual Ground
Virtual Ground

Budući da osciloskop koristi jednu energetsku šinu (3,3 V), opampe trebaju virtualni nivo tla ili neće raditi. Ovaj virtualni nivo tla napravljen je pomoću PWM -a na jednom izlaznom kanalu TIM4, radni ciklus se mijenja sa samo nekoliko posto na gotovo sto posto. Niskopropusni filter sa 1k otpornikom i kondenzatorom od 10uF to pretvara u napon od (skoro) 0V do (skoro) 3.3V. 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 izvorom napajanja ulazni tlo mora biti odvojeno od stvarnog nivoa tlaka opampača. Dakle, oba kanala se kreću na isti način dok mijenjate postavku GND.

Korak 5: Rotacijski koderi i otklanjanje grešaka

Rotacijski koderi i otklanjanje grešaka
Rotacijski koderi i otklanjanje grešaka
Rotacijski koderi i otklanjanje grešaka
Rotacijski koderi i otklanjanje grešaka

Na mini osciloskopu sam koristio samo jedan rotacijski davač za sve funkcije. To bi dvostruki osciloskop učinilo vrlo teškim za upotrebu, pa mi ovdje trebaju dva. Jedan koder za prigušivače i virtualni nivo 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 tajmerima u "encoder-modu", standardnom načinu čitanja. Morao sam napraviti mehanizam za otkazivanje sa tajmerom TIM2, provjeravajući enkodere svakih 100us. Ovaj mjerač vremena pokreće se (samo) kada postoji neka aktivnost na koderima, to se provjerava pomoću EXTI funkcionalnosti na ulaznim portovima. Sada koderi dobro rade.

Kao što vidite, prikaz može biti i vrlo zgodan za prikaz informacija o otklanjanju grešaka.

Korak 6: Prikaz i vremenska baza

Prikaz i vremenska baza
Prikaz i vremenska baza

Ekran ima rezoluciju 160 x 128 piksela, tako da je potrebno 160 uzoraka za jedan ekran, uspio sam ubrzati ADC -ove na 1,6 miliona uzoraka u sekundi, a to sa mnogo overklokiranim mikrokontrolerom (o tome kasnije) daje minimalna vremenska baza od 20us po odjeljenju (100us po ekranu). Tako će valni oblik od 10 kHz ispuniti cijeli ekran.

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

Kao što je rečeno, ekran je širok 160 piksela pa je potrebno samo 160 vrijednosti po ekranu. Ali svi međuspremnici zapravo sadrže 320 uzoraka. Dakle, DMA pohranjuje 320 vrijednosti prije nego pokrene prekid potpunog 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 okidačka točka nalazi čitanjem kroz trace_x_buffer, ako je vrijednost na željenoj vrijednosti okidača en, ako je prethodna vrijednost odmah ispod nje, nalazi se okidač_točka. Ovo radi prilično dobro, ali trebate veći tampon od stvarne veličine ekrana.

Ovo je također razlog da je učestalost osvježavanja na nižim postavkama vremenske baze sporija nego što biste mogli očekivati. Kada koristite postavku 200ms/div, jedan ekran 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 prema odabranoj postavci vremenske baze. Njegov sat TIM3 je 120MHz (pogledajte OVERCLOCKING), maksimalni broj na koji se računa (ARR) određuje kako se drugi prelijeva ili, na ST jeziku, ažurira. Putem TRGO -a ovi impulsi ažuriranja pokreću ADC -ove. Najniža frekvencija koju generira je 160 Hz, a najveć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 potrebno ih je stoga 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, sa overclockingom ADC -ova, 1,6 MS uzorka u sekundi može se obaviti (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 proračuna, neke ispravke se rade u softveru.

U ovom projektu koristim DMA u "regularnom načinu rada". U ovom načinu rada DMA prestaje prenos podataka (iz de ADC-ova u memoriju) kada se prenese sve riječi (ili poluriječ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 funkcioniralo 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 -ova, oni će zahtijevati DMA transfere nakon svake (dvostruke) konverzije

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

- odmah zaustavite i aktiviranje ADC -ova

- izvršite sve potrebne manipulacije podacima u memoriji

- prikazuju tragove na ekranu

- ponovo pokrenite proces

Korak 8: Korisničko sučelje

Korisnički interfejs
Korisnički interfejs

Ekran veličine 160 x 128 piksela nije baš veliki i želim ga koristiti što je više moguće. Dakle, ne postoji njegov dio rezerviran za postavke struja. U posljednjih nekoliko redova prikazuju se vertikalna osjetljivost, vremenska baza, nivo 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

Veoma sam srećan zbog ovog projekta. Odlično radi i radi posao, ali moglo bi biti i bolje.

Kutija za projekt je premala da bi se sve udobno smjestilo, što za posljedicu ima stavljanje komponenti ispod Plave pilule. Da bi to bilo moguće, Plava pilula nije mogla biti lemljena direktno na "matičnu ploču". A budući da je zbog toga sve bilo previsoko, morao sam ukloniti mnoge dijelove iz Plave pilule, poput kratkospojnika 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 "zabranjena zona", da bi to bilo jasno, stavio sam kapton traku preko sebe kako bih se spriječio od stavljanja delova na njega.

Još jedan problem sa stavljanjem svega u tako malu projektnu kutiju je to što su analogna i digitalna kola vrlo blizu jedna drugoj. Vidite da se na oba traga vidi prilično velika buka. Ovo nisam ni imao na ploči! Pomicanjem dalekovoda za analogna i digitalna kola što je moguće udaljenije, napravljeno je malo poboljšanje, 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 na signalima.

Ako napravite ovaj dizajn na "pravoj" PCB -u, sa svim smd dijelovima i odvojenim slojevima za analogne, digitalne i napajanje (to su 4 sloja!), Vjerojatno će funkcionirati vrlo dobro. Bit će mnogo manji, neće koristiti kompletnu Plavu pilulu, već samo F103, što će mu omogućiti napajanje zasebnim (čistim) analognim Vdda -om za ADC -ove.

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

Korak 10: Kôd i kratki video zapis

Korak 11: DODATNO: Overclocking

EXTRA: Overclocking
EXTRA: Overclocking

Baš kao i sa F03, htio sam vidjeti koliko se F103 može overclockati. Specifikacije za ovaj mikrokontroler tvrde da maksimalna brzina takta ne bi trebala prelaziti 72MHz (što je naravno već brže od F030), ali sam u nekoliko blogova čitao da je overclocking jednostavan, 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 dajući takt od 128MHz. To za moju Plavu pilulu nije predstavljalo nikakav problem, zapravo, sve moje plave pilule rade bez ikakvih problema na 128MHz.

Ali sada sam htio saznati koja je prava granica. Uklonio sam kristal od 8 MHz i zamijenio ga jednim od 12 MHz. Ponovo 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 nikada 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 rade i brže, imam ih na 30MHz (umjesto na 14), i dalje su radili dobro na 60MHz, STMicroelectronics čini lijep hardver!

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

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

Preporučuje se: