Talaan ng mga Nilalaman:

Dual Trace Oscilloscope: 11 Hakbang (na may Mga Larawan)
Dual Trace Oscilloscope: 11 Hakbang (na may Mga Larawan)

Video: Dual Trace Oscilloscope: 11 Hakbang (na may Mga Larawan)

Video: Dual Trace Oscilloscope: 11 Hakbang (na may Mga Larawan)
Video: Pt.1 | How to Install a 10kW AM Transmitter Quick & Easy (Step-by-Step Tutorial) 2024, Hulyo
Anonim
Dual Trace Oscilloscope
Dual Trace Oscilloscope

Kapag itinayo ko ang aking dating mini oscilloscope nais kong makita kung gaano ko kakayanin ang aking pinakamaliit na ARM microcontroller na gumanap ng STM32F030 (F030), at gumawa ito ng magandang trabaho.

Sa isa sa mga komento iminungkahi na ang isang "Blue Pill" na may STM32F103 (F103) ay maaaring mas mahusay, mas maliit kaysa sa development board na may F030 at posibleng mas mura pa. Ngunit para sa mini oscilloscope hindi ko ginamit ang development board ngunit ang F030 sa isang mas maliit na board ng SMD-DIP, kaya't doon isang Blue Pill ay tiyak na hindi magiging mas maliit at nag-aalinlangan ako na magiging mas mura din ito.

Magagamit na ang code sa Gitlab:

gitlab.com/WilkoL/dual-trace-oscilloscope

Mga gamit

Listahan ng bahagi: - plastic box - perfboard (double sided prototype board 8x12cm) - Blue Pill - ST7735s TFT display - lithium-ion baterya - HT7333 3.3V mababang dropout regulator - MCP6L92 dual opamp - TSSOP8 to DIP8 board - 12 MHz crystal (hindi kinakailangan) - rotary encoder plus knob (2x) - powerswitch - banana terminal (4x) - lithium-ion charger board - maraming resistors at capacitor - nylon spacers, nut at screws

Mga tool:

- istasyon ng paghihinang - panghinang 0.7mm - ilang kawad - pamutol sa gilid - baso at loupe - drill - multimeter - oscilloscope - STLink-V2

Software:

- STM32IDE - STM32CubeMX - STLink Utility - LowLayer library - inangkop na library para sa ST7735s - Notepad ++ - Kicad

Hakbang 1: Interleave o SIm sabay-sabay na Mode

Interleave o SIm sabay-sabay na Mode
Interleave o SIm sabay-sabay na Mode
Interleave o SIm sabay-sabay na Mode
Interleave o SIm sabay-sabay na Mode

Blue Pill

Ngunit ang ideya ay naroroon, at alam ko na ang F103 ay may dalawang mga ADC! Paano kung ginamit ko ang dalawang ADC na iyon nang magkasama sa "interleave" mode, isang bagay na nagawa ko dati sa STM32F407 (F407). Ang bilis ng sampling ay dadoble. Iyon, pagsamahin iyon sa isang mas mabilis na microcontroller at gagawin ito para sa isang mahusay na kahalili sa mini oscilloscope.

Interleave mode Kakatwa ang mga ADC sa F103 ay hindi gaanong advanced kaysa sa isa sa F030 (at F407), hindi mo mapipili ang resolusyon. Ang mas mahalaga ay hindi mo rin mababago ang tiyempo sa pagitan ng dalawang ADC. Ngayon, kapag ginamit mo ang interleave mode karaniwang nais mo ang pag-sample nang mas mabilis hangga't maaari sa pinakamaikling oras sa pagitan ng anumang mga sample, ngunit sa isang oscilloscope kinakailangan na baguhin ang tiyempo. Marahil maaari pa ring magawa ito, hindi ako isang propesyonal na taga-disenyo ng oscilloscope, ngunit ibinagsak ko ang plano na gumamit ng interleave-mode.

Sabay mode

Ngunit, ang pagkakaroon ng dalawang ADC ay nagbibigay ng maraming mga pagpipilian, ang dalawang ADCs ay maaaring itakda sa "regular-sabay" na mode din. Paano ang tungkol sa isang dual trace-oscilloscope?

Napagpasyahan kong subukan na gumawa ng isang dual trace oscilloscope Nais ko ring magkaroon ng variable ng pagkasensitibo sa pag-input, isang pagpipilian na wala ako sa mini oscilloscope. Nangangahulugan iyon ng isang attenuator (at amplifier) sa mga input. At marahil ay nagustuhan ko pa? Kaya gumawa ako ng isang maliit na listahan ng "mga magaling na magkaroon".

GUSTO NG LIST

dalawang mga channel

variable na pagkasensitibo sa parehong mga channel

nagti-trigger sa parehong mga channel

variable na antas ng pag-trigger sa parehong mga channel

variable offset

solong lakas ng baterya

magkasya sa parehong kahon tulad ng mini-oscilloscope

Hakbang 2: Prototyping

Prototyping
Prototyping
Prototyping
Prototyping

Tulad ng dati sinimulan ko ang mga proyektong ito sa isang breadboard. (Tingnan ang larawan) At bago maghinang ng lahat sa perfboard sinubukan kong malaman kung at paano ito magkakasya sa napiling kahon ng proyekto. Tama ang sukat, ngunit lamang. Ang ilang mga bahagi ay nakatago sa ilalim ng screen, iba pa sa ilalim ng Blue Pill. At muli, tulad din ng karamihan sa aking mga proyekto, ito ay isang proyekto na isang beses lamang at hindi ako magdidisenyo ng isang PCB para dito.

Hakbang 3: Mga Attenuator

Mga Attenuator
Mga Attenuator

Sa mga regular na oscilloscope ang input attenuators ay mga circuit na nagbabago ng pagpapalambing at pagpapalaki sa pamamagitan ng paglipat-pasok ng mga resistors na may maliit na signal relay. Habang mayroon akong ilan sa mga relay na iyon, alam kong hindi sila lilipat ng mas mababa sa 4 Volt, nangangahulugan iyon na gagana lamang sila sa isang ganap na puno ng baterya ng Lithium Ion (4.2V). Kaya't kailangan ko ng ibang paraan upang mapalitan ang mga resistors. Siyempre maaari ko lamang mai-install ang mga switch ng mekanikal, ngunit tiyak na hindi na magkakasya sa kahon ng proyekto na nasa isip, marahil ay maaari kong subukan muli ang isang mas mahusay na digital potensyomiter (ang mayroon ako ay masyadong maingay).

Pagkatapos ay naisip ko ang "mga analog switch", sa mga maaari kong gawin ang isang digital potentiometer mismo. Sa aking koleksyon ng mga bahagi natagpuan ko ang CD4066 na may apat na mga analog switch. Ang ideya ay upang gawin ang resistor ng feedback ng isang variable ng opamp sa pamamagitan ng paglipat-pasok ng mga resistors na kahanay sa resistor ng feedback.

Gumagana ito nang napakahusay, ngunit ang pagkakaroon lamang ng 4 na switch sa 4066 at pagkakaroon ng 2 mga channel ay hindi posible na gumawa ng higit sa tatlong mga antas ng pagiging sensitibo. Pinili ko ang 500mV, 1V at 2V bawat dibisyon tulad ng mga antas ng boltahe na pinaka ginagamit ko. Ang screen ay nahahati sa 6 na dibisyon, kaya't para sa mga saklaw na -1.5V hanggang + 1.5V, -3V hanggang + 3V at -6V hanggang 6V.

Gamit ang "virtual-ground" maaari mong ilipat ang mga saklaw na ito pataas at pababa kaya kahit 0v sa + 12V posible.

Hakbang 4: Virtual na Lupa

Virtual na Lupa
Virtual na Lupa
Virtual na Lupa
Virtual na Lupa

Dahil ang oscilloscope ay gumagamit ng isang solong power rail (3.3V) ang mga opamp ay nangangailangan ng isang virtual ground level o hindi sila gagana. Ang antas ng virtual ground na ito ay ginawa gamit ang PWM sa isang output channel ng TIM4, ang cycle ng tungkulin nito ay nagbabago mula sa ilang porsyento lamang hanggang sa halos isang daang porsyento. Ang isang mababang pass filter na may isang 1k risistor at isang 10uF capacitor ay binabago iyon sa isang boltahe ng (halos) 0V hanggang (halos) 3.3V. Ang dalas ng squarewave ay nasa ilalim lamang ng 100kHz, kaya't ang simpleng low pass filter ay sapat na mabuti.

Sa halip huli sa pagbuo ng oscilloscope na ito napagtanto kong hindi ka maaaring magkaroon ng dalawang magkakahiwalay na mga offset para sa mga channel. Ito ay dahil sa ang katunayan na sa isang solong supply ng kuryente ang input-ground-level ay dapat na ihiwalay mula sa totoong antas ng lupa ng mga opamp. Kaya't ang parehong mga channel ay gumagalaw sa parehong paraan habang binago mo ang setting ng GND.

Hakbang 5: Mga Rotary Encoder at Pag-debug

Rotary Encoder at Pag-debug
Rotary Encoder at Pag-debug
Rotary Encoder at Pag-debug
Rotary Encoder at Pag-debug

Sa mini oscilloscope gumamit ako ng isang rotary encoder para sa lahat ng mga pagpapaandar. Iyon ay makagawa ng isang dalwang oscilloscope na napakahirap gamitin, kaya narito kailangan ko ng dalawa. Isang encoder para sa mga attenuator at virtual ground level at ang iba pang encoder para sa timebase at pag-trigger. Nakalulungkot, tulad ng sa aking iba pang proyekto, ang mga rotary encoder na ito ay napaka "maingay". Napakasama nila na hindi lamang sila gagana sa mga timer sa "encoder-mode", ang karaniwang paraan ng pagbabasa sa kanila. Kinailangan kong gumawa ng isang mekanismo ng pag-debog sa timer TIM2, pag-check sa mga encoder bawat 100us. Ang timer na ito naman ay nagsimula (lamang) kapag mayroong ilang aktibidad sa mga encoder, nasuri ito kasama ang pagpapaandar ng EXTI sa mga input port. Ngayon gumagana nang maayos ang mga encoder.

At tulad ng nakikita mo, ang pagkakaroon ng isang display ay maaari ding maging madaling gamiting upang ipakita ang impormasyon ng pag-debug.

Hakbang 6: Ipakita at Timebase

Ipakita at Timebase
Ipakita at Timebase

Ang display ay may isang resolusyon na 160 x 128 pixel kaya mayroong 160 na mga sample na kinakailangan para sa isang screenfull, pinabilis ko ang mga ADC na gumawa ng 1.6 milyong mga sample bawat segundo at iyon, kasama ang sobrang overclocked microcontroller (higit pa sa paglaon) isang minimum na timebase na 20us bawat dibisyon (100us bawat screen). Sa gayon ang isang waveform na 10kHz ay punan ang buong screen.

Dalawang beses lamang iyon na mas mabilis sa isang mini oscilloscope na ginawa ko dati. Oh well, ngayon ito ay may dalawang mga channel:-).

Tulad ng sinabi, ang display ay 160 pixel ang lapad kaya 160 halaga lamang ang kinakailangan bawat screen. Ngunit ang lahat ng mga buffer ay talagang naglalaman ng 320 mga sample. Sa gayon ang DMA ay nag-iimbak ng 320 na halaga bago ito mag-trigger ng isang kumpletong pagkakagambala sa paghahatid (TC). Ito ay dahil ang pag-trigger ay tapos na sa software. Ang sampling ay nagsisimula sa isang random na sandali, kaya malamang na ang unang halaga sa buffer ay ang lugar kung saan dapat na ang puntong nag-trigger.

Samakatuwid ang punto ng pag-trigger ay matatagpuan sa pamamagitan ng pagbabasa sa pamamagitan ng trace_x_buffer, kung ang halaga ay nasa ninanais na halaga ng pag-uudyok en kung ang nakaraang halaga ay nasa ibaba lamang nito, matatagpuan ang trigger_point. Gumagana ito nang maayos, ngunit kailangan mo ng mas malaking buffer kaysa sa aktwal na laki ng display.

Ito rin ang dahilan na ang rate ng pag-refresh sa mas mababang mga setting ng timebase ay mas mabagal kaysa sa maaari mong asahan. Kapag ginamit mo ang setting na 200ms / div ang isang screen na puno ng data ay 1 segundo, ngunit dahil doble ang dami ng mga conversion ay tapos na, tumatagal ng 2 segundo. Sa mas mabilis na mga setting ng timebase hindi mo ito masyadong mapapansin.

Ginagamit ang TIM3 upang makabuo ng timebase. Ito ay nagpapalitaw sa mga ADC ng bilis tulad ng kinakailangan ng napiling setting ng timebase. Ang orasan ng TIM3 ay 120MHz (tingnan ang PAG-OVERCLOCKING), ang maximum na bilang kung saan ito binibilang (ARR) ay tumutukoy kung paano ito umapaw o, sa ST wika ay nai-update nito. Sa pamamagitan ng TRGO, ang mga pag-update na pulso ay nagpapalitaw sa mga ADC. Ang pinakamababang dalas na nabubuo nito ay 160 Hz, ang pinakamataas ay 1.6MHz.

Hakbang 7: Mga ADC at DMA

Mga ADC at DMA
Mga ADC at DMA

Ang dalawang ADC ay nagko-convert ng boltahe sa kanilang mga input nang sabay-sabay, iniimbak nila ang dalawang 12 bit na halaga sa isang solong variable na 32bit. Kaya ang DMA ay may isang variable lamang bawat (doble) na conversion upang ilipat.

Upang magamit ang mga halagang ito kinakailangan na hatiin ang mga ito sa dalawang halaga upang magamit sila upang maipakita ang dalawang mga bakas. Tulad ng sinabi, ang mga ADC sa F103 ay hindi maaaring itakda sa iba pang mga resolusyon kaysa sa 12 piraso. Palagi silang nasa 12 bit mode at sa gayon ang mga conversion ay palaging kumukuha ng parehong bilang ng mga pulso ng orasan. Gayunpaman, sa overclocking ng mga ADC, 1.6 MSamples bawat segundo ay maaaring gawin (tingnan ang Extra: Overclocking).

Ang sanggunian ng ADCs ay Vdd, ang 3.3V rail. Upang mai-convert iyon sa mas maginhawang mga halaga (bawat dibisyon) Kinakalkula ko ang mga halaga ng mga nakatutok, sapagkat wala akong eksaktong mga halaga ng risistor na lumabas sa mga kalkulasyong iyon ang ilang mga pagwawasto ay ginagawa sa software.

Sa proyektong ito ginagamit ko ang DMA sa "regular-mode". Sa mode na ito ang DMA ay tumitigil sa paglilipat ng data (mula sa de ADCs sa memorya) kapag ang bilang ng mga salita (o kalahating salita o byte) lahat ay inililipat. Sa iba pang posibleng mode, "pabilog na mode" ang DMA ay itinatakda ang sarili nito at patuloy na paglilipat ng data nang hindi nagambala. Hindi ito gumana sa F103, napakabilis na na-o-overtake nito ang data sa adc_buffer bago ito mabasa ng natitirang programa. Kaya ngayon ang proseso ay ang mga sumusunod:

- I-setup ang DMA sa bilang ng data upang mailipat at paganahin ang DMA

- simulan ang pag-trigger ng mga ADC, hihilingin nito ang mga paglilipat ng DMA pagkatapos ng bawat (dobleng) conversion

- Matapos mailipat ang itinakdang bilang ng mga conversion, humihinto ang DMA

- agad ding itigil ang pag-trigger ng mga ADC

- gawin ang lahat ng kinakailangan ng pagmamanipula sa data sa memorya

- Ipakita ang mga bakas sa screen

- simulan muli ang proseso

Hakbang 8: User Interface

User Interface
User Interface

Ang isang 160 by 128 pixel screen ay hindi masyadong malaki at nais kong gamitin ang karamihan nito hangga't maaari. Kaya't walang bahagi nito na nakalaan para sa mga setting ng mga alon. Sa huling ilang mga hilera ay ipinapakita ang patayong pagiging sensitibo, timebase, antas ng pag-trigger at pag-trigger ng channel, ngunit kapag ang mga signal ay sapat na malaki lalabas sila sa parehong lugar. Ang pagpipilian na aktibo ay ipinapakita sa dilaw, ang natitira ay ipinapakita sa puti.

Hakbang 9: Pagbuo at Mga Posibleng Pagpapabuti

Pagbuo at Mga Posibleng Pagpapabuti
Pagbuo at Mga Posibleng Pagpapabuti
Pagbuo at Mga Posibleng Pagpapabuti
Pagbuo at Mga Posibleng Pagpapabuti
Pagbuo at Mga Posibleng Pagpapabuti
Pagbuo at Mga Posibleng Pagpapabuti
Pagbuo at Mga Posibleng Pagpapabuti
Pagbuo at Mga Posibleng Pagpapabuti

Medyo masaya ako sa proyektong ito. Gumagana ito nang maayos at ginagawa ang trabaho, ngunit maaaring mas mabuti ito.

Ang proyekto box ay masyadong maliit upang magkasya ang lahat sa kumportable, nagreresulta ito sa pagkakaroon upang ilagay ang mga bahagi sa ilalim ng Blue Pill. Upang gawing posible ang Blue Pill ay hindi maaaring solder sa "main-board" nang direkta. At dahil napakataas nito ay kinailangan kong alisin ang maraming bahagi mula sa Blue Pill, tulad ng mga jumper para sa pagpili ng BOOT0 at BOOT1 (mga bagay na hindi ko pa rin ginagamit) at kailangan ko pang ilipat ang kristal mula sa itaas hanggang sa ilalim ng ang pcb.

Mas pinahihirapan ko ang buhay sa pamamagitan ng paggamit ng mga konektor ng saging sa halip na mga konektor ng BNC o SMA, nangangahulugan ito na ang isang malaking bahagi ng perfboard ay isang "no-go-area", upang linawin sa aking sarili na inilagay ko ang kapton tape dito upang maiwasan ang aking sarili mula sa paglalagay ng mga bahagi dito.

Ang isa pang problema sa paglalagay ng lahat sa isang maliit na kahon ng proyekto ay ang analog at digital na mga circuit ay malapit na magkasama. Maaari mong makita na mayroong isang pulutong ng ingay na nakikita sa parehong mga bakas. Hindi ko man ito nagkaroon sa breadboard! Sa pamamagitan ng paglipat ng mga linya ng kuryente para sa mga analog at digital na circuit na malayo hangga't maaari isang maliit na pagpapabuti ang nagawa, ngunit hindi sapat para sa gusto ko. Ang pagbawas ng lahat ng mga halaga ng risistor sa mga analog na circuit ay mas malayo pa kaysa sa aking ginawa (ang paglaban sa input ay 100kOhm sa halip na 1MOhm) ay hindi nakatulong. Pinaghihinalaan ko na ang pagpapalit ng pinakamabilis na setting ng timebase (20us / div), na hindi maganda, ay magpapabuti din na may mas kaunting ingay sa mga signal.

Kung gagawin mo ang disenyo na ito sa isang "totoong" pcb, kasama ang lahat ng mga bahagi ng smd at magkakahiwalay na mga layer para sa analog, digital at kapangyarihan (iyon ang 4 na layer!) Marahil ay gagana itong napakahusay. Magiging mas maliit ito, hindi ito gagamit ng isang kumpletong Blue Pill ngunit ang F103 lamang at gagawing posible na ibigay ito sa isang hiwalay (malinis) na analog Vdda para sa mga ADC.

Bilang isang pangwakas na pagpasyahan nagpasya akong spray ang kahon ng itim, gumagawa ito ng pagbabago mula sa lahat ng mga beige box na mayroon ito.

Hakbang 10: Ang Code at isang Maikling Video

Hakbang 11: EXTRA: Overclocking

EXTRA: Overclocking
EXTRA: Overclocking

Tulad ng ginawa ko sa F03, nais kong makita kung gaano kahusay ma-overclock ang isang F103. Ang mga pagtutukoy para sa microcontroller na ito ay inaangkin na ang maximum na bilis ng orasan ay hindi dapat lumagpas sa 72MHz (na syempre ay mas mabilis na kaysa sa F030) ngunit nabasa ko sa maraming mga blog na ang overclocking ay madali, kaya bakit hindi?

Ang Blue Pill ay binigyan ng isang 8MHz na kristal, ang PLL ay nagpaparami na may salik na 9 hanggang 72MHz. Ang PLL ay maaaring madagdagan ng hanggang sa 16 na nagbibigay ng isang orasan ng 128MHz. Iyon ay walang problema sa lahat para sa aking Blue Pill, sa katunayan, lahat ng aking Blue Pills ay gumagana nang walang anumang mga problema sa 128MHz.

Ngunit ngayon nais kong malaman kung ano ang tunay na limitasyon. Kaya't tinanggal ko ang 8MHz na kristal at pinalitan ito ng isa sa 12MHz. Muli ay nadagdagan ko ang PLL multiplier hanggang sa tuluyang sumuko ang microcontroller. Nasa 168MHz iyon! Sa 156MHz gumagana pa rin ito ng maayos. Iniwan ko itong tumatakbo sa bilis na iyon nang maraming oras at hindi ko nakita itong nag-crash. Sa oscilloscope na ito naayos ko ang 120MHz, isang bilis na mapipili ng 12MHz na kristal at PLL sa 10, pati na rin ang isang 8 MHz na kristal at ang PLL sa 15. (tingnan ang SystemClock_Config sa main.c)

Mas mabilis ding gumana ang mga ADC, pinapatakbo ko sila sa 30MHz (sa halip na 14), gumagana pa rin sila ng maayos sa 60MHz, ang STMicroelectronics ay gumagawa ng ilang magagandang hardware!

Inilalagay ng STMicroelectronics ang mga limitasyong ito sa datasheet para sa magandang kadahilanan, ginagarantiyahan nila na gumagana ang microcontroller sa tinukoy na 72MHz sa ilalim ng lahat ng mga kundisyon.

Ngunit dahil hindi ko ginagamit ang microcontroller sa -40 Celsius, +85 Celsius, sa 2.0 Volt o 3.6 Volt lamang sa palagay ko ligtas na i-overclock ito. HUWAG gawin ito kapag nilayon mong ibenta ang isang aparato sa kanilang mga microcontroller, hindi mo alam kung saan sila gagamitin.

Inirerekumendang: