Sisällysluettelo:

Dual Trace -oskilloskooppi: 11 vaihetta (kuvilla)
Dual Trace -oskilloskooppi: 11 vaihetta (kuvilla)

Video: Dual Trace -oskilloskooppi: 11 vaihetta (kuvilla)

Video: Dual Trace -oskilloskooppi: 11 vaihetta (kuvilla)
Video: Такие секреты уже все забыли, но их стоит знать! Полезные советы на все случаи жизни! 2024, Marraskuu
Anonim
Dual Trace -oskilloskooppi
Dual Trace -oskilloskooppi

Kun rakensin edellisen minioskilloskoopin, halusin nähdä, kuinka hyvin voisin saada pienimmän ARM -mikrokontrollerini STM32F030 (F030) -laitteeseen, ja se teki hienoa työtä.

Yhdessä kommentissa ehdotettiin, että "sininen pilleri", jossa on STM32F103 (F103), voisi olla parempi, pienempi kuin kehityskortti, jossa on F030, ja mahdollisesti jopa halvempi. Mutta minioskilloskooppia varten en käyttänyt kehityskorttia, vaan F030 vielä pienemmällä SMD-DIP-kortilla, joten sininen pilleri ei varmasti olisi pienempi ja epäilen, että se olisi myös halvempaa.

Koodi on nyt saatavilla Gitlabissa:

gitlab.com/WilkoL/dual-trace-oscilloscope

Tarvikkeet

Osaluettelo: - muovilaatikko - perfboard (kaksipuolinen prototyyppikortti 8x12 cm) - sininen pilleri - ST7735s TFT -näyttö - litium -ioniakku - HT7333 3,3 V: n matalan katkaisun säädin - MCP6L92 -kaksoiskaapeli - TSSOP8 - DIP8 -kortti - 12 MHz: n kide (ei välttämätön)) - pyörivä anturi ja nuppi (2x) - virtakytkin - banaaniliittimet (4x) - litiumionilatauslevy - useita vastuksia ja kondensaattoreita - nailonvälikkeet, mutterit ja ruuvit

Työkalut:

- juotosasema - juote 0,7 mm - johto - sivuleikkuri - lasit ja luuppi - pora - yleismittari - oskilloskooppi - STLink -V2

Ohjelmisto:

- STM32IDE - STM32CubeMX - STLink Utility - LowLayer -kirjasto - mukautettu kirjasto ST7735s -laitteille - Notepad ++ - Kicad

Vaihe 1: Lomitus- tai SI -samanaikainen tila

Lomitus- tai SI -samanaikainen tila
Lomitus- tai SI -samanaikainen tila
Lomitus- tai SI -samanaikainen tila
Lomitus- tai SI -samanaikainen tila

Sininen pilleri

Mutta idea oli olemassa, ja tiesin, että F103: ssa on kaksi ADC: tä! Mitä jos käyttäisin näitä kahta ADC: tä yhdessä "lomitus" -tilassa, mitä olen tehnyt aiemmin STM32F407: n (F407) kanssa. Näytteenottonopeus kaksinkertaistuu. Yhdistä se nopeampaan mikrokontrolleriin ja siitä tulee minioskilloskoopin suuri seuraaja.

Lomitustila F103: n ADC -laitteet ovat kummallisesti vähemmän kehittyneitä kuin F030 (ja F407), et voi valita tarkkuutta. Vielä tärkeämpää on, että et voi myöskään muuttaa kahden ADC: n välistä ajoitusta. Nyt kun käytät lomitustilaa, haluat yleensä näytteenoton mahdollisimman nopeasti ja mahdollisimman lyhyen ajan näytteiden välillä, mutta oskilloskoopilla ajoitusta on välttämätöntä muuttaa. Ehkä se vielä voidaan tehdä, en ole ammattimainen oskilloskooppisuunnittelija, mutta hylkäsin suunnitelman käyttää lomitustilaa.

Samanaikainen tila

Mutta kun kaksi ADC: tä tarjoaa paljon enemmän vaihtoehtoja, molemmat ADC: t voidaan asettaa myös "tavalliseen samanaikaiseen" tilaan. Entä kaksoiskappale-oskilloskooppi?

Päättäessäni tehdä kaksoisjuovaskilloskoopin halusin myös vaihtelevan tuloherkkyyden, jota minulla ei ollut mini -oskilloskoopissa. Tämä tarkoittaa tulojen vaimenninta (ja vahvistinta). Ja ehkä halusin vielä enemmän? Joten tein pienen luettelon "mukavista".

WISH LIST

kaksi kanavaa

herkkyys vaihtelee molemmilla kanavilla

käynnistyy molemmilla kanavilla

vaihteleva laukaisutaso molemmilla kanavilla

muuttuva offset

yhden akkuvirran

mahtuu samaan laatikkoon kuin minioskilloskooppi

Vaihe 2: Prototyyppien luominen

Prototyyppien luominen
Prototyyppien luominen
Prototyyppien luominen
Prototyyppien luominen

Kuten tavallista, aloitin nämä projektit leipälaudalla. (Katso kuva) Ja ennen kaiken juottamista esilevyllä yritän selvittää, mahtuuko ja miten se mahtuu valittuun projektilaatikkoon. Sopii, mutta vain. Jotkut osat ovat piilossa näytön alla, toiset sinisen pillerin alla. Ja jälleen, aivan kuten useimmat projektini, tämä on kertaluonteinen hanke, enkä suunnittele sille piirilevyä.

Vaihe 3: Vaimentimet

Vaimentimet
Vaimentimet

Tavallisissa oskilloskoopeissa tulovaimentimet ovat piirejä, jotka muuttavat vaimennusta ja vahvistusta kytkemällä sisään ja ulos vastukset pienillä signaalireleillä. Vaikka minulla on joitakin näistä releistä, tiedän, että ne eivät kytkeydy alle 4 voltin jännitteeseen, mikä tarkoittaa, että ne toimivat vain täyteen ladatulla litiumioniakulla (4,2 V). Joten tarvitsin toisen tavan vaihtaa nämä vastukset. Tietenkin voisin vain asentaa mekaanisia kytkimiä, mutta se ei varmasti enää sovi projektikoteloon, mielessä, ehkä voisin kokeilla parempaa digitaalista potentiometriä uudelleen (minulla on liian meluisa).

Sitten ajattelin "analogikytkimiä", joiden avulla voin tehdä digitaalisen potentiometrin itse. Osakokoelmastani löysin CD4066, jossa oli neljä analogista kytkintä. Ajatuksena on tehdä opamp -muuttujan takaisinkytkentävastus kytkemällä sisään- ja ulosvastukset rinnakkain palautusvastuksen kanssa.

Se toimii erittäin hyvin, mutta 4066: ssa vain 4 kytkintä ja 2 kanavaa ei voitu tehdä yli kolmea herkkyystasoa. Valitsin 500mV, 1V ja 2V jakoa kohden, koska eniten käytän jännitetasoja. Näyttö on jaettu 6 osaan, joten alueet ovat -1,5 - +1,5 V, -3 V - +3 V ja -6 V -6 V.

"Virtuaalimaalla" voit siirtää näitä alueita ylös ja alas, joten jopa 0v- +12V on mahdollista.

Vaihe 4: Virtual Ground

Virtual Ground
Virtual Ground
Virtual Ground
Virtual Ground

Koska oskilloskooppi käyttää yhtä virtajohtoa (3,3 V), opaamit tarvitsevat virtuaalisen maanpinnan, tai ne eivät toimi. Tämä virtuaalinen maanpinta on tehty PWM: llä yhdellä TIM4 -lähtökanavalla, ja sen käyttöjakso muuttuu vain muutamasta prosentista lähes sataan prosenttiin. Alipäästösuodatin, jossa on 1 k: n vastus ja 10 uF: n kondensaattori, muuntaa sen (lähes) 0 V: n (melkein) 3,3 V: n jännitteeksi. Neliöaallon taajuus on hieman alle 100 kHz, joten yksinkertainen alipäästösuodatin on riittävän hyvä.

Melko myöhään tämän oskilloskoopin rakentamisessa tajusin, että sinulla ei voi olla kahta erillistä siirtymää kanaville. Tämä johtuu siitä, että yhdellä virtalähteellä tulon maanpinnan on oltava erillään opamppien todellisesta maanpinnasta. Joten molemmat kanavat liikkuvat samalla tavalla kuin muutat GND-asetusta.

Vaihe 5: Kiertokooderit ja virheenkorjaus

Pyörivät kooderit ja virheenkorjaus
Pyörivät kooderit ja virheenkorjaus
Pyörivät kooderit ja virheenkorjaus
Pyörivät kooderit ja virheenkorjaus

Minioskilloskoopissa käytin vain yhtä kiertokooderia kaikkiin toimintoihin. Se tekisi kaksoisosilloskoopin käytön erittäin vaikeaksi, joten tarvitsen kaksi. Yksi enkooderi vaimentimille ja virtuaaliselle maanpinnalle ja toinen kooderi aikakannalle ja laukaisulle. Valitettavasti, aivan kuten toisessa projektissani, nämä pyörivät anturit ovat erittäin "meluisia". Ne ovat niin huonoja, että he eivät yksinkertaisesti toimisi ajastimien kanssa "kooderitilassa", joka on tavallinen tapa lukea ne. Minun piti tehdä laukaisumekanismi ajastimella TIM2, tarkistamalla anturit 100: n välein. Tämä ajastin puolestaan käynnistyy (vain), kun lähettimissä on toimintaa, tämä tarkistetaan tuloporttien EXTI -toiminnolla. Nyt anturit toimivat hyvin.

Ja kuten näette, näytön omistaminen voi myös olla erittäin kätevää virheenkorjaustietojen näyttämiseen.

Vaihe 6: Näyttö ja aikakanta

Näyttö ja aikakanta
Näyttö ja aikakanta

Näytön resoluutio on 160 x 128 pikseliä, joten yhtä näytettä varten tarvitaan 160 näytettä, onnistuin nopeuttamaan ADC: itä tekemään 1,6 miljoonaa näytettä sekunnissa ja että paljon ylikellotetulla mikrokontrollerilla (lisää siitä myöhemmin) Vähimmäisaikataulu on 20US / divisioona (100us / näyttö). Näin ollen 10 kHz: n aaltomuoto täyttää koko näytön.

Se on vain kaksi kertaa nopeampi kuin aiemmin tekemäni minioskilloskooppi. No, nyt se on kahdella kanavalla:-).

Kuten sanottu, näyttö on 160 pikseliä leveä, joten vain 160 arvoa tarvitaan näyttöä kohden. Mutta kaikki puskurit sisältävät itse asiassa 320 näytettä. Joten DMA tallentaa 320 arvoa ennen kuin se laukaisee lähetyksen täydellisen keskeytyksen (TC). Tämä johtuu siitä, että laukaisu tapahtuu ohjelmistossa. Näytteenotto alkaa satunnaisesta hetkestä, joten on erittäin epätodennäköistä, että puskurin ensimmäinen arvo on paikka, jossa liipaisupisteen pitäisi olla.

Siksi liipaisupiste löydetään lukemalla trace_x_buffer, jos arvo on halutulla liipaisuarvolla en jos edellinen arvo on juuri sen alapuolella, trigger_point löytyy. Tämä toimii melko hyvin, mutta tarvitset suuremman puskurin kuin todellinen näytön koko on.

Tämä on myös syy siihen, että alemman aikakannan asetusten virkistystaajuus on hitaampi kuin odotit. Kun käytät 200 ms/div -asetusta, yksi näyttö täynnä dataa on 1 sekunti, mutta koska tulos on kaksinkertainen, se kestää 2 sekuntia. Nopeammilla aikakannan asetuksilla et huomaa sitä niin paljon.

TIM3: a käytetään aikajanan luomiseen. Se laukaisee ADC: t valitulla aikakannalla asetetulla nopeudella. Sen TIM3 -kello on 120 MHz (katso OVERCLOCKING), enimmäismäärä, johon se laskee (ARR) määrittää, kuinka muut se ylittää tai ST -kielellä päivittää. TRGO: n kautta nämä päivityspulssit laukaisevat ADC: t. Alin sen tuottama taajuus on 160 Hz, korkein 1,6 MHz.

Vaihe 7: ADC ja DMA

ADC ja DMA
ADC ja DMA

Kaksi ADC: tä muuntavat tulojensa jännitteen samanaikaisesti ja tallentavat nämä kaksi 12 -bittistä arvoa yhteen 32 -bittiseen muuttujaan. Joten DMA: lla on vain yksi muuttuja siirrettävää (kaksinkertaista) muunnosta kohden.

Näiden arvojen käyttämiseksi ne on siksi jaettava kahteen arvoon, jotta niitä voidaan käyttää kahden jäljen näyttämiseen. Kuten sanottu, F103: n ADC: itä ei voi asettaa muulle kuin 12 bitin resoluutiolle. Ne ovat aina 12 -bittisessä tilassa, joten muunnokset vievät aina saman määrän kellopulsseja. Silti ADC: iden ylikellotuksella voidaan tehdä 1,6 MS -näytettä sekunnissa (katso Extra: Ylikellotus).

ADC -laitteiden viite on Vdd, 3.3V -kisko. Muuntaakseni sen kätevämmiksi arvoiksi (jakoa kohden) olen laskenut vaimenninten arvot, koska minulla ei ole tarkkoja vastusarvoja, jotka tulevat näistä laskelmista, jotkin korjaukset tehdään ohjelmistolla.

Tässä projektissa käytän DMA: ta "tavallisessa tilassa". Tässä tilassa DMA lopettaa tiedonsiirron (de ADC -muistista muistiin), kun sanojen (tai puolisanojen tai tavujen) määrä siirretään. Toisessa mahdollisessa tilassa "pyöreä tila" DMA nollaa itsensä ja jatkaa tiedonsiirtoa keskeytyksettä. Se ei toiminut F103: n kanssa, se on niin nopea, että se korvaa adc_buffer : n tiedot ennen kuin muu ohjelma pystyy lukemaan sen. Joten nyt prosessi on seuraava:

- määritä DMA siirrettävän datan määrään ja ota DMA käyttöön

- aloita ADC: n laukaisu, nämä pyytävät DMA -siirtoja jokaisen (kaksinkertaisen) muunnoksen jälkeen

- kun asetettu määrä muunnoksia on siirretty, DMA pysähtyy

- lopeta välittömästi myös ADC: n laukaisu

- tee kaikki tarvittavat manipuloinnit muistissa oleviin tietoihin

- näyttää jälkiä näytöllä

- aloita prosessi uudelleen

Vaihe 8: Käyttöliittymä

Käyttöliittymä
Käyttöliittymä

160 x 128 pikselin näyttö ei ole kovin suuri, ja haluan käyttää siitä mahdollisimman paljon. Joten sitä ei ole varattu virta -asetuksille. Viimeisillä riveillä näytetään pystysuora herkkyys, aikakanta, liipaisutaso ja laukaisukanava, mutta kun signaalit ovat riittävän suuria, ne näkyvät samalla alueella. Aktiivinen vaihtoehto näkyy keltaisena, loput valkoisena.

Vaihe 9: Rakentaminen ja mahdolliset parannukset

Rakentaminen ja mahdolliset parannukset
Rakentaminen ja mahdolliset parannukset
Rakentaminen ja mahdolliset parannukset
Rakentaminen ja mahdolliset parannukset
Rakentaminen ja mahdolliset parannukset
Rakentaminen ja mahdolliset parannukset
Rakentaminen ja mahdolliset parannukset
Rakentaminen ja mahdolliset parannukset

Olen aika iloinen tästä projektista. Se toimii hyvin ja tekee työnsä, mutta se voisi olla parempi.

Projektilaatikko on liian pieni, jotta se mahtuu mukavasti paikalleen, minkä vuoksi komponentit on asetettava sinisen pillerin alle. Tämän mahdollistamiseksi sinistä pilleriä ei voitu juottaa suoraan "emolevyyn". Ja koska tämä teki siitä liian korkean, jouduin poistamaan monia osia Blue Pillistä, kuten puserot BOOT0: n ja BOOT1: n valitsemiseksi (asioita, joita en koskaan käytä), ja minun oli jopa siirrettävä kristalli ylhäältä alas piirilevy.

Tein elämästä vaikeampaa käyttämällä banaaniliittimiä BNC- tai SMA-liittimien sijasta, mikä tarkoitti sitä, että suuri osa perfboardista oli "no-go-area", jotta selvennän sitä itselleni laittamalla sen päälle kaptoninauhaa estääkseni itseni laittamasta siihen osia.

Toinen ongelma sen asettamisessa niin pieneen projektilaatikkoon on, että analogiset ja digitaaliset piirit ovat hyvin lähellä toisiaan. Näet, että molemmissa jälkissä on melko paljon melua. Tätä minulla ei ollut edes leipälaudalla! Siirtämällä analogisten ja digitaalisten piirien voimalinjoja mahdollisimman kauas toisistaan, saatiin pieni parannus, mutta se ei riittänyt minun makuuni. Kaikkien analogisten piirien vastusarvojen vähentäminen jopa pidemmälle kuin minä (tulovastus on 100 kOhm 1MOhm: n sijasta) ei auttanut. Epäilen, että nopeimman aikakannan asetuksen (20us/div) käynnistäminen, joka ei ole hienoa, paranee myös, kun signaaleissa on vähemmän kohinaa.

Jos teet tämän mallin "oikealle" piirilevylle, jossa on kaikki smd -osat ja erilliset kerrokset analogisille, digitaalisille ja virtalähteille (se on 4 kerrosta), se todennäköisesti toimii erittäin hyvin. Se on paljon pienempi, se ei käytä täydellistä sinistä pilleriä, vaan vain F103: a, ja se mahdollistaa sen toimittamisen erilliselle (puhtaalle) analogiselle Vdda: lle ADC -laitteille.

Viimeisenä kosketuksena päätin suihkuttaa laatikon mustaksi, se muuttaa kaikkia beigejä laatikoita.

Vaihe 10: Koodi ja lyhyt video

Vaihe 11: LISÄ: Ylikellotus

LISÄ: Ylikellotus
LISÄ: Ylikellotus

Aivan kuten tein F03: n kanssa, halusin nähdä, kuinka hyvin F103 voidaan ylikellottaa. Tämän mikro -ohjaimen tekniset tiedot väittävät, että suurin kellotaajuus ei saa ylittää 72 MHz (mikä tietysti on jo nopeampaa kuin F030), mutta olin lukenut useista blogeista, että ylikellotus oli helppoa, joten miksi ei?

Sininen pilleri on varustettu 8 MHz: n kiteellä, PLL kertoo sen kertoimella 9 - 72 MHz. PLL voidaan nostaa 16: een, jolloin kello on 128 MHz. Se ei ollut ongelma siniselle pillereilleni, itse asiassa kaikki siniset pillerit toimivat ilman ongelmia 128 MHz: llä.

Mutta nyt halusin selvittää, mikä on todellinen raja. Joten poistin 8 MHz: n kiteen ja korvasin sen jollakin 12 MHz: n taajuudella. Taas lisäsin PLL -kerrointa, kunnes mikro lopulta luovutti. Se oli 168 MHz: llä! 156 MHz: llä se toimi edelleen hyvin. Jätin sen pyörimään tällä nopeudella tuntikausia enkä koskaan nähnyt sen kaatuvan. Tässä oskilloskoopissa asetin 120 MHz: n nopeuden, joka voidaan valita 12 MHz: n kiteellä ja PLL 10: llä sekä 8 MHz: n kiteellä ja PLL 15.: llä (katso SystemClock_Config in main.c)

ADC: t toimivat nyt myös nopeammin, minulla on ne 30 MHz (14 sijasta), ne toimivat edelleen hyvin 60 MHz: llä, STMicroelectronics tekee hienoja laitteita!

STMicroelectronics asettaa nämä rajat tietolomakkeeseen hyvästä syystä, ja ne takaavat, että mikrokontrolleri toimii määritetyllä 72 MHz: n taajuudella kaikissa olosuhteissa.

Mutta koska en käytä mikro -ohjainta -40 celsiusasteessa, +85 celsiusasteessa vain 2,0 tai 3,6 voltin jännitteellä, mielestäni on turvallista ylikellottaa sitä. ÄLÄ tee tätä, kun aiot myydä laitteen mikrokontrollereineen, et koskaan tiedä missä niitä käytetään.

Suositeltava: