Obsah:

Dvojitý trasovací osciloskop: 11 krokov (s obrázkami)
Dvojitý trasovací osciloskop: 11 krokov (s obrázkami)

Video: Dvojitý trasovací osciloskop: 11 krokov (s obrázkami)

Video: Dvojitý trasovací osciloskop: 11 krokov (s obrázkami)
Video: Dronelink 04 - Spirála ( stoupající dvojitý kruh ) nastavení přímo v terénu, DJI Mavic Mini 2024, Júl
Anonim
Dvojitý trasovací osciloskop
Dvojitý trasovací osciloskop

Keď som zostrojil svoj predchádzajúci mini osciloskop, chcel som vidieť, ako dobre dokážem dosiahnuť výkon svojho najmenšieho mikrokontroléra ARM typu STM32F030 (F030), a odviedol dobrú prácu.

V jednom z komentárov bolo navrhnuté, že „modrá pilulka“so STM32F103 (F103) môže byť lepšia, menšia ako vývojová doska s F030 a možno aj lacnejšia. Ale pre mini osciloskop som nepoužil vývojovú dosku, ale F030 na ešte menšej doske SMD-DIP, takže modrá pilulka by určite nebola menšia a pochybujem, že by bola aj lacnejšia.

Kód je teraz k dispozícii na Gitlab:

gitlab.com/WilkoL/dual-trace-oscilloscope

Zásoby

Zoznam dielov: - plastový box - perfboard (obojstranná prototypová doska 8x12cm) - Blue Pill - ST7735s TFT displej - lítium -iónová batéria - HT7333 3,3V regulátor nízkeho výpadku - duálny operačný zosilňovač MCP6L92 - doska TSSOP8 až DIP8 - kryštál 12 MHz (nie je potrebné) - otočný snímač plus gombík (2x) - vypínač - banánové svorky (4x) - lítium -iónová nabíjacia doska - niekoľko rezistorov a kondenzátorov - nylonové rozpery, matice a skrutky

Náradie:

- spájkovacia stanica - spájka 0,7 mm - nejaký drôt - bočná fréza - okuliare a lupa - vŕtačka - multimetr - osciloskop - STLink -V2

Softvér:

- STM32IDE - STM32CubeMX - STLink Utility - Knižnica LowLayer - prispôsobená knižnica pre ST7735s - Poznámkový blok ++ - Kicad

Krok 1: Režim prekladania alebo súbežný režim

Režim prekladania alebo súbežný režim
Režim prekladania alebo súbežný režim
Režim prekladania alebo súbežný režim
Režim prekladania alebo súbežný režim

Modrá pilulka

Ale myšlienka tu bola a ja som vedel, že F103 má dva ADC! Čo keby som tieto dva ADC použil spoločne v režime „prekladania“, čo som už predtým robil s modelom STM32F407 (F407). Rýchlosť vzorkovania sa zdvojnásobí. Skombinujte to s rýchlejším mikrokontrolérom a bude skvelým nástupcom mini osciloskopu.

Režim prekladania Je zvláštne, že ADC vo F103 sú menej pokročilé ako v F030 (a F407), nemôžete zvoliť rozlíšenie. Dôležitejšie je, že tiež nemôžete meniť načasovanie medzi dvoma ADC. Keď teraz používate režim prekladania, zvyčajne chcete, aby vzorkovanie bolo čo najrýchlejšie s najkratším časom medzi akýmikoľvek vzorkami, ale pomocou osciloskopu je potrebné zmeniť načasovanie. Možno sa to ešte dá urobiť, nie som profesionálny konštruktér osciloskopu, ale zrušil som plán používať režim prekladania.

Simultánny režim

Ale keď máte dva ADC, ponúka oveľa viac možností, tieto dva ADC je možné nastaviť aj na režim „bežného simultánneho“. Čo hovoríte na duálny stopový osciloskop?

Keď som sa rozhodol skúsiť vytvoriť dvojitý trasovací osciloskop, chcel som mať aj variabilnú vstupnú citlivosť, čo som na mini osciloskope nemal. To znamená útlm (a zosilňovač) na vstupoch. A možno som chcel ešte viac? Preto som urobil malý zoznam „nice-to-haves“.

Zoznam želaní

dva kanály

variabilná citlivosť na oboch kanáloch

spustenie na oboch kanáloch

variabilná úroveň spustenia na oboch kanáloch

variabilný ofset

napájanie jednou batériou

zmestí sa do rovnakého boxu ako mini-osciloskop

Krok 2: Prototypovanie

Prototypovanie
Prototypovanie
Prototypovanie
Prototypovanie

Ako obvykle som začal s týmito projektmi na doske. (Pozri obrázok) A pred spájkovaním všetkého na doske sa snažím zistiť, či a ako sa zmestí do zvoleného boxu projektu. Hodí sa, ale iba tak. Niektoré časti sú skryté pod obrazovkou, iné pod Modrou tabletkou. A opäť, rovnako ako pre väčšinu mojich projektov, je to projekt len raz a nebudem preň navrhovať DPS.

Krok 3: Tlmiče

Tlmiče
Tlmiče

V bežných osciloskopoch sú vstupnými zoslabovačmi obvody, ktoré menia útlm a zosilnenie prepínaním vstupných a výstupných rezistorov s malými signálnymi relé. Aj keď mám niektoré z týchto relé, viem, že sa nezapínajú na menej ako 4 V, to znamená, že budú fungovať iba s plne nabitou lítium -iónovou batériou (4,2 V). Potreboval som teda iný spôsob, ako prepnúť tieto odpory. Samozrejme som mohol nainštalovať iba mechanické prepínače, ale to by sa už určite nehodilo do krabice projektu, na ktorú som myslel, možno by som mohol skúsiť znova lepší digitálny potenciometer (ten, ktorý mám, je príliš hlučný).

Potom ma napadlo „analógové prepínače“, pomocou ktorých si môžem vyrobiť digitálny potenciometer sám. V mojej zbierke náhradných dielov som našiel CD4066 so štyrmi analógovými prepínačmi. Cieľom je vytvoriť spätnoväzbový odpor premennej opamp prepínaním vstupných a výstupných odporov rovnobežne so spätnoväzbovým odporom.

Funguje to veľmi dobre, ale iba 4 prepínače v 4066 a 2 kanály nedokázali vytvoriť viac ako tri úrovne citlivosti. Vybral som 500 mV, 1 V a 2 V na divíziu, pretože to sú úrovne napätia, ktoré používam najčastejšie. Obrazovka je rozdelená do 6 divízií, takže je možné použiť rozsahy –1,5 V až +1,5 V, –3 V až +3 V a –6 V až 6 V.

Vďaka „virtuálnej zemi“môžete tieto rozsahy posúvať hore a dole, takže je možné dokonca aj 0v až +12V.

Krok 4: Virtuálna pôda

Virtuálne ihrisko
Virtuálne ihrisko
Virtuálne ihrisko
Virtuálne ihrisko

Pretože osciloskop používa jednu napájaciu lištu (3,3 V), opampy potrebujú virtuálnu úroveň zeme, inak nebudú fungovať. Táto virtuálna úroveň zeme je vyrobená s PWM na jednom výstupnom kanáli TIM4, jeho pracovný cyklus sa mení z niekoľkých percent na takmer sto percent. Nízkopriepustný filter s odporom 1k a kondenzátorom 10uF to transformuje na napätie (takmer) 0V až (takmer) 3,3V. Frekvencia štvorcovej vlny je tesne pod 100 kHz, takže jednoduchý dolnopriepustný filter je dosť dobrý.

Skoro neskoro pri stavbe tohto osciloskopu som si uvedomil, že pre kanály nemôžete mať dve oddelené kompenzácie. Dôvodom je skutočnosť, že s jediným zdrojom napájania musí byť vstupná úroveň zeme oddelená od skutočnej úrovne zeme operačných zosilňovačov. Oba kanály sa teda pohybujú rovnako, ako meníte nastavenie GND.

Krok 5: Rotačné kodéry a ladenie

Rotačné kodéry a ladenie
Rotačné kodéry a ladenie
Rotačné kodéry a ladenie
Rotačné kodéry a ladenie

Na mini osciloskope som použil iba jeden rotačný kodér pre všetky funkcie. To by veľmi komplikovalo používanie duálneho osciloskopu, takže tu potrebujem dva. Jeden kodér pre tlmiče a virtuálnu úroveň zeme a druhý kodér pre časovú základňu a spustenie. Je smutné, že rovnako ako v mojom inom projekte sú tieto rotačné kodéry veľmi „hlučné“. Sú také zlé, že by jednoducho nefungovali s časovačmi v „režime kodéra“, čo je štandardný spôsob ich čítania. Musel som vytvoriť mechanizmus na odskakovanie s časovačom TIM2, ktorý kontroluje kodéry každých 100us. Tento časovač sa zase spustí (iba) vtedy, keď je na kodéroch určitá aktivita, toto sa kontroluje pomocou funkcie EXTI na vstupných portoch. Teraz kodéry fungujú dobre.

A ako vidíte, displej môže byť tiež veľmi užitočný na zobrazenie informácií o ladení.

Krok 6: Zobrazenie a časová základňa

Displej a časová základňa
Displej a časová základňa

Displej má rozlíšenie 160 x 128 pixelov, takže na jednu obrazovku je potrebných 160 vzoriek. Podarilo sa mi zrýchliť ADC tak, aby robilo 1,6 milióna vzoriek za sekundu, a to s výrazne pretaktovaným mikrokontrolérom (o tom neskôr) minimálna časová základňa 20us na divíziu (100us na obrazovku). Vlnový priebeh 10 kHz teda vyplní celú obrazovku.

To je iba dvakrát rýchlejšie ako mini osciloskop, ktorý som vyrobil predtým. Och, teraz je to s dvoma kanálmi:-).

Ako už bolo povedané, displej je široký 160 pixelov, takže na jednu obrazovku je potrebných iba 160 hodnôt. Ale všetky nárazníky v skutočnosti obsahujú 320 vzoriek. DMA teda uloží 320 hodnôt predtým, ako spustí prerušenie úplného prenosu (TC). Dôvodom je, že spustenie sa vykonáva v softvéri. Vzorkovanie začína v náhodnom momente, takže je veľmi nepravdepodobné, že prvá hodnota v medzipamäte je miesto, kde by mal byť spúšťací bod.

Preto je spúšťací bod nájdený prečítaním cez trace_x_buffer, ak je hodnota na požadovanej aktivačnej hodnote en, ak je predchádzajúca hodnota tesne pod ňou, trigger_point sa nájde. Funguje to celkom dobre, ale potrebujete väčšiu vyrovnávaciu pamäť, ako je skutočná veľkosť displeja.

To je tiež dôvod, prečo je obnovovacia frekvencia v nastaveniach nižšej časovej základne pomalšia, ako by ste mohli očakávať. Keď použijete nastavenie 200 ms/div, jedna obrazovka plná údajov je 1 sekunda, ale pretože sa vykoná dvojnásobný počet konverzií, trvá to 2 sekundy. Na rýchlejšom nastavení časovej základne to až tak nevnímate.

Na generovanie časovej základne sa používa TIM3. Spúšťa ADC rýchlosťou, akú vyžaduje zvolené nastavenie časovej základne. Jeho hodiny TIM3 sú 120 MHz (pozri pretaktovanie), maximálny počet, do ktorého sa započítava (ARR), určuje, ako ostatné pretečie alebo v jazyku ST aktualizuje. Prostredníctvom TRGO tieto aktualizačné impulzy spustia ADC. Najnižšia frekvencia, ktorú generuje, je 160 Hz, najvyššia je 1,6 MHz.

Krok 7: ADC a DMA

ADC a DMA
ADC a DMA

Dva ADC prevádzajú napätie na svojich vstupoch súčasne a ukladajú tieto dve 12 -bitové hodnoty do jednej 32 -bitovej premennej. DMA má teda iba jednu premennú na (dvojitú) konverziu na prenos.

Na použitie týchto hodnôt je preto potrebné rozdeliť ich na dve hodnoty, aby ich bolo možné použiť na zobrazenie dvoch stôp. Ako bolo povedané, ADC vo F103 nemožno nastaviť na iné rozlíšenie ako 12 bitov. Sú vždy v 12 -bitovom režime, a preto konverzie vždy vyžadujú rovnaký počet hodinových impulzov. Napriek tomu s pretaktovaním ADC je možné vykonať 1,6 M vzoriek za sekundu (pozri Extra: Pretaktovanie).

Referencia ADC je Vdd, 3,3 V koľajnica. Aby som to skonvertoval na pohodlnejšie hodnoty (na delenie), vypočítal som hodnoty atenuátorov, pretože nemám presné hodnoty odporu, ktoré z týchto výpočtov vyplývajú, niektoré opravy sa vykonávajú v softvéri.

V tomto projekte používam DMA v „bežnom režime“. V tomto režime DMA zastaví prenos dát (z de ADC do pamäte), keď sa prenesie celý počet slov (alebo polovičných slov alebo bajtov). V inom možnom režime, „kruhovom režime“, sa DMA resetuje a pokračuje v prenose údajov bez prerušenia. To s F103 nefungovalo, je také rýchle, že prepíše údaje v adc_buffer skôr, ako ho zvyšok programu dokáže prečítať. Takže teraz je postup nasledujúci:

- nastaviť DMA na počet prenášaných dát a povoliť DMA

- spustite spúšťanie ADC, ktoré budú po každej (dvojitej) konverzii požadovať prenosy DMA

- po prenose nastaveného počtu konverzií sa DMA zastaví

- okamžite tiež zastavte spúšťanie ADC

- vykonajte všetky potrebné manipulácie s údajmi v pamäti

- zobraziť stopy na obrazovke

- začnite proces znova

Krok 8: Používateľské rozhranie

Používateľské rozhranie
Používateľské rozhranie

Obrazovka 160 x 128 pixelov nie je príliš veľká a chcem z nej využiť čo najviac. Nie je teda žiadna jeho časť vyhradená pre nastavenia prúdov. V posledných niekoľkých riadkoch je zobrazená vertikálna citlivosť, časová základňa, úroveň spustenia a spúšťací kanál, ale keď sú signály dostatočne veľké, zobrazia sa v rovnakej oblasti. Aktívna možnosť je zobrazená žltou farbou a zvyšok je zobrazený bielou farbou.

Krok 9: Budovanie a možné vylepšenia

Budovanie a možné vylepšenia
Budovanie a možné vylepšenia
Budovanie a možné vylepšenia
Budovanie a možné vylepšenia
Budovanie a možné vylepšenia
Budovanie a možné vylepšenia
Budovanie a možné vylepšenia
Budovanie a možné vylepšenia

Mám z tohto projektu veľkú radosť. Funguje to dobre a plní úlohu, ale mohlo by to byť lepšie.

Krabica projektu je príliš malá na to, aby sa do nej všetko pohodlne zmestilo, a preto bolo potrebné vložiť komponenty pod modrú pilulku. Aby to bolo možné, modrú pilulku nebolo možné priamo spájkovať s „základnou doskou“. A pretože sa to všetko zvýšilo príliš vysoko, musel som z Blue Pill odstrániť mnoho častí, ako napríklad prepojky na výber BOOT0 a BOOT1 (veci, ktoré aj tak nikdy nepoužívam) a dokonca som musel kryštál presunúť zhora nadol. PCB.

Sťažil som život tým, že som namiesto BNC alebo SMA konektorov použil banánové konektory, znamenalo to, že veľká časť perfboardu bola „no-go-area“, aby to bolo jasné, dal som na to kaptonovú pásku, aby som tomu zabránil. od kladenia dielov na ňu.

Ďalším problémom, keď je všetko vložené do tak malého projektového boxu, je to, že analógové a digitálne obvody sú veľmi blízko seba. Vidíte, že na oboch stopách je vidieť pomerne veľký hluk. Toto som ani nemal na doske! Presunutím elektrických vedení pre analógové a digitálne obvody čo najďalej od seba došlo k malému zlepšeniu, ale nie celkom podľa môjho vkusu. Zníženie všetkých hodnôt rezistorov v analógových obvodoch ešte viac ako ja (vstupný odpor je 100 kOhm namiesto 1 MOhm) nepomohlo. Mám podozrenie, že spustenie na najrýchlejšom nastavení časovej základne (20us/div), ktoré nie je skvelé, sa tiež zlepší s menším šumom v signáloch.

Ak urobíte tento návrh na „skutočnom“PCB so všetkými časťami smd a oddelenými vrstvami pre analógový, digitálny a napájací (to sú 4 vrstvy!), Bude to pravdepodobne fungovať veľmi dobre. Bude oveľa menší, nebude používať úplnú modrú pilulku, ale iba F103, a to umožní dodať mu samostatný (čistý) analógový Vdda pre ADC.

Nakoniec som sa rozhodol box nastriekať na čierno, je to zmena oproti všetkým béžovým boxom, ktoré má.

Krok 10: Kód a krátke video

Krok 11: EXTRA: Pretaktovanie

EXTRA: Pretaktovanie
EXTRA: Pretaktovanie

Rovnako ako pri F03 som chcel vidieť, ako dobre sa dá F103 pretaktovať. Špecifikácie tohto mikrokontroléra tvrdia, že maximálna rýchlosť hodín by nemala presiahnuť 72 MHz (čo je samozrejme už rýchlejšie ako F030), ale vo viacerých blogoch som čítal, že pretaktovanie bolo jednoduché, tak prečo nie?

Modrá pilulka je vybavená kryštálom 8 MHz, PLL ju znásobuje faktorom 9 až 72 MHz. PLL je možné zvýšiť až na 16 s taktom 128 MHz. To nebol pre moju modrú pilulku žiadny problém, v skutočnosti všetky moje modré pilulky fungujú bez problémov na 128 MHz.

Teraz som však chcel zistiť, aká je skutočná hranica. Odstránil som teda kryštál 8MHz a nahradil ho jedným z 12MHz. Opäť som zvyšoval multiplikátor PLL, kým to mikrokontrolér nakoniec nevzdal. To bolo na 168 MHz! Na frekvencii 156 MHz to stále fungovalo dobre. Nechal som to bežať touto rýchlosťou niekoľko hodín a nikdy som nevidel, že by to spadlo. V tomto osciloskope som sa usadil na 120 MHz, rýchlosť, ktorú je možné zvoliť s kryštálom 12 MHz a PLL na 10, ako aj s kryštálom 8 MHz a PLL na 15. (pozri SystemClock_Config v main.c)

ADC teraz tiež pracujú rýchlejšie, mám ich spustené na 30 MHz (namiesto 14), stále fungovali dobre na 60 MHz, STMicroelectronics vyrába pekný hardvér!

Spoločnosť STMicroelectronics uvádza tieto limity v technickom liste z dobrého dôvodu a zaručuje, že mikrokontrolér pracuje za uvedených podmienok na uvedených 72 MHz.

Pretože však mikrokontrolér nepoužívam na -40 ° C, +85 ° C, iba na 2,0 V alebo 3,6 V, myslím si, že je bezpečné ho pretaktovať. Nerobte to, ak máte v úmysle predať zariadenie s ich mikrokontrolérmi, nikdy neviete, kde sa budú používať.

Odporúča: