- Komponen Diperlukan
- Modul MCP4725 DAC (Konverter Digital ke Analog)
- Komunikasi I2C di MCP4725
- Diagram Sirkuit dan Penjelasannya
- Pemrograman STM32F103C8 untuk Konversi Digital ke Analog
- Menguji DAC dengan STM32
Kita semua tahu bahwa Mikrokontroler hanya bekerja dengan nilai digital tetapi di dunia nyata kita harus berurusan dengan sinyal analog. Itu sebabnya ADC (Analog to Digital Converters) ada untuk mengubah nilai analog dunia nyata menjadi bentuk Digital sehingga mikrokontroler dapat memproses sinyal. Tetapi bagaimana jika kita membutuhkan sinyal Analog dari nilai digital, maka inilah DAC (Digital to Analog Converter).
Contoh sederhana untuk pengonversi Digital ke Analog merekam lagu di studio di mana penyanyi artis menggunakan mikrofon dan menyanyikan lagu. Gelombang suara analog ini diubah menjadi bentuk digital dan kemudian disimpan dalam file format digital dan ketika lagu diputar menggunakan file digital yang disimpan, nilai-nilai digital tersebut diubah menjadi sinyal analog untuk keluaran speaker. Jadi dalam sistem ini DAC digunakan.
DAC dapat digunakan dalam banyak aplikasi seperti Kontrol motor, Kecerahan Kontrol Lampu LED, Amplifier Audio, Enkoder Video, Sistem Akuisisi Data, dll.
Kami sudah menghubungkan Modul MCP4725 DAC dengan Arduino. Hari ini kita akan menggunakan IC DAC MCP4725 yang sama untuk merancang konverter Digital ke Analog menggunakan Mikrokontroler STM32F103C8.
Komponen Diperlukan
- STM32F103C8
- MCP4725 DAC IC
- Potensiometer 10k
- Layar LCD 16x2
- Papan tempat memotong roti
- Menghubungkan Kabel
Modul MCP4725 DAC (Konverter Digital ke Analog)
MCP4725 IC adalah Modul 12-Bit Digital to Analog Converter yang digunakan untuk menghasilkan tegangan analog keluaran dari (0 sampai 5V) dan dikendalikan dengan menggunakan komunikasi I2C. Itu juga dilengkapi dengan EEPROM memori nonvolatile on board.
IC ini memiliki resolusi 12-Bit. Ini berarti kami menggunakan (0 hingga 4096) sebagai input untuk memberikan output tegangan sehubungan dengan tegangan referensi. Tegangan referensi maksimum adalah 5V.
Rumus untuk menghitung Tegangan Output
Tegangan O / P = (Tegangan Referensi / Resolusi) x Nilai Digital
Sebagai Contoh jika kita menggunakan 5V sebagai tegangan referensi dan anggaplah nilai digitalnya adalah 2048. Jadi untuk menghitung keluaran DAC.
Tegangan O / P = (5/4096) x 2048 = 2.5V
Pinout dari MCP4725Di bawah ini adalah gambar MCP4725 dengan nama pin yang menunjukkan dengan jelas.
Pin MCP4725 |
Menggunakan |
DI LUAR |
Menghasilkan Tegangan Analog |
GND |
GND untuk Output |
SCL |
Garis I2C Serial Clock |
SDA |
Jalur Data Serial I2C |
VCC |
Tegangan Referensi Input 5V atau 3.3V |
GND |
GND untuk masukan |
Komunikasi I2C di MCP4725
IC DAC ini dapat dihubungkan dengan mikrokontroler apa pun menggunakan komunikasi I2C. Komunikasi I2C hanya membutuhkan dua kabel SCL dan SDA. Secara default, alamat I2C untuk MCP4725 adalah 0x60. Ikuti tautan untuk mengetahui lebih lanjut tentang komunikasi I2C di STM32F103C8.
Pin I2C di STM32F103C8:
SDA: PB7 atau PB9, PB11.
SCL: PB6 atau PB8, PB10.
Diagram Sirkuit dan Penjelasannya
Koneksi antara LCD STM32F103C8 & 16x2
Pin LCD Tidak Ada |
Nama Pin LCD |
Nama Pin STM32 |
1 |
Tanah (Gnd) |
Tanah (G) |
2 |
VCC |
5V |
3 |
VEE |
Pin dari Center of Potentiometer untuk kontras |
4 |
Register Select (RS) |
PB11 |
5 |
Baca / Tulis (RW) |
Tanah (G) |
6 |
Aktifkan (EN) |
PB10 |
7 |
Data Bit 0 (DB0) |
Tidak Ada Koneksi (NC) |
8 |
Data Bit 1 (DB1) |
Tidak Ada Koneksi (NC) |
9 |
Data Bit 2 (DB2) |
Tidak Ada Koneksi (NC) |
10 |
Data Bit 3 (DB3) |
Tidak Ada Koneksi (NC) |
11 |
Data Bit 4 (DB4) |
PB0 |
12 |
Data Bit 5 (DB5) |
PB1 |
13 |
Data Bit 6 (DB6) |
PC13 |
14 |
Data Bit 7 (DB7) |
PC14 |
15 |
LED Positif |
5V |
16 |
LED Negatif |
Tanah (G) |
Koneksi antara MCP4725 DAC IC dan STM32F103C8
MCP4725 |
STM32F103C8 |
Multimeter |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
DI LUAR |
PA1 |
Probe Positif |
GND |
GND |
Pemeriksaan Negatif |
VCC |
3.3V |
NC |
Sebuah potensiometer juga terhubung, dengan pin tengah terhubung ke input analog PA1 (ADC) dari STM32F10C8, Pin Kiri terhubung ke GND dan pin paling kanan terhubung ke 3.3V dari STM32F103C8.
Dalam tutorial ini kita akan menghubungkan IC MCP4725 DAC dengan STM32 dan menggunakan potensiometer 10k untuk memberikan nilai input analog ke pin STM32 ADC PA0. Dan kemudian gunakan ADC untuk mengubah nilai analog menjadi bentuk digital. Setelah itu kirim nilai digital tersebut ke MCP4725 melalui bus I2C. Kemudian konversikan nilai digital tersebut ke analog menggunakan IC DAC MCP4725 dan kemudian gunakan pin ADC PA1 STM32 lainnya untuk memeriksa keluaran analog MCP4725 dari pin OUT. Terakhir, tampilkan nilai ADC & DAC dengan voltase di layar LCD 16x2.
Pemrograman STM32F103C8 untuk Konversi Digital ke Analog
Seorang programmer FTDI tidak diperlukan sekarang untuk mengupload kode ke STM32F103C8. Cukup hubungkan ke PC melalui port USB STM32 dan mulai pemrograman dengan ARDUINO IDE. Kunjungi tautan ini untuk mempelajari lebih lanjut tentang Pemrograman STM32 Anda di Arduino IDE. Program lengkap untuk tutorial DAC STM32 ini diberikan di bagian akhir.
Pertama termasuk library untuk I2C dan LCD menggunakan library wire.h, SoftWire.h dan liquidcrystal.h. Pelajari lebih lanjut tentang I2C pada Mikrokontroler STM32 di sini.
#include
Selanjutnya tentukan dan inisialisasi pin LCD sesuai dengan pin LCD yang terhubung dengan STM32F103C8
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LCD LiquidCrystal (rs, en, d4, d5, d6, d7);
Kemudian tentukan alamat I2C dari IC DAC MCP4725. Alamat I2C default DAC MCP4725 adalah 0x60
#tentukan MCP4725 0x60
Dalam pengaturan void ()
Pertama, mulai komunikasi I2C di pin PB7 (SDA) dan PB6 (SCL) dari STM32F103C8.
Wire.begin (); // Memulai komunikasi I2C
Selanjutnya atur layar LCD dalam mode 16x2 dan tampilkan pesan selamat datang.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); penundaan (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC dengan MCP4725"); penundaan (2000); lcd.clear ();
Di loop kosong ()
1. Pertama di buffer, masukkan nilai byte kontrol (0b01000000).
(010-Set MCP4725 dalam mode Tulis) buffer = 0b01000000;
2. Pernyataan berikut membaca nilai analog dari pin PA0 dan mengubahnya menjadi nilai digital mulai dari 0 hingga 4096 karena ADC adalah resolusi 12-bit dan disimpan dalam variabel adc .
adc = analogRead (PA0);
3. Pernyataan berikut ini adalah rumus yang digunakan untuk menghitung tegangan dari nilai input ADC (0 hingga 4096) dengan tegangan referensi 3.3V.
float ipvolt = (3.3 / 4096.0) * adc;
4. Letakkan nilai bit paling signifikan dalam buffer dengan menggeser 4 bit ke kanan dalam variabel ADC, dan nilai bit paling signifikan di buffer dengan menggeser 4 bit ke kiri dalam variabel adc .
buffer = adc >> 4; buffer = adc << 4;
5. Pernyataan berikut membaca nilai analog dari pin ADC PA1 STM32 yang merupakan output DAC (pin OUTPUT IC MCP4725 DAC). Pin ini juga dapat dihubungkan ke multimeter untuk memeriksa tegangan keluaran.
unsigned int analogread = analogRead (PA1);
6. Selanjutnya nilai tegangan dari variabel analogread dihitung menggunakan rumus dengan pernyataan berikut.
opvolt mengambang = (3.3 / 4096.0) * analogread;
7. Dalam void loop () yang sama ada beberapa pernyataan lain yang dijelaskan di bawah ini
Memulai transmisi dengan MCP4725:
Wire.beginTransmission (MCP4725);
Mengirim byte kontrol ke I2C
Wire.write (buffer);
Mengirim MSB ke I2C
Wire.write (buffer);
Mengirim LSB ke I2C
Wire.write (buffer);
Mengakhiri transmisi
Wire.endTransmission ();
Sekarang tampilkan hasil tersebut di layar 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); penundaan (500); lcd.clear ();
Menguji DAC dengan STM32
Ketika kita memvariasikan nilai dan tegangan ADC masukan dengan cara memutar potensiometer, maka nilai dan tegangan DAC keluaran juga berubah. Di sini nilai input ditampilkan di baris pertama dan nilai output di baris kedua layar LCD. Multimeter juga terhubung ke Pin Output MCP4725 untuk memverifikasi tegangan analog.
Kode lengkap dengan Video demonstrasi diberikan di bawah ini.