Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Cara Menghasilkan Bentuk Gelombang Presisi Tinggi Menggunakan DAC dan PCB Khusus

Dalam artikel ini, kami' akan mengembangkan firmware yang akan berfungsi sebagai dasar untuk pembuatan sinyal berkecepatan tinggi dan presisi tinggi.

Baru-baru ini saya merancang PCB generator bentuk gelombang arbitrer (AWG) yang dibuat di sekitar mikrokontroler C8051F360 dan TxDAC dari Perangkat Analog.

Kedua IC ini berkomunikasi melalui antarmuka paralel yang memungkinkan saya menghasilkan sinyal analog frekuensi tinggi dengan mencari kecepatan maksimum mikrokontroler dapat memindahkan data ke DAC.

Dalam artikel ini saya tidak akan berusaha menjelaskan aspek desain perangkat keras, karena saya telah banyak membahas skema dan tata letak dalam serangkaian artikel teknis persiapan. Tiga dari artikel ini berfokus pada bagian skema tertentu (yaitu, mikrokontroler, DAC, dan sirkuit keluaran DAC), dan yang keempat membahas tata letak.

Tujuan

Tujuan dari proyek ini adalah untuk membuat kerangka kerja firmware yang memungkinkan kita dengan mudah memindahkan data digital dari mikrokontroler ke DAC, dan kemudian mengubah data ini menjadi sinyal analog. Board AWG ini memiliki potensi untuk beberapa fungsi yang menarik, tetapi langkah terpenting adalah membuat antarmuka yang andal, dapat diperluas, dan presisi tinggi antara MCU dan DAC. Kami akan memverifikasi antarmuka ini dengan menghasilkan bentuk gelombang ramp dan dengan melakukan beberapa analisis osiloskop.

Persyaratan

Waktu Presisi Tinggi

Banyak aplikasi mikrokontroler memiliki sedikit jika ada kebutuhan untuk waktu yang sangat akurat. Inilah sebabnya mengapa kita sering kali dapat membuat perangkat yang sukses di mana satu-satunya sumber clock adalah osilator internal MCU yang berpresisi rendah. Tapi AWGnya beda. Kami ingin menghasilkan sinyal yang sekonsisten mungkin dengan bentuk gelombang matematis ideal yang berfungsi sebagai bahan sumber, dan ini berarti kami memerlukan frekuensi sinyal yang dapat diprediksi dan laju pengambilan sampel DAC yang konsisten.

Penggunaan Prosesor yang Efisien

Meskipun PCB khusus ini hampir sepenuhnya dikhususkan untuk menghasilkan bentuk gelombang, kita perlu memastikan bahwa kerangka kerja firmware-plus-perangkat keras ini dapat dengan mudah dimasukkan ke dalam aplikasi lain. Oleh karena itu, kami ingin agar firmware kami dapat menghasilkan bentuk gelombang yang stabil dan presisi tinggi, tetapi tanpa membuat prosesor sama sekali tidak tersedia untuk tugas lain.

Kecepatan Maksimum

Kita hidup di dunia frekuensi tinggi, dan AWG ini tidak akan banyak berguna jika maksimal pada 1 kHz. Sejujurnya, ini adalah desain yang sederhana dan berbiaya rendah, dan kami tidak dapat mengharapkannya untuk membuat bentuk gelombang DQPSK 915 MHz yang siap untuk transmisi pita ISM. Tetapi kami ingin mendapatkan bandwidth sebanyak yang kami bisa dari perangkat ini, dan ini menjadi lebih menantang ketika kami mengingat bahwa frekuensi pengambilan sampel secara signifikan lebih tinggi daripada frekuensi sinyal sebenarnya. Terlepas dari teorema Nyquist–Shannon, saya menginginkan setidaknya lima sampel per siklus, dan sepuluh adalah preferensi saya. Jadi, meskipun kami berhasil mendorong laju pengambilan sampel hingga 10 MHz, bentuk gelombang kami akan turun dalam kisaran 1-2 MHz.

Desain perangkat keras sudah mencerminkan pentingnya pengoptimalan kecepatan:Saya memilih mikrokontroler yang beroperasi pada frekuensi inti hingga 100 MHz, dan saya menerapkan bus paralel yang meminimalkan overhead yang diperlukan untuk memindahkan data dari memori MCU ke pin input DAC.

Rasio Pengambilan Sampel

Board AWG memiliki sumber clock berperforma tinggi (osilator MEMS dengan stabilitas frekuensi keseluruhan ±50 ppm). Firmware perlu menggunakan basis waktu ini untuk membuat sinyal jam stabil yang menggerakkan sirkuit pembaruan DAC. Ketika saya menginginkan sinyal pengaturan waktu berkualitas tinggi, saya selalu beralih ke perangkat keras, dan dalam hal ini saya menggunakan programmable counter array (PCA) untuk menghasilkan jam 500 kHz dari osilator eksternal 10 MHz.

Saya menggunakan program Silicon Labs Config2 untuk konfigurasi perangkat keras saya, karena C8051F360 tidak didukung oleh alat konfigurasi yang disertakan ke Simplicity Studio. Berikut adalah konfigurasi umum untuk modul PCA:

PCA diaktifkan dan basis waktu adalah jam sistem. Pada titik ini, frekuensi clock sistem sama dengan frekuensi osilator eksternal (10 MHz), tetapi nanti kita akan menggunakan loop penguncian fase mikrokontroler untuk mendapatkan frekuensi inti yang lebih tinggi. Sinyal clock DAC dihasilkan oleh modul PCA 0 yang dikonfigurasi untuk mode “output frekuensi”:

Mari kita lihat jam laju sampel. Lingkup MDO3104 saya dari Tektronix memiliki beberapa kemampuan pengukuran yang cukup canggih yang akan membantu kami menilai kualitasnya.

Sebagaimana dikonfirmasi oleh pengukuran yang ditampilkan di bagian bawah tangkapan lingkup, frekuensinya persis seperti yang diharapkan (500 kHz), dan kami juga memiliki siklus tugas 50% yang sempurna; selanjutnya, statistik “Min” dan “Maks” menunjukkan bahwa frekuensi dan siklus kerja stabil dari waktu ke waktu.

Tambahan yang sangat membantu untuk fungsi pengukuran ini adalah standar deviasi ("Std Dev"). Standar deviasi menunjukkan seberapa besar nilai cenderung menyimpang dari mean, dan dalam situasi ini adalah cara cepat dan mudah untuk menilai ketidaksempurnaan dalam frekuensi dan siklus sinyal clock. Kedua standar deviasi sangat rendah:13,54 Hz adalah 0,0027% dari frekuensi nominal, dan 2,117×10 –3 hanya 0,0042% dari siklus tugas biasa.

Kita dapat mengambil analisis ini selangkah lebih maju dengan melihat histogram dari salah satu tepi jam. Jika kita mengatur cakupan untuk memicu di tepi jatuh dan kemudian memperbesar tepi naik, posisi tepi naik akan bergeser sesuai dengan jitter sinyal. Kami kemudian dapat menambahkan histogram bentuk gelombang horizontal untuk melacak jitter ini dan mengungkapkan distribusinya. Namun, dalam kasus ini, tidak banyak yang bisa dilihat, karena jitternya sangat rendah.

Gangguan Eksternal

Kami sekarang memiliki gelombang persegi yang mengontrol sirkuit keluaran DAC; tugas selanjutnya adalah menyinkronkan pembaruan data MCU dengan gelombang persegi ini. Kami akan melakukan ini dengan melampirkan interupsi eksternal ke pin PCA yang mengeluarkan sinyal clock. DAC mengunci data input di naik tepi waktu, jadi kami ingin memperbarui sinyal data di jatuh tepian. Teknik sisi berlawanan ini adalah cara mendasar untuk memastikan bahwa data digital diperbarui dan distabilkan sebelum perangkat input menerima tepi jam yang aktif.

Jadi, saya mengaktifkan interupsi eksternal 0 (dilambangkan /INT0), memasangnya ke pin output sinyal-jam (P0.7), dan membuatnya sensitif terhadap tepi jatuh.

Anda mungkin terbiasa menggunakan interupsi eksternal untuk memantau masukan sinyal, tetapi dalam kasus ini dapat secara efektif menyinkronkan peristiwa firmware dengan sinyal yang dihasilkan oleh mikrokontroler itu sendiri. Ini sebenarnya adalah strategi yang sangat berguna ketika Anda berurusan dengan tugas waktu-kritis, karena interupsi eksternal 0 adalah interupsi dengan prioritas tertinggi, dan karena flag interupsi-pending-nya secara otomatis dihapus oleh perangkat keras (yang menghilangkan waktu apa pun yang diperlukan untuk menghapus tanda menggunakan pernyataan firmware).

ISR

Tindakan utama terjadi dalam rutinitas layanan interupsi /INT0. Byte data DAC berikutnya diambil dari memori (atau dihasilkan langsung oleh mikrokontroler) dan kemudian didorong ke P2; Saya menggunakan pernyataan #define untuk menjadikan “DAC_WORD” sebagai alternatif dari “P2”:

SI_INTERRUPT(INT0_ISR, INT0_IRQn)
{
DAC_WORD–;
}

Variabel kritis dalam upaya memaksimalkan laju pembaruan DAC adalah jumlah waktu yang diperlukan untuk mengeksekusi instruksi di ISR. (Dalam contoh ini kita hanya memiliki satu instruksi, tetapi tidak selalu demikian.) ISR harus dipanggil sekali untuk setiap edge aktif dari clock DAC, dan kita tidak dapat memanggil ISR sebelum selesai dieksekusi. Jadi, ketika kami mencoba untuk mendorong bandwidth kami ke maksimum, kami perlu melakukan apa pun yang kami bisa untuk meminimalkan waktu eksekusi ISR, dan kemudian kami akan mengatur frekuensi clock DAC kami.

Pernyataan tunggal yang ditunjukkan di atas (DAC_WORD–) menciptakan bentuk gelombang ramp, karena nilai DAC menurun secara linier ke nol dan kemudian berguling ke 255 dan mulai menurun lagi. Berikut adalah output dari DAC:

Anda mungkin telah memperhatikan bahwa bagian jalan analog meningkat menuju tegangan maksimum, sedangkan nilai DAC menurun menuju nol. Ini terjadi karena penguat keluaran DAC menggunakan konfigurasi pembalik.

Mari kita lihat satu tangkapan cakupan terakhir sebelum kita menyelesaikannya.

Baca Informasi Lebih Lanjut….

Cara Menghasilkan Bentuk Gelombang Presisi Tinggi Menggunakan DAC dan PCB Kustom


Proses manufaktur

  1. Sensor Suhu Python dan Raspberry Pi
  2. Cara Memeriksa dan Mengkalibrasi Sensor Kelembaban
  3. Cara Menghasilkan Bentuk Gelombang Presisi Tinggi Menggunakan DAC dan PCB Khusus
  4. Voltmeter DIY Menggunakan Arduino dan Smartphone
  5. Radio FM Menggunakan Arduino dan RDA8057M
  6. Cara Membuat Kompas menggunakan Arduino dan Mengolah IDE
  7. Cara Memilih Perusahaan Fabrikasi Prototipe PCB
  8. Bagaimana Pembuatan PCB Begitu Tepat?
  9. Kesalahan Umum Fabrikasi PCB, dan Cara Memperbaikinya
  10. Papan Sirkuit Cetak dan Bagaimana Fungsinya?