Obsah:

Dual Trace osciloskop: 11 kroků (s obrázky)
Dual Trace osciloskop: 11 kroků (s obrázky)

Video: Dual Trace osciloskop: 11 kroků (s obrázky)

Video: Dual Trace osciloskop: 11 kroků (s obrázky)
Video: Co umí tablet do myčky / Tipy pro domácnost 2024, Červenec
Anonim
Duální trasovací osciloskop
Duální trasovací osciloskop

Když jsem stavěl svůj předchozí mini osciloskop, chtěl jsem vidět, jak dobře dokážu přinést svůj nejmenší mikrokontrolér ARM STM32F030 (F030), a odvedl pěknou práci.

V jednom z komentářů bylo navrženo, že „modrá pilulka“s STM32F103 (F103) může být lepší, menší než vývojová deska s F030 a možná ještě levnější. Ale pro mini osciloskop jsem nepoužil vývojovou desku, ale F030 na ještě menší desce SMD-DIP, takže modrá pilulka by určitě nebyla menší a pochybuji, že by byla také levnější.

Kód je nyní k dispozici na Gitlabu:

gitlab.com/WilkoL/dual-trace-oscilloscope

Zásoby

Seznam dílů: - plastový box - perfboard (oboustranná prototypová deska 8x12cm) - Blue Pill - ST7735s TFT displej - lithium -iontová baterie - HT7333 3,3V regulátor nízkého výpadku - duální operační zesilovač MCP6L92 - deska TSSOP8 až DIP8 - krystal 12 MHz (není nutné) - otočný enkodér plus knoflík (2x) - powerwitch - banánové terminály (4x) - lithium -iontová nabíjecí deska - několik odporů a kondenzátorů - nylonové podložky, matice a šrouby

Nástroje:

- pájecí stanice - pájka 0,7 mm - nějaký drát - boční řezačka - brýle a lupa - vrtačka - multimetr - osciloskop - STLink -V2

Software:

- STM32IDE - STM32CubeMX - STLink Utility - knihovna LowLayer - přizpůsobená knihovna pro ST7735s - Poznámkový blok ++ - Kicad

Krok 1: Režim prokládání nebo souběžný režim

Režim prokládání nebo souběžný režim
Režim prokládání nebo souběžný režim
Režim prokládání nebo souběžný režim
Režim prokládání nebo souběžný režim

Modrá pilulka

Ale ten nápad tu byl a já věděl, že F103 má dva ADC! Co kdybych použil tyto dva ADC společně v režimu „prokládání“, něco, co jsem již dříve dělal s STM32F407 (F407). Rychlost vzorkování by se zdvojnásobila. Zkombinujte to s rychlejším mikrokontrolérem a bude to skvělý nástupce mini osciloskopu.

Režim prokládání Je zvláštní, že ADC v F103 jsou méně pokročilé než v F030 (a F407), nemůžete zvolit rozlišení. Důležitější je, že také nemůžete změnit načasování mezi dvěma ADC. Když nyní používáte režim prokládání, obvykle chcete, aby vzorkování bylo co nejrychlejší s nejkratším časem mezi vzorky, ale s osciloskopem je nutné časování změnit. Možná se to ještě dá udělat, nejsem profesionální designér osciloskopu, ale upustil jsem od plánu použít režim prokládání.

Simultánní režim

Ale když máte dva ADC, nabízí mnohem více možností, lze tyto dva ADC nastavit také na režim „běžný simultánní“. Co třeba duální stopový osciloskop?

Když jsem se rozhodl zkusit vytvořit duální stopový osciloskop, chtěl jsem také mít proměnnou vstupní citlivost, což jsem na mini osciloskopu neměl. To znamená tlumič (a zesilovač) na vstupech. A možná jsem chtěl ještě víc? Udělal jsem tedy malý seznam „nice-to-haves“.

SEZNAM PŘÁNÍ

dva kanály

variabilní citlivost na obou kanálech

spouštění na obou kanálech

variabilní úroveň spouštění na obou kanálech

variabilní offset

napájení z jedné baterie

vejdou do stejné krabice jako miniosciloskop

Krok 2: Prototypování

Prototypování
Prototypování
Prototypování
Prototypování

Jako obvykle jsem tyto projekty zahájil na prkénku. (Viz obrázek) A před pájením všeho na perfboard se snažím zjistit, zda a jak se vejde do zvoleného projektového boxu. Hodí se, ale jen tak. Některé části jsou skryty pod obrazovkou, jiné pod Modrou pilulkou. A opět, stejně jako pro většinu mých projektů, je to projekt pouze jednou a nebudu pro něj navrhovat desku plošných spojů.

Krok 3: Tlumiče

Tlumiče
Tlumiče

V běžných osciloskopech jsou vstupními tlumiči obvody, které mění útlum a zesílení přepínáním vstupních a výstupních odporů pomocí malých signálních relé. I když mám některá z těchto relé, vím, že se nezapnou na méně než 4 V, to znamená, že budou fungovat pouze s plně nabitou lithium -iontovou baterií (4,2 V). Potřeboval jsem tedy jiný způsob, jak tyto odpory přepnout. Samozřejmě jsem mohl nainstalovat pouze mechanické spínače, ale to by se už určitě nehodilo do projektového boxu, možná jsem mohl zkusit znovu lepší digitální potenciometr (ten, který mám, je příliš hlučný).

Pak mě napadlo "analogové přepínače", s těmi si můžu udělat digitální potenciometr sám. Ve své sbírce náhradních dílů jsem našel CD4066 se čtyřmi analogovými přepínači. Cílem je vytvořit zpětnovazební odpor proměnné operačního zesilovače přepínáním vstupních a výstupních odporů paralelně k zpětnovazebnímu odporu.

Funguje to velmi dobře, ale s pouhými 4 přepínači v 4066 a se 2 kanály nebylo možné vytvořit více než tři úrovně citlivosti. Vybral jsem 500 mV, 1 V a 2 V na divizi, protože to jsou úrovně napětí, které používám nejvíce. Obrazovka je rozdělena do 6 divizí, takže je možné použít rozsahy –1,5 V až +1,5 V, –3 V až +3 V a –6 V až 6 V.

S „virtuální zemí“můžete tyto rozsahy posouvat nahoru a dolů, takže je možné dokonce 0v až +12V.

Krok 4: Virtual Ground

Virtuální Ground
Virtuální Ground
Virtuální Ground
Virtuální Ground

Protože osciloskop používá jedinou napájecí lištu (3,3 V), operační zesilovače potřebují virtuální úroveň země, jinak nebudou fungovat. Tato virtuální úroveň terénu je vytvořena s PWM na jednom výstupním kanálu TIM4, jeho pracovní cyklus se mění z několika procent na téměř sto procent. Nízkopásmový filtr s odporem 1k a kondenzátorem 10uF to transformuje na napětí (téměř) 0V až (téměř) 3,3V. Frekvence čtvercové vlny je těsně pod 100 kHz, takže jednoduchý dolní propust je dost dobrý.

Poměrně pozdě při stavbě tohoto osciloskopu jsem si uvědomil, že pro kanály nemůžete mít dvě oddělená odsazení. Důvodem je skutečnost, že s jediným napájecím zdrojem musí být vstupní úroveň země oddělena od skutečné úrovně země zesilovačů. Oba kanály se tedy pohybují stejným způsobem, jakým měníte nastavení GND.

Krok 5: Rotační kodéry a ladění

Rotační kodéry a ladění
Rotační kodéry a ladění
Rotační kodéry a ladění
Rotační kodéry a ladění

Na mini osciloskopu jsem použil pouze jeden rotační kodér pro všechny funkce. To by velmi ztěžovalo použití duálního osciloskopu, takže zde potřebuji dva. Jeden kodér pro tlumiče a virtuální úroveň země a druhý kodér pro časovou základnu a spouštění. Je smutné, že stejně jako v mém dalším projektu jsou tyto rotační kodéry velmi „hlučné“. Jsou tak špatní, že by jednoduše nepracovali s časovači v „režimu kodéru“, což je standardní způsob jejich čtení. Musel jsem vytvořit odskakovací mechanismus s časovačem TIM2, který kontroluje kodéry každých 100us. Tento časovač se zase spustí (pouze), když je na kodérech nějaká aktivita, toto je zaškrtnuto pomocí funkce EXTI na vstupních portech. Nyní kodéry fungují dobře.

A jak vidíte, zobrazení může být také velmi užitečné pro zobrazení informací o ladění.

Krok 6: Zobrazení a časová základna

Zobrazení a časová základna
Zobrazení a časová základna

Displej má rozlišení 160 x 128 pixelů, takže na jednu obrazovku je potřeba 160 vzorků. Podařilo se mi zrychlit ADC tak, aby dělalo 1,6 milionu vzorků za sekundu, a to díky mnohem přetaktovanému mikrokontroléru (o tom později) minimální časová základna 20us na divizi (100us na obrazovku). Tvar vlny 10 kHz tedy zaplní celou obrazovku.

To je jen dvakrát rychlejší než mini osciloskop, který jsem předtím vyrobil. No, teď je to se dvěma kanály:-).

Jak již bylo řečeno, displej je široký 160 pixelů, takže na jednu obrazovku je potřeba pouze 160 hodnot. Ale všechny vyrovnávací paměti ve skutečnosti obsahují 320 vzorků. DMA tedy uloží 320 hodnot, než spustí přerušení úplného přenosu (TC). Důvodem je, že spouštění se provádí v softwaru. Vzorkování začíná v náhodném okamžiku, takže je velmi nepravděpodobné, že první hodnota ve vyrovnávací paměti je místo, kde by měl být spouštěcí bod.

Proto je spouštěcí bod nalezen načtením přes trace_x_buffer, pokud je hodnota na požadované spouštěcí hodnotě en, pokud je předchozí hodnota těsně pod ní, je nalezen trigger_point. To funguje docela dobře, ale potřebujete větší vyrovnávací paměť, než je skutečná velikost zobrazení.

I to je důvod, proč je obnovovací frekvence v nastavení nižší časové základny pomalejší, než byste čekali. Když použijete nastavení 200 ms/div, jedna obrazovka plná dat je 1 sekunda, ale protože je provedeno dvojnásobné převody, trvá to 2 sekundy. Na rychlejším nastavení časové základny si toho tolik nevšimnete.

K generování časové základny se používá TIM3. Spouští ADC s rychlostí podle požadavků zvoleného nastavení časové základny. Jeho hodiny TIM3 jsou 120 MHz (viz OVERCOCKING), maximální počet, do kterého se počítá (ARR), určuje, jak ostatní přeteče, nebo v jazyce ST se aktualizuje. Prostřednictvím TRGO tyto aktualizační impulsy spouštějí ADC. Nejnižší frekvence, kterou generuje, je 160 Hz, nejvyšší je 1,6 MHz.

Krok 7: ADC a DMA

ADC a DMA
ADC a DMA

Dva ADC převádějí napětí na svých vstupech současně a ukládají tyto dvě 12bitové hodnoty do jediné 32bitové proměnné. DMA má tedy k přenosu pouze jednu proměnnou na (dvojitou) konverzi.

Chcete -li použít tyto hodnoty, je proto nutné je rozdělit na dvě hodnoty, aby je bylo možné použít k zobrazení těchto dvou stop. Jak bylo řečeno, ADC v F103 nelze nastavit na jiné rozlišení než 12 bitů. Jsou vždy v 12bitovém režimu, a proto převody vždy vyžadují stejný počet hodinových impulzů. Přesto s přetaktováním ADC lze provést 1,6 M ukázek za sekundu (viz Extra: přetaktování).

Reference ADC je Vdd, 3,3V kolejnice. Abych to převedl na pohodlnější hodnoty (na dělení), vypočítal jsem hodnoty atenuátorů, protože nemám přesné hodnoty odporů, které z těchto výpočtů vycházejí, některé opravy se provádějí v softwaru.

V tomto projektu používám DMA v „běžném režimu“. V tomto režimu DMA zastaví přenos dat (z de ADC do paměti), když se přenesou všechna slova (nebo poloviční slova nebo bajty). V dalším možném režimu, „kruhový režim“, se DMA resetuje a pokračuje v přenosu dat bez přerušení. To u F103 nefungovalo, je tak rychlé, že přepíše data v adc_buffer , než je zbytek programu dokázal přečíst. Takže nyní je postup následující:

- nastavit DMA na počet přenášených dat a povolit DMA

- spusťte spouštění ADC, které budou po každé (dvojité) konverzi požadovat přenosy DMA

- po přenosu nastaveného počtu konverzí se DMA zastaví

- okamžitě také zastavte spouštění ADC

- proveďte veškerou potřebnou manipulaci s daty v paměti

- zobrazit stopy na obrazovce

- spusťte proces znovu

Krok 8: Uživatelské rozhraní

Uživatelské rozhraní
Uživatelské rozhraní

Obrazovka 160 x 128 pixelů není příliš velká a chci ji použít co nejvíce. Pro nastavení proudů tedy není vyhrazena žádná jeho část. V posledních několika řádcích se zobrazuje svislá citlivost, časová základna, úroveň spouštění a spouštěcí kanál, ale když jsou signály dostatečně velké, zobrazí se ve stejné oblasti. Možnost, která je aktivní, je zobrazena žlutě, zbytek je zobrazen bíle.

Krok 9: Budování a možná vylepšení

Budování a možná vylepšení
Budování a možná vylepšení
Budování a možná vylepšení
Budování a možná vylepšení
Budování a možná vylepšení
Budování a možná vylepšení
Budování a možná vylepšení
Budování a možná vylepšení

Mám z tohoto projektu velkou radost. Funguje to dobře a dělá to dobře, ale mohlo by to být lepší.

Krabice projektu je příliš malá na to, aby se do ní vše pohodlně vešlo, což má za následek, že je nutné umístit komponenty pod modrou pilulku. Aby to bylo možné, modrá pilulka nemohla být připájena přímo k „základní desce“. A protože se to stalo příliš vysoko, musel jsem z Blue Pill odstranit mnoho částí, jako jsou propojky pro výběr BOOT0 a BOOT1 (věci, které stejně nikdy nepoužívám) a dokonce jsem musel přesunout krystal shora dolů PCB.

Zkomplikoval jsem život tím, že jsem místo konektorů BNC nebo SMA použil banánové konektory, což znamenalo, že velká část perfboardu byla „no-go-area“, aby to bylo jasné, dal jsem přes něj kaptonovou pásku, abych se předešel od umístění dílů na to.

Dalším problémem, jak to všechno dát do tak malého projektového boxu, je to, že analogové a digitální obvody jsou velmi blízko sebe. Vidíte, že na obou stopách je vidět docela dost hluku. Tohle jsem neměl ani na prkénku! Přesunutím napájecích vedení pro analogové a digitální obvody co nejdále od sebe došlo k malému zlepšení, ale ne dost podle mého gusta. Snížení všech hodnot odporu v analogových obvodech ještě dále, než jsem udělal já (vstupní odpor je 100 kOhm místo 1 MOhm) nepomohlo. Mám podezření, že spouštění na nejrychlejším nastavení časové základny (20us/div), které není skvělé, se také zlepší s menším šumem signálů.

Pokud tento návrh vytvoříte na „skutečné“desce plošných spojů, se všemi částmi smd a samostatnými vrstvami pro analogové, digitální a výkonové (to jsou 4 vrstvy!), Bude to pravděpodobně fungovat velmi dobře. Bude mnohem menší, nebude používat úplnou modrou pilulku, ale pouze F103, a to mu umožní dodat samostatný (čistý) analogový Vdda pro ADC.

Nakonec jsem se rozhodl krabici nastříkat černou barvou, což je změna oproti všem béžovým krabicím, které má.

Krok 10: Kód a krátké video

Krok 11: EXTRA: Přetaktování

EXTRA: Přetaktování
EXTRA: Přetaktování

Stejně jako u F03 jsem chtěl vidět, jak dobře lze F103 přetaktovat. Specifikace tohoto mikrokontroléru tvrdí, že maximální rychlost hodin by neměla překročit 72 MHz (což je samozřejmě již rychlejší než F030), ale v několika blozích jsem četl, že přetaktování bylo snadné, tak proč ne?

Modrá pilulka je vybavena krystalem 8 MHz, PLL ji znásobí faktorem 9 až 72 MHz. PLL lze zvýšit až na 16, což dává hodiny 128 MHz. Pro moji modrou pilulku to nebyl žádný problém, ve skutečnosti všechny mé modré pilulky fungují bez problémů na 128 MHz.

Ale teď jsem chtěl zjistit, jaká je skutečná hranice. Odstranil jsem tedy krystal 8MHz a nahradil jej jedním z 12MHz. Znovu jsem zvyšoval multiplikátor PLL, dokud to mikrokontrolér nakonec nevzdal. To bylo na 168 MHz! Na 156 MHz to stále fungovalo dobře. Nechal jsem to běžet takovou rychlostí celé hodiny a nikdy jsem to neviděl havarovat. V tomto osciloskopu jsem se usadil na 120 MHz, rychlost, kterou lze zvolit pomocí krystalu 12 MHz a PLL na 10, stejně jako u krystalu 8 MHz a PLL na 15. (viz SystemClock_Config v main.c)

ADC nyní také fungují rychleji, mám je spuštěné na 30 MHz (namísto 14), stále fungovaly dobře na 60 MHz, STMicroelectronics dělá pěkný hardware!

Společnost STMicroelectronics z dobrého důvodu uvádí tyto limity do datového listu a zaručuje, že mikrokontrolér pracuje na zadaných 72 MHz za všech podmínek.

Ale protože nepoužívám mikrokontrolér na -40 stupňů Celsia, +85 stupňů Celsia na pouhých 2,0 V nebo 3,6 V, myslím, že je bezpečné jej přetaktovat. NEDĚLEJTE to, pokud máte v úmyslu prodat zařízení s jejich mikrokontroléry, nikdy nevíte, kde budou použity.

Doporučuje: