Daftar Isi:

Osiloskop Jejak Ganda: 11 Langkah (dengan Gambar)
Osiloskop Jejak Ganda: 11 Langkah (dengan Gambar)

Video: Osiloskop Jejak Ganda: 11 Langkah (dengan Gambar)

Video: Osiloskop Jejak Ganda: 11 Langkah (dengan Gambar)
Video: Bagian Pengaturan Osiloskop Analog Part 1 2024, Juli
Anonim
Osiloskop Jejak Ganda
Osiloskop Jejak Ganda

Ketika saya membangun osiloskop mini saya sebelumnya, saya ingin melihat seberapa baik saya dapat membuat mikrokontroler ARM terkecil saya menjadi STM32F030 (F030), dan itu berhasil.

Dalam salah satu komentar disarankan bahwa "Pill Biru" dengan STM32F103 (F103) mungkin lebih baik, lebih kecil dari papan pengembangan dengan F030 dan bahkan mungkin lebih murah. Tetapi untuk osiloskop mini saya tidak menggunakan papan pengembangan tetapi F030 pada papan SMD-DIP yang lebih kecil, jadi ada pil Biru pasti tidak akan lebih kecil dan saya ragu itu akan lebih murah juga.

Kode sekarang tersedia di Gitlab:

gitlab.com/WilkoL/dual-trace-oscilloscope

Perlengkapan

Daftar bagian: - kotak plastik - perfboard (papan prototipe dua sisi 8x12cm) - Pil Biru - Layar TFT ST7735s - baterai lithium-ion - Regulator putus sekolah rendah HT7333 3.3V - opamp ganda MCP6L92 - papan TSSOP8 ke DIP8 - kristal 12 MHz (tidak perlu)) - rotary encoder plus kenop (2x) - sakelar daya - terminal banana (4x) - papan pengisi daya lithium-ion - beberapa resistor dan kapasitor - spacer nilon, mur dan sekrup

Peralatan:

- stasiun solder - solder 0,7mm - beberapa kawat - pemotong samping - gelas dan pembesar - bor - multimeter - osiloskop - STLink-V2

Perangkat lunak:

- STM32IDE - STM32CubeMX - Utilitas STLink - Pustaka LowLayer - Pustaka yang disesuaikan untuk ST7735 - Notepad++ - Kicad

Langkah 1: Mode Interleave atau Simultan

Mode Interleave atau Simultan
Mode Interleave atau Simultan
Mode Interleave atau Simultan
Mode Interleave atau Simultan

pil biru

Tapi idenya ada di sana, dan saya tahu bahwa F103 memiliki dua ADC! Bagaimana jika saya menggunakan kedua ADC itu bersama-sama dalam mode "interleave", sesuatu yang telah saya lakukan sebelumnya dengan STM32F407 (F407). Kecepatan pengambilan sampel akan berlipat ganda. Itu, gabungkan itu dengan mikrokontroler yang lebih cepat dan itu akan menjadi penerus yang hebat untuk osiloskop mini.

Mode Interleave Anehnya, ADC di F103 kurang canggih daripada yang ada di F030 (dan F407), Anda tidak dapat memilih resolusi. Yang lebih penting adalah Anda juga tidak dapat mengubah waktu antara kedua ADC. Sekarang, ketika Anda menggunakan mode interleave biasanya Anda ingin pengambilan sampel secepat mungkin dengan waktu tersingkat di antara sampel mana pun, tetapi dengan osiloskop perlu mengubah waktunya. Mungkin masih bisa dilakukan, saya bukan desainer osiloskop profesional, tetapi saya membatalkan rencana untuk menggunakan mode interleave.

Modus simultan

Namun, memiliki dua ADC memberikan lebih banyak opsi, kedua ADC juga dapat diatur ke mode "reguler-simultan". Bagaimana dengan osiloskop jejak ganda?

Setelah memutuskan untuk mencoba membuat osiloskop jejak ganda, saya juga ingin memiliki sensitivitas input variabel, opsi yang tidak saya miliki pada osiloskop mini. Itu berarti attenuator (dan amplifier) pada input. Dan mungkin aku ingin lebih? Jadi saya membuat daftar kecil "bagus untuk dimiliki".

DAFTAR KEINGINAN

dua saluran

sensitivitas variabel pada kedua saluran

memicu di kedua saluran

tingkat pemicu variabel di kedua saluran

offset variabel

daya baterai tunggal

muat di kotak yang sama dengan osiloskop mini

Langkah 2: Pembuatan prototipe

Pembuatan prototipe
Pembuatan prototipe
Pembuatan prototipe
Pembuatan prototipe

Seperti biasa saya memulai proyek ini di papan tempat memotong roti. (Lihat gambar) Dan sebelum menyolder semua yang ada di perfboard, saya mencoba mencari tahu apakah dan bagaimana itu akan muat di kotak proyek yang dipilih. Itu cocok, tetapi hanya saja. Beberapa bagian disembunyikan di bawah layar, yang lain di bawah Pil Biru. Dan lagi, seperti untuk sebagian besar proyek saya, ini adalah proyek sekali saja dan saya tidak akan mendesain PCB untuk itu.

Langkah 3: Atenuator

Atenuator
Atenuator

Dalam osiloskop biasa, atenuasi input adalah sirkuit yang mengubah atenuasi dan amplifikasi dengan mengganti resistor masuk dan keluar dengan relai sinyal kecil. Sementara saya memiliki beberapa dari relai itu, saya tahu mereka tidak akan beralih kurang dari 4 Volt, itu berarti mereka hanya akan bekerja dengan baterai Lithium Ion yang terisi penuh (4.2V). Jadi saya membutuhkan cara lain untuk mengganti resistor tersebut. Tentu saja saya hanya dapat memasang sakelar mekanis, tetapi itu pasti tidak lagi sesuai dengan kotak proyek yang ada dalam pikiran saya, mungkin saya dapat mencoba potensiometer digital yang lebih baik lagi (yang saya miliki terlalu berisik).

Kemudian saya memikirkan "saklar analog", dengan itu saya dapat membuat potensiometer digital sendiri. Dalam koleksi suku cadang saya, saya menemukan CD4066 dengan empat sakelar analog. Idenya adalah untuk membuat resistor umpan balik dari variabel opamp dengan mengganti resistor masuk dan keluar sejajar dengan resistor umpan balik.

Ini bekerja dengan sangat baik, tetapi hanya memiliki 4 sakelar di 4066 dan memiliki 2 saluran, tidak mungkin membuat lebih dari tiga tingkat sensitivitas. Saya memilih 500mV, 1V dan 2V per divisi karena itu adalah level tegangan yang paling sering saya gunakan. Layar dibagi menjadi 6 divisi, sehingga membuat rentang -1.5V hingga +1.5V, -3V hingga +3V dan -6V hingga 6V.

Dengan "tanah virtual" Anda dapat memindahkan rentang ini ke atas dan ke bawah sehingga bahkan 0v hingga +12V dimungkinkan.

Langkah 4: Lapangan Virtual

Lapangan Virtual
Lapangan Virtual
Lapangan Virtual
Lapangan Virtual

Karena osiloskop menggunakan rel daya tunggal (3.3V), opamp membutuhkan permukaan tanah virtual atau mereka tidak akan berfungsi. Permukaan tanah virtual ini dibuat dengan PWM pada satu saluran keluaran TIM4, siklus kerjanya berubah dari hanya beberapa persen menjadi hampir seratus persen. Filter lolos rendah dengan resistor 1k dan kapasitor 10uF mengubahnya menjadi tegangan (hampir) 0V hingga (hampir) 3,3V. Frekuensi gelombang persegi hanya di bawah 100kHz, jadi filter low pass sederhana sudah cukup baik.

Agak terlambat dalam membangun osiloskop ini, saya menyadari bahwa Anda tidak dapat memiliki dua offset terpisah untuk saluran. Ini karena fakta bahwa dengan catu daya tunggal, level ground input harus terpisah dari level ground sebenarnya dari opamp. Jadi kedua saluran bergerak dengan cara yang sama seperti Anda mengubah pengaturan GND.

Langkah 5: Rotary Encoder dan Debugging

Rotary Encoder dan Debugging
Rotary Encoder dan Debugging
Rotary Encoder dan Debugging
Rotary Encoder dan Debugging

Pada osiloskop mini saya hanya menggunakan satu rotary encoder untuk semua fungsi. Itu akan membuat osiloskop ganda sangat sulit digunakan, jadi di sini saya membutuhkan dua. Satu encoder untuk attenuator dan virtual ground level dan encoder lainnya untuk timebase dan triggering. Sayangnya, seperti dalam proyek saya yang lain, rotary encoder ini sangat "berisik". Mereka sangat buruk sehingga mereka tidak akan bekerja dengan timer dalam "mode encoder", cara standar untuk membacanya. Saya harus membuat mekanisme debouncing dengan timer TIM2, memeriksa encoder setiap 100us. Timer ini pada gilirannya dimulai (hanya) ketika ada beberapa aktivitas pada encoder, ini diperiksa dengan fungsi EXTI pada port input. Sekarang encoder bekerja dengan baik.

Dan seperti yang Anda lihat, memiliki tampilan juga bisa sangat berguna untuk menampilkan informasi debug.

Langkah 6: Tampilan dan Timebase

Tampilan dan Timebase
Tampilan dan Timebase

Layar memiliki resolusi 160 x 128 piksel sehingga ada 160 sampel yang dibutuhkan untuk satu layar penuh, saya berhasil mempercepat ADC untuk melakukan 1,6 juta sampel per detik dan itu, dengan mikrokontroler yang di-overclock (lebih lanjut tentang itu nanti), memberikan basis waktu minimum 20us per divisi (100us per layar). Jadi bentuk gelombang 10kHz akan memenuhi seluruh layar.

Itu hanya dua kali lebih cepat dari osiloskop mini yang saya buat sebelumnya. Oh well, sekarang dengan dua saluran:-).

Seperti yang dikatakan, layar memiliki lebar 160 piksel sehingga hanya diperlukan 160 nilai per layar. Tetapi semua buffer sebenarnya berisi 320 sampel. Jadi DMA menyimpan 320 nilai sebelum memicu transmisi interupsi lengkap (TC). Ini karena pemicuan dilakukan dalam perangkat lunak. Pengambilan sampel dimulai pada saat yang acak, jadi sangat kecil kemungkinannya bahwa nilai pertama dalam buffer adalah tempat di mana titik pemicu seharusnya berada.

Oleh karena itu titik pemicu ditemukan dengan membaca trace_x_buffer, jika nilainya berada pada nilai pemicu yang diinginkan dan jika nilai sebelumnya tepat di bawahnya, titik_pemicu ditemukan. Ini bekerja dengan cukup baik, tetapi Anda memerlukan buffer yang lebih besar daripada ukuran tampilan sebenarnya.

Ini juga merupakan alasan mengapa kecepatan refresh pada pengaturan basis waktu yang lebih rendah lebih lambat dari yang Anda harapkan. Saat Anda menggunakan pengaturan 200ms/div, satu layar penuh data adalah 1 detik, tetapi karena menggandakan jumlah konversi yang dilakukan, itu membutuhkan 2 detik. Pada pengaturan timebase yang lebih cepat, Anda tidak akan terlalu memperhatikannya.

TIM3 digunakan untuk menghasilkan timebase. Ini memicu ADC dengan kecepatan seperti yang dipersyaratkan oleh pengaturan basis waktu yang dipilih. Jam TIM3-nya adalah 120MHz (lihat OVERCLOCKING), jumlah maksimum yang dihitungnya (ARR) menentukan bagaimana yang lain meluap atau, dalam bahasa ST diperbarui. Melalui TRGO, pulsa pembaruan ini memicu ADC. Frekuensi terendah yang dihasilkan adalah 160 Hz, tertinggi adalah 1.6MHz.

Langkah 7: ADC dan DMA

ADC dan DMA
ADC dan DMA

Kedua ADC mengubah tegangan pada input mereka pada saat yang sama, mereka menyimpan dua nilai 12 bit tersebut dalam satu variabel 32bit. Jadi DMA hanya memiliki satu variabel per (ganda) konversi untuk ditransfer.

Untuk menggunakan nilai-nilai ini, maka perlu untuk membaginya menjadi dua nilai sehingga dapat digunakan untuk menampilkan dua jejak. Seperti yang dikatakan, ADC di F103 tidak dapat diatur ke resolusi lain selain 12 bit. Mereka selalu dalam mode 12 bit sehingga konversi selalu mengambil jumlah pulsa clock yang sama. Namun, dengan overclocking ADC, 1,6 MS sampel per detik dapat dilakukan (lihat Ekstra: Overclocking).

Referensi ADC adalah Vdd, rel 3.3V. Untuk mengubahnya menjadi nilai yang lebih nyaman (per divisi) saya telah menghitung nilai attenuator, karena saya tidak memiliki nilai resistor yang tepat yang keluar dari perhitungan tersebut, beberapa koreksi dilakukan dalam perangkat lunak.

Dalam proyek ini saya menggunakan DMA dalam "mode biasa". Dalam mode ini DMA berhenti mentransfer data (dari de ADC ke memori) ketika jumlah kata (atau setengah kata atau byte) semuanya ditransfer. Dalam mode lain yang mungkin, "mode melingkar" DMA me-reset sendiri dan terus mentransfer data tanpa gangguan. Itu tidak bekerja dengan F103, sangat cepat sehingga menimpa data di adc_buffer sebelum program lainnya bisa membacanya. Jadi sekarang prosesnya adalah sebagai berikut:

- atur DMA ke jumlah data yang akan ditransfer dan aktifkan DMA

- mulai memicu ADC, ini akan meminta transfer DMA setelah setiap konversi (ganda)

- setelah jumlah konversi yang ditetapkan ditransfer, DMA berhenti

- segera juga hentikan pemicuan ADC

- melakukan semua manipulasi yang diperlukan pada data di memori

- tampilkan jejak di layar

- mulai proses lagi

Langkah 8: Antarmuka Pengguna

Antarmuka pengguna
Antarmuka pengguna

Layar 160 x 128 piksel tidak terlalu besar dan saya ingin menggunakannya sebanyak mungkin. Jadi tidak ada bagian yang disediakan untuk pengaturan arus. Dalam beberapa baris terakhir sensitivitas vertikal, basis waktu, level pemicu, dan saluran pemicu ditampilkan, tetapi ketika sinyal cukup besar, mereka akan muncul di area yang sama. Opsi yang aktif ditampilkan dalam warna kuning, sisanya ditampilkan dalam warna putih.

Langkah 9: Membangun dan Kemungkinan Peningkatan

Membangun dan Kemungkinan Peningkatan
Membangun dan Kemungkinan Peningkatan
Membangun dan Kemungkinan Peningkatan
Membangun dan Kemungkinan Peningkatan
Membangun dan Kemungkinan Peningkatan
Membangun dan Kemungkinan Peningkatan
Membangun dan Kemungkinan Peningkatan
Membangun dan Kemungkinan Peningkatan

Saya cukup senang dengan proyek ini. Ini bekerja dengan baik dan melakukan pekerjaan, tetapi bisa lebih baik.

Kotak proyek terlalu kecil untuk memuat semuanya dengan nyaman, ini mengakibatkan komponen harus diletakkan di bawah Pil Biru. Untuk memungkinkannya, Pil Biru tidak dapat disolder ke "papan utama" secara langsung. Dan karena ini membuatnya terlalu tinggi, saya harus menghapus banyak bagian dari Pil Biru, seperti jumper untuk memilih BOOT0 dan BOOT1 (hal yang tidak pernah saya gunakan) dan saya bahkan harus memindahkan kristal dari atas ke bawah pcb.

Saya membuat hidup lebih sulit dengan menggunakan konektor banana daripada konektor BNC atau SMA, itu berarti bahwa sebagian besar perfboard adalah "area terlarang", untuk memperjelas bagi diri saya sendiri, saya memasang pita kapton di atasnya untuk mencegah diri saya sendiri. dari menempatkan bagian di atasnya.

Masalah lain dengan meletakkan semuanya dalam kotak proyek kecil adalah bahwa sirkuit analog dan digital sangat berdekatan. Anda dapat melihat bahwa ada cukup banyak noise yang terlihat di kedua jejak. Ini saya bahkan tidak punya di papan tempat memotong roti! Dengan memindahkan saluran listrik untuk sirkuit analog dan digital sejauh mungkin, perbaikan kecil dibuat, tetapi tidak cukup untuk keinginan saya. Mengurangi semua nilai resistor di sirkuit analog lebih jauh dari yang saya lakukan (resistansi input 100kOhm, bukan 1MOhm) tidak membantu. Saya menduga bahwa pemicuan pada pengaturan basis waktu tercepat (20us/div), yang tidak bagus, juga akan meningkat dengan lebih sedikit noise pada sinyal.

Jika Anda membuat desain ini pada pcb "asli", dengan semua bagian smd dan lapisan terpisah untuk analog, digital, dan daya (itu 4 lapisan!) mungkin akan bekerja dengan sangat baik. Ini akan jauh lebih kecil, tidak akan menggunakan Pil Biru lengkap tetapi hanya F103 dan itu akan memungkinkan untuk memasoknya dengan Vdda analog (bersih) terpisah untuk ADC.

Sebagai sentuhan terakhir saya memutuskan untuk menyemprotkan kotak hitam, itu membuat perubahan dari semua kotak krem yang dimilikinya.

Langkah 10: Kode dan Video Pendek

Langkah 11: TAMBAHAN: Overclocking

TAMBAHAN: Overclocking
TAMBAHAN: Overclocking

Seperti yang saya lakukan dengan F03, saya ingin melihat seberapa baik F103 dapat di-overclock. Spesifikasi mikrokontroler ini mengklaim bahwa kecepatan clock maksimum tidak boleh melebihi 72MHz (yang tentu saja sudah lebih cepat dari F030) tetapi saya telah membaca di beberapa blog bahwa overclocking itu mudah, jadi mengapa tidak?

Pil Biru dilengkapi dengan kristal 8MHz, PLL mengalikannya dengan faktor 9 hingga 72MHz. PLL dapat ditingkatkan hingga 16 memberikan clock 128MHz. Itu tidak masalah sama sekali untuk Blue Pill saya, pada kenyataannya, semua Blue Pills saya bekerja tanpa masalah pada 128MHz.

Tapi sekarang saya ingin mencari tahu apa batas sebenarnya. Jadi saya menghapus kristal 8MHz dan menggantinya dengan salah satu dari 12MHz. Sekali lagi saya meningkatkan pengganda PLL sampai mikrokontroler akhirnya menyerah. Itu di 168MHz! Pada 156MHz masih bekerja dengan baik. Saya membiarkannya berjalan pada kecepatan itu selama berjam-jam dan tidak pernah melihatnya crash. Dalam osiloskop ini saya menetapkan 120MHz, kecepatan yang dapat dipilih dengan kristal 12MHz dan PLL pada 10, serta dengan kristal 8 MHz dan PLL pada 15. (lihat SystemClock_Config di main.c)

ADC sekarang juga bekerja lebih cepat, saya menjalankannya pada 30MHz (bukan 14), mereka masih bekerja dengan baik pada 60MHz, STMicroelectronics membuat beberapa perangkat keras yang bagus!

STMicroelectronics menempatkan batasan ini dalam lembar data untuk alasan yang baik, mereka menjamin bahwa mikrokontroler bekerja pada 72MHz yang ditentukan dalam semua kondisi.

Tetapi karena saya tidak menggunakan mikrokontroler pada suhu -40 Celcius, +85 Celcius, hanya pada 2,0 Volt atau 3,6 Volt, saya rasa aman untuk di-overclock. JANGAN lakukan ini ketika Anda berniat untuk menjual perangkat dengan mikrokontroler mereka, Anda tidak pernah tahu di mana mereka akan digunakan.

Direkomendasikan: