Cuprins:

Osciloscop cu urmărire dublă: 11 pași (cu imagini)
Osciloscop cu urmărire dublă: 11 pași (cu imagini)

Video: Osciloscop cu urmărire dublă: 11 pași (cu imagini)

Video: Osciloscop cu urmărire dublă: 11 pași (cu imagini)
Video: Cel mai simplu incărcător de baterie 2024, Noiembrie
Anonim
Osciloscop cu urmărire dublă
Osciloscop cu urmărire dublă

Când mi-am construit mini-osciloscopul anterior, am vrut să văd cât de bine aș putea face ca cel mai mic microcontroler ARM să funcționeze STM32F030 (F030) și a făcut o treabă frumoasă.

Într-unul dintre comentarii s-a sugerat că o „pastilă albastră” cu un STM32F103 (F103) ar putea fi mai bună, mai mică decât placa de dezvoltare cu F030 și posibil chiar mai ieftină. Dar pentru mini osciloscop nu am folosit placa de dezvoltare, ci F030 pe o placă SMD-DIP și mai mică, așa că acolo o pastilă albastră nu ar fi cu siguranță mai mică și mă îndoiesc că ar fi și ea mai ieftină.

Codul este acum disponibil pe Gitlab:

gitlab.com/WilkoL/dual-trace-oscilloscope

Provizii

Lista pieselor: - cutie de plastic - placă de perfecționare (placă prototip față-verso 8x12cm) - Pilula albastră - Afișaj TFT ST7735s - baterie litiu-ion - Regulator de scădere redusă de 3.3V HT7333 - MCP6L92 dual opamp - Placă TSSOP8 la DIP8 - Cristal de 12 MHz (nu este necesar)) - codificator rotativ plus buton (2x) - întrerupător de putere - terminale pentru banane (4x) - placă de încărcare litiu-ion - mai multe rezistențe și condensatori - distanțieri din nylon, piulițe și șuruburi

Instrumente:

- stație de lipit - lipit 0,7 mm - sârmă - tăietor lateral - ochelari și lupă - burghiu - multimetru - osciloscop - STLink-V2

Software:

- STM32IDE - STM32CubeMX - STLink Utility - Bibliotecă LowLayer - bibliotecă adaptată pentru ST7735s - Notepad ++ - Kicad

Pasul 1: Modul intercalat sau SImultaneous

Interleave sau S Mod simultan
Interleave sau S Mod simultan
Interleave sau S Mod simultan
Interleave sau S Mod simultan

Pilula albastră

Dar ideea era acolo și știam că F103 are două ADC-uri! Ce se întâmplă dacă aș folosi cele două ADC-uri împreună în modul „intercalare”, lucru pe care l-am mai făcut cu STM32F407 (F407). Viteza de eșantionare s-ar dubla. Asta, combinați acest lucru cu un microcontroler mai rapid și ar fi un succesor minunat pentru mini-osciloscop.

Mod intercalare În mod ciudat, ADC-urile din F103 sunt mai puțin avansate decât cea din F030 (și F407), nu puteți alege rezoluția. Mai important este că, de asemenea, nu puteți schimba timpul dintre cele două ADC-uri. Acum, când utilizați modul de intercalare, de obicei, doriți ca eșantionarea să fie cât mai rapidă posibil cu cel mai scurt timp dintre eșantioane, dar cu un osciloscop este necesar să modificați sincronizarea. Poate tot se poate face, nu sunt un designer de osciloscop profesionist, dar am renunțat la planul de a folosi modul interleave.

Mod simultan

Dar, având două ADC-uri oferă mult mai multe opțiuni, cele două ADC-uri pot fi setate și în modul „regulat-simultan”. Ce zici de un osciloscop dual?

După ce am decis să încerc să fac un osciloscop cu dublă urmă, am vrut să am și o sensibilitate de intrare variabilă, o opțiune pe care nu o aveam pe mini-osciloscop. Asta înseamnă un atenuator (și un amplificator) pe intrări. Și poate am vrut și mai mult? Așa că am făcut o mică listă de „simpatici”.

LISTA DE DORINȚE

două canale

sensibilitate variabilă pe ambele canale

declanșarea pe ambele canale

nivel de declanșare variabil pe ambele canale

compensare variabilă

o singură baterie

incapeti in aceeasi cutie ca mini-osciloscopul

Pasul 2: Prototipare

Prototipare
Prototipare
Prototipare
Prototipare

Ca de obicei, am început aceste proiecte pe un panou de calcul. (A se vedea imaginea) Și înainte de a lipi totul pe perfboard, încerc să aflu dacă și cum se va potrivi în caseta de proiect aleasă. Se potrivește, dar doar doar. Unele părți sunt ascunse sub ecran, altele sub pastila albastră. Și din nou, la fel ca pentru majoritatea proiectelor mele, acesta este un proiect o singură dată și nu voi proiecta un PCB pentru acesta.

Pasul 3: Atenuatoare

Atenuatori
Atenuatori

În osciloscoapele obișnuite, atenuatoarele de intrare sunt circuite care schimbă atenuarea și amplificarea prin comutarea rezistențelor cu relee de semnal mici. În timp ce am unele dintre aceste relee, știu că nu vor comuta la mai puțin de 4 volți, ceea ce înseamnă că vor funcționa doar cu o baterie complet încărcată cu litiu-ion (4.2V). Așa că aveam nevoie de un alt mod de a schimba aceste rezistențe. Bineînțeles că aș putea instala doar comutatoare mecanice, dar asta nu ar mai încape în caseta proiectului, având în vedere, poate aș putea încerca din nou un potențiometru digital mai bun (cel pe care îl am este mult prea zgomotos).

Apoi m-am gândit la „comutatoare analogice”, cu acestea îmi pot face singur un potențiometru digital. În colecția mea de piese am găsit CD4066 cu patru comutatoare analogice. Ideea este de a face rezistența de feedback a unei variabile opamp prin comutarea și ieșirea rezistențelor paralele cu rezistența de feedback.

Funcționează foarte bine, dar având doar 4 comutatoare în 4066 și având 2 canale nu a fost posibil să se facă mai mult de trei niveluri de sensibilitate. Am ales 500mV, 1V și 2V pe divizie, deoarece acestea sunt nivelurile de tensiune pe care le folosesc cel mai mult. Ecranul este împărțit în 6 divizii, astfel încât să facă pentru intervalele -1,5V la + 1,5V, -3V la + 3V și -6V la 6V.

Cu „virtual-ground” puteți muta aceste intervale în sus și în jos, astfel încât chiar și 0v la + 12V este posibil.

Pasul 4: Teren virtual

Teren virtual
Teren virtual
Teren virtual
Teren virtual

Deoarece osciloscopul folosește o singură șină de alimentare (3,3V), opamps-urile au nevoie de un nivel virtual la sol sau nu vor funcționa. Acest nivel virtual al solului este realizat cu PWM pe un canal de ieșire al TIM4, ciclul de funcționare al acestuia se schimbă de la doar câteva procente la aproape o sută la sută. Un filtru trece jos cu un rezistor de 1k și un condensator de 10uF transformă acest lucru într-o tensiune de (aproape) 0V la (aproape) 3,3V. Frecvența undei pătrate este puțin sub 100kHz, astfel încât filtrul simplu low pass este suficient de bun.

Cam târziu în construcția acestui osciloscop mi-am dat seama că nu puteți avea două compensări separate pentru canale. Acest lucru se datorează faptului că, cu o singură sursă de alimentare, nivelul de intrare-sol trebuie să fie separat de nivelul real al solului opamps. Deci, ambele canale se mișcă în același mod în care modificați setarea GND.

Pasul 5: Codificatoare rotative și depanare

Codificatoare rotative și depanare
Codificatoare rotative și depanare
Codificatoare rotative și depanare
Codificatoare rotative și depanare

Pe mini-osciloscop am folosit doar un codificator rotativ pentru toate funcțiile. Asta ar face un osciloscop dual foarte dificil de utilizat, așa că aici am nevoie de două. Un codificator pentru atenuatoare și nivelul solului virtual și celălalt codificator pentru baza de timp și declanșare. Din păcate, la fel ca în celălalt proiect al meu, aceste codificatoare rotative sunt foarte „zgomotoase”. Sunt atât de răi încât pur și simplu nu ar funcționa cu temporizatoarele în „mod encoder”, modul standard de a le citi. A trebuit să fac un mecanism de debouncing cu temporizatorul TIM2, verificând codificatoarele la fiecare 100us. La rândul său, acest cronometru este pornit (numai) când există o anumită activitate pe codificatoare, acest lucru este verificat cu funcționalitatea EXTI de pe porturile de intrare. Acum, codificatoarele funcționează bine.

Și, după cum puteți vedea, să aveți un afișaj poate fi, de asemenea, foarte util pentru a afișa informații de depanare.

Pasul 6: Afișare și bază de timp

Afișare și bază de timp
Afișare și bază de timp

Afișajul are o rezoluție de 160 x 128 pixeli, deci sunt necesare 160 de mostre pentru un ecran complet, am reușit să accelerez ADC-urile pentru a face 1,6 milioane de eșantioane pe secundă și asta, cu microcontrolerul mult overclockat (mai multe despre asta mai târziu), oferă o bază de timp minimă de 20us pe divizie (100us pe ecran). Astfel, o formă de undă de 10 kHz va umple întregul ecran.

Acesta este doar de două ori mai rapid decât mini-osciloscopul pe care l-am făcut înainte. Ei bine, acum este cu două canale:-).

După cum sa spus, afișajul are o lățime de 160 de pixeli, astfel încât sunt necesare doar 160 de valori pe ecran. Dar toate tampoanele conțin de fapt 320 de probe. Deci, DMA stochează 320 de valori înainte de a declanșa o întrerupere completă a transmisiei (TC). Acest lucru se datorează faptului că declanșarea se face în software. Eșantionarea începe într-un moment aleatoriu, deci este foarte puțin probabil ca prima valoare din buffer să fie locul în care ar trebui să fie punctul de declanșare.

Prin urmare, punctul de declanșare se găsește citind prin trace_x_buffer, dacă valoarea este la valoarea de declanșare dorită en, dacă valoarea anterioară este chiar sub acesta, se găsește punctul de declanșare. Acest lucru funcționează destul de bine, dar aveți nevoie de un tampon mai mare decât dimensiunea reală a afișajului.

Acesta este și motivul pentru care rata de reîmprospătare a setărilor bazei de timp mai mici este mai lentă decât v-ați putea aștepta. Când utilizați setarea 200ms / div, un ecran plin de date este de 1 secundă, dar pentru că se face dublul cantității de conversii, durează 2 secunde. În setările mai rapide ale bazei de timp nu veți observa atât de mult.

TIM3 este utilizat pentru a genera baza de timp. Acesta declanșează ADC-urile cu viteza, așa cum este cerut de setarea bazei de timp selectate. Ceasul TIM3 este de 120MHz (vezi OVERCLOCKING), numărul maxim la care contează (ARR) determină modul în care se revarsă sau, în limbajul ST, se actualizează. Prin TRGO aceste impulsuri de actualizare declanșează ADC-urile. Cea mai mică frecvență pe care o generează este de 160 Hz, cea mai mare este de 1,6 MHz.

Pasul 7: ADC-uri și DMA

ADC și DMA
ADC și DMA

Cele două ADC convertesc tensiunea la intrările lor în același timp, ele stochează acele două valori de 12 biți într-o singură variabilă de 32 de biți. Deci, DMA are o singură variabilă pe conversie (dublă) de transferat.

Pentru a utiliza aceste valori este, prin urmare, necesar să le împărțiți în cele două valori, astfel încât să poată fi utilizate pentru a afișa cele două urme. După cum sa spus, ADC-urile din F103 nu pot fi setate la alte rezoluții decât 12 biți. Sunt întotdeauna în modul 12 biți și astfel conversiile au întotdeauna același număr de impulsuri de ceas. Totuși, cu overclocking-ul ADC-urilor, se pot face 1,6 MSamples pe secundă (vezi Extra: Overclocking).

Referința ADC-urilor este Vdd, șina de 3,3V. Pentru a converti acest lucru la valori mai convenabile (pe diviziune) am calculat valorile atenuatoarelor, deoarece nu am valorile exacte ale rezistenței care ies din aceste calcule, unele corecții se fac în software.

În acest proiect folosesc DMA în „mod regulat”. În acest mod, DMA încetează să transfere date (de la ADC-uri în memorie) atunci când numărul de cuvinte (sau jumătăți de cuvinte sau octeți) este transferat. În celălalt mod posibil, „modul circular” DMA se resetează și continuă să transfere date neîntrerupte. Acest lucru nu a funcționat cu F103, este atât de rapid încât suprascrie datele din adc_buffer înainte ca restul programului să poată citi. Deci, acum procesul este după cum urmează:

- configurați DMA la numărul de date care trebuie transferate și activați DMA

- porniți declanșarea ADC-urilor, acestea vor solicita transferuri DMA după fiecare conversie (dublă)

- după transferul numărului stabilit de conversii, DMA se oprește

- opriți imediat declanșarea ADC-urilor

- faceți toate manipulările necesare asupra datelor din memorie

- arată urme pe ecran

- porniți din nou procesul

Pasul 8: Interfață utilizator

Interfața cu utilizatorul
Interfața cu utilizatorul

Un ecran de 160 x 128 pixeli nu este foarte mare și vreau să îl folosesc cât mai mult posibil. Deci, nu există nici o parte din aceasta rezervată pentru setările curenților. În ultimele câteva rânduri sunt afișate sensibilitatea verticală, baza de timp, nivelul de declanșare și canalul de declanșare, dar când semnalele sunt suficient de mari vor apărea în aceeași zonă. Opțiunea activă este afișată în galben, restul este afișată în alb.

Pasul 9: Construire și îmbunătățiri posibile

Clădire și îmbunătățiri posibile
Clădire și îmbunătățiri posibile
Clădire și îmbunătățiri posibile
Clădire și îmbunătățiri posibile
Clădire și îmbunătățiri posibile
Clădire și îmbunătățiri posibile
Clădire și îmbunătățiri posibile
Clădire și îmbunătățiri posibile

Sunt destul de fericit de acest proiect. Funcționează bine și face treaba, dar ar putea fi mai bine.

Cutia proiectului este prea mică pentru a se potrivi confortabil cu toate acestea, ceea ce duce la punerea componentelor sub pilula albastră. Pentru a face acest lucru posibil, pilula albastră nu a putut fi lipită direct pe „placa principală”. Și pentru că acest lucru a făcut totul prea mare, a trebuit să îndepărtez multe părți din pastila albastră, cum ar fi jumperii pentru selectarea BOOT0 și BOOT1 (lucruri pe care nu le folosesc niciodată) și chiar a trebuit să mut cristalul de sus în jos PCB-ul.

Am făcut viața mai dificilă folosind conectori de banane în loc de conectori BNC sau SMA, a însemnat că o mare parte a plăcii de perfecționare a fost o „zonă fără go-go”. de la punerea pieselor pe el.

O altă problemă cu punerea totul într-o cutie de proiect atât de mică este că circuitele analogice și digitale sunt foarte apropiate. Puteți vedea că există destul de mult zgomot vizibil pe ambele urme. Acest lucru nici nu l-am avut pe panou! Prin mutarea liniilor de alimentare pentru circuitele analogice și digitale cât mai departe posibil, s-a făcut o mică îmbunătățire, dar nu suficientă pentru placerea mea. Reducerea tuturor valorilor rezistenței din circuitele analogice chiar mai departe decât am făcut-o (rezistența de intrare este de 100kOhm în loc de 1MOhm) nu a ajutat. Bănuiesc că declanșarea celei mai rapide setări a bazei de timp (20us / div), care nu este grozavă, se va îmbunătăți și cu mai puțin zgomot la semnal.

Dacă faceți acest design pe un PCB „real”, cu toate părțile smd și straturile separate pentru analog, digital și putere (adică 4 straturi!), Probabil că va funcționa foarte bine. Va fi mult mai mic, nu va folosi o pilulă albastră completă, ci doar F103 și va face posibilă furnizarea acestuia cu un Vdda analogic (curat) separat pentru ADC-uri.

Ca o atingere finală, am decis să pulverizez cutia neagră, schimbând toate cutiile bej pe care le are.

Pasul 10: Codul și un scurt videoclip

Pasul 11: EXTRA: Overclocking

EXTRA: Overclocking
EXTRA: Overclocking

La fel cum am făcut cu F03, am vrut să văd cât de bine poate fi overclockat un F103. Specificațiile pentru acest microcontroler susțin că viteza maximă a ceasului nu trebuie să depășească 72 MHz (care, desigur, este deja mai rapidă decât F030), dar citisem în mai multe bloguri că overclocking-ul a fost ușor, așa că de ce nu?

Pilula albastră este prevăzută cu un cristal de 8MHz, PLL îl înmulțește cu un factor de 9 până la 72MHz. PLL poate fi mărit până la 16, oferind un ceas de 128 MHz. Aceasta nu a fost deloc o problemă pentru pilula mea albastră, de fapt, toate pastilele mele albastre funcționează fără probleme pe 128 MHz.

Dar acum am vrut să aflu care este adevărata limită. Așa că am eliminat cristalul de 8 MHz și l-am înlocuit cu unul de 12 MHz. Din nou am crescut multiplicatorul PLL până când microcontrolerul a renunțat în cele din urmă. Asta a fost la 168MHz! Pe 156 MHz a funcționat bine. L-am lăsat să ruleze la viteza aceea ore în șir și nu l-am văzut niciodată prăbușindu-se. În acest osciloscop m-am stabilit pentru 120MHz, o viteză care poate fi selectată cu un cristal de 12MHz și PLL pe 10, precum și cu un cristal de 8 MHz și PLL pe 15. (a se vedea SystemClock_Config în main.c)

ADC-urile funcționează acum mai repede, le am rulate la 30MHz (în loc de 14), încă funcționau bine pe 60MHz, STMicroelectronics face niște hardware frumos!

STMicroelectronics pune aceste limite în fișa tehnică pentru un motiv întemeiat, garantează că microcontrolerul funcționează la 72 MHz specificat în toate condițiile.

Dar, deoarece nu folosesc microcontrolerul la -40 Celsius, +85 Celsius, cu doar 2,0 Volți sau 3,6 Volți, cred că este sigur să-l overclockezi. NU faceți acest lucru atunci când intenționați să vindeți un dispozitiv cu microcontrolerele lor, nu știți niciodată unde vor fi utilizate.

Recomandat: