Dengan mikrokontroler yang baik dan waktu berlalu dengan cepat atau osiloskop akhir pekan

Beberapa waktu yang lalu, penulis baris-baris ini berupaya mengembangkan perekam kompak dari sinyal analog polar tunggal dalam 3 volt dengan kecepatan pembacaan tertinggi dan biaya serta ukuran serendah mungkin. Dalam daftar biaya serendah mungkin, saya juga memasuki sakit kepala dan memilih STM32F303 yang terkenal bagi saya. Saya ingat, Cortex-M4 72 megahertz dari perusahaan terkenal ini, dengan built-in 12 bit, konverter analog-ke-digital yang cukup gesit (ADC atau ADC, sesuka Anda) dan dengan antarmuka CAN di papan.


Pendaftar kecil seperti itu membutuhkan beberapa lusin. Dan kehadiran casing mikrokontroler dengan 48 kaki terinspirasi harapan bahwa akan mungkin untuk memanggil pembaca ini ringkas. Antarmuka CAN, yang dengannya saya sudah memiliki hubungan yang baik, memberi saya kesempatan untuk menggabungkan semua jazz ini dengan cara yang cukup nyaman.


Kecepatan yang pada akhirnya semuanya bekerja ternyata cukup cocok untuk menyatakan operabilitas dari pendekatan yang dipilih. Itu mungkin untuk mencapai langkah pengambilan sampel setengah mikrodetik. Sakit kepala dan assembler tidak bisa dihindari, tetapi siapa yang sekarang mengingat ini?


Namun, beberapa sedimen tetap ada. Pikiran tetap bahwa, dalam hal kecepatan, tidak semuanya diperas.


Dan sekarang, seri STM32G4 baru-baru ini muncul dengan frekuensi clock hingga 170 megahertz dengan opsi dalam paket kecil, dan dengan ADC cepat yang hampir sama di atas kapal dalam jumlah lima buah. Itu perlu untuk melakukan sesuatu.


Tidak ada yang berdiri di atas jiwa sekarang dan tidak perlu khawatir tentang tenggat waktu dan rencana.


Memang, jika Anda tidak memikirkannya, maka Anda bisa menikmati pekerjaannya. Tapi, sejujurnya, aku harus memikirkan waktu. Berpikir lama tentang waktu kecil (dan apa, secara puitis).


Pikiran itu mengisyaratkan dirinya bahwa kita harus memulai sedikit dari ujung yang lain. Artinya, kita harus melanjutkan dari waktu sesingkat mungkin untuk pengambilan sampel ADC, yang, berdasarkan uraian, membutuhkan 2,5 siklus clock dan berjumlah 62,5 nanodetik pada 40 MHz (160 MHz / 4). Kemudian langkah pengambilan sampel 100 nanodetik menunjukkan dirinya. Jumlahnya bulat dan, yang paling penting, cukup kecil dan indah, mengapa tidak mencobanya?


Selain itu, papan NUCLEO-G474RE yang cocok untuk eksperimen muncul untuk dijual dan dibeli, dan masuk akal untuk menambahkan papan tempat memotong roti tambahan dengan dua konektor dua baris untuk menyolder semua jenis kabel dan bagian ke papan tempat memotong roti dan tidak merusak yang utama. Begini tampilannya yang sudah jadi.



Di sana, di bawah, ada beberapa kabel dan resistor dengan kapasitor, terima kata-kata saya untuk itu.


Sekarang Anda perlu menerapkan sinyal listrik yang cocok untuk keempat ADC sekaligus, kemudian jalankan satu demi satu dengan langkah konstan (pada awalnya, saat debugging, tidak terlalu pendek). Mengapa empat? Sesuai dengan deskripsi, setiap ADC menghabiskan 15 siklus clock atau 0,025 * 15 = 375 nanodetik (hampir 400) per konversi. Oleh karena itu, pada langkah 100, konveyor empat ADC diperlukan.


Sirkuit RC digunakan sebagai sinyal input, yang mana tegangan hanya disuplai dari kaki pengontrol. Saya menetapkan kaki ini untuk mengontrol timer TIM5 dalam mode pulsa tunggal.


Diagram pengkabelan minimum tampak seperti gambar di bawah ini.



ADC1-ADC4 terlibat. Kedalaman bit dapat dikurangi untuk beberapa peningkatan kecepatan, tetapi 12 bit lebih besar dari itu, karena saya tidak ingin kehilangan keakuratan pengukuran. Untuk memulai setiap ADC dalam urutan yang diperlukan dan dengan langkah yang diperlukan, tiga timer digunakan (TIM2, TIM3, TIM4) dan timer lain (TIM1) digunakan untuk menyinkronkan ketiga di atas. Gambar 2 di bawah ini menunjukkan sinyal di mana semuanya dibangun.



Tanda panah hijau menunjukkan tepi pulsa di mana masing-masing ADC1-ADC4 konverter dipicu.


Untuk mendapatkan 100 nanodetik yang direncanakan, kami harus menurunkan frekuensi clock menjadi 160 megahertz, sehingga semuanya akan sepenuhnya dibagi sebagaimana mestinya. Pada awalnya, langkah ini diatur jauh lebih lambat, 4 mikrodetik, untuk dengan tenang memeriksa pengoperasian timer menggunakan interupsi, port keluaran dan osiloskop. Kemudian, dengan interupsi, itu sudah di-debug dan mendapatkan akses langsung ke memori. Pada akhirnya, hanya satu interupsi yang diproses - ini adalah gangguan akhir pekerjaan dari saluran keempat (terakhir) akses langsung ke memori. Gambar di bawah ini menunjukkan koneksi unit perangkat keras yang terlibat dalam proses, serta empat buffer memori output.



Dari empat buffer memori (pada gambar di sebelah kanan), sampel dikumpulkan secara terprogram dalam satu buffer hasil.


Dalam pengontrol ini, tidak seperti STM32F303, ada unit pengalihan permintaan (DMAMUX), yang memungkinkan Anda untuk mengalihkan sejumlah besar permintaan dari perangkat periferal ke hanya 16 saluran DMA1 dan 16 saluran DMA2. Dalam manual Referensi, permintaan output DMAMUX dihitung dari 0, dan input dari saluran saluran DMA dihitung dari 1. Saya tidak mengubahnya, saya meninggalkannya seperti pada sumber aslinya.


Timer TIM5 digunakan sebagai generator pulsa tunggal. Ini menyediakan mode pulsa tunggal yang nyaman. Kenyamanan terletak pada kemungkinan pengaturan waktu sebelum dimulainya denyut nadi dan pengaturan durasi denyut nadi itu sendiri. Dorongan ini keluar seperti yang ditunjukkan di bawah ini dalam gambar, disediakan oleh oscilloscope sewaan.



Osilogram menunjukkan bahwa kenaikan denyut nadi berlangsung 10 mikrodetik, yang berarti harus mengakomodasi sekitar 100 sampel.


Proyek ini dilakukan di IAR 8.4 secara manual (yaitu, tanpa Kuba dan Ball), tetapi, saya harap, ini akan dipahami oleh berbagai agama. Anda bisa melihatnya di sini .


Berikut adalah gambar isi buffer ADC1 yang terpisah dan hasil yang dikumpulkan dari empat sumber buffer di wilayah awal pulsa input.



Tetapi isi buffer ini berada di wilayah puncak pulsa (di mana nilainya mencapai 2508).



Seperti yang Anda lihat, 196-95 = 101 hitungan dihabiskan pada bagian dari awal pulsa hingga puncaknya.


Jadi laju samplingnya adalah 10 megahertz. Itu tidak bekerja pada kecepatan itu segera.


Untuk mencapai ini, saya harus menghentikan prosesor sebelum memulai akses memori langsung (DMA1). Ada baiknya bahwa Cortex-M4 memiliki instruksi assembler khusus WFI (Tunggu interupsi). Jika ini tidak dilakukan, maka prosesor akan menghalangi di bawah kaki DMA dan menempati bus dengan akses memori yang mungkin menunggu.


Jika Anda meningkatkan langkah penghitungan hingga 200 nanodetik, mereka akan berhenti mendorong dan sembuh dengan damai dan bahagia.


Jika kita melibatkan komparator COMP4 dalam pekerjaannya dan menghubungkan input positifnya (port PB0) dengan sinyal input, maka gunakan DAC (DAC1) dan hubungkan outputnya (CH1) dengan input negatif dari komparator (di dalam controller), kita mendapatkan perangkat threshold dengan ambang batas yang bisa disesuaikan. Gangguan dari pengoperasian pembanding akan memungkinkan Anda untuk memulai penghitung waktu jam umum TIM1 dan mendapatkan mode siaga, seperti dalam osiloskop.

Source: https://habr.com/ru/post/id468393/


All Articles