Sisukord:

Kahe jäljega ostsilloskoop: 11 sammu (piltidega)
Kahe jäljega ostsilloskoop: 11 sammu (piltidega)

Video: Kahe jäljega ostsilloskoop: 11 sammu (piltidega)

Video: Kahe jäljega ostsilloskoop: 11 sammu (piltidega)
Video: ОПЯТЬ НАКОСЯЧИЛИ! 👉 Из болгарки ПОТЁК ПЛАСТИК! Никогда не делай такое с инструментом! МВ 127 2024, Juuli
Anonim
Kahe jäljega ostsilloskoop
Kahe jäljega ostsilloskoop

Kui ma ehitasin oma eelmist miniostsilloskoopi, tahtsin näha, kui hästi suudan oma väikseima ARM -mikrokontrolleri STM32F030 (F030) täita ja see tegi head tööd.

Ühes kommentaaris pakuti välja, et "sinine pill" koos STM32F103 (F103) võib olla parem, väiksem kui arendusplaat koos F030 -ga ja võib -olla isegi odavam. Kuid miniostsilloskoobi jaoks ei kasutanud ma arendusplaati, vaid F030 veelgi väiksema SMD-DIP-plaadi peal, nii et sinine pill ei oleks kindlasti väiksem ja ma kahtlen, et see oleks ka odavam.

Kood on nüüd saadaval Gitlabis:

gitlab.com/WilkoL/dual-trace-oscilloscope

Tarvikud

Osade loetelu: - plastkarp - perfboard (kahepoolne prototüüpplaat 8x12 cm) - sinine pill - ST7735s TFT -ekraan - liitium -ioonaku - HT7333 3,3 V madala väljalangemise regulaator - MCP6L92 topeltopamp - TSSOP8 kuni DIP8 plaat - 12 MHz kristall (pole vajalik)) - pöörlev kooder pluss nupp (2x) - toitelüliti - banaaniklemmid (4x) - liitium -ioon laadimisplaat - mitmed takistid ja kondensaatorid - nailonist vaheseinad, mutrid ja kruvid

Tööriistad:

- jootmisjaam - joodis 0,7 mm - mõni traat - külgmine lõikur - prillid ja luup - puur - multimeeter - ostsilloskoop - STLink -V2

Tarkvara:

- STM32IDE - STM32CubeMX - STLink Utility - LowLayer raamatukogu - kohandatud raamatukogu ST7735 -de jaoks - Notepad ++ - Kicad

Samm: interleave või SI samaaegne režiim

Interleave või SI samaaegne režiim
Interleave või SI samaaegne režiim
Interleave või SI samaaegne režiim
Interleave või SI samaaegne režiim

Sinine pill

Kuid idee oli olemas ja ma teadsin, et F103 -l on kaks ADC -d! Mis siis, kui ma kasutaksin neid kahte ADC -d koos "interleave" režiimis, mida olen varem teinud STM32F407 (F407) puhul. Proovivõtu kiirus kahekordistuks. Kombineerige see kiirema mikrokontrolleriga ja see oleks miniostsilloskoobi suurepärane järeltulija.

Interleave režiim Kummalisel kombel on F103 ADC -d vähem arenenud kui F030 (ja F407) omad, te ei saa eraldusvõimet valida. Veelgi olulisem on see, et te ei saa ka kahe ADC vahelist ajastust muuta. Nüüd, kui kasutate põimimisrežiimi, soovite tavaliselt proovide võtmist võimalikult kiiresti ja võimalikult lühikese ajaga proovide vahel, kuid ostsilloskoobi korral on vaja ajastust muuta. Võib-olla saab seda siiski teha, ma pole professionaalne ostsilloskoobi disainer, kuid loobusin plaanist kasutada interleave-režiimi.

Samaaegne režiim

Kuid kuna kaks ADC-d annavad palju rohkem võimalusi, saab need kaks ADC-d seadistada ka tavalisele samaaegsele režiimile. Kuidas oleks kahekordse jälg-ostsilloskoobiga?

Olles otsustanud proovida kahe jäljega ostsilloskoopi, tahtsin ma ka muuta sisenditundlikkust - seda võimalust miniostsilloskoopil polnud. See tähendab sisenditel summutit (ja võimendit). Ja võib -olla tahtsin veel rohkem? Seega tegin väikese nimekirja "toredatest".

SOOVIDE LOETELU

kaks kanalit

muutuv tundlikkus mõlemal kanalil

käivitatakse mõlemal kanalil

muutuv käivitusaste mõlemal kanalil

muutuv nihe

ühe aku toide

mahub miniostsilloskoobiga samasse kasti

2. etapp: prototüüpimine

Prototüüpimine
Prototüüpimine
Prototüüpimine
Prototüüpimine

Nagu tavaliselt, alustasin neid projekte leivaplaadil. (Vaata pilti) Ja enne parfüüril oleva kõike jootmist proovin välja selgitada, kas ja kuidas see valitud projekti kasti mahub. See sobib, kuid ainult. Mõned osad on peidetud ekraani alla, teised sinise pilli alla. Ja jällegi, nagu enamiku minu projektide puhul, on see ka ühekordne projekt ja ma ei kavanda selle jaoks trükkplaati.

3. samm: summutid

Nõrgendid
Nõrgendid

Tavalistes ostsilloskoopides on sisend summutajad ahelad, mis muudavad sumbumist ja võimendust, lülitades sisse ja välja takistid väikeste signaalreleedega. Kuigi mul on mõned neist releedest, tean, et need ei lülitu alla 4 volti, see tähendab, et need töötavad ainult täislaetud liitiumioonaku (4,2 V) korral. Nii et mul oli vaja teist viisi nende takistite vahetamiseks. Muidugi võiksin mehaanilisi lüliteid lihtsalt paigaldada, kuid see ei sobiks kindlasti enam projekti kasti, pidades silmas, võib -olla võiksin proovida uuesti paremat digitaalset potentsiomeetrit (see, mis mul on, on liiga mürarikas).

Siis mõtlesin "analooglülititele", nendega saan ise digitaalse potentsiomeetri teha. Oma varuosast leidsin CD4066 nelja analooglülitiga. Idee on muuta opamp -tagasiside takisti muutuvaks, lülitades sisse ja välja takistid paralleelselt tagasiside takistiga.

See töötab väga hästi, kuid 4066 -s vaid 4 lülitit ja 2 kanalit ei olnud võimalik teha rohkem kui kolme tundlikkuse taset. Valisin 500mV, 1V ja 2V jao kohta, kuna need on pingetasemed, mida ma kõige rohkem kasutan. Ekraan on jagatud kuueks jaotuseks, nii et vahemikud on -1,5 kuni +1,5 V, -3 V kuni +3 V ja -6 V kuni 6 V.

Virtuaalse maa abil saate neid vahemikke üles ja alla liigutada, nii et isegi 0–12 V on võimalik.

4. samm: virtuaalne maapind

Virtuaalne väljak
Virtuaalne väljak
Virtuaalne väljak
Virtuaalne väljak

Kuna ostsilloskoop kasutab ühte toitekaablit (3,3 V), vajavad opampsid virtuaalset maapinda, muidu need ei tööta. See virtuaalne maapind on tehtud PWM -iga ühel TIM4 väljundkanalil, selle töötsükkel muutub vaid mõnelt protsendilt peaaegu saja protsendini. 1k takisti ja 10uF kondensaatoriga madalpääsfilter muudab selle pingeks (peaaegu) 0V kuni (peaaegu) 3,3V. Ruutlaine sagedus on veidi alla 100 kHz, seega on lihtne madalpääsfilter piisavalt hea.

Selle ostsilloskoobi ehitamisel mõistsin üsna hilja, et kanalite jaoks ei saa olla kahte eraldi nihet. Selle põhjuseks on asjaolu, et ühe toiteallikaga peab maapealne sisend olema eraldatud opampide tegelikust maapinnast. Nii et mõlemad kanalid liiguvad samal viisil, kui muudate GND-seadistust.

5. samm: pöörlevad kodeerijad ja silumine

Pöörlevad kodeerijad ja silumine
Pöörlevad kodeerijad ja silumine
Pöörlevad kodeerijad ja silumine
Pöörlevad kodeerijad ja silumine

Miniostsilloskoobis kasutasin kõikide funktsioonide jaoks ainult ühte pöörlevat kodeerijat. See muudaks topeltostsilloskoobi kasutamise väga keeruliseks, nii et siin on mul vaja kahte. Üks kodeerija summutite ja virtuaalse maapinna jaoks ning teine ajabaasi ja käivitamise kodeerija. Kahjuks, nagu ka minu teises projektis, on need pöörlevad kodeerijad väga "mürarikkad". Need on nii halvad, et nad lihtsalt ei töötaks taimeritega "kodeerimisrežiimis", mis on nende standardne lugemisviis. Pidin tegema taimeriga TIM2 väljalülitusmehhanismi, kontrollides kodeerijaid iga 100us. See taimer käivitatakse (ainult) siis, kui kodeerijatel on mõni tegevus, seda kontrollitakse sisendportide EXTI funktsionaalsusega. Nüüd töötavad kodeerijad hästi.

Ja nagu näete, võib ekraani omamine olla ka silumisandmete kuvamiseks väga mugav.

6. samm: kuva ja ajabaas

Ekraan ja ajabaas
Ekraan ja ajabaas

Ekraani eraldusvõime on 160 x 128 pikslit, nii et ühe ekraanitäie jaoks on vaja 160 proovi, mul õnnestus kiirendada ADC -sid, et teha 1,6 miljonit proovi sekundis ja see annab palju kiirendatud mikrokontrolleri abil (sellest lähemalt hiljem) minimaalne ajabaas 20us jao kohta (100us ekraani kohta). Seega 10kHz lainekuju täidab kogu ekraani.

See on vaid kaks korda kiirem kui varem tehtud miniostsilloskoop. Ahjaa, nüüd on see kahe kanaliga:-).

Nagu öeldud, on ekraan 160 pikslit lai, nii et ekraani kohta on vaja ainult 160 väärtust. Kuid kõik puhvrid sisaldavad tegelikult 320 proovi. Seega salvestab DMA 320 väärtust, enne kui käivitab täieliku edastamise katkestuse (TC). Seda seetõttu, et käivitamine toimub tarkvaras. Proovide võtmine algab juhuslikul hetkel, seega on väga ebatõenäoline, et puhvri esimene väärtus on koht, kus peaks olema käivituspunkt.

Seetõttu leitakse käivituspunkt, lugedes läbi jälg_x_buffer, kui väärtus on soovitud käivitusväärtusel en, kui eelmine väärtus on sellest veidi allpool, leitakse käivituspunkt. See töötab üsna hästi, kuid teil on vaja suuremat puhvrit kui tegelik ekraani suurus.

See on ka põhjus, miks madalamate ajabaasi seadete värskendussagedus on oodatust aeglasem. Kui kasutate seadistust 200 ms/div, on üks ekraanitäis andmeid 1 sekund, kuid kuna konversioone tehakse kahekordselt, võtab see aega 2 sekundit. Kiirema ajabaasi seadete korral ei märka te seda nii palju.

Ajabaasi loomiseks kasutatakse TIM3. See käivitab ADC -d valitud ajabaasi sättega nõutava kiirusega. Selle TIM3 kell on 120 MHz (vt OVERCLOCKING), maksimaalne arv, milleni see loeb (ARR) määrab, kuidas see üle voolab või ST keeles värskendab. TRGO kaudu käivitavad need värskendusimpulsid ADC -d. Madalaim sagedus on 160 Hz, kõrgeim 1,6 MHz.

Samm: ADC -d ja DMA

ADC ja DMA
ADC ja DMA

Kaks ADC -d teisendavad sisendite pinget korraga, salvestavad need kaks 12 -bitist väärtust ühte 32 -bitisse muutujale. Seega on DMA -l ülekandmiseks ainult üks muutuja (kahekordse) konversiooni kohta.

Nende väärtuste kasutamiseks on vaja need jagada kaheks väärtuseks, et neid saaks kasutada kahe jälje kuvamiseks. Nagu öeldud, ei saa F103 ADC -sid seadistada muule eraldusvõimele kui 12 bitti. Need on alati 12 -bitises režiimis ja seega võtab konversioon alati sama arvu kellaimpulsse. Sellegipoolest saab ADC -de kiirendamisega teha 1,6 MS -proovi sekundis (vt Lisa: Kiirendamine).

ADC -de viide on Vdd, 3,3 V rööp. Selle teisendamiseks mugavamateks väärtusteks (jaotuse kohta) olen arvutanud summutite väärtused, kuna mul pole nende arvutuste põhjal täpset takisti väärtust, mõned parandused tehakse tarkvaras.

Selles projektis kasutan DMA-d "tavarežiimis". Selles režiimis lõpetab DMA andmete edastamise (de ADC-st mällu), kui kõik sõnad (või poolsõnad või baidid) on üle kantud. Teises võimalikus režiimis "ringrežiimis" lähtestab DMA ennast ja jätkab andmete edastamist katkematult. See ei töötanud F103 -ga, see on nii kiire, et kirjutab andmed adc_bufferis üle, enne kui ülejäänud programm seda lugeda saab. Nii et nüüd on protsess järgmine:

- seadistage DMA ülekantavate andmete arvule ja lubage DMA

- käivitage ADC -de käivitamine, need taotlevad DMA -ülekandeid pärast iga (kahekordset) konversiooni

- pärast määratud arvu konversioonide ülekandmist DMA peatub

- lõpetage kohe ka ADC -de käivitamine

- tehke kõik mälus olevate andmetega manipuleerimine

- näita jälgi ekraanil

- alustage protsessi uuesti

8. samm: kasutajaliides

Kasutajaliides
Kasutajaliides

160 x 128 piksline ekraan ei ole väga suur ja ma tahan seda võimalikult palju kasutada. Seega pole selle osa reserveeritud vooluseadetele. Viimastel ridadel kuvatakse vertikaalne tundlikkus, ajabaas, päästiku tase ja käivituskanal, kuid kui signaalid on piisavalt suured, kuvatakse need samas piirkonnas. Aktiivne valik on näidatud kollaselt, ülejäänud on näidatud valgega.

9. samm: ehitamine ja võimalikud parandused

Ehitus ja võimalikud parandused
Ehitus ja võimalikud parandused
Ehitus ja võimalikud parandused
Ehitus ja võimalikud parandused
Ehitus ja võimalikud parandused
Ehitus ja võimalikud parandused
Ehitus ja võimalikud parandused
Ehitus ja võimalikud parandused

Mul on selle projekti üle päris hea meel. See töötab hästi ja teeb tööd, kuid see võiks olla parem.

Projektikarp on liiga väike, et kõike mugavalt ära mahutada, mistõttu tuleb komponendid sinise pilli alla panna. Et see oleks võimalik, ei saanud sinist pilli otse "emaplaadile" joota. Ja kuna see muutis selle liiga kõrgeks, pidin Blue Pillilt eemaldama paljud osad, näiteks džemprid BOOT0 ja BOOT1 valimiseks (asjad, mida ma kunagi ei kasuta) ja pidin isegi kristalli ülevalt alla viima. trükkplaat.

Tegin elu keerulisemaks, kui kasutasin BNC- või SMA-pistikute asemel banaaniliitmikke, see tähendas, et suur osa parvlauast oli „keelatud ala“, enda jaoks selgeks tegemiseks panin selle peale kaptonlindi, et ennast vältida osade peale panemisest.

Veel üks probleem selle väikese projekti kasti paigutamisega on see, et analoog- ja digitaalskeemid on väga lähedal. Näete, et mõlemal jäljel on näha üsna palju müra. Seda polnud mul isegi leivalaual! Nihutades analoog- ja digitaalahelate elektriliinid üksteisest võimalikult kaugele, tehti väike parandus, kuid see ei olnud minu jaoks piisav. Kõigi takistusväärtuste vähendamine analoogskeemides isegi rohkem kui mina (sisendtakistus on 1 kOhm asemel 100 kOhm) ei aidanud. Ma kahtlustan, et kiireima ajabaasi seadistuse (20us/div) käivitamine, mis pole suurepärane, paraneb ka signaalide väiksema müraga.

Kui teete selle disaini "tõelisel" PCB -l, kus on kõik smd -osad ja eraldi kihid analoog-, digitaal- ja toiteallika jaoks (see on 4 kihti!), Töötab see tõenäoliselt väga hästi. See on palju väiksem, see ei kasuta täielikku sinist pilli, vaid ainult F103 ja see võimaldab tarnida sellele ADC -de jaoks eraldi (puhta) analoogi Vdda.

Viimase lihvena otsustasin karbi mustaks pihustada, see muudab kõikide beežide kastide seisu.

10. samm: kood ja lühivideo

Samm 11: LISAD: Kiirendamine

LISA: Kiirendamine
LISA: Kiirendamine

Nii nagu tegin F03 puhul, tahtsin näha, kui hästi saab F103 kiirendada. Selle mikrokontrolleri spetsifikatsioonid väidavad, et maksimaalne taktsagedus ei tohiks ületada 72 MHz (mis on muidugi juba kiirem kui F030), kuid olin lugenud mitmest ajaveebist, et selle kiirendamine oli lihtne, miks mitte?

Blue Pill on varustatud 8MHz kristalliga, PLL korrutab selle teguriga 9 kuni 72MHz. PLL -i saab suurendada kuni 16, andes kella 128 MHz. See ei olnud minu sinise pilli jaoks üldse probleem, tegelikult töötavad kõik minu sinised pillid 128 MHz sageduseta.

Nüüd aga tahtsin teada saada, mis on tegelik piir. Nii et ma eemaldasin 8MHz kristalli ja asendasin selle ühega 12MHz. Jälle suurendasin PLL kordajat, kuni mikrokontroller lõpuks alla andis. See oli 168MHz! 156 MHz sagedusel töötas see endiselt hästi. Jätsin selle sellise kiirusega tundideks tööle ja ei näinud kordagi, et see kokku jookseb. Selles ostsilloskoobis leppisin 120MHz -ga, kiirusega, mida saab valida 12MHz kristalliga ja PLL -ga 10 -l, samuti 8 MHz kristalliga ja PLL -ga 15. (vt SystemClock_Config in main.c)

ADC -d töötavad nüüd ka kiiremini, mul töötavad need sagedusel 30 MHz (14 asemel), nad töötasid endiselt hästi 60 MHz sagedusel, STMicroelectronics teeb mõnusa riistvara!

STMicroelectronics paneb need piirid mõjuval põhjusel andmelehele, need garanteerivad, et mikrokontroller töötab kõikidel tingimustel määratud sagedusel 72 MHz.

Kuid kuna ma ei kasuta mikrokontrollerit temperatuuril -40 ° C, +85 ° C, ainult 2,0 või 3,6 volti, siis on minu arvates ohutu seda üle kiirustada. ÄRGE tehke seda, kui kavatsete seadme koos nende mikrokontrolleritega müüa, ei tea kunagi, kus neid kasutatakse.

Soovitan: