İçindekiler:
- Gereçler
- Adım 1: Araya Ekleme veya Eşzamanlı Mod
- 2. Adım: Prototipleme
- Adım 3: Zayıflatıcılar
- 4. Adım: Sanal Zemin
- Adım 5: Döner Kodlayıcılar ve Hata Ayıklama
- 6. Adım: Görüntüleme ve Zaman Tabanı
- Adım 7: ADC'ler ve DMA
- Adım 8: Kullanıcı Arayüzü
- 9. Adım: Bina ve Olası İyileştirmeler
- Adım 10: Kod ve Kısa Bir Video
- 11. Adım: EKSTRA: Hız Aşırtma
Video: Dual Trace Osiloskop: 11 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:16
Önceki mini osiloskopumu kurduğumda, en küçük ARM mikro denetleyicimi bir STM32F030 (F030) performansını ne kadar iyi yapabileceğimi görmek istedim ve iyi bir iş çıkardı.
Yorumlardan birinde, STM32F103'e (F103) sahip bir "Mavi Hap"ın daha iyi olabileceği, F030'lu geliştirme kartından daha küçük ve muhtemelen daha da ucuz olabileceği öne sürüldü. Ama mini osiloskop için geliştirme kartını değil F030'u daha da küçük bir SMD-DIP kartında kullandım, bu yüzden orada bir Mavi Hap kesinlikle daha küçük olmazdı ve daha ucuz olacağından şüpheliyim.
Kod artık Gitlab'da mevcut:
gitlab.com/WilkoL/dual-trace-oscilloscope
Gereçler
Parça listesi: - plastik kutu - perfboard (çift taraflı prototip kartı 8x12cm) - Mavi Hap - ST7735s TFT ekran - lityum iyon pil - HT7333 3.3V düşük çıkış regülatörü - MCP6L92 çift opamp - TSSOP8 - DIP8 kartı - 12 MHz kristal (gerekli değil)) - döner kodlayıcı artı düğme (2x) - güç anahtarı - muz terminalleri (4x) - lityum iyon şarj kartı - birkaç direnç ve kapasitör - naylon ara parçalar, somunlar ve vidalar
Aletler:
- lehimleme istasyonu - 0,7 mm lehim - biraz tel - yan kesici - gözlük ve büyüteç - matkap - multimetre - osiloskop - STLink-V2
Yazılım:
- STM32IDE - STM32CubeMX - STLink Yardımcı Programı - LowLayer kitaplığı - ST7735'ler için uyarlanmış kitaplık - Notepad++ - Kicad
Adım 1: Araya Ekleme veya Eşzamanlı Mod
Mavi hap
Ama fikir oradaydı ve F103'ün iki ADC'si olduğunu biliyordum! STM32F407 (F407) ile daha önce yaptığım bir şey olan "interleave" modunda bu iki ADC'yi birlikte kullansaydım ne olurdu? Örnekleme hızı iki katına çıkar. Bunu, daha hızlı bir mikro denetleyici ile birleştirirseniz, mini osiloskopun büyük bir halefi olur.
Ara ekleme modu Tuhaf bir şekilde, F103'teki ADC'ler, F030'daki (ve F407)'dekinden daha az gelişmiştir, çözünürlüğü seçemezsiniz. Daha da önemlisi, iki ADC arasındaki zamanlamayı da değiştiremezsiniz. Şimdi, interleave modunu kullandığınızda, genellikle herhangi bir örnekleme arasında en kısa süre ile örneklemenin mümkün olduğu kadar hızlı olmasını istersiniz, ancak bir osiloskop ile zamanlamayı değiştirmek gereklidir. Belki hala yapılabilir, ben profesyonel bir osiloskop tasarımcısı değilim, ancak araya girme modunu kullanma planından vazgeçtim.
eşzamanlı mod
Ancak, iki ADC'ye sahip olmak çok daha fazla seçenek sunar, iki ADC de "normal-eşzamanlı" moda ayarlanabilir. Çift iz osiloskopa ne dersiniz?
Çift izli bir osiloskop yapmaya karar verdiğimde, mini osiloskopta olmayan bir seçenek olan değişken giriş hassasiyetine de sahip olmak istedim. Bu, girişlerde bir zayıflatıcı (ve yükseltici) anlamına gelir. Ve belki daha fazlasını istedim? Bu yüzden küçük bir "olması güzel şeyler" listesi yaptım.
İSTEK LİSTESİ
iki kanal
her iki kanalda değişken hassasiyet
her iki kanalda tetikleme
her iki kanalda değişken tetik seviyesi
değişken ofset
tek pil gücü
mini osiloskopla aynı kutuya sığdır
2. Adım: Prototipleme
Her zamanki gibi bu projelere bir breadboard üzerinde başladım. (Resme bakın) Ve her şeyi perfboard'a lehimlemeden önce, seçilen proje kutusuna sığıp sığmayacağını ve nasıl sığacağını bulmaya çalışıyorum. Uygun, ama sadece. Bazı kısımlar ekranın altına, bazıları Mavi Hapın altına gizlenmiştir. Ve yine, çoğu projemde olduğu gibi, bu sadece bir kerelik bir proje ve bunun için bir PCB tasarlamayacağım.
Adım 3: Zayıflatıcılar
Normal osiloskoplarda giriş zayıflatıcıları, küçük sinyal röleleri ile dirençleri açıp kapatarak zayıflama ve amplifikasyonu değiştiren devrelerdir. Bu rölelerden bazılarına sahip olsam da, bunların 4 Volt'tan daha azına geçmeyeceklerini biliyorum, bu da onların yalnızca tam dolu bir Lityum İyon pil (4.2V) ile çalışacakları anlamına geliyor. Bu yüzden bu dirençleri değiştirmek için başka bir yola ihtiyacım vardı. Tabii ki sadece mekanik anahtarlar takabilirdim, ama bu kesinlikle aklımdaki proje kutusuna sığmayacaktı, belki tekrar daha iyi bir dijital potansiyometre deneyebilirdim (sahip olduğum çok gürültülü).
Sonra kendime dijital bir potansiyometre yapabileceğim "analog anahtarlar" düşündüm. Parça koleksiyonumda CD4066'yı dört analog anahtarla buldum. Buradaki fikir, geri besleme direncine paralel dirençleri açıp kapatarak bir opamp değişkeninin geri besleme direncini yapmaktır.
Çok iyi çalışıyor, ancak 4066'da sadece 4 anahtara sahip olmak ve 2 kanala sahip olmak, üçten fazla hassasiyet seviyesi yapmak mümkün değildi. En çok kullandığım voltaj seviyeleri olduğu için bölüm başına 500mV, 1V ve 2V seçtim. Ekran 6 bölüme ayrılmıştır, böylece -1,5V ila +1,5V, -3V ila +3V ve -6V ila 6V aralıkları sağlanır.
"Sanal-zemin" ile bu aralıkları yukarı ve aşağı hareket ettirebilirsiniz, böylece 0v ila +12V bile mümkündür.
4. Adım: Sanal Zemin
Osiloskop tek bir güç rayı (3.3V) kullandığından, opampların sanal bir zemin seviyesine ihtiyacı vardır, aksi takdirde çalışmazlar. Bu sanal zemin seviyesi, TIM4'ün bir çıkış kanalında PWM ile yapılır, görev döngüsü sadece yüzde birkaçtan neredeyse yüzde yüze değişir. 1k dirençli ve 10 uF kapasitörlü düşük geçişli bir filtre, bunu (neredeyse) 0V ila (neredeyse) 3.3V arasında bir voltaja dönüştürür. Kare dalganın frekansı 100kHz'in hemen altındadır, bu nedenle basit düşük geçiş filtresi yeterince iyidir.
Bu osiloskopun yapımında oldukça geç, kanallar için iki ayrı ofsetiniz olamayacağını fark ettim. Bunun nedeni, tek bir güç kaynağı ile giriş-zemin seviyesinin opampların gerçek zemin seviyesinden ayrı olması gerektiğidir. Böylece her iki kanal da GND ayarını değiştirdiğinizde aynı şekilde hareket eder.
Adım 5: Döner Kodlayıcılar ve Hata Ayıklama
Mini osiloskopta tüm fonksiyonlar için sadece bir döner kodlayıcı kullandım. Bu, ikili bir osiloskopun kullanımını çok zorlaştırır, bu yüzden burada iki taneye ihtiyacım var. Zayıflatıcılar ve sanal zemin seviyesi için bir kodlayıcı ve zaman tabanı ve tetikleme için diğer kodlayıcı. Ne yazık ki, tıpkı diğer projemde olduğu gibi, bu döner kodlayıcılar çok "gürültülü". O kadar kötüler ki, onları okumanın standart yolu olan "kodlayıcı modunda" zamanlayıcılarla çalışmazlar. Her 100us'da bir kodlayıcıları kontrol ederek, zamanlayıcı TIM2 ile bir geri tepme mekanizması yapmak zorunda kaldım. Bu zamanlayıcı sırayla (yalnızca) enkoderlerde bir aktivite olduğunda başlatılır, bu, giriş portlarındaki EXTI işlevselliği ile kontrol edilir. Şimdi kodlayıcılar iyi çalışıyor.
Ve görebileceğiniz gibi, bir ekrana sahip olmak, hata ayıklama bilgilerini görüntülemek için de çok kullanışlı olabilir.
6. Adım: Görüntüleme ve Zaman Tabanı
Ekranın 160 x 128 piksel çözünürlüğü var, bu nedenle bir ekran için gereken 160 örnek var, ADC'leri saniyede 1,6 milyon örnek yapacak şekilde hızlandırmayı başardım ve bu, çok fazla hız aşırtmalı mikrodenetleyici ile (daha fazlası için), verir bölüm başına minimum 20us zaman tabanı (ekran başına 100us). Böylece 10kHz'lik bir dalga formu tüm ekranı dolduracaktır.
Bu, daha önce yaptığım mini osiloskoptan sadece iki kat daha hızlı. Eh, şimdi iki kanallı:-).
Söylendiği gibi, ekran 160 piksel genişliğindedir, bu nedenle ekran başına yalnızca 160 değer gereklidir. Ancak tüm arabellekler aslında 320 örnek içerir. Böylece DMA, bir iletim tamamlama kesintisini (TC) tetiklemeden önce 320 değeri depolar. Bunun nedeni, tetiklemenin yazılımda yapılmasıdır. Örnekleme rastgele bir anda başlar, bu nedenle arabellekteki ilk değerin tetikleme noktasının olması gereken yer olması pek olası değildir.
Bu nedenle trace_x_buffer üzerinden okunarak tetikleme noktası bulunur, değer istenen tetikleme değerinde ise en önceki değer hemen altındaysa tetikleme_noktası bulunur. Bu oldukça iyi çalışıyor, ancak gerçek ekran boyutundan daha büyük bir arabelleğe ihtiyacınız var.
Daha düşük zaman tabanı ayarlarındaki yenileme hızının beklediğinizden daha yavaş olmasının nedeni de budur. 200ms/div ayarını kullandığınızda, veri dolu bir ekran 1 saniyedir, ancak dönüşüm miktarı iki katına çıktığı için bu 2 saniye sürer. Daha hızlı zaman tabanı ayarlarında bunu çok fazla fark etmeyeceksiniz.
TIM3, zaman tabanını oluşturmak için kullanılır. Seçilen zaman tabanı ayarının gerektirdiği hızda ADC'leri tetikler. TIM3'ün saati 120 MHz'dir (bkz. OVERCLOCKING), saydığı maksimum sayı (ARR), diğerlerinin nasıl taşacağını veya ST dilinde güncelleneceğini belirler. TRGO aracılığıyla bu güncelleme darbeleri ADC'leri tetikler. Ürettiği en düşük frekans 160 Hz, en yüksek frekans ise 1,6 MHz'dir.
Adım 7: ADC'ler ve DMA
İki ADC, girişlerindeki voltajı aynı anda dönüştürür, bu iki 12 bitlik değeri tek bir 32 bit değişkende saklar. Bu nedenle DMA'nın aktarılacak (çift) dönüşüm başına yalnızca bir değişkeni vardır.
Bu nedenle bu değerleri kullanmak için onları iki değere bölmek gerekir, böylece iki izi görüntülemek için kullanılabilirler. Söylendiği gibi, F103'teki ADC'ler 12 bitten başka çözünürlüklere ayarlanamaz. Her zaman 12 bit modundadırlar ve bu nedenle dönüşümler her zaman aynı sayıda saat darbesi alır. Yine de, ADC'lerin hız aşırtması ile saniyede 1,6 MSörnek yapılabilir (bkz. Ekstra: Hız Aşırtma).
ADC'lerin referansı, 3.3V ray olan Vdd'dir. Bunu daha uygun değerlere dönüştürmek için (bölme başına) zayıflatıcıların değerlerini hesapladım, çünkü bu hesaplamalardan çıkan tam direnç değerlerine sahip değilim çünkü yazılımda bazı düzeltmeler yapıldı.
Bu projede DMA'yı "normal modda" kullanıyorum. Bu modda, kelime sayısı (veya yarım kelime veya bayt) tümü aktarıldığında DMA veri aktarımını (de ADC'lerden belleğe) durdurur. Diğer olası mod olan "dairesel mod"da, DMA kendini sıfırlar ve kesintisiz olarak veri aktarmaya devam eder. Bu F103 ile çalışmadı, o kadar hızlı ki programın geri kalanı onu okuyamadan adc_buffer içindeki verilerin üzerine yazar. Yani şimdi süreç aşağıdaki gibidir:
- DMA'yı aktarılacak veri sayısına ayarlayın ve DMA'yı etkinleştirin
- ADC'lerin tetiklenmesini başlatın, bunlar her (çift) dönüşümden sonra DMA transferleri isteyecektir
- ayarlanan sayıda dönüşüm aktarıldıktan sonra DMA durur
- ayrıca ADC'lerin tetiklenmesini derhal durdurun
- bellekteki veriler üzerinde gereken tüm işlemleri yapın
- ekranda izleri göster
- işlemi yeniden başlatın
Adım 8: Kullanıcı Arayüzü
160 x 128 piksellik bir ekran çok büyük değil ve mümkün olduğu kadar çok kullanmak istiyorum. Yani akım ayarları için ayrılmış bir parçası yoktur. Son birkaç satırda dikey hassasiyet, zaman tabanı, tetikleme seviyesi ve tetikleme kanalı görüntülenir, ancak sinyaller yeterince büyük olduğunda aynı alanda görünecektir. Aktif olan seçenek sarı, kalanı beyaz olarak gösterilir.
9. Adım: Bina ve Olası İyileştirmeler
Bu proje için oldukça mutluyum. İyi çalışıyor ve işi yapıyor, ancak daha iyi olabilirdi.
Proje kutusu, her şeyi rahatça sığdırmak için çok küçüktür, bu da bileşenlerin Mavi Hap'ın altına yerleştirilmesine neden olur. Bunu mümkün kılmak için Mavi Hap, doğrudan "ana karta" lehimlenemezdi. Ve bu, her şeyi çok yüksek yaptığı için, BOOT0 ve BOOT1'i (hiç kullanmadığım şeyler) seçmek için atlama telleri gibi Mavi Hap'dan birçok parçayı çıkarmak zorunda kaldım ve hatta kristali yukarıdan aşağıya doğru hareket ettirmek zorunda kaldım. pcb.
BNC veya SMA konektörleri yerine banana konektörleri kullanarak hayatı daha zor hale getirdim, bu, perfboard'un büyük bir kısmının "gitmesi yasak alan" olduğu anlamına geliyordu, bunu netleştirmek için kendimi önlemek için üzerine kapton bant koydum üzerine parçalar koymaktan.
Her şeyi bu kadar küçük bir proje kutusuna koymanın bir başka sorunu da analog ve dijital devrelerin birbirine çok yakın olmasıdır. Her iki izde de oldukça fazla gürültünün göründüğünü görebilirsiniz. Bu, breadboard'da bile yoktu! Analog ve dijital devreler için güç hatlarını olabildiğince uzağa taşıyarak küçük bir iyileştirme yapıldı, ancak benim zevkime göre yeterli değildi. Analog devrelerdeki tüm direnç değerlerini benim yaptığımdan daha da azaltmak (giriş direnci 1MOhm yerine 100kOhm'dur) yardımcı olmadı. Harika olmayan en hızlı zaman tabanı ayarında (20us/div) tetiklemenin de sinyallerde daha az gürültü ile iyileşeceğinden şüpheleniyorum.
Bu tasarımı, tüm smd parçaları ve analog, dijital ve güç için ayrı katmanlarla (bu 4 katman!) "gerçek" bir pcb üzerinde yaparsanız, muhtemelen çok iyi çalışacaktır. Çok daha küçük olacak, tam bir Mavi Hap kullanmayacak, sadece F103 kullanacak ve bu, ADC'ler için ayrı (temiz) bir analog Vdda ile tedarik edilmesini mümkün kılacaktır.
Son bir dokunuş olarak kutuyu siyaha boyamaya karar verdim, sahip olduğu tüm bej kutulardan bir değişiklik yapıyor.
Adım 10: Kod ve Kısa Bir Video
11. Adım: EKSTRA: Hız Aşırtma
Tıpkı F03'te yaptığım gibi, bir F103'ün ne kadar iyi hız aşırtılabileceğini görmek istedim. Bu mikrodenetleyicinin özellikleri, maksimum saat hızının 72MHz'i geçmemesi gerektiğini iddia ediyor (elbette ki zaten F030'dan daha hızlıdır), ancak birkaç blogda hız aşırtmanın kolay olduğunu okumuştum, neden olmasın?
Mavi Hap 8 MHz kristal ile sağlanır, PLL bunu 9 ila 72 MHz faktörü ile çarpar. PLL, 128 MHz'lik bir saat vererek 16'ya kadar artırılabilir. Mavi Hapım için bu hiç sorun değildi, aslında tüm Mavi Haplarım 128MHz'de sorunsuz çalışıyor.
Ama şimdi gerçek sınırın ne olduğunu öğrenmek istiyordum. Bu yüzden 8MHz kristalini çıkardım ve yerine 12MHz kristalinden biriyle değiştirdim. Mikrodenetleyici sonunda vazgeçene kadar PLL çarpanını tekrar artırdım. Bu 168MHz'deydi! 156MHz'de hala iyi çalıştı. Saatlerce o hızda çalıştırdım ve çarptığını hiç görmedim. Bu osiloskopta, 12MHz kristal ve 10'da PLL ile ve ayrıca 8 MHz kristal ve 15'te PLL ile seçilebilen bir hız olan 120MHz'e karar verdim. (Main.c'de SystemClock_Config'e bakın)
ADC'ler artık daha hızlı çalışıyor, onları 30MHz'de (14 yerine) çalıştırıyorum, hala 60MHz'de iyi çalışıyorlardı, STMicroelectronics bazı güzel donanımlar yapıyor!
STMicroelectronics bu limitleri veri sayfasında iyi bir nedenle koyar, mikrodenetleyicinin her koşulda belirtilen 72MHz'de çalışmasını garanti eder.
Ancak mikrodenetleyiciyi -40 Santigratta, +85 Santigratta, sadece 2.0 Voltta veya 3.6 Voltta kullanmadığım için, overclock yapmanın güvenli olduğunu düşünüyorum. Mikrodenetleyicileri olan bir cihazı satmayı düşündüğünüzde bunu YAPMAYIN, nerede kullanılacağını asla bilemezsiniz.
Önerilen:
Mini Pille Çalışan CRT Osiloskop: 7 Adım (Resimlerle)
Mini Pille Çalışan CRT Osiloskop: Merhaba! Bu Eğitilebilir Kitapta size mini pille çalışan bir CRT osiloskopun nasıl yapıldığını göstereceğim. Bir osiloskop, elektronikle çalışmak için önemli bir araçtır; bir devrede dolaşan tüm sinyalleri görebilir ve sorun giderebilirsiniz
Osiloskop için Analog Ön Uç: 6 Adım (Resimlerle)
Osiloskop için Analog Ön Uç: Evde, Banggood, Aliexpress, Ebay veya diğer küresel çevrimiçi mağazalardan bir miktar para karşılığında satın alınabilecek bazı ucuz USB ses kartlarım var. Onları ne için kullanabileceğimi merak ediyordum ve düşük frekanslı bir PC kapsamı yapmaya karar verdim
DIY Osiloskop Kiti - Montaj ve Sorun Giderme Kılavuzu: 10 Adım (Resimlerle)
Kendin Yap Osiloskop Kiti - Montaj ve Sorun Giderme Kılavuzu: Bir elektronik alet tasarlarken, elektrik sinyallerinin varlığını ve biçimini gözlemlemek için bir osiloskopa çok sık ihtiyacım var. Şimdiye kadar eski bir Sovyet (1988 yılı) tek kanallı analog CRT osiloskop kullandım. Hala işlevsel
Rigol DS1054Z Dijital Osiloskop Nasıl Hacklenir ve Yükseltilir: 5 Adım (Resimlerle)
Rigol DS1054Z Dijital Osiloskop Nasıl Hacklenir ve Yükseltilir: Rigol DS1054Z çok popüler, giriş seviyesi 4 kanallı Dijital Depolama Osiloskopudur. 1 GSa/s'ye kadar gerçek zamanlı örnekleme hızına ve 50 MHz bant genişliğine sahiptir. Özellikle büyük TFT renkli ekranların okunması çok kolaydır. Bir in sayesinde
Osiloskop Kalkanı Üzerinde Arduino XY Ekranı: 7 Adım (Resimlerle)
Osiloskop Kalkanında Arduino XY Ekranı: Yıllar boyunca, Makerspace'imin yardımcı olduğu olaylara xy modunu kullanarak logoları ve metni gösteren bir osiloskop aldım. Normalde, titreşimi yumuşatmak için bir Ardiuno ve bir RC devresindeki PWM pinlerini kullanarak sürmek. Birkaç yıl