Isi kandungan:

Cara Mengukur Frekuensi Tinggi dan Siklus Tugas, Serentak, Menggunakan Pengawal Mikro: 4 Langkah
Cara Mengukur Frekuensi Tinggi dan Siklus Tugas, Serentak, Menggunakan Pengawal Mikro: 4 Langkah

Video: Cara Mengukur Frekuensi Tinggi dan Siklus Tugas, Serentak, Menggunakan Pengawal Mikro: 4 Langkah

Video: Cara Mengukur Frekuensi Tinggi dan Siklus Tugas, Serentak, Menggunakan Pengawal Mikro: 4 Langkah
Video: Ino Sub [Battle Through The Heavens] Koleksi Animasi Musim 3 2024, Julai
Anonim
Cara Mengukur Frekuensi Tinggi dan Siklus Tugas, Serentak, Menggunakan Mikrokontroler
Cara Mengukur Frekuensi Tinggi dan Siklus Tugas, Serentak, Menggunakan Mikrokontroler
Cara Mengukur Frekuensi Tinggi dan Siklus Tugas, Serentak, Menggunakan Mikrokontroler
Cara Mengukur Frekuensi Tinggi dan Siklus Tugas, Serentak, Menggunakan Mikrokontroler
Cara Mengukur Frekuensi Tinggi dan Siklus Tugas, Serentak, Menggunakan Mikrokontroler
Cara Mengukur Frekuensi Tinggi dan Siklus Tugas, Serentak, Menggunakan Mikrokontroler

Saya tahu apa yang anda fikirkan: "Hah? Ada banyak instruksi tentang cara menggunakan mikrokontroler untuk mengukur frekuensi isyarat. Menguap." Tetapi tunggu, ada yang baru dalam ini: Saya menerangkan kaedah mengukur frekuensi yang jauh lebih tinggi daripada yang boleh ditanggung oleh mikrokontroler (MCU) dan kitaran tugas isyarat - semuanya pada masa yang sama!

Julat frekuensi peranti merangkumi ~ 43 Hz hingga ~ 450 kHz, sementara kitaran tugas berkisar antara 1% hingga 99%.

Izinkan saya menjelaskan bahagian "tahan": MCU mengukur tempoh isyarat gelombang persegi, T, dengan mengesan masa antara dua peristiwa peralihan berikutnya. Contohnya, voltan rendah ke tinggi melompat pada salah satu pin I / O-nya. Ia melakukannya dengan mengira bilangan denyutan jam dalamannya sendiri. Naively, had atas untuk frekuensi yang diukur harus mematuhi teorema persampelan Nyqvist-Shannon; iaitu, kira-kira sama dengan separuh frekuensi jam MCU. Sebenarnya hadnya jauh lebih rendah, kerana MCU mesti melaksanakan kod untuk menangani gangguan, menyimpan pemboleh ubah, melakukan operasi aritmetik, hasil paparan, dll. Dalam percubaan saya dengan MCU 48 MHz, bilangan kitaran jam minimum antara peralihan yang dapat diukur adalah kira-kira 106. Oleh itu, had atas julat frekuensi yang dapat diukur dalam kes ini ialah 48, 000/212/2 = 226.4 kHz.

Walaupun MCU mengukur tempoh isyarat, ia juga dapat menentukan lebar nadi, P: masa voltan isyarat tetap tinggi. Dengan kata lain, masa antara peralihan rendah ke tinggi dan tinggi ke rendah. Kitaran tugas isyarat kemudian ditakrifkan sebagai peratusan berikut:

Tugas = 100% * P / T

Sama seperti dalam frekuensi, terdapat had praktikal pada lebar nadi. Dengan menggunakan contoh di atas, 106 putaran jam akan membatasi lebar nadi tidak kurang dari 2.21 mikrodetik. Atau, tidak kurang dari 50% pada 226.4 kHz.

Salah satu cara untuk meningkatkan had frekuensi atas isyarat gelombang persegi adalah penerapan pembahagi digital yang menggunakan flip-flop. Membahagi frekuensi input dengan n akan memanjangkan julat atas yang boleh diukur n kali. Ini adalah berita baik, pembahagi digital mempunyai satu kelemahan asas: isyarat terbahagi kehilangan maklumat lebar nadi (dan kitaran tugas)! Oleh kerana cara pembahagi berfungsi, output mereka selalu 50% kitaran tugas. Sayang…

Akan tetapi, di halaman berikut, saya akan menunjukkan cara membahagi frekuensi secara digital dan mengekalkan lebar nadi asal yang membolehkan saya mengukur isyarat melebihi had yang dikenakan oleh pengiraan langsung.

Langkah 1: Bahagian Frekuensi Digital

Bahagian Frekuensi Digital
Bahagian Frekuensi Digital
Bahagian Frekuensi Digital
Bahagian Frekuensi Digital
Bahagian Frekuensi Digital
Bahagian Frekuensi Digital

Pembahagi frekuensi digital tradisional menggunakan flip-flop; tutorial ini menerangkan prinsip bagaimana membina pembahagi menggunakan flip-flop JK standard. Ini menyelesaikan masalah frekuensi input yang terlalu tinggi untuk MCU, tetapi mempunyai satu kelemahan utama: isyarat terbahagi mempunyai kitaran tugas 50% tanpa mengira tugas isyarat input! Untuk melihat mengapa perkara itu berlaku, perhatikan dua angka pertama. Isyarat asal dengan titik T dan lebar nadi P dimasukkan ke dalam pin jam flip-flop JK sementara pin J dan Knya dipegang tinggi sepanjang masa (gambar pertama). Logik 3.3V diandaikan sepanjang masa. Mari kita anggap bahawa flip-flop dipicu oleh tepi positif (iaitu, naik) jam. Dalam keadaan ini, perubahan keadaan pin output ("flips" dan "flop" individu) berlaku setiap kali pin jam berubah dari rendah ke tinggi. Peralihan jam ke tinggi ke bawah (iaitu, kelebihan negatif) diabaikan sepenuhnya. Lihat angka kedua. Pin output, Q, memancarkan isyarat yang tempohnya dua kali lebih lama daripada tempoh asal, iaitu frekuensinya dibahagi dua. Lebar nadi keluaran selalu sama dengan T. Akibatnya, lebar nadi asal, P, hilang.

Menambah JK lain flip-flop dalam konfigurasi yang ditunjukkan pada rajah ketiga membahagikan frekuensi asal dengan 4. Menambah lebih banyak flip-flop dengan urutan yang sama membahagi frekuensi dengan kuasa seterusnya 2: 8, 16, 32, dll.

Masalah: bagaimana membahagi frekuensi gelombang persegi sambil mengekalkan lebar nadi?

Ideanya adalah dengan menambahkan kelebihan negatif JK yang dipicu flip-flop ke campuran. Mari namakannya "Neg FF"; lihat angka keempat. Di sini, "betul" bermaksud bahawa pin J dan K flip-flop baru diikat pada pin output Q dan Qbar, masing-masing, dari pembahagi-oleh-4 ("Pos FF") yang digambarkan pada gambar sebelumnya. (Di sini, "bar" adalah bar mendatar di atas simbol Q yang menunjukkan penolakan logik.) Untuk melihat apa yang dicapai, lihat jadual fungsi "Neg FF" pada rajah kelima: pin output Neg, Q dan Qbar, mencerminkan keadaan pin inputnya, J dan K, masing-masing. Yang bermaksud mereka mencerminkan keadaan Pos 'Q dan Qbar. Tetapi, tindakan flip-flop Neg mesti menunggu tepi negatif dari isyarat asal, yang tiba pada waktu P setelah kelebihan positif. Aha!

Bentuk gelombang yang dihasilkan digambarkan dalam rajah keenam. "Pos Q" mengeluarkan isyarat pada frekuensi 1/4, "Pos Qbar" itu terbalik, "Neg Q" mengikuti "Pos Q" digeser oleh lebar nadi P, dan "Neg Qbar" adalah terbalik. Anda boleh mengesahkan bahawa logik DAN "Pos Qbar" dan "Neg Q" menghasilkan aliran nadi yang dicirikan oleh frekuensi nadi asal P dan 1/4 frekuensi. Bingo!

Pada mulanya saya menggunakan tepat isyarat output ini untuk memberi makan MCU. Namun, ternyata bermasalah dengan lebar nadi yang sangat pendek kerana batasan 106 kitaran MCU yang disebutkan dalam Pengenalan. Saya telah menyelesaikan masalah kecil ini dengan memilih output lain: "Pos Qbar" DAN "Neg Qbar" sebagai gantinya. Satu melihat bentuk gelombang harus meyakinkan anda bahawa lebar nadi bentuk gelombang tertentu ini, P ', berbeza antara T dan 2T dan bukannya (0, T) untuk P. P dapat dipulihkan dengan mudah dari P' dengan:

P = 2T - P '

Langkah 2: Perkakasan yang Disyorkan

Perkakasan yang Disyorkan
Perkakasan yang Disyorkan
Perkakasan yang Disyorkan
Perkakasan yang Disyorkan
Perkakasan yang Disyorkan
Perkakasan yang Disyorkan

Saya sangat menyukai pendatang baru yang berkaitan dengan penggemar elektronik: MCU Atmel SAM D21 berdasarkan pemproses ARM Cortex M0 + 32-bit yang beroperasi pada kadar jam 48 MHz, jauh lebih tinggi daripada Atmel yang lebih tua. Untuk projek ini saya membeli:

  • Papan MCU ItsyBitsy M0 Express dari Adafruit
  • Saya mempunyai bateri LiPo yang boleh dicas semula dari Adafruit
  • Paparan Monochrome 128x32 SPI OLED (anda dapat meneka: Adafruit)
  • Dual flip-flop JK yang dicetuskan positif positif SN74HC109 dari Texas Instruments
  • Dual flip-flop JK yang dicetuskan oleh sisi negatif SN74HC112 dari Texas Instruments
  • Quadruple AND gate CD74AC08E dari Texas Instruments
  • Quadruple OR gate CD74AC32E dari Texas Instruments

Langkah 3: Litar

Litar
Litar
Litar
Litar

Angka pertama menunjukkan skema ringkas frekuensi / tugas meter. Logik 3.3 V CMOS diandaikan sepanjang masa. Oleh itu, amplitud gelombang kuasa dua input mestilah antara V yang sepadanIH aras (iaitu, 2 V) dan 3.3 V. Sekiranya tidak, anda perlu meningkatkannya atau menurunkannya dengan sewajarnya. Dalam kebanyakan kes, pembahagi voltan sederhana akan mencukupi. Sekiranya anda ingin merancang versi meter anda pada tahap logik yang berbeza, maka anda harus menggunakan pengawal mikro (MCU) lain, bateri, dan paparan yang berfungsi pada tahap yang diinginkan. Gerbang logik dan sandal yang digunakan dalam projek ini berfungsi dengan tahap logik di mana sahaja antara 2 V dan 6 V dan semestinya OK dalam kebanyakan kes.

Seperti yang ditunjukkan, MCU ItsyBitsy menggunakan pin 9-13 untuk berkomunikasi dengan paparan melalui protokol SPI perisian. Pin 3V memberikan kuasa ke seluruh litar. Pin input digital 3 menerima isyarat yang dianalisis, sementara pin 2 dan 4 mengawal sumber isyarat: sama ada isyarat langsung yang masuk melalui pintu AND3 (frekuensi input rendah), atau isyarat yang dibahagikan dengan 4 hingga gerbang AND4 (frekuensi input tinggi) seperti yang dijelaskan dalam Langkah 2 Kod, dibahas pada langkah berikutnya, secara automatik mengesan julat frekuensi masuk dan menukar sumber isyarat dengan tepat.

Skema tidak menunjukkan kerumitan sebenar sambungan cip digital. Gambar kedua menunjukkan bagaimana projek itu kelihatan di papan roti. Isyarat input datang melalui wayar merah ke pin 2CLK dari flip-flop tepi positif ganda. PERHATIAN: Biasanya, semua pin J dan K flip-flop ini harus ditahan tinggi, tetapi SN74HC109 khususnya mempunyai pin Kbar - pin K terbalik - sebagai gantinya. Oleh itu, pin ini mesti dibumikan! Flip-flop tepi negatif pertama di SN74HC112 mempunyai pin 1K dan 1J yang disambungkan ke pin 1Q dan 1Qbar SN74HC109. Flip-flop kedua dalam SN74HC112 tidak digunakan dan pin inputnya (2K, 2J, 2CLRbar) dibumikan. Semua pin tambahan lain PREbar (pratetap) dan CLRbar (jelas) di semua flip-flop mesti disambungkan ke logik tinggi. Jam dan pin output yang tidak digunakan dibiarkan tidak bersambung. Begitu juga, pin input yang tidak digunakan di semua gerbang dibumikan, sementara pin output yang tidak digunakan dibiarkan tidak tersambung. Seperti yang saya bincangkan di dalam "Invisible Killer of the Phone Ring" yang diarahkan, pin input yang tidak digunakan dari cip logik menghilangkan ayunan rawak dan menjimatkan kuasa bateri.

Langkah 4: Kod dan Mengukur Frekuensi Rendah

Secara semula jadi, semua tindakan berlaku dalam kod yang dipautkan di bawah. Apabila input yang masuk pada pin 3 beralih dari digital rendah ke tinggi, MCU mula mengira denyutan jam 48 MHz dalamannya. Ia mencatat detik peralihan tinggi ke rendah dan meneruskan penghitungan hingga suis rendah ke tinggi seterusnya, apabila ia memulakan semula keseluruhan proses lagi. Kiraan pertama mewakili lebar nadi, sementara kiraan keseluruhan mewakili tempoh isyarat. Dan itulah keseluruhan rahsia.

CPU mencatat peralihan ini melalui gangguan perkakasan. SAMD21 mempunyai beberapa jam; kod saya menggunakan TC3 satu. Pada mulanya, saya telah memulakan dengan membaca penyangga lembaran data M0 untuk banyak usaha dalam mengekod pengendali gangguan, tetapi tidak lama kemudian saya telah menemui kod yang sangat berkaitan dalam catatan Forum Arduino oleh pengguna electro_95, MartinL, dan Rucus yang sumbangannya diakui sewajarnya. Saya menggabungkan dan mengubah kod gabungan mereka ke dalam kod saya; menjimatkan banyak masa saya!

Seperti yang saya sebutkan sebelumnya, resolusi isyarat dibatasi oleh ~ 106 kitaran CPU untuk melaksanakan kod antara gangguan. Pembahagian digital dengan pemeliharaan lebar nadi menjaga frekuensi tinggi. Frekuensi rendah, sebaliknya menimbulkan cabaran lain: kerana kaunter jam TC3 panjang 16 bit, ia meluap setelah melepasi had jumlah 65, 536. Seseorang dapat menangani keadaan ini dengan menambahkan gangguan arus, tetapi memilih penyelesaian yang berbeza: TC3 dapat menggunakan jam CPU yang sudah diprakarsakan (iaitu, dibahagi perisian) dan bukannya satu perkakasan 48 MHz. Oleh itu, jika tempoh isyarat mendekati had limpahan, kod tersebut dapat memerintahkan TC3 untuk menggunakan kiraan 24 MHz untuk tempoh berikutnya dan, voila, pembilang turun di bawah 32, 768 kiraan. Untuk frekuensi yang lebih rendah, TC3 dapat diperintahkan untuk menghitung denyut 12 MHz, dan lain-lain. Pemuat yang sesuai ditentukan secara automatik berdasarkan frekuensi isyarat, dengan histeresis, untuk memastikan penghitung TC3 berada dalam batas limpahan. Akibatnya, hujung bawah julat peranti adalah sekitar 43 Hz.

Anda dipersilakan untuk memalsukan kod tersebut dan menggunakannya dalam projek anda, tetapi sila nyatakan sumbernya semasa menerbitkan hasil.

Pautan ke kod.

Disyorkan: