- Komponen Diperlukan
- Modul MCP4725 DAC (Digital to Analog Converter)
- Komunikasi I2C dalam MCP4725
- Rajah dan Penjelasan Litar
- Pengaturcaraan STM32F103C8 untuk Penukaran Digital ke Analog
- Menguji DAC dengan STM32
Kita semua tahu bahawa Pengawal Mikro hanya berfungsi dengan nilai digital tetapi dalam dunia nyata kita harus menangani isyarat analog. Itulah sebabnya ADC (Analog to Digital Converter) ada untuk menukar nilai Analog dunia nyata menjadi bentuk Digital supaya mikrokontroler dapat memproses isyarat. Tetapi bagaimana jika kita memerlukan isyarat Analog dari nilai digital, jadi inilah DAC (Digital to Analog Converter).
Contoh mudah untuk penukar Digital ke Analog adalah merakam lagu di studio di mana seorang penyanyi artis menggunakan mikrofon dan menyanyikan sebuah lagu. Gelombang bunyi analog ini diubah menjadi bentuk digital dan kemudian disimpan dalam fail format digital dan ketika lagu dimainkan menggunakan fail digital yang tersimpan, nilai digital tersebut ditukar menjadi isyarat analog untuk output pembesar suara. Jadi dalam sistem ini DAC digunakan.
DAC boleh digunakan dalam banyak aplikasi seperti Kawalan motor, Kecerahan Kontrol Lampu LED, Penguat Audio, Pengekod Video, Sistem Perolehan Data dll.
Kami telah menghubungkan Modul DAC MCP4725 dengan Arduino. Hari ini kita akan menggunakan IC MCP4725 DAC yang sama untuk merancang penukar Digital ke Analog menggunakan Mikrokontroler STM32F103C8.
Komponen Diperlukan
- STM32F103C8
- MCP4725 DAC IC
- Potensiometer 10k
- Paparan LCD 16x2
- Papan roti
- Wayar Penyambung
Modul MCP4725 DAC (Digital to Analog Converter)
MCP4725 IC adalah 12-Bit Digital to Analog Converter Module yang digunakan untuk menghasilkan voltan analog output dari (0 hingga 5V) dan ia dikendalikan dengan menggunakan komunikasi I2C. Ia juga dilengkapi dengan EEPROM memori tidak bervolat.
IC ini mempunyai resolusi 12-Bit. Ini bermaksud kita menggunakan (0 hingga 4096) sebagai input untuk memberikan output voltan berkenaan dengan voltan rujukan. Voltan rujukan maksimum ialah 5V.
Formula untuk mengira Voltan Keluaran
Voltan O / P = (Voltan Rujukan / Resolusi) x Nilai Digital
Sebagai contoh jika kita menggunakan 5V sebagai voltan rujukan dan mari kita anggap bahawa nilai digital adalah 2048. Jadi untuk mengira output DAC.
Voltan O / P = (5/4096) x 2048 = 2.5V
Pinout MCP4725Di bawah ini adalah gambar MCP4725 dengan jelas menunjukkan nama pin.
Pin MCP4725 |
Gunakan |
KELUAR |
Voltan Analog Keluaran |
GND |
GND untuk Keluaran |
SCL |
Garisan Jam Bersiri I2C |
SDA |
Garis Data Bersiri I2C |
VCC |
Voltan Rujukan Input 5V atau 3.3V |
GND |
GND untuk input |
Komunikasi I2C dalam MCP4725
IC DAC ini dapat dihubungkan dengan mana-mana mikrokontroler menggunakan komunikasi I2C. Komunikasi I2C hanya memerlukan dua wayar SCL dan SDA. Secara lalai, alamat I2C untuk MCP4725 adalah 0x60. Ikuti pautan untuk mengetahui lebih lanjut mengenai komunikasi I2C di STM32F103C8.
Pin I2C dalam STM32F103C8:
SDA: PB7 atau PB9, PB11.
SCL: PB6 atau PB8, PB10.
Rajah dan Penjelasan Litar
Sambungan antara LCD STM32F103C8 & 16x2
No Pin LCD |
Nama Pin LCD |
Nama Pin STM32 |
1 |
Tanah (Gnd) |
Tanah (G) |
2 |
VCC |
5V |
3 |
VEE |
Pin dari Pusat Potensiometer untuk kontras |
4 |
Daftar Pilih (RS) |
PB11 |
5 |
Baca / Tulis (RW) |
Tanah (G) |
6 |
Aktifkan (EN) |
PB10 |
7 |
Bit Data 0 (DB0) |
Tiada Sambungan (NC) |
8 |
Bit Data 1 (DB1) |
Tiada Sambungan (NC) |
9 |
Bit Data 2 (DB2) |
Tiada Sambungan (NC) |
10 |
Bit Data 3 (DB3) |
Tiada Sambungan (NC) |
11 |
Bit Data 4 (DB4) |
PB0 |
12 |
Bit Data 5 (DB5) |
PB1 |
13 |
Bit Data 6 (DB6) |
PC13 |
14 |
Bit Data 7 (DB7) |
PC14 |
15 |
Positif LED |
5V |
16 |
Negatif LED |
Tanah (G) |
Sambungan antara MCP4725 DAC IC dan STM32F103C8
MCP4725 |
STM32F103C8 |
Multimeter |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
KELUAR |
PA1 |
Probe Positif |
GND |
GND |
Probe Negatif |
VCC |
3.3V |
NC |
Potensiometer juga disambungkan, dengan pin tengah disambungkan ke input analog PA1 (ADC) STM32F10C8, Pin Kiri disambungkan ke GND dan pin paling kanan disambungkan ke 3.3V STM32F103C8.
Dalam tutorial ini kita akan menyambungkan MCP4725 DAC IC dengan STM32 dan menggunakan potensiometer 10k untuk memberikan nilai input analog ke STM32 ADC pin PA0. Dan kemudian gunakan ADC untuk menukar nilai analog menjadi bentuk digital. Selepas itu hantarkan nilai digital tersebut ke MCP4725 melalui bas I2C. Kemudian ubah nilai digital tersebut ke analog menggunakan IC DAC MCP4725 dan kemudian gunakan pin ADC lain PA1 dari STM32 untuk memeriksa output analog MCP4725 dari pin OUT. Akhirnya paparkan kedua-dua nilai ADC & DAC dengan voltan pada paparan LCD 16x2.
Pengaturcaraan STM32F103C8 untuk Penukaran Digital ke Analog
Pengaturcara FTDI tidak diperlukan sekarang untuk memuat naik kod ke STM32F103C8. Cukup sambungkan ke PC melalui port USB STM32 dan mulakan pengaturcaraan dengan ARDUINO IDE. Kunjungi pautan ini untuk mengetahui lebih lanjut mengenai Memprogram STM32 anda di Arduino IDE. Program lengkap untuk tutorial STM32 DAC ini diberikan pada akhir.
Pertama, masukkan perpustakaan untuk I2C dan LCD menggunakan perpustakaan wire.h, SoftWire.h dan liquidcrystal.h. Ketahui lebih lanjut mengenai I2C dalam STM32 Microcontroller di sini.
#sertakan
Seterusnya tentukan dan inisialisasi pin LCD mengikut pin LCD yang dihubungkan dengan STM32F103C8
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Kemudian tentukan alamat I2C MCP4725 DAC IC. Alamat MCP4725 DAC lalai I2C ialah 0x60
#tentukan MCP4725 0x60
Dalam persediaan kosong ()
Mula-mula mulakan komunikasi I2C pada pin PB7 (SDA) dan PB6 (SCL) STM32F103C8.
Wire.begin (); // Memulakan komunikasi I2C
Seterusnya tetapkan paparan LCD dalam mod 16x2 dan paparkan mesej selamat datang.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); kelewatan (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC dengan MCP4725"); kelewatan (2000); lcd.clear ();
Dalam gelung kekosongan ()
1. Pertama dalam penyangga masukkan nilai bait kawalan (0b01000000).
(010-Set MCP4725 dalam mod Tulis) penyangga = 0b01000000;
2. Pernyataan berikut membaca nilai analog dari pin PA0 dan mengubahnya menjadi nilai digital antara 0 hingga 4096 kerana ADC beresolusi 12-bit dan simpan dalam pemboleh ubah adc .
adc = analogRead (PA0);
3. Pernyataan berikut ini adalah formula yang digunakan untuk mengira voltan dari nilai input ADC (0 hingga 4096) dengan voltan rujukan 3.3V.
apungan ipvolt = (3.3 / 4096.0) * adc;
4. Masukkan nilai bit yang paling ketara dalam penyangga dengan mengalihkan 4 bit ke kanan dalam pemboleh ubah ADC, dan Nilai bit signifikan paling sedikit dalam penyangga dengan mengalihkan 4 bit ke kiri dalam pemboleh ubah adc .
penyangga = adc >> 4; penyangga = adc << 4;
5. Pernyataan berikut membaca nilai analog dari ADC pin PA1 dari STM32 yang merupakan output DAC (pin OUTPUT MCP4725 DAC IC). Pin ini juga dapat disambungkan ke multimeter untuk memeriksa voltan keluaran.
int analog tidak bertanda = analogRead (PA1);
6. Selanjutnya nilai voltan dari pemboleh ubah analog dikira menggunakan formula dengan pernyataan berikut.
float opvolt = (3.3 / 4096.0) * analogread;
7. Dalam gelung kekosongan yang sama () terdapat beberapa pernyataan lain yang dijelaskan di bawah
Memulakan penghantaran dengan MCP4725:
Wire.beginTransmission (MCP4725);
Menghantar bait kawalan ke I2C
Wire.write (penyangga);
Menghantar MSB ke I2C
Wire.write (penyangga);
Menghantar LSB ke I2C
Wire.write (penyangga);
Menamatkan penghantaran
Wire.endTransmission ();
Sekarang paparkan hasil tersebut di paparan LCD 16x2 menggunakan lcd.print ()
lcd.setCursor (0,0); lcd.print ("A IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (analogread); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); kelewatan (500); lcd.clear ();
Menguji DAC dengan STM32
Apabila kita mengubah nilai dan voltan ADC input dengan memutar potensiometer, nilai dan voltan DAC output juga berubah. Di sini nilai input ditunjukkan pada baris pertama dan nilai output pada baris kedua paparan LCD. Multimeter juga disambungkan ke MCP4725 Output Pin untuk mengesahkan voltan analog.
Kod lengkap dengan Video demonstrasi diberikan di bawah.