INHOUDSOPGAWE:

Dubbele spoor -oscilloskoop: 11 stappe (met foto's)
Dubbele spoor -oscilloskoop: 11 stappe (met foto's)

Video: Dubbele spoor -oscilloskoop: 11 stappe (met foto's)

Video: Dubbele spoor -oscilloskoop: 11 stappe (met foto's)
Video: Als Dit Niet Was Gefilmd Zou Niemand Het Geloven 2024, Julie
Anonim
Oscilloskoop met dubbele spore
Oscilloskoop met dubbele spore

Toe ek my vorige mini -ossilloskoop bou, wou ek sien hoe goed ek my kleinste ARM -mikrobeheerder 'n STM32F030 (F030) kon verrig, en dit het goed gedoen.

In een van die opmerkings is voorgestel dat 'n "Blue Pill" met 'n STM32F103 (F103) dalk beter, kleiner as die ontwikkelingsbord met die F030 en moontlik selfs goedkoper is. Maar vir die mini-ossilloskoop het ek nie die ontwikkelingsbord nie, maar die F030 op 'n nog kleiner SMD-DIP-bord gebruik, so 'n Blue Pill sou beslis nie kleiner wees nie en ek twyfel of dit ook goedkoper sou wees.

Kode is nou beskikbaar op Gitlab:

gitlab.com/WilkoL/dual-trace-oscilloscope

Voorrade

Onderdeellys: - plastiekboks - perfboard (dubbelzijdige prototipe bord 8x12cm) - Blue Pill - ST7735s TFT -display - litium -ioonbatterij - HT7333 3.3V laaguitvalreguleerder - MCP6L92 dubbele opamp - TSSOP8 tot DIP8 -bord - 12 MHz kristal (nie nodig nie) - roterende encoder plus knop (2x) - powerwitch - piesang terminale (4x) - litium -ioon laaierbord - verskeie weerstande en kapasitors - nylon afstandhouers, moere en skroewe

Gereedskap:

- soldeerstasie - soldeer 0,7 mm - draad - sysnyer - glase en loep - boor - multimeter - ossilloskoop - STLink -V2

Sagteware:

- STM32IDE - STM32CubeMX - STLink Utility - LowLayer -biblioteek - aangepaste biblioteek vir ST7735s - Notepad ++ - Kicad

Stap 1: Interleave of SImultaneous Mode

Interleave of SImultaneous Mode
Interleave of SImultaneous Mode
Interleave of SImultaneous Mode
Interleave of SImultaneous Mode

Blou pil

Maar die idee was daar, en ek het geweet dat die F103 twee ADC's het! Wat as ek die twee ADC's saam in die 'interleave' modus gebruik, iets wat ek al voorheen met die STM32F407 (F407) gedoen het. Die bemonsteringsnelheid sou verdubbel. Dit, kombineer dit met 'n vinniger mikrobeheerder, en dit sal 'n groot opvolger van die mini -ossilloskoop wees.

Interleave -modus Vreemd genoeg is die ADC's in die F103 minder gevorderd as die in die F030 (en die F407); u kan nie die resolusie kies nie. Belangriker is dat u ook nie die tydsberekening tussen die twee ADC's kan verander nie. As u nou die interleave -modus gebruik, wil u die monsterneming so vinnig as moontlik met die kortste tyd tussen monsters neem, maar met 'n ossilloskoop is dit nodig om die tydsberekening te verander. Miskien kan dit nog steeds gedoen word, ek is nie 'n professionele ossilloskoopontwerper nie, maar ek het die plan laat vaar om interleave-modus te gebruik.

Gelyktydige modus

Maar as u twee ADC's het, is daar baie meer opsies, maar die twee ADC's kan ook op 'gewone' gelyktydige 'modus ingestel word. Hoe gaan dit met 'n dubbele spoor-ossilloskoop?

Nadat ek besluit het om 'n dubbele spoor -ossilloskoop te probeer maak, wou ek ook veranderlike insetgevoeligheid hê, 'n opsie wat ek nie op die mini -ossilloskoop gehad het nie. Dit beteken 'n verswakker (en versterker) op die insette. En miskien wou ek nog meer hê? So ek het 'n klein lysie van 'lekker-tot-hawe' gemaak.

WENSLYS

twee kanale

veranderlike sensitiwiteit op beide kanale

geaktiveer op beide kanale

veranderlike snellervlak op beide kanale

veranderlike verrekening

enkele battery krag

pas in dieselfde boks as die mini-ossilloskoop

Stap 2: Prototipering

Prototipering
Prototipering
Prototipering
Prototipering

Soos gewoonlik het ek hierdie projekte op 'n broodbord begin. (Sien prentjie) En voordat ek alles op die perfboard soldeer, probeer ek uitvind of en hoe dit in die gekose projekkas sal pas. Dit pas, maar net. Sommige dele is onder die skerm versteek, ander onder die Blue Pill. En weer, net soos vir die meeste van my projekte, is dit 'n eenmalige projek, en ek sal nie 'n PCB daarvoor ontwerp nie.

Stap 3: Verswakkers

Verswakkers
Verswakkers

In gewone ossilloskope is die insetverswakkers stroombane wat verswakking en versterking verander deur in- en uitweerstands met klein seinrelae in en uit te skakel. Terwyl ek 'n paar van die relais het, weet ek dat hulle nie met minder as 4 Volt sal skakel nie, dit beteken dat hulle slegs met 'n volledig gelaaide litiumionbattery (4.2V) sal werk. Ek het dus 'n ander manier nodig gehad om die weerstande te verander. Natuurlik kon ek net meganiese skakelaars installeer, maar dit sou beslis nie meer in die projekkas pas nie, miskien sou ek weer 'n beter digitale potensiometer kon probeer (die een wat ek het, is te raserig).

Toe dink ek aan 'analoog skakelaars', waarmee ek self 'n digitale potensiometer kan maak. In my onderdeleversameling het ek die CD4066 met vier analoog skakelaars gevind. Die idee is om die terugvoerweerstand van 'n opamp -veranderlike te maak deur resistors in en uit te skakel parallel met die terugvoerweerstand.

Dit werk baie goed, maar met slegs 4 skakelaars in die 4066 en met 2 kanale, was dit nie moontlik om meer as drie sensitiwiteitsvlakke te maak nie. Ek het 500mV, 1V en 2V per afdeling gekies, aangesien dit die spanningsvlakke is wat ek die meeste gebruik. Die skerm is verdeel in 6 afdelings, wat die bereik van -1,5V tot +1,5V, -3V tot +3V en -6V tot 6V behaal.

Met die 'virtuele grond' kan u hierdie reekse op en af skuif, sodat selfs 0v tot +12V moontlik is.

Stap 4: Virtuele grond

Virtuele grond
Virtuele grond
Virtuele grond
Virtuele grond

Omdat die ossilloskoop 'n enkele kragrail (3.3V) gebruik, benodig die opamps 'n virtuele grondvlak, anders werk dit nie. Hierdie virtuele grondvlak word gemaak met PWM op een uitsetkanaal van TIM4, die dienssiklus daarvan verander van slegs 'n paar persent na byna honderd persent. 'N Laagdeurlaatfilter met 'n 1k -weerstand en 'n 10uF -kondensator verander dit in 'n spanning van (byna) 0V tot (byna) 3.3V. Die frekwensie van die vierkantsgolf is net minder as 100kHz, dus die eenvoudige laagdeurlaatfilter is goed genoeg.

Eerder laat in die bou van hierdie ossilloskoop het ek besef dat u nie twee afsonderlike offsets vir die kanale kan hê nie. Dit is omdat die ingang-grondvlak met 'n enkele kragtoevoer apart van die werklike grondvlak van die opamps moet wees. Beide kanale beweeg dus op dieselfde manier as wat u die GND-instelling verander.

Stap 5: roterende enkoders en ontfouting

Rotary encoders en ontfouting
Rotary encoders en ontfouting
Rotary encoders en ontfouting
Rotary encoders en ontfouting

Op die mini -ossilloskoop het ek net een draaikodeerder vir alle funksies gebruik. Dit sou 'n dubbele ossilloskoop baie moeilik maak om te gebruik, so hier het ek twee nodig. Een encoder vir die verswakkers en virtuele grondvlak en die ander encoder vir die tydsbasis en sneller. Ongelukkig is hierdie roterende enkoders, net soos in my ander projek, baie "raserig". Hulle is so erg dat hulle eenvoudig nie met timers in 'encoder-mode', die standaard manier om dit te lees, sou werk nie. Ek moes 'n afbuigmeganisme met timer TIM2 maak, en kyk elke 100 keer na die encoders. Hierdie timer word weer begin (slegs) as daar aktiwiteit op die encoders is, word dit nagegaan met die EXTI -funksionaliteit op die invoerpoort. Nou werk die encoders goed.

En soos u kan sien, kan 'n skerm ook baie handig wees om ontfoutingsinligting te vertoon.

Stap 6: Vertoon en tydsbasis

Vertoon en tydsbasis
Vertoon en tydsbasis

Die skerm het 'n resolusie van 160 x 128 pixels, so daar is 160 monsters nodig vir 'n skerm, ek het daarin geslaag om die ADC's te bespoedig om 1,6 miljoen monsters per sekonde te doen, en dit, met die baie oorklokte mikrobeheerder (meer hieroor later), gee 'n minimum tydsbasis van 20us per afdeling (100us per skerm). 'N Golfvorm van 10 kHz vul dus die hele skerm.

Dit is net twee keer so vinnig as die mini -ossilloskoop wat ek voorheen gemaak het. Nou ja, dit is nou met twee kanale:-).

Soos gesê, die skerm is 160 pixels breed, dus is slegs 160 waardes per skerm nodig. Maar alle buffers bevat eintlik 320 monsters. Die DMA stoor dus 320 waardes voordat dit 'n transmissie -volledige onderbreking (TC) veroorsaak. Dit is omdat die sneller in sagteware gedoen word. Die monsterneming begin op 'n ewekansige oomblik, daarom is dit baie onwaarskynlik dat die eerste waarde in die buffer die plek is waar die snellerpunt moet wees.

Daarom word die snellerpunt gevind deur die trace_x_buffer deur te lees; as die waarde by die gewenste snellerwaarde is, en as die vorige waarde net daaronder is, word die trigger_point gevind. Dit werk redelik goed, maar u benodig 'n groter buffer as wat die werklike skermgrootte is.

Dit is ook die rede dat die verversingsfrekwensie op die laer tydbasis -instellings stadiger is as wat u sou verwag. As u die 200ms/div -instelling gebruik, is een skerm vol data 1 sekonde, maar omdat die dubbele hoeveelheid omskakelings gedoen word, neem dit 2 sekondes. Op die vinniger tydbasis -instellings sal u dit nie so baie agterkom nie.

TIM3 word gebruik om die tydsbasis te genereer. Dit aktiveer die ADC's met die snelheid soos vereis deur die geselekteerde tydsbasis -instelling. Die klok van TIM3 is 120MHz (sien OVERCLOCKING), die maksimum aantal waarop dit tel (ARR) bepaal hoe ander dit oorloop of in ST -taal dit opdateer. Via TRGO veroorsaak hierdie opdateringspulse die ADC's. Die laagste frekwensie wat dit genereer, is 160 Hz, die hoogste is 1,6 MHz.

Stap 7: ADC's en DMA

ADC's en DMA
ADC's en DMA

Die twee ADC's skakel die spanning op hul insette terselfdertyd om, hulle stoor die twee 12 -bits waardes in 'n enkele 32bit -veranderlike. Die DMA het dus slegs een veranderlike per (dubbele) omskakeling om oor te dra.

Om hierdie waardes te gebruik, is dit dus nodig om dit in die twee waardes te verdeel sodat dit gebruik kan word om die twee spore weer te gee. Soos gesê, kan ADC's in die F103 nie op ander resolusies as 12 bis ingestel word nie. Hulle is altyd in die 12 -bis -modus en daarom neem omskakelings altyd dieselfde aantal klokpulse. Tog, met die oorklok van die ADC's, kan 1,6 MSamples per sekonde gedoen word (sien Extra: Overclocking).

Die verwysing van die ADC's is Vdd, die 3.3V -spoor. Om dit na meer gerieflike waardes (per afdeling) om te skakel, het ek die waardes van die verswakkers bereken, omdat ek nie die presiese weerstandswaardes het wat uit die berekeninge kom nie, maar sommige korreksies word in sagteware gedoen.

In hierdie projek gebruik ek DMA in "gewone modus". In hierdie modus stop die DMA met die oordrag van data (van die ADC's na die geheue) as die aantal woorde (of halfwoorde of grepe) almal oorgedra word. In die ander moontlike modus, "sirkelvormige modus", herstel die DMA homself en gaan voort om data ononderbroke oor te dra. Dit werk nie met die F103 nie, dit is so vinnig dat dit die data in die adc_buffer oorskryf voordat die res van die program dit kan lees. Die proses is dus soos volg:

- stel DMA in op die aantal data wat oorgedra moet word en aktiveer DMA

- begin met die opwekking van die ADC's; dit sal DMA -oordragte versoek na elke (dubbele) omskakeling

- nadat die vasgestelde aantal omskakelings oorgedra is, stop DMA

- stop ook onmiddellik die ontsteking van die ADC's

- doen alle nodige manipulasie met die data in die geheue

- toon spore op die skerm

- begin die proses weer

Stap 8: Gebruikerskoppelvlak

Gebruikerskoppelvlak
Gebruikerskoppelvlak

'N 160 x 128 pixel skerm is nie baie groot nie en ek wil soveel moontlik daarvan gebruik. Daar is dus geen deel daarvan wat gereserveer is vir die strome -instellings nie. In die laaste paar rye word die vertikale sensitiwiteit, tydsbasis, snellervlak en snellerkanaal vertoon, maar as die seine groot genoeg is, sal dit in dieselfde gebied verskyn. Die opsie wat aktief is, word geel getoon, die res in wit.

Stap 9: Bou en moontlike verbeterings

Bou en moontlike verbeterings
Bou en moontlike verbeterings
Bou en moontlike verbeterings
Bou en moontlike verbeterings
Bou en moontlike verbeterings
Bou en moontlike verbeterings
Bou en moontlike verbeterings
Bou en moontlike verbeterings

Ek is baie bly oor hierdie projek. Dit werk goed en doen die werk, maar dit kan beter wees.

Die projekkas is te klein om alles gemaklik in te pas, wat beteken dat u komponente onder die Blue Pill moet plaas. Om dit moontlik te maak, kon die Blue Pill nie direk aan die 'hoofbord' gesoldeer word nie. En omdat dit alles te hoog gemaak het, moes ek baie dele van die Blue Pill verwyder, soos die springers om BOOT0 en BOOT1 te kies (dinge wat ek in elk geval nooit gebruik nie) en ek moes selfs die kristal van bo na onder skuif die pcb.

Ek het die lewe moeiliker gemaak deur piesangverbindings in plaas van BNC- of SMA-aansluitings te gebruik, dit het beteken dat 'n groot deel van die perfboard 'n 'no-go-area' was. om dele daarop te sit.

'N Ander probleem om alles in so 'n klein projektiek te plaas, is dat die analoog- en digitale stroombane baie na aan mekaar is. U kan sien dat daar baie geraas op albei spore sigbaar is. Dit het ek nie eers op die broodbord gehad nie! Deur die kraglyne vir analoog en digitale stroombane so ver uitmekaar as moontlik te plaas, is 'n klein verbetering aangebring, maar nie genoeg vir my smaak nie. Dit het nie gehelp om alle weerstandswaardes in die analoge stroombane nog verder te verminder as wat ek gedoen het nie (die insetweerstand is 100kOhm in plaas van 1MOhm). Ek vermoed dat die vinniger tydsbasis -instelling (20us/div), wat nie goed is nie, ook sal verbeter met minder geraas op die seine.

As u hierdie ontwerp op 'n 'regte' printplaat maak, met alle smd -dele en aparte lae vir analoog, digitaal en krag (dit is 4 lae!), Sal dit waarskynlik baie goed werk. Dit sal baie kleiner wees, dit sal nie 'n volledige Blue Pill gebruik nie, maar slegs die F103, en dit sal dit moontlik maak om 'n aparte (skoon) analoge Vdda vir die ADC's te voorsien.

As 'n laaste aanraking het ek besluit om die boks swart te spuit, dit verander van al die beige bokse wat dit bevat.

Stap 10: Die kode en 'n kort video

Stap 11: EKSTRA: Oorklok

EKSTRA: Oorklok
EKSTRA: Oorklok

Net soos ek met die F03 gedoen het, wou ek sien hoe goed 'n F103 oorgeklok kan word. Die spesifikasies vir hierdie mikrobeheerder beweer dat die maksimum kloksnelheid nie 72MHz moet oorskry nie (wat natuurlik al vinniger is as die F030), maar ek het in verskeie blogs gelees dat dit maklik was om te oorklok, so hoekom nie?

Die Blue Pill is voorsien van 'n 8MHz kristal, die PLL vermenigvuldig dit met 'n faktor van 9 tot 72MHz. Die PLL kan verhoog word tot 16 en gee 'n klok van 128MHz. Dit was glad nie 'n probleem vir my Blue Pill nie; eintlik werk al my Blue Pills sonder probleme op 128MHz.

Maar nou wou ek uitvind wat die werklike limiet is. Dus het ek die 8MHz -kristal verwyder en dit vervang met een van 12MHz. Ek het weer die PLL -vermenigvuldiger verhoog totdat die mikrobeheerder uiteindelik opgegee het. Dit was op 168MHz! Op 156MHz het dit steeds goed gewerk. Ek het dit ure lank teen daardie spoed laat loop en het dit nooit sien neerstort nie. In hierdie ossilloskoop het ek 120 MHz genader, 'n snelheid wat gekies kan word met 'n 12MHz kristal en PLL op 10, sowel as met 'n 8 MHz kristal en die PLL op 15. (sien SystemClock_Config in main.c)

Die ADC's werk nou ook vinniger; ek het hulle op 30MHz (in plaas van 14), hulle werk nog steeds goed op 60MHz, STMicroelectronics maak 'n paar goeie hardeware!

STMicroelectronics plaas hierdie perke met goeie rede in die datablad, dit waarborg dat die mikrobeheerder onder alle omstandighede op die gespesifiseerde 72MHz werk.

Maar aangesien ek nie die mikrobeheerder by -40 Celsius, +85 Celsius, op slegs 2,0 Volt of 3,6 Volt gebruik nie, dink ek dit is veilig om dit te oorklok. Moet dit NIE doen as u 'n toestel met hul mikrobeheerders wil verkoop nie; u weet nooit waar dit gebruik gaan word nie.

Aanbeveel: