Mündəricat:

İkili İz Osiloskopu: 11 Addım (Şəkillərlə birlikdə)
İkili İz Osiloskopu: 11 Addım (Şəkillərlə birlikdə)

Video: İkili İz Osiloskopu: 11 Addım (Şəkillərlə birlikdə)

Video: İkili İz Osiloskopu: 11 Addım (Şəkillərlə birlikdə)
Video: Автомобильные стартеры (тест осциллографа) - BASEUS 1000A против 800A JUMP STARTER (USBC/MICRO) [RU] 2024, Iyul
Anonim
İki izli osiloskop
İki izli osiloskop

Əvvəlki mini osiloskopumu qurduğumda, ən kiçik ARM mikro nəzarətçimi STM32F030 (F030) performansını nə qədər yaxşı düzəldə biləcəyimi görmək istədim və çox gözəl bir iş gördü.

Şərhlərdən birində, STM32F103 (F103) olan "Mavi həb" in F030 ilə inkişaf etdirmə lövhəsindən daha yaxşı, bəlkə də daha ucuz ola biləcəyi irəli sürüldü. Ancaq mini osiloskop üçün inkişaf lövhəsini deyil, F030-u daha kiçik bir SMD-DIP lövhəsində istifadə etdim, buna görə mavi bir həb daha kiçik olmayacaq və bunun daha ucuz olacağına şübhə edirəm.

Kod Gitlab -da artıq mövcuddur:

gitlab.com/WilkoL/dual-trace-oscilloscope

Təchizat

Parça siyahısı: - plastik qutu - perfboard (iki tərəfli prototip lövhəsi 8x12 sm) - Mavi həb - ST7735s TFT displey - lityum -ion batareya - HT7333 3.3V aşağı düşmə tənzimləyicisi - MCP6L92 ikili opamp - TSSOP8 -dən DIP8 lövhəsinə - 12 MHz kristal (lazım deyil)) - fırlanan kodlayıcı plus düymə (2x) - powerswitch - banan terminalları (4x) - lityum -ion şarj cihazı - bir neçə rezistor və kondansatör - neylon boşluqlar, qoz -fındıq və vintlər

Alətlər:

- lehimləmə stansiyası - lehim 0,7 mm - bir az tel - yan kəsici - eynək və lup - qazma - multimetr - osiloskop - STLink -V2

Proqram təminatı:

- STM32IDE - STM32CubeMX - STLink Utility - LowLayer kitabxanası - ST7735s üçün uyğunlaşdırılmış kitabxana - Notepad ++ - Kicad

Addım 1: İnterleave və ya eyni vaxtda rejim

Interleave və ya eyni vaxtda rejim
Interleave və ya eyni vaxtda rejim
Interleave və ya eyni vaxtda rejim
Interleave və ya eyni vaxtda rejim

Mavi həb

Ancaq fikir var idi və bilirdim ki, F103 -də iki ADC var! Bu iki ADC -ni "interleave" rejimində birlikdə istifadə etsəydim, əvvəllər STM32F407 (F407) ilə etdiyim bir şey olardı. Nümunə götürmə sürəti iki dəfə artacaq. Bunu daha sürətli bir mikro nəzarətçi ilə birləşdirsəniz, mini osiloskopun böyük bir varisi olacaq.

İnterleave rejimi Qəribədir ki, F103 -dəki ADC -lər F030 (və F407) ilə müqayisədə daha az inkişaf etmişdir, qətnaməni seçə bilməzsiniz. Daha vacib olanı, iki ADC arasındakı vaxtı dəyişdirə bilməməyinizdir. İndi, aralıq rejimdən istifadə edərkən adətən nümunələr arasında ən qısa müddətdə nümunənin mümkün qədər tez olmasını istəyirsiniz, ancaq osiloskopla vaxtın dəyişdirilməsi zəruridir. Bəlkə də hələ də edilə bilər, mən peşəkar bir osiloskop dizaynçısı deyiləm, amma interleave-mode istifadə etmək planından imtina etdim.

Eyni vaxt rejimi

Ancaq iki ADC-nin olması daha çox seçim verir, iki ADC də "müntəzəm-eyni vaxtda" rejiminə təyin edilə bilər. Bəs ikili iz osiloskopu necə?

İki izli bir osiloskop hazırlamağa qərar verərək, mini osiloskopda olmayan bir seçim olan dəyişkən giriş həssaslığına sahib olmaq istədim. Bu, girişlərdə bir zəiflədici (və gücləndirici) deməkdir. Və bəlkə daha çox istəyərdim? Buna görə kiçik bir "varlıların" siyahısını tərtib etdim.

ARZU LİSTESİ

iki kanal

hər iki kanalda dəyişkən həssaslıq

hər iki kanalda tetiklenir

hər iki kanalda dəyişkən tətik səviyyəsi

dəyişən ofset

tək batareya gücü

mini-osiloskopla eyni qutuya yerləşdirin

Addım 2: Prototipləşdirmə

Prototipləşdirmə
Prototipləşdirmə
Prototipləşdirmə
Prototipləşdirmə

Həmişə olduğu kimi bu layihələrə çörək taxtasında başladım. (Şəkilə baxın) Və hər şeyi lövhədə lehimləməzdən əvvəl onun seçilmiş layihə qutusuna uyğun olub olmadığını öyrənməyə çalışıram. Uyğundur, ancaq yalnız. Bəzi hissələr ekranın altında, digərləri mavi həbin altında gizlənir. Yenə də, əksər layihələrimdə olduğu kimi, bu da birdəfəlik bir layihədir və bunun üçün bir PCB dizayn etməyəcəyəm.

Addım 3: Zəifləyicilər

Zəifləyicilər
Zəifləyicilər

Adi osiloskoplarda giriş zayıflatıcıları, kiçik siqnal röleləri ilə rezistorları açaraq söndürmə və gücləndirməni dəyişən sxemlərdir. Bu rölelərdən bir neçəsinə sahib olsam da, onların 4 Voltdan aşağı keçməyəcəyini bilirəm, bu o deməkdir ki, onlar yalnız tam yüklənmiş Lityum İon batareya (4.2V) ilə işləyəcəklər. Bu rezistorları dəyişdirmək üçün başqa bir üsula ehtiyacım var idi. Əlbəttə ki, yalnız mexaniki açarları quraşdıra bilərdim, amma bu, şübhəsiz ki, artıq layihə qutusuna sığmazdı, bəlkə daha yaxşı bir rəqəmsal potansiyometr sınayardım (əlimdə olan səs çox səs -küylüdür).

Sonra "analog açarları" düşündüm, bunlarla özüm rəqəmsal bir potensiometr edə bilərəm. Parça kolleksiyamda dörd analoq açarı olan CD4066 tapdım. Fikir, əks rezistora paralel olaraq rezistorları açaraq söndürərək bir opamp dəyişəninin geribildirim müqavimətçisidir.

Çox yaxşı işləyir, ancaq 4066 -da cəmi 4 açarın olması və 2 kanalın olması üçdən artıq həssaslıq səviyyəsinə çatmaq mümkün deyildi. Ən çox istifadə etdiyim gərginlik səviyyələri olduğu üçün bölmə başına 500mV, 1V və 2V seçdim. Ekran 6 hissəyə bölünür, beləliklə -1.5V ilə +1.5V, -3V ilə +3V və -6V ilə 6V arasında dəyişir.

"Virtual torpaq" ilə bu aralıqları yuxarı və aşağı hərəkət etdirə bilərsiniz, belə ki, hətta 0v-dən +12V-ə qədər mümkündür.

Addım 4: Virtual Zəmin

Virtual Zəmin
Virtual Zəmin
Virtual Zəmin
Virtual Zəmin

Osiloskopun tək bir elektrik xətti (3.3V) istifadə etməsi səbəbindən opampların virtual yer səviyyəsinə ehtiyacı var və ya işləməyəcək. Bu virtual yer səviyyəsi, TIM4 -ün bir çıxış kanalında PWM ilə hazırlanır, iş dövrü cəmi bir neçə faizdən təxminən yüz faizədək dəyişir. 1k rezistoru və 10uF kondansatörlü aşağı keçid filtri onu (demək olar ki) 0V -dan 3.3V -ə qədər gərginliyə çevirir. Kvadrat dalğasının tezliyi 100 kHz -dən aşağıdır, buna görə sadə aşağı keçid filtri kifayət qədər yaxşıdır.

Bu osiloskopun binasının sonunda, kanallar üçün iki ayrı ofset ola bilməyəcəyinizi başa düşdüm. Bunun səbəbi, tək bir enerji təchizatı ilə giriş səviyyəsinin opampların həqiqi yer səviyyəsindən ayrı olmasıdır. Beləliklə, hər iki kanal GND parametrini dəyişdirdiyiniz kimi eyni şəkildə hərəkət edir.

Addım 5: Rotary Encoders və Debugging

Rotary Enkoderlər və Hata Ayıklama
Rotary Enkoderlər və Hata Ayıklama
Rotary Encoders və Hata Ayıklama
Rotary Encoders və Hata Ayıklama

Mini osiloskopda bütün funksiyalar üçün yalnız bir fırlanan kodlayıcıdan istifadə etdim. Bu, ikili osiloskopun istifadəsini çox çətinləşdirərdi, buna görə burada ikisinə ehtiyacım var. Zəiflədicilər və virtual yer səviyyəsi üçün bir kodlayıcı, digər zaman bazası və tetikleme üçün kodlayıcı. Təəssüf ki, digər layihəmdə olduğu kimi, bu fırlanan kodlayıcılar çox "səs -küylüdür". O qədər pisdirlər ki, onları oxumağın standart üsulu olan "kodlayıcı rejimində" taymerlərlə işləməyəcəklər. Taymer TIM2 ilə hər 100usda kodlayıcıları yoxlayaraq bir sökülmə mexanizmi yaratmalı oldum. Bu zamanlayıcı öz növbəsində (yalnız) kodlayıcılarda bəzi fəaliyyətlər olduqda işə salınır, bu giriş portlarında EXTI funksionallığı ilə yoxlanılır. İndi kodlayıcılar yaxşı işləyir.

Gördüyünüz kimi, bir ekrana sahib olmaq da hata ayıklama məlumatlarını göstərmək üçün çox lazımlı ola bilər.

Addım 6: Ekran və Zaman Bazası

Ekran və vaxt bazası
Ekran və vaxt bazası

Ekranın 160 x 128 piksel qətnaməsi var, buna görə bir ekran üçün 160 nümunə lazımdır, ADC -lərin sürətini saniyədə 1,6 milyon nümunə halına gətirməyi bacardım və bu, çox sürətlənmiş mikrokontrolörlə (daha sonra). bölmə başına minimum 20us vaxt bazası (ekran başına 100us). Beləliklə, 10 kHz dalğa forması bütün ekranı dolduracaq.

Bu, əvvəllər hazırladığım mini osiloskopdan cəmi iki dəfə sürətlidir. Yaxşı, indi iki kanal var:-).

Dediyimiz kimi, ekran 160 piksel genişliyində olduğu üçün hər ekrana yalnız 160 dəyər lazımdır. Ancaq bütün tamponlar əslində 320 nümunədən ibarətdir. Beləliklə, DMA, ötürülmə tam kəsilməsini (TC) işə salmadan əvvəl 320 dəyər saxlayır. Bunun səbəbi tetiklemenin proqram təminatında olmasıdır. Nümunə götürmə təsadüfi bir anda başlayır, buna görə də tampondakı ilk dəyərin tətik nöqtəsinin olması lazım olan yer olması çox az ehtimal olunur.

Buna görə tətik nöqtəsi, trace_x_buffer vasitəsilə oxunaraq tapılır, əgər dəyər istədiyiniz tetikleyici dəyərindədirsə, əgər əvvəlki dəyər onun altındadırsa, trigger_ nöqtəsi tapılır. Bu olduqca yaxşı işləyir, amma həqiqi ekran ölçüsündən daha böyük bir tampona ehtiyacınız var.

Aşağı vaxt bazası parametrlərində yeniləmə sürətinin gözlədiyinizdən daha yavaş olmasının da səbəbi budur. 200ms/div ayarı istifadə edərkən, bir ekran məlumatı 1 saniyəyə bərabərdir, ancaq iki dəfə dönüşüm miqdarı edildiyinə görə 2 saniyə çəkir. Daha sürətli vaxt bazası parametrlərində bunu o qədər də hiss etməyəcəksiniz.

TIM3 vaxt bazası yaratmaq üçün istifadə olunur. Seçilmiş vaxt bazası ayarının tələb etdiyi sürətlə ADC -ləri işə salır. TIM3 saatı 120MHz -dir (bax: OVERCLOCKING), saydığı maksimum sayı (ARR) digərinin necə daşacağını və ya ST dilində yenilədiyini təyin edir. TRGO vasitəsilə bu yeniləmə impulsları ADC -ləri işə salır. Yaratdığı ən aşağı tezlik 160 Hz, ən yüksəki 1.6MHz -dir.

Addım 7: ADC və DMA

ADC və DMA
ADC və DMA

İki ADC eyni anda girişlərindəki gərginliyi çevirir, bu iki 12 bit dəyərini bir 32 bitlik dəyişəndə saxlayır. Beləliklə, DMA -nın (ikiqat) çevrilmə başına yalnız bir dəyişən var.

Bu dəyərləri istifadə etmək üçün onları iki dəyərə bölmək lazımdır ki, iki izi göstərmək üçün istifadə olunsun. Dediyimiz kimi, F103 -dəki ADC -lər 12 bitdən başqa digər qətnamələrə təyin edilə bilməz. Həmişə 12 bit rejimindədirlər və buna görə də dönüşümlər həmişə eyni sayda saat nəbzini alır. Yenə də, ADC -lərin həddindən artıq yüklənməsi ilə saniyədə 1,6 MS nümunəsi edilə bilər (bax Əlavə: Overclock).

ADC -lərin istinadı 3.3V dəmir yolu olan Vdddir. Bunu daha əlverişli dəyərlərə çevirmək üçün (bölmə başına) zəiflədicilərin dəyərlərini hesabladım, çünki bu hesablamalardan çıxan dəqiq müqavimət dəyərlərinə malik olmadığım üçün proqramda bəzi düzəlişlər edilir.

Bu layihədə "normal rejimdə" DMA istifadə edirəm. Bu rejimdə DMA, sözlərin sayı (və ya yarım sözlər və ya baytlar) hamısı köçürüldükdə məlumatların (de ADC-dən yaddaşa) köçürülməsini dayandırır. Digər mümkün rejimdə, "dairəvi rejim" DMA özünü sıfırlayır və kəsilmədən məlumat ötürülməsinə davam edir. Bu F103 ilə işləmədi, o qədər sürətlidir ki, proqramın qalan hissəsi oxuya bilməyəndən əvvəl adc_buffer üzərindəki məlumatların üzərinə yazar. Beləliklə, indi proses aşağıdakı kimidir:

- DMA -nı ötürüləcək məlumatların sayına uyğun olaraq qurun və DMA -nı aktiv edin

- ADC -lərin tetiklenmesine başlayın, bunlar hər (ikiqat) dönüşümdən sonra DMA köçürmələri tələb edəcək

- müəyyən edilmiş dönüşüm sayı köçürüldükdən sonra DMA dayanır

- ADC -lərin işə salınmasını dərhal dayandırın

- Yaddaşdakı məlumatlar üzərində lazım olan bütün manipulyasiyalar edin

- ekranda izləri göstərin

- prosesi yenidən başladın

Addım 8: İstifadəçi İnterfeysi

İstifadəçi interfeysi
İstifadəçi interfeysi

160 x 128 piksellik ekran çox böyük deyil və mümkün qədər çox istifadə etmək istəyirəm. Beləliklə, cərəyan parametrləri üçün ayrılmış heç bir hissəsi yoxdur. Son bir neçə sətirdə şaquli həssaslıq, vaxt bazası, tətik səviyyəsi və tətik kanalı göstərilir, lakin siqnallar kifayət qədər böyük olduqda eyni sahədə görünür. Aktiv olan seçim sarı, qalanı ağ rəngdə göstərilir.

Addım 9: Bina və Mümkün Təkmilləşdirmələr

Bina və Mümkün Təkmilləşdirmələr
Bina və Mümkün Təkmilləşdirmələr
Bina və Mümkün Təkmilləşdirmələr
Bina və Mümkün Təkmilləşdirmələr
Bina və Mümkün Təkmilləşdirmələr
Bina və Mümkün Təkmilləşdirmələr
Bina və Mümkün Təkmilləşdirmələr
Bina və Mümkün Təkmilləşdirmələr

Bu layihədən çox məmnunam. Yaxşı işləyir və işi görür, amma daha yaxşı ola bilər.

Layihə qutusu hər şeyi rahat yerləşdirmək üçün çox kiçikdir, bu da komponentlərin Mavi həbin altına qoyulması ilə nəticələnir. Bunu etmək üçün Mavi həb birbaşa "ana karta" lehimlənə bilməz. Və bu, hər şeyi çox yüksək etdiyindən, BOOT0 və BOOT1 (heç istifadə etmədiyim şeylər) seçmək üçün atlayıcılar kimi Mavi Həbdən bir çox hissəni çıxarmalı oldum və hətta bülluru yuxarıdan aşağıya daşımalı oldum. pcb.

BNC və ya SMA bağlayıcıları əvəzinə banan bağlayıcıları istifadə edərək həyatı daha da çətinləşdirdim, bu, lövhənin böyük bir hissəsinin "heç bir yerə getməməyi" nəzərdə tuturdu, bunu özümə aydınlaşdırmaq üçün üzərimə kapton lent qoydum. üzərinə hissələr qoymaqdan.

Hamısını belə kiçik bir layihə qutusuna qoymağın başqa bir problemi, analog və rəqəmsal sxemlərin bir -birinə çox yaxın olmasıdır. Görə bilərsiniz ki, hər iki izdə kifayət qədər çox səs -küy var. Çörək taxtasında belə yox idi! Analog və rəqəmsal sxemlər üçün elektrik xətlərini mümkün qədər uzaqlaşdıraraq kiçik bir təkmilləşdirmə edildi, ancaq mənim zövqümə uyğun deyildi. Analog sxemlərdə bütün müqavimət dəyərlərinin məndən daha da azalması (giriş müqaviməti 1MOhm əvəzinə 100kOhm) kömək etmədi. Ən sürətli olmayan (20us/div) tetiklemenin siqnallarda daha az səs -küylə yaxşılaşacağından şübhələnirəm.

Bu dizaynı analoq, rəqəmsal və güc üçün bütün smd hissələri və ayrı -ayrı təbəqələri olan "real" bir pcb üzərində etsəniz (bu 4 qatdır!) Çox güman ki, çox yaxşı işləyəcək. Daha kiçik olacaq, tam bir Blue Pill istifadə etməyəcək, ancaq F103 və bu onu ADC üçün ayrı (təmiz) analoq Vdda ilə təmin etməyə imkan verəcək.

Son bir toxunuş olaraq qutuya qara çiləməyə qərar verdim, bütün bej qutulardan bir dəyişiklik edir.

Addım 10: Kod və Qısa Video

Addım 11: EXTRA: Overclock

ƏLAVƏ: Overclock
ƏLAVƏ: Overclock

Eynilə F03 ilə etdiyim kimi, bir F103 -ün nə qədər sürətləndirilə biləcəyini görmək istədim. Bu mikrokontrolörün spesifikasiyaları, maksimum saat sürətinin 72MHz -dən çox olmamasını iddia edir (əlbəttə ki, bu artıq F030 -dan daha sürətlidir), amma bir neçə bloqda oxuduğumun asan olduğunu oxudum, niyə də olmasın?

Mavi həb 8 MHz bir kristal ilə təchiz olunmuşdur, PLL 9 ilə 72 MHz arasında çoxalır. PLL 16 saata qədər artırıla bilər ki, bu da 128MHz -dir. Mavi həbim üçün heç bir problem yox idi, əslində bütün Mavi həblərim 128MHz -də heç bir problem olmadan işləyir.

Amma indi əsl limitin nə olduğunu öyrənmək istədim. Beləliklə, 8MHz kristalını çıxarıb 12MHz -dən biri ilə əvəz etdim. Yenə də mikro nəzarətçi nəhayət imtina etməyincə PLL çarpanını artırdım. Bu 168 MHz idi! 156MHz -də hələ də yaxşı işləyirdi. Saatlarla bu sürətlə işləyərkən buraxdım və heç vaxt çökdüyünü görmədim. Bu osiloskopda 12 MHz kristal və 10 PLL, 8 MHz kristal və 15 PLL ilə seçilə bilən bir sürət olan 120 MHz -ə qərar verdim (main.c -də SystemClock_Config -ə baxın)

ADC -lər indi daha sürətli işləyir, 30 MHz -də (14 əvəzinə) işləyirəm, hələ də 60 MHz -də yaxşı işləyirlər, STMicroelectronics bəzi gözəl avadanlıqlar hazırlayır!

STMicroelectronics, bu məhdudiyyətləri yaxşı bir səbəbdən məlumat cədvəlinə qoyur, mikro nəzarətçinin bütün şərtlərdə 72MHz -də işlədiyinə zəmanət verir.

Ancaq -40 Celsius, +85 Celsius -da mikrokontrolördən yalnız 2.0 Volt və ya 3.6 Voltda istifadə etmədiyim üçün onu aşmaq təhlükəsiz olduğunu düşünürəm. Bir cihazı mikrokontrolörləri ilə satmaq niyyətindəsiniz, bunu harada istifadə edəcəyinizi heç vaxt bilməyəcəksiniz.

Tövsiyə: