Inhoudsopgave:

Dual Trace-oscilloscoop - Ajarnpa
Dual Trace-oscilloscoop - Ajarnpa

Video: Dual Trace-oscilloscoop - Ajarnpa

Video: Dual Trace-oscilloscoop - Ajarnpa
Video: Using an Oscilloscope: Dual Trace Oscilloscope 2024, Juli-
Anonim
Dual Trace-oscilloscoop
Dual Trace-oscilloscoop

Toen ik mijn vorige mini-oscilloscoop bouwde, wilde ik zien hoe goed ik mijn kleinste ARM-microcontroller een STM32F030 (F030) kon laten presteren, en dat deed het goed.

In een van de commentaren werd gesuggereerd dat een "Blue Pill" met een STM32F103 (F103) misschien beter is, kleiner dan het ontwikkelbord met de F030 en mogelijk zelfs goedkoper. Maar voor de mini-oscilloscoop heb ik niet het ontwikkelbord gebruikt maar de F030 op een nog kleiner SMD-DIP-bord, dus daar zou een Blue Pill zeker niet kleiner zijn en ik betwijfel of het ook goedkoper zal zijn.

Code is nu beschikbaar op Gitlab:

gitlab.com/WilkoL/dual-trace-oscilloscope

Benodigdheden

Onderdelenlijst: - plastic doos - perfboard (dubbelzijdig prototypebord 8x12cm) - Blue Pill - ST7735s TFT-display - lithium-ionbatterij - HT7333 3.3V low dropout-regelaar - MCP6L92 dubbele opamp - TSSOP8 naar DIP8-bord - 12 MHz kristal (niet nodig) - encoder plus knop (2x) - powerswitch - banaanklemmen (4x) - lithium-ion laadbord - diverse weerstanden en condensatoren - nylon afstandhouders, moeren en schroeven

Gereedschap:

- soldeerstation - soldeer 0,7 mm - wat draad - zijknipper - bril en loep - boor - multimeter - oscilloscoop - STLink-V2

Software:

- STM32IDE - STM32CubeMX - STLink Utility - LowLayer-bibliotheek - aangepaste bibliotheek voor ST7735's - Notepad++ - Kicad

Stap 1: Interleave of gelijktijdige modus

Interleave of gelijktijdige modus
Interleave of gelijktijdige modus
Interleave of gelijktijdige modus
Interleave of gelijktijdige modus

Blauwe pil

Maar het idee was er en ik wist dat de F103 twee ADC's heeft! Wat als ik die twee ADC's samen zou gebruiken in de "interleave" -modus, iets wat ik eerder heb gedaan met de STM32F407 (F407). De bemonsteringssnelheid zou verdubbelen. Combineer dat met een snellere microcontroller en het zou een geweldige opvolger van de mini-oscilloscoop zijn.

Interleave-modus Vreemd genoeg zijn de ADC's in de F103 minder geavanceerd dan die in de F030 (en de F407), je kunt de resolutie niet kiezen. Belangrijker is dat u ook de timing tussen de twee ADC's niet kunt wijzigen. Nu, wanneer u de interleave-modus gebruikt, wilt u meestal de bemonstering zo snel mogelijk met de kortste tijd tussen de monsters, maar met een oscilloscoop is het nodig om de timing te veranderen. Misschien kan het nog steeds, ik ben geen professionele oscilloscoop-ontwerper, maar ik heb het plan om de interleave-modus te gebruiken laten vallen.

Gelijktijdige modus

Maar het hebben van twee ADC's geeft veel meer opties, de twee ADC's kunnen ook worden ingesteld op de "reguliere-gelijktijdige" modus. Wat dacht je van een dual trace-oscilloscoop?

Nadat ik had besloten om te proberen een dual trace-oscilloscoop te maken, wilde ik ook een variabele ingangsgevoeligheid hebben, een optie die ik niet had op de mini-oscilloscoop. Dat betekent een verzwakker (en versterker) op de ingangen. En misschien wilde ik nog meer? Dus maakte ik een kleine lijst van "nice-to-haves".

VERLANGLIJST

twee kanalen

variabele gevoeligheid op beide kanalen

triggering op beide kanalen

variabel triggerniveau op beide kanalen

variabele offset

enkele batterijvoeding

passen in dezelfde doos als de mini-oscilloscoop

Stap 2: Prototyping

Prototyping
Prototyping
Prototyping
Prototyping

Zoals gewoonlijk begon ik deze projecten op een breadboard. (Zie foto) En voordat ik alles op het perfboard soldeer, probeer ik uit te vinden of en hoe het in de gekozen projectdoos past. Het past, maar net. Sommige delen zijn verborgen onder het scherm, andere onder de blauwe pil. En nogmaals, net als voor de meeste van mijn projecten, is dit een eenmalig project en ik zal er geen PCB voor ontwerpen.

Stap 3: verzwakkers

verzwakkers
verzwakkers

In reguliere oscilloscopen zijn de ingangsverzwakkers circuits die demping en versterking veranderen door weerstanden in en uit te schakelen met kleine signaalrelais. Hoewel ik een aantal van die relais heb, weet ik dat ze niet schakelen bij minder dan 4 Volt, dat betekent dat ze alleen werken met een volledig geladen Lithium Ion batterij (4,2V). Dus ik had een andere manier nodig om die weerstanden te schakelen. Natuurlijk zou ik gewoon mechanische schakelaars kunnen installeren, maar dat zou zeker niet meer passen in de projectdoos die ik in gedachten had, misschien zou ik nog eens een betere digitale potmeter kunnen proberen (degene die ik heb is veel te lawaaierig).

Toen dacht ik aan "analoge schakelaars", daar kan ik zelf een digitale potmeter van maken. In mijn onderdelenverzameling vond ik de CD4066 met vier analoge schakelaars. Het idee is om de feedbackweerstand van een opamp variabel te maken door weerstanden parallel aan de feedbackweerstand in en uit te schakelen.

Het werkt heel goed, maar met slechts 4 schakelaars in de 4066 en met 2 kanalen was het niet mogelijk om meer dan drie gevoeligheidsniveaus te maken. Ik koos voor 500mV, 1V en 2V per divisie omdat dat de spanningsniveaus zijn die ik het meest gebruik. Het scherm is opgedeeld in 6 delen, dus dat zorgt voor de bereiken -1,5V tot +1,5V, -3V tot +3V en -6V tot 6V.

Met de "virtual-ground" kun je deze bereiken op en neer bewegen zodat zelfs 0v tot +12V mogelijk is.

Stap 4: Virtuele grond

Virtuele grond
Virtuele grond
Virtuele grond
Virtuele grond

Omdat de oscilloscoop een enkele stroomrail (3,3V) gebruikt, hebben de opamps een virtueel grondniveau nodig, anders werken ze niet. Dit virtuele grondniveau is gemaakt met PWM op één uitgangskanaal van TIM4, de duty-cycle ervan verandert van slechts een paar procent naar bijna honderd procent. Een laagdoorlaatfilter met een weerstand van 1k en een condensator van 10uF zet dat om in een spanning van (bijna) 0V tot (bijna) 3,3V. De frequentie van de blokgolf ligt net onder de 100 kHz, dus het eenvoudige laagdoorlaatfilter is goed genoeg.

Vrij laat bij het bouwen van deze oscilloscoop realiseerde ik me dat je geen twee afzonderlijke offsets voor de kanalen kunt hebben. Dit komt door het feit dat bij een enkele voeding het ingangs-grondniveau gescheiden moet zijn van het werkelijke grondniveau van de opamps. Beide kanalen bewegen dus op dezelfde manier als u de GND-instelling wijzigt.

Stap 5: roterende encoders en foutopsporing

Roterende encoders en foutopsporing
Roterende encoders en foutopsporing
Roterende encoders en foutopsporing
Roterende encoders en foutopsporing

Op de mini-oscilloscoop gebruikte ik slechts één roterende encoder voor alle functies. Dat zou een dubbele oscilloscoop erg moeilijk maken om te gebruiken, dus hier heb ik er twee nodig. Een encoder voor de verzwakkers en virtueel grondniveau en de andere encoder voor de tijdbasis en triggering. Helaas zijn deze roterende encoders, net als in mijn andere project, erg "luidruchtig". Ze zijn zo slecht dat ze gewoon niet zouden werken met timers in "encoder-mode", de standaard manier om ze te lezen. Ik moest een debouncing-mechanisme maken met timer TIM2, de encoders elke 100us controleren. Deze timer wordt op zijn beurt (alleen) gestart als er wat activiteit is op de encoders, dit wordt gecontroleerd met de EXTI functionaliteit op de input poorten. Nu werken de encoders goed.

En zoals u kunt zien, kan het hebben van een display ook erg handig zijn om foutopsporingsinformatie weer te geven.

Stap 6: Weergave en tijdbasis

Weergave en tijdbasis
Weergave en tijdbasis

Het scherm heeft een resolutie van 160 x 128 pixels dus er zijn 160 samples nodig voor één scherm, ik heb de ADC's kunnen versnellen om 1,6 miljoen samples per seconde te doen en dat geeft met de veel overgeklokte microcontroller (daarover later meer) een minimale tijdsbasis van 20us per divisie (100us per scherm). Dus een golfvorm van 10 kHz zal het hele scherm vullen.

Dat is slechts twee keer zo snel als de mini-oscilloscoop die ik eerder maakte. Ach, nu wel met twee zenders:-).

Zoals gezegd is het scherm 160 pixels breed en zijn er dus maar 160 waarden per scherm nodig. Maar alle buffers bevatten eigenlijk 320 samples. Dus de DMA slaat 320 waarden op voordat het een Transmission Complete Interrupt (TC) activeert. Dit komt omdat het triggeren in software gebeurt. De bemonstering begint op een willekeurig moment, dus het is zeer onwaarschijnlijk dat de eerste waarde in de buffer de plaats is waar het triggerpunt zou moeten zijn.

Daarom wordt het triggerpoint gevonden door de trace_x_buffer door te lezen, als de waarde op de gewenste triggerwaarde ligt en als de vorige waarde er net onder ligt, wordt het trigger_point gevonden. Dit werkt redelijk goed, maar je hebt een grotere buffer nodig dan de werkelijke weergavegrootte is.

Dit is ook de reden dat de verversingssnelheid op de lagere tijdbasisinstellingen langzamer is dan je zou verwachten. Wanneer je de 200ms/div instelling gebruikt is één scherm vol met data 1 seconde, maar omdat er dubbel zoveel conversies gedaan worden, duurt dat 2 seconden. Op de snellere timebase instellingen merk je daar niet zo veel van.

TIM3 wordt gebruikt om de tijdbasis te genereren. Het activeert de ADC's met de snelheid zoals vereist door de geselecteerde tijdbasisinstelling. De klok van TIM3 is 120 MHz (zie OVERKLOKKEN), het maximale aantal waartoe het telt (ARR) bepaalt hoe het overloopt of, in ST-taal, het wordt bijgewerkt. Via TRGO triggeren deze update-pulsen de ADC's. De laagste frequentie die het genereert is 160 Hz, de hoogste is 1,6 MHz.

Stap 7: ADC's en DMA

ADC's en DMA
ADC's en DMA

De twee ADC's zetten de spanning op hun ingangen tegelijkertijd om, ze slaan die twee 12-bits waarden op in een enkele 32-bits variabele. De DMA hoeft dus maar één variabele per (dubbele) conversie over te dragen.

Om deze waarden te gebruiken, is het daarom noodzakelijk om ze te splitsen in de twee waarden, zodat ze kunnen worden gebruikt om de twee sporen weer te geven. Zoals gezegd kunnen ADC's in de F103 niet worden ingesteld op andere resoluties dan 12 bits. Ze zijn altijd in 12-bits modus en dus hebben conversies altijd hetzelfde aantal klokpulsen nodig. Toch kan met het overklokken van de ADC's 1,6 MSamples per seconde worden gedaan (zie Extra: Overklokken).

De referentie van de ADC's is Vdd, de 3,3V-rail. Om dat om te zetten naar handigere waarden (per divisie) heb ik de waarden van de verzwakkers berekend, omdat ik niet de exacte weerstandswaarden heb die uit die berekeningen komen, worden sommige correcties softwarematig gedaan.

In dit project gebruik ik DMA in de "normale modus". In deze modus stopt de DMA met het overbrengen van gegevens (van de ADC's naar het geheugen) wanneer het aantal woorden (of halve woorden of bytes) allemaal is overgedragen. In de andere mogelijke modus, "circulaire modus", stelt de DMA zichzelf opnieuw in en gaat ononderbroken door met het overdragen van gegevens. Dat werkte niet met de F103, hij is zo snel dat hij de gegevens in de adc_buffer overschrijft voordat de rest van het programma het kon lezen. Dus nu is het proces als volgt:

- stel DMA in op het aantal gegevens dat moet worden overgedragen en schakel DMA. in

- start het triggeren van de ADC's, deze zullen na elke (dubbele) conversie DMA-overdrachten aanvragen

- nadat het ingestelde aantal conversies is overgedragen, stopt DMA

- stop ook onmiddellijk met het activeren van de ADC's

- voer alle benodigde bewerkingen uit op de gegevens in het geheugen

- laat sporen op het scherm zien

- start het proces opnieuw

Stap 8: Gebruikersinterface

Gebruikersomgeving
Gebruikersomgeving

Een scherm van 160 bij 128 pixels is niet heel groot en daar wil ik zoveel mogelijk van gebruiken. Er is dus geen deel ervan gereserveerd voor de stroominstellingen. In de laatste paar rijen worden de verticale gevoeligheid, tijdbasis, triggerniveau en triggerkanaal weergegeven, maar wanneer de signalen groot genoeg zijn, verschijnen ze in hetzelfde gebied. De optie die actief is wordt in het geel getoond, de rest wordt in het wit getoond.

Stap 9: bouwen en mogelijke verbeteringen

Gebouw en mogelijke verbeteringen
Gebouw en mogelijke verbeteringen
Gebouw en mogelijke verbeteringen
Gebouw en mogelijke verbeteringen
Gebouw en mogelijke verbeteringen
Gebouw en mogelijke verbeteringen
Gebouw en mogelijke verbeteringen
Gebouw en mogelijke verbeteringen

Ik ben best blij met dit project. Het werkt prima en doet zijn werk, maar het kan beter.

De projectdoos is te klein om alles comfortabel in te passen, dit resulteert in het onder de blauwe pil leggen van onderdelen. Om dat mogelijk te maken kon de Blue Pill niet rechtstreeks op het "moederbord" worden gesoldeerd. En omdat het daardoor allemaal te hoog werd, heb ik veel onderdelen van de Blue Pill moeten verwijderen, zoals de jumpers voor het selecteren van BOOT0 en BOOT1 (dingen die ik toch nooit gebruik) en ik moest zelfs het kristal van boven naar beneden verplaatsen de pcb.

Ik maakte het leven moeilijker door banaanconnectoren te gebruiken in plaats van BNC- of SMA-connectoren, het betekende dat een groot deel van het perfboard een "no-go-area" was, om dat voor mezelf duidelijk te maken heb ik er kaptontape overheen gedaan om mezelf te voorkomen door er onderdelen op te plaatsen.

Een ander probleem om alles in zo'n kleine projectdoos te stoppen, is dat de analoge en digitale circuits heel dicht bij elkaar liggen. Je kunt zien dat er op beide sporen vrij veel ruis zichtbaar is. Dit had ik niet eens op het breadboard! Door de stroomleidingen voor analoge en digitale schakelingen zo ver mogelijk uit elkaar te schuiven is er een kleine verbetering aangebracht, maar niet genoeg naar mijn zin. Alle weerstandswaarden in de analoge circuits nog verder verlagen dan ik deed (de ingangsweerstand is 100kOhm in plaats van 1MOhm) hielp niet. Ik vermoed dat het triggeren op de snelste tijdbasisinstelling (20us/div), wat niet geweldig is, ook zal verbeteren met minder ruis op de signalen.

Als je dit ontwerp op een "echte" print maakt, met alle smd-delen en aparte lagen voor analoog, digitaal en stroom (dat zijn 4 lagen!) zal het waarschijnlijk heel goed werken. Het zal veel kleiner zijn, het zal geen volledige Blue Pill gebruiken maar alleen de F103 en dat zal het mogelijk maken om het te voorzien van een aparte (schone) analoge Vdda voor de ADC's.

Als finishing touch besloot ik de doos zwart te spuiten, het maakt een verschil met alle beige dozen die het heeft.

Stap 10: De code en een korte video

Stap 11: EXTRA: overklokken

EXTRA: Overklokken
EXTRA: Overklokken

Net zoals ik deed met de F03, wilde ik zien hoe goed een F103 kan worden overklokt. De specificaties van deze microcontroller beweren dat de maximale kloksnelheid niet hoger mag zijn dan 72MHz (wat natuurlijk al sneller is dan de F030) maar ik had in verschillende blogs gelezen dat overklokken makkelijk was, dus waarom niet?

De Blue Pill is voorzien van een 8MHz kristal, de PLL vermenigvuldigt dat met een factor 9 tot 72MHz. De PLL kan worden verhoogd tot 16, wat een kloksnelheid van 128 MHz oplevert. Dat was geen enkel probleem voor mijn Blue Pill, sterker nog, al mijn Blue Pills werken probleemloos op 128MHz.

Maar nu wilde ik weten wat de echte grens is. Dus ik verwijderde het 8MHz-kristal en verving het door een van 12MHz. Opnieuw verhoogde ik de PLL-multiplier totdat de microcontroller het uiteindelijk opgaf. Dat was op 168MHz! Op 156MHz werkte het nog steeds goed. Ik liet het urenlang op die snelheid draaien en zag het nooit crashen. In deze oscilloscoop heb ik genoegen genomen met 120MHz, een snelheid die kan worden geselecteerd met een 12MHz-kristal en PLL op 10, evenals met een 8 MHz-kristal en de PLL op 15. (zie SystemClock_Config in main.c)

De ADC's werken nu ook sneller, ik heb ze op 30MHz draaien (ipv 14), ze deden het nog goed op 60MHz, STMicroelectronics maakt mooie hardware!

STMicroelectronics zet deze limieten niet voor niets in de datasheet, ze garanderen dat de microcontroller onder alle omstandigheden op de gespecificeerde 72MHz werkt.

Maar aangezien ik de microcontroller niet gebruik bij -40 Celsius, +85 Celsius, op slechts 2,0 Volt of 3,6 Volt, denk ik dat het veilig is om hem te overklokken. Doe dit NIET wanneer u van plan bent een apparaat met hun microcontrollers te verkopen, u weet nooit waar ze zullen worden gebruikt.

Aanbevolen: