- MCP4921 DAC (Penukar Digital ke Analog)
- Komponen Diperlukan
- Skematik
- Penjelasan Kod
- Menguji Penukaran Digital ke Analog menggunakan PIC
Digital dan Analog adalah bahagian penting dalam Elektronik. Sebilangan besar peranti mempunyai ADC dan DAC dan ia digunakan apabila terdapat keperluan menukar isyarat sama ada dari analog ke digital atau digital ke analog. Juga isyarat dunia nyata seperti bunyi dan cahaya bersifat analog, jadi setiap kali isyarat dunia nyata ini harus digunakan, isyarat digital harus ditukar menjadi analog, misalnya untuk menghasilkan bunyi menggunakan Pembesar suara atau untuk mengawal sumber cahaya.
Jenis DAC lain ialah Pulse Width Modulator (PWM). PWM mengambil perkataan digital dan menghasilkan denyut digital dengan lebar denyut berubah. Apabila isyarat ini dihantar melalui penapis, hasilnya akan menjadi analog semata-mata. Isyarat analog boleh mempunyai pelbagai jenis data dalam isyarat.
Dalam tutorial ini, kita akan menghubungkan DAC MCP4921 dengan Microchip PIC16F877A untuk penukaran digital ke analog.
Di sini dalam tutorial ini kita akan menukar isyarat digital menjadi isyarat analog dan memaparkan nilai digital input dan nilai analog output pada LCD 16x2. Ia akan memberikan 1V, 2V, 3V, 4V, dan 5V sebagai output analog akhir yang ditunjukkan dalam video yang diberikan pada akhir. Anda boleh mengetahui lebih lanjut mengenai DAC dalam tutorial berharga kami mengenai interaksi DAC dengan papan Raspberry Pi, Arduino dan STM32.
DAC boleh digunakan dalam banyak aplikasi seperti Kawalan motor, Kecerahan Kontrol Lampu LED, Penguat Audio, Pengekod Video, Sistem Perolehan Data dan lain-lain. Sebelum melompat terus ke bahagian antara muka, penting untuk mempunyai gambaran keseluruhan mengenai MCP4921.
MCP4921 DAC (Penukar Digital ke Analog)
MCP4921 adalah DAC 12 bit, jadi MCP4921 akan memberikan resolusi output 12 bit. Resolusi DAC bermaksud bilangan bit digital yang boleh ditukar menjadi isyarat analog. Berapa banyak nilai yang dapat kita capai dari ini berdasarkan formula. Untuk 12-bit, itu adalah = 4096. Ini bermaksud DAC resolusi 12-bit dapat menghasilkan 4096 output yang berbeza.
Dengan menggunakan nilai ini, seseorang dapat mengira voltan langkah analog tunggal dengan mudah. Untuk mengira langkahnya, voltan rujukan diperlukan. Oleh kerana voltan logik untuk peranti adalah 5V, voltan langkah adalah 5/4095 (4096-1 kerana titik permulaan untuk digital bukan 1, ia adalah 0), iaitu 0.00122100122 milivolt. Jadi, perubahan 1 bit akan mengubah output analog dengan 0.00122100122.
Jadi, itu adalah bahagian penukaran. The MCP4921 adalah 8-pin IC. The rajah pin dan keterangan boleh didapati di bawah.
The MCP4921 IC berkomunikasi dengan pengawal mikro oleh protokol SPI. Untuk komunikasi SPI, perangkat harus menjadi master, yang mengirimkan data atau perintah ke perangkat luar yang disambungkan sebagai budak. Dalam sistem komunikasi SPI, beberapa peranti hamba dapat dihubungkan dengan satu Peranti Utama.
Untuk menyerahkan data dan perintah, penting untuk memahami daftar perintah.
Pada gambar di bawah, daftar arahan ditunjukkan,
The daftar arahan adalah suatu daftar 16-bit. Bit-15 hingga bit-12 digunakan untuk perintah konfigurasi. Input data dan konfigurasi ditunjukkan dengan jelas pada gambar di atas. Dalam projek ini, MCP4921 akan digunakan sebagai konfigurasi berikut-
Nombor Bit |
Konfigurasi |
Nilai Konfigurasi |
Bit 15 |
DAC A |
0 |
Bit 14 |
Tidak dibeli |
0 |
Bit 13 |
1x (V OUT * D / 4096) |
1 |
Bit 12 |
Bit Kawalan Turun Kuasa Output |
1 |
Jadi Perduaan adalah 0011 bersama dengan data yang ditentukan oleh D11 hingga D0 bit daftar. Data 16-bit 0011 xxxx xxxx xxxx perlu dihantar di mana MSB 4 bit pertama adalah konfigurasi dan selebihnya adalah LSB. Ia akan lebih jelas dengan melihat rajah pemasaan perintah tulis.
Mengikut rajah masa dan lembar data, pin CS rendah untuk keseluruhan tempoh penulisan arahan ke MCP4921.
Sekarang adalah masa untuk menghubungkan antara peranti dengan perkakasan dan menulis kod.
Komponen Diperlukan
Untuk projek ini, komponen berikut diperlukan-
- MCP4921
- PIC16F877A
- Kristal 20 MHz
- Paparan LCD watak 16x2.
- Perintang 2k -1 pc
- Kapasitor 33pF - 2 pcs
- Perintang 4.7k - 1 pc
- Berbilang meter untuk mengukur voltan keluaran
- Papan roti
- Bekalan kuasa 5V, Pengecas telefon boleh berfungsi.
- Banyak wayar cangkuk atau kabel berg.
- Persekitaran pengaturcaraan mikro dengan kit Programmer dan IDE dengan penyusun
Skematik
Litar Diagram untuk antara muka DAC4921 dengan PIC Microcontroller diberikan di bawah:
Litar dibina di Breadboard-
Penjelasan Kod
Kod lengkap untuk menukar isyarat Digital menjadi analog dengan PIC16F877A diberikan pada akhir artikel. Seperti biasa, pertama-tama kita perlu menetapkan bit konfigurasi dalam mikrokontroler PIC.
// PIC16F877A Konfigurasi Bit Tetapan // Pernyataan konfigurasi garis sumber 'C' // CONFIG #pragma config FOSC = HS // Oscillator Selection bit (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT dilumpuhkan) # pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT dilumpuhkan) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Voltan Rendah (Bekalan Tunggal) In-Circuit Serial Programming Enable bit (pin RB3 / PGM mempunyai fungsi PGM; pengaturcaraan voltan rendah diaktifkan) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Perlindungan kod data EEPROM dimatikan) #pragma config WRT = OFF // Memori Program Flash Menulis Aktifkan bit (Hapus perlindungan; semua memori program mungkin ditulis oleh kawalan EECON) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Perlindungan kod mati)
Garis kod di bawah digunakan untuk mengintegrasikan fail header LCD dan SPI, juga Frekuensi XTAL dan sambungan pin CS DAC dinyatakan.
Tutorial dan perpustakaan PIC SPI boleh didapati di pautan yang diberikan.
#sertakan
Funciton the SPI_Initialize_Master () sedikit diubah untuk konfigurasi berbeza yang diperlukan untuk projek ini. Dalam kes ini, daftar SSPSTAT dikonfigurasi sedemikian rupa sehingga data input diambil pada akhir waktu output data dan juga jam SPI yang dikonfigurasi sebagai Transmit berlaku pada peralihan dari mod keadaan aktif ke jam terbiar. Lain adalah sama.
batal SPI_Initialize_Master () { TRISC5 = 0; // Tetapkan sebagai output SSPSTAT = 0b11000000; // ms 74/234 SSPCON = 0b00100000; // ms 75/234 TRISC3 = 0; // Tetapkan sebagai output untuk mod hamba }
Juga, untuk fungsi di bawah ini, SPI_Write () diubah sedikit. Penghantaran data akan berlaku setelah penyangga dibersihkan untuk memastikan penghantaran data yang sempurna melalui SPI.
batal SPI_Write (char masuk) { SSPBUF = masuk; // Tuliskan data yang diberikan pengguna ke dalam buffer semasa (! SSPSTATbits.BF); }
Bahagian penting dalam program ini adalah pemacu MCP4921. Ini adalah bahagian yang agak rumit kerana arahan dan data digital disatukan untuk memberikan data 16-bit yang lengkap melalui SPI. Namun, logik itu jelas ditunjukkan dalam komen kod.
/ * Fungsi ini adalah untuk menukar nilai digital ke analog. * / void convert_DAC (nilai int yang tidak ditandatangani) { / * Ukuran Langkah = 2 ^ n, Oleh itu 12bit 2 ^ 12 = 4096 Untuk rujukan 5V, langkahnya adalah 5/4095 = 0.0012210012210012V atau 1mV (lebih kurang) * / bekas int yang tidak ditandatangani; MSB int yang tidak ditandatangani; int LSB yang tidak ditandatangani; / * Langkah: 1, simpan data 12 bit ke dalam bekas Misalkan data tersebut adalah 4095, dalam binari 1111 1111 1111 * / container = nilai; / * Langkah: 2 Membuat Dummy 8 bit. Oleh itu, dengan membahagi 256, 4 bit atas ditangkap dalam LSB LSB = 0000 1111 * / LSB = bekas / 256; / * Langkah: 3 Menghantar konfigurasi dengan menumbuk data 4 bit. LSB = 0011 0000 ATAU 0000 1111. Hasilnya adalah 0011 1111 * / LSB = (0x30) - LSB; / * Langkah: 4 Kontena masih mempunyai nilai 21bit. Mengeluarkan 8 bit yang lebih rendah. 1111 1111 DAN 1111 1111 1111. Hasilnya ialah 1111 1111 iaitu MSB * / MSB = 0xFF & bekas; / * Langkah: 4 Menghantar data 16 bit dengan membahagikan kepada dua bait. * / DAC_CS = 0; // CS rendah semasa penghantaran data. Seperti pada lembaran data, diperlukan SPI_Write (LSB); SPI_Write (MSB); DAC_CS = 1; }
Dalam fungsi utama, 'untuk gelung' digunakan di mana data digital untuk membuat output 1V, 2V, 3V, 4V, dan 5V dibuat. Nilai digital dikira melawan voltan Output / 0.0012210012210012 milivolt.
kekosongan utama () { system_init (); skrin_pengenalan (); nombor int = 0; int volt = 0; manakala (1) { untuk (volt = 1; volt <= MAX_VOLT; volt ++) { number = volt / 0.0012210012210012; clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("DATA Dihantar: -"); lcd_print_number (nombor); lcd_com (SECOND_LINE); lcd_puts ("Output: -"); lcd_print_number (volt); lcd_puts ("V"); tukar_DAC (nombor); __delay_ms (300); } } }
Menguji Penukaran Digital ke Analog menggunakan PIC
Litar terbina diuji menggunakan Multi-meter. Dalam gambar di bawah, voltan output dan data digital ditunjukkan pada LCD. Multi-meter menunjukkan bacaan dekat.
Kod Lengkap dengan video yang berfungsi dilampirkan di bawah.