Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Interleave eller SImultaneous Mode
- Trin 2: Prototyping
- Trin 3: Dæmpere
- Trin 4: Virtuel grund
- Trin 5: Rotary Encoders og Debugging
- Trin 6: Display og tidsbase
- Trin 7: ADC'er og DMA
- Trin 8: Brugergrænseflade
- Trin 9: Bygning og mulige forbedringer
- Trin 10: Koden og en kort video
- Trin 11: EKSTRA: Overclocking
Video: Dual Trace Oscilloskop: 11 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:25
Da jeg byggede mit tidligere mini -oscilloskop, ville jeg se, hvor godt jeg kunne få min mindste ARM -mikrokontroller til at udføre en STM32F030 (F030), og det gjorde et godt stykke arbejde.
I en af kommentarerne blev det foreslået, at en "blå pille" med en STM32F103 (F103) måske var bedre, mindre end udviklingsbrættet med F030 og muligvis endnu billigere. Men til mini-oscilloskopet brugte jeg ikke udviklingspladen, men F030 på et endnu mindre SMD-DIP-kort, så der ville en blå pille bestemt ikke være mindre, og jeg tvivler på, at den også ville være billigere.
Koden er nu tilgængelig på Gitlab:
gitlab.com/WilkoL/dual-trace-oscilloscope
Forbrugsvarer
Delliste: - plastikboks - perfboard (dobbeltsidet prototypekort 8x12cm) - Blå pille - ST7735s TFT -display - lithium -ion -batteri - HT7333 3,3V lavt frafaldsregulator - MCP6L92 dobbelt opamp - TSSOP8 til DIP8 -kort - 12 MHz krystal (ikke nødvendigt) - roterende encoder plus knap (2x) - powerwitch - bananterminaler (4x) - lithium -ion opladerplade - flere modstande og kondensatorer - nylonafstandsstykker, møtrikker og skruer
Værktøjer:
- loddemetal - lodning 0,7 mm - noget tråd - sideskærer - glas og lup - boremaskine - multimeter - oscilloskop - STLink -V2
Software:
- STM32IDE - STM32CubeMX - STLink Utility - LowLayer -bibliotek - tilpasset bibliotek til ST7735s - Notesblok ++ - Kicad
Trin 1: Interleave eller SImultaneous Mode
Blå pille
Men tanken var der, og jeg vidste, at F103 har to ADC'er! Hvad hvis jeg brugte disse to ADC'er sammen i "interleave" -tilstand, noget jeg tidligere har gjort med STM32F407 (F407). Prøveudtagningshastigheden ville fordobles. Det, kombiner det med en hurtigere mikrokontroller, og det ville være en stor efterfølger til mini -oscilloskopet.
Interleave -tilstand Mærkeligt nok er ADC'erne i F103 mindre avancerede end den i F030 (og F407), du kan ikke vælge opløsningen. Mere vigtigt er, at du heller ikke kan ændre timingen mellem de to ADC'er. Når du nu bruger interleave -tilstanden, vil du normalt have prøvetagningen så hurtig som muligt med den korteste tid mellem prøverne, men med et oscilloskop er det nødvendigt at ændre timingen. Måske kan det stadig gøres, jeg er ikke en professionel oscilloskopdesigner, men jeg droppede planen om at bruge interleave-mode.
Simultan tilstand
Men at have to ADC'er giver mange flere muligheder, de to ADC'er kan også indstilles til "regelmæssig-samtidig" -tilstand. Hvad med et dobbelt spor-oscilloskop?
Efter at have besluttet at prøve at lave et oscilloskop med to spor, ville jeg også have variabel inputfølsomhed, en mulighed, som jeg ikke havde på mini -oscilloskopet. Det betyder en dæmper (og forstærker) på indgangene. Og måske ville jeg have endnu mere? Så jeg lavede en lille liste over "nice-to-haves".
ØNSKELISTE
to kanaler
variabel følsomhed på begge kanaler
udløses på begge kanaler
variabelt triggerniveau på begge kanaler
variabel forskydning
enkelt batteristrøm
passer i samme kasse som mini-oscilloskopet
Trin 2: Prototyping
Som sædvanlig startede jeg disse projekter på et brødbræt. (Se billede) Og inden jeg lodder alt på perfboardet, forsøger jeg at finde ud af, om og hvordan det vil passe i den valgte projektboks. Det passer, men kun lige. Nogle dele er skjult under skærmen, andre under den blå pille. Og igen, ligesom for de fleste af mine projekter, er dette et engangsprojekt, og jeg vil ikke designe et printkort til det.
Trin 3: Dæmpere
I almindelige oscilloskoper er inputdæmpere kredsløb, der ændrer dæmpning og forstærkning ved at skifte ind- og ud -modstande med små signalrelæer. Selvom jeg har nogle af disse relæer, ved jeg, at de ikke skifter med mindre end 4 Volt, det betyder, at de kun fungerer med et fuldt ladet litiumionbatteri (4,2V). Så jeg havde brug for en anden måde at skifte disse modstande på. Selvfølgelig kunne jeg bare installere mekaniske kontakter, men det ville bestemt ikke længere passe i projektboksen, hvis jeg havde tænkt på det, måske kunne jeg prøve et bedre digitalt potentiometer igen (det jeg har er alt for støjende).
Så tænkte jeg på "analoge switches", med dem kan jeg selv lave et digitalt potentiometer. I min reservedelssamling fandt jeg CD4066 med fire analoge kontakter. Ideen er at lave feedback -modstanden for en opamp -variabel ved at skifte modstandene ind og ud parallelt med feedback -modstanden.
Det fungerer meget godt, men med kun 4 switches i 4066 og med 2 kanaler var det ikke muligt at lave mere end tre følsomhedsniveauer. Jeg valgte 500mV, 1V og 2V pr. Division, da det er de spændingsniveauer, jeg bruger mest. Skærmen er opdelt i 6 divisioner, så det giver intervallerne -1,5V til +1,5V, -3V til +3V og -6V til 6V.
Med "virtual-ground" kan du flytte disse områder op og ned, så selv 0v til +12V er mulig.
Trin 4: Virtuel grund
Fordi oscilloskopet bruger en enkelt strømskinne (3,3V) har opamps brug for et virtuelt jordoverflade, ellers fungerer de ikke. Dette virtuelle jordniveau er lavet med PWM på en udgangskanal på TIM4, dets driftscyklus ændres fra kun få procent til næsten hundrede procent. Et lavpasfilter med en 1k modstand og en 10uF kondensator omdanner det til en spænding på (næsten) 0V til (næsten) 3,3V. Frekvensen af firkantbølgen er lige under 100 kHz, så det enkle lavpasfilter er godt nok.
Ret sent i opbygningen af dette oscilloskop indså jeg, at du ikke kan have to separate forskydninger til kanalerne. Dette skyldes det faktum, at input-jordniveauet med en enkelt strømforsyning skal være adskilt fra opampernes reelle jordniveau. Så begge kanaler bevæger sig på samme måde som du ændrer GND-indstillingen.
Trin 5: Rotary Encoders og Debugging
På mini -oscilloskopet brugte jeg kun en roterende encoder til alle funktioner. Det ville gøre et dobbelt oscilloskop meget svært at bruge, så her har jeg brug for to. En encoder til dæmpere og virtuelt jordoverflade og den anden encoder til tidsbase og udløsning. Desværre, ligesom i mit andet projekt, er disse roterende encodere meget "støjende". De er så dårlige, at de simpelthen ikke ville arbejde med timere i "encoder-mode", som standard måde at læse dem på. Jeg var nødt til at lave en debouncing -mekanisme med timer TIM2, der kontrollerede koderne hver 100us. Denne timer startes igen (kun), når der er aktivitet på koderne, kontrolleres dette med EXTI -funktionaliteten på inputporte. Nu fungerer koderne godt.
Og som du kan se, kan det også være meget praktisk at have en skærm til at få vist fejlfindingsinformation.
Trin 6: Display og tidsbase
Skærmen har en opløsning på 160 x 128 pixels, så der er brug for 160 prøver til en skærmfuld, det lykkedes mig at fremskynde ADC'erne til at lave 1,6 millioner prøver pr. Sekund, og det med den meget overklokede mikrokontroller (mere om det senere) giver en minimumsbase på 20us pr. division (100us pr. skærm). Således vil en bølgeform på 10 kHz fylde hele skærmen.
Det er kun dobbelt så hurtigt et mini -oscilloskop, jeg lavede før. Nå ja, nu er det med to kanaler:-).
Som sagt er skærmen 160 pixels bred, så der er kun brug for 160 værdier pr. Skærm. Men alle buffere indeholder faktisk 320 prøver. Så DMA gemmer 320 værdier, før det udløser en transmission fuldstændig afbrydelse (TC). Dette skyldes, at udløsningen sker i software. Samplingen starter på et tilfældigt tidspunkt, så det er meget usandsynligt, at den første værdi i bufferen er det sted, hvor triggerpunktet skal være.
Derfor findes triggerpunktet ved at læse igennem trace_x_buffer, hvis værdien er ved den ønskede triggerværdi, og hvis den tidligere værdi er lige under den, findes trigger_pointet. Dette fungerer ganske godt, men du har brug for en større buffer end den faktiske skærmstørrelse er.
Dette er også grunden til, at opdateringshastigheden på de lavere tidsbaseindstillinger er langsommere, end du måske forventer. Når du bruger indstillingen 200 ms/div, er en skærm fuld af data 1 sekund, men fordi dobbelt mængde konverteringer er udført, tager det 2 sekunder. På de hurtigere tidsbaseindstillinger vil du ikke mærke det så meget.
TIM3 bruges til at generere tidsbasen. Det udløser ADC'erne med den hastighed, der kræves af den valgte tidsbaseindstilling. Dets ur på TIM3 er 120MHz (se OVERCLOCKING), det maksimale antal, det tæller (ARR), bestemmer, hvordan andet det flyder over, eller i ST -sprog opdateres det. Via TRGO udløser disse opdateringsimpulser ADC'erne. Den laveste frekvens, den genererer, er 160 Hz, den højeste er 1,6 MHz.
Trin 7: ADC'er og DMA
De to ADC'er konverterer spændingen på deres input samtidigt, de gemmer de to 12 bit værdier i en enkelt 32bit variabel. Så DMA har kun en variabel pr. (Dobbelt) konvertering til overførsel.
For at bruge disse værdier er det derfor nødvendigt at opdele dem i de to værdier, så de kan bruges til at vise de to spor. Som sagt kan ADC'er i F103 ikke indstilles til andre opløsninger end 12 bit. De er altid i 12 bit -tilstand, og derfor tager konverteringer altid det samme antal urimpulser. Stadig, med overclocking af ADC'erne kan der udføres 1,6 MSamples pr. Sekund (se Ekstra: Overclocking).
ADC'ernes reference er Vdd, 3.3V -skinnen. For at konvertere det til mere bekvemme værdier (pr. Division) har jeg beregnet værdierne til dæmpere, fordi jeg ikke har de nøjagtige modstandsværdier, der kommer ud af disse beregninger, foretages nogle korrektioner i software.
I dette projekt bruger jeg DMA i "normal-mode". I denne tilstand stopper DMA overførsel af data (fra de ADC'er til hukommelse), når antallet af ord (eller halve ord eller bytes) alle overføres. I den anden mulige tilstand, "cirkulær tilstand" nulstiller DMA'en sig selv og fortsætter med at overføre data uafbrudt. Det virkede ikke med F103, det er så hurtigt, at det overskriver dataene i adc_buffer , før resten af programmet kunne læse det. Så nu er processen som følger:
- opsæt DMA til det antal data, der skal overføres, og aktiver DMA
- start udløsningen af ADC'erne, disse vil anmode om DMA -overførsler efter hver (dobbelt) konvertering
- efter at det indstillede antal konverteringer er overført, stopper DMA
- stop også straks udløsningen af ADC'erne
- udfør al den manipulation, der er nødvendig med dataene i hukommelsen
- vis spor på skærmen
- start processen igen
Trin 8: Brugergrænseflade
En 160 x 128 pixel skærm er ikke særlig stor, og jeg vil bruge så meget af det som muligt. Så der er ingen del af det forbeholdt strømindstillingerne. I de sidste par rækker vises den lodrette følsomhed, tidsbase, triggerniveau og triggerkanal, men når signalerne er store nok, vises de i det samme område. Den indstilling, der er aktiv, vises med gult, resten vises med hvidt.
Trin 9: Bygning og mulige forbedringer
Jeg er ret glad for dette projekt. Det fungerer fint og gør jobbet, men det kunne være bedre.
Projektboksen er for lille til at passe alt komfortabelt ind, hvilket resulterer i at skulle lægge komponenter under den blå pille. For at gøre det muligt kunne den blå pille ikke loddes direkte til "hovedkortet". Og fordi dette gjorde det alt for højt, var jeg nødt til at fjerne mange dele fra den blå pille, f.eks. Springerne til at vælge BOOT0 og BOOT1 (ting, jeg alligevel aldrig bruger), og jeg måtte endda flytte krystallen fra toppen til bunden af pcb.
Jeg gjorde livet vanskeligere ved at bruge bananstik i stedet for BNC- eller SMA-stik, det betød, at en stor del af perfboardet var et "no-go-area", for at gøre det klart for mig selv lagde jeg kaptonbånd over det for at forhindre mig selv fra at lægge dele på den.
Et andet problem med at lægge det hele i sådan en lille projektboks er, at de analoge og digitale kredsløb er meget tæt på hinanden. Du kan se, at der er ganske meget støj synlig på begge spor. Dette havde jeg ikke engang på brødbrættet! Ved at flytte strømledningerne til analoge og digitale kredsløb så langt fra hinanden som muligt blev der foretaget en lille forbedring, men ikke nok efter min smag. Reduktion af alle modstandsværdier i de analoge kredsløb endnu længere end jeg gjorde (inputmodstanden er 100kOhm i stedet for 1MOhm) hjalp ikke. Jeg formoder, at udløsning ved den hurtigste tidsbaseindstilling (20us/div), hvilket ikke er godt, også vil forbedre med mindre støj på signalerne.
Hvis du laver dette design på en "rigtig" pcb, med alle smd -dele og separate lag til analog, digital og power (det er 4 lag!) Vil det sandsynligvis fungere meget godt. Det vil være meget mindre, det vil ikke bruge en komplet Blue Pill, men kun F103, og det vil gøre det muligt at levere en separat (ren) analog Vdda til ADC'erne.
Som en sidste berøring besluttede jeg at sprøjte æsken sort, den ændrer sig fra alle de beige æsker den har.
Trin 10: Koden og en kort video
Trin 11: EKSTRA: Overclocking
Ligesom jeg gjorde med F03, ville jeg se, hvor godt en F103 kan overklokkes. Specifikationerne for denne mikrokontroller hævder, at den maksimale clockhastighed ikke må overstige 72MHz (hvilket naturligvis allerede er hurtigere end F030), men jeg havde læst i flere blogs, at overklokning var let, så hvorfor ikke?
Den blå pille er forsynet med en 8MHz krystal, PLL multiplicerer den med en faktor 9 til 72MHz. PLL kan øges op til 16, hvilket giver et ur på 128MHz. Det var slet ikke noget problem for min blå pille, faktisk fungerer alle mine blå piller uden problemer på 128MHz.
Men nu ville jeg finde ud af, hvad den egentlige grænse er. Så jeg fjernede 8MHz krystallen og erstattede den med en på 12MHz. Igen forøgede jeg PLL -multiplikatoren, indtil mikrokontrolleren endelig gav op. Det var på 168MHz! På 156MHz fungerede det stadig godt. Jeg lod den køre med den hastighed i timevis og så aldrig den gå ned. I dette oscilloskop nøjedes jeg med 120MHz, en hastighed, der kan vælges med en 12MHz krystal og PLL på 10, samt med en 8 MHz krystal og PLL på 15. (se SystemClock_Config i main.c)
ADC'erne fungerer nu også hurtigere, jeg har dem kørende ved 30MHz (i stedet for 14), de fungerede stadig godt på 60MHz, STMicroelectronics laver noget flot hardware!
STMicroelectronics sætter disse grænser i databladet med god grund, de garanterer, at mikrokontrolleren fungerer ved den angivne 72MHz under alle forhold.
Men da jeg ikke bruger mikrokontrolleren ved -40 Celsius, +85 Celsius, på kun 2,0 Volt eller 3,6 Volt, synes jeg, det er sikkert at overklokke det. Gør IKKE dette, når du har til hensigt at sælge en enhed med deres mikrokontroller, du ved aldrig, hvor de vil blive brugt.
Anbefalede:
Mini batteridrevet CRT -oscilloskop: 7 trin (med billeder)
Mini -batteridrevet CRT -oscilloskop: Hej! I denne instruktive vil jeg vise dig, hvordan du laver et mini -batteridrevet CRT -oscilloskop. Et oscilloskop er et vigtigt værktøj til at arbejde med elektronik; du kan se alle signalerne flyde rundt i et kredsløb og fejlfinde
Analog frontend til oscilloskop: 6 trin (med billeder)
Analog frontend til oscilloskop: Herhjemme har jeg nogle billige USB -lydkort, som kan købes i Banggood, Aliexpress, Ebay eller andre globale online butikker for nogle penge. Jeg spekulerede på, hvad interessant jeg kan bruge dem til og besluttede at prøve at lave et lavfrekvent pc -omfang med
Lav nemt dit eget oscilloskop (Mini DSO) med STC MCU: 9 trin (med billeder)
Lav nemt dit eget oscilloskop (Mini DSO) med STC MCU: Dette er et simpelt oscilloskop lavet med STC MCU. Du kan bruge denne Mini DSO til at observere bølgeform. Tidsinterval: 100us-500ms Spændingsområde: 0-30V Tegningstilstand: Vector eller prikker
Opgrader DIY Mini DSO til et ægte oscilloskop med fantastiske funktioner: 10 trin (med billeder)
Opgrader DIY Mini DSO til et ægte oscilloskop med fantastiske funktioner: Sidste gang delte jeg, hvordan man laver en Mini DSO med MCU.For at vide, hvordan man bygger det trin for trin, henvises til min tidligere instruerbare: https: //www.instructables. com/id/Make-Your-Own-Osc … Da mange mennesker er interesserede i dette projekt, brugte jeg nogle ti
Track & trace for små butikker: 9 trin (med billeder)
Track & trace for små butikker: Dette er et system, der er lavet til små butikker, der skal monteres på e-cykler eller e-scootere til levering af korte afstande, for eksempel et bageri, der ønsker at levere bagværk. Hvad betyder Track and Trace? Track and trace er et system, der bruges af ca