- Mô-đun DAC MCP4725 (Bộ chuyển đổi kỹ thuật số sang tương tự)
- Giao tiếp I2C trong MCP4725 DAC
- Thành phần bắt buộc
- Sơ đồ mạch
- Lập trình DAC Arduino
- Chuyển đổi kỹ thuật số sang tương tự bằng MCP4725 và Arduino
Chúng ta đều biết rằng Vi điều khiển chỉ hoạt động với các giá trị kỹ thuật số nhưng trong thế giới thực, chúng ta phải xử lý các tín hiệu tương tự. Đó là lý do tại sao ADC (Analog to Digital Converters) ở đó để chuyển đổi các giá trị Analog trong thế giới thực sang dạng Digital để vi điều khiển có thể xử lý tín hiệu. Nhưng điều gì sẽ xảy ra nếu chúng ta cần tín hiệu Analog từ các giá trị kỹ thuật số, vì vậy ở đây có DAC (Digital to Analog Converter).
Một ví dụ đơn giản cho bộ chuyển đổi Digital sang Analog là ghi một bài hát trong phòng thu nơi ca sĩ nghệ sĩ đang sử dụng micrô và hát một bài hát. Các sóng âm thanh tương tự này được chuyển đổi thành dạng kỹ thuật số và sau đó được lưu trữ trong tệp định dạng kỹ thuật số và khi bài hát được phát bằng tệp kỹ thuật số được lưu trữ, các giá trị kỹ thuật số đó sẽ được chuyển đổi thành tín hiệu tương tự cho đầu ra loa. Vì vậy, trong hệ thống này DAC được sử dụng.
DAC có thể được sử dụng trong nhiều ứng dụng như điều khiển động cơ, điều khiển độ sáng đèn LED, bộ khuếch đại âm thanh, bộ mã hóa video, hệ thống thu thập dữ liệu, v.v.
Trong nhiều bộ vi điều khiển có một DAC bên trong có thể được sử dụng để tạo ra đầu ra tương tự. Nhưng các bộ xử lý Arduino như ATmega328 / ATmega168 không có sẵn DAC. Arduino có tính năng ADC (Analog to Digital Converter) nhưng nó không có DAC (Digital to Analog Converter). Nó có một DAC 10-bit trong ADC nội bộ nhưng DAC này không thể được sử dụng độc lập. Vì vậy, ở đây trong hướng dẫn Arduino DAC này, chúng tôi sử dụng một bo mạch bổ sung có tên MCP4725 DAC Module với Arduino.
Mô-đun DAC MCP4725 (Bộ chuyển đổi kỹ thuật số sang tương tự)
MCP4725 IC là một Mô-đun chuyển đổi kỹ thuật số sang tương tự 12 bit được sử dụng để tạo ra điện áp tương tự đầu ra từ (0 đến 5V) và nó được điều khiển bằng cách sử dụng giao tiếp I2C. Nó cũng đi kèm với bộ nhớ không biến đổi EEPROM trên bo mạch.
IC này có độ phân giải 12-Bit. Điều này có nghĩa là chúng tôi sử dụng (0 đến 4096) làm đầu vào để cung cấp đầu ra điện áp liên quan đến điện áp tham chiếu. Điện áp tham chiếu tối đa là 5V.
Công thức tính điện áp đầu ra
Điện áp O / P = (Điện áp / Độ phân giải tham chiếu) x Giá trị kỹ thuật số
Ví dụ, nếu chúng ta sử dụng 5V làm điện áp tham chiếu và giả sử rằng giá trị kỹ thuật số là 2048. Vì vậy, để tính toán đầu ra DAC.
Điện áp O / P = (5/4096) x 2048 = 2,5V
Sơ đồ chân của MCP4725
Dưới đây là hình ảnh của MCP4725 có ghi rõ tên pin.
Các chân của MCP4725 |
Sử dụng |
NGOÀI |
Đầu ra điện áp tương tự |
GND |
GND cho đầu ra |
SCL |
Dòng đồng hồ nối tiếp I2C |
SDA |
Dòng dữ liệu nối tiếp I2C |
VCC |
Điện áp tham chiếu đầu vào 5V hoặc 3.3V |
GND |
GND cho đầu vào |
Giao tiếp I2C trong MCP4725 DAC
IC DAC này có thể được giao tiếp với bất kỳ vi điều khiển nào sử dụng giao tiếp I2C. Giao tiếp I2C chỉ cần hai dây SCL và SDA. Theo mặc định, địa chỉ I2C cho MCP4725 là 0x60 hoặc 0x61 hoặc 0x62. Đối với tôi 0x61 của nó. Sử dụng bus I2C chúng ta có thể kết nối nhiều IC DAC MCP4725. Chỉ có điều là chúng ta cần thay đổi địa chỉ I2C của IC. Giao tiếp I2C trong Arduino đã được giải thích chi tiết trong hướng dẫn trước.
Trong hướng dẫn này, chúng tôi sẽ kết nối IC DAC MCP4725 với Arduino Uno và cung cấp giá trị đầu vào tương tự cho chân A0 của Arduino bằng cách sử dụng một chiết áp. Khi đó ADC sẽ được sử dụng để chuyển giá trị tương tự sang dạng số. Sau đó, các giá trị số đó được gửi đến MCP4725 thông qua bus I2C để chuyển thành tín hiệu tương tự bằng IC MCP4725 DAC. Chân A1 của Arduino được sử dụng để kiểm tra đầu ra tương tự của MCP4725 từ chân OUT và cuối cùng hiển thị cả giá trị và điện áp ADC & DAC trên màn hình LCD 16x2.
Thành phần bắt buộc
- Arduino Nano / Arduino Uno
- Mô-đun màn hình LCD 16x2
- IC DAC MCP4725
- Chiết áp 10k
- Breadboard
- Dây nhảy
Sơ đồ mạch
Bảng dưới đây cho thấy kết nối giữa IC DAC MCP4725, Arduino Nano và Máy đo đa năng
MCP4725 |
Arduino Nano |
Đồng hồ vạn năng |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 hoặc OUT |
A1 |
+ ve thiết bị đầu cuối |
GND |
GND |
-ve thiết bị đầu cuối |
VCC |
5V |
NC |
Kết nối giữa LCD 16x2 và Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Từ Chân trung tâm chiết áp để điều chỉnh độ tương phản của màn hình LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
Một chiết áp được sử dụng với chân giữa kết nối với đầu vào tương tự A0 của Arduino Nano, chân trái kết nối với GND và chân phải nhất kết nối với 5V của Arduino.
Lập trình DAC Arduino
Toàn bộ mã Arduino cho hướng dẫn DAC được đưa ra ở cuối cùng với một video trình diễn. Ở đây chúng tôi đã giải thích từng dòng mã.
Thứ nhất, bao gồm các thư viện cho I2C và LCD sử dụng wire.h và liquidcrystal.h thư viện.
#include
Tiếp theo xác định và khởi tạo các chân LCD theo các chân mà chúng ta đã kết nối với Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Xác định các chân hiển thị LCD RS, E, D4, D5, D6, D7
Tiếp theo xác định địa chỉ I2C của IC DAC MCP4725
#define MCP4725 0x61
Trong thiết lập void ()
Đầu tiên hãy bắt đầu giao tiếp I2C tại các chân A4 (SDA) và A5 (SCL) của Arduino Nano
Wire.begin (); // Bắt đầu giao tiếp I2C
Tiếp theo, đặt màn hình LCD ở chế độ 16x2 và hiển thị thông báo chào mừng.
lcd.begin (16,2); // Đặt LCD ở Chế độ 16X2 lcd.print ("ĐƯỜNG KÍNH MẠCH"); chậm trễ (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC với MCP4725"); chậm trễ (2000); lcd.clear ();
Trong vòng lặp void ()
1. Đầu tiên trong bộ đệm đặt giá trị byte điều khiển (0b01000000)
(010-Đặt MCP4725 ở chế độ Ghi)
đệm = 0b01000000;
2. Câu lệnh sau đây đọc giá trị tương tự từ chân A0 và chuyển nó thành các giá trị số (0-1023). Arduino ADC có độ phân giải 10-bit nên nhân nó với 4 sẽ được: 0-4096, vì DAC có độ phân giải 12-bit.
adc = analogRead (A0) * 4;
3. Câu lệnh này là để tìm điện áp từ giá trị đầu vào ADC (0 đến 4096) và điện áp tham chiếu là 5V
float ipvolt = (5.0 / 4096.0) * adc;
4. Dưới dòng đầu tiên đặt các giá trị bit quan trọng nhất vào bộ đệm bằng cách dịch chuyển 4 bit sang phải trong biến ADC và dòng thứ hai đặt các giá trị bit quan trọng nhất vào bộ đệm bằng cách chuyển 4 bit sang trái trong biến ADC.
đệm = adc >> 4; đệm = adc << 4;
5. Câu lệnh sau đây đọc điện áp tương tự từ A1 là đầu ra DAC (chân OUTPUT của MCP4725 DAC IC). Chân này cũng có thể được kết nối với đồng hồ vạn năng để kiểm tra điện áp đầu ra. Tìm hiểu cách sử dụng Đồng hồ vạn năng tại đây.
unsigned int analogread = analogRead (A1) * 4;
6. Hơn nữa, giá trị điện áp từ biến tương tự được tính bằng công thức dưới đây
float opvolt = (5.0 / 4096.0) * analogread;
7. Câu lệnh sau được sử dụng để bắt đầu quá trình truyền với MCP4725
Wire.beginTransmission (MCP4725);
Gửi byte điều khiển tới I2C
Wire.write (bộ đệm);
Gửi MSB tới I2C
Wire.write (bộ đệm);
Gửi LSB tới I2C
Wire.write (bộ đệm);
Kết thúc quá trình truyền
Wire.endTransmission ();
Bây giờ cuối cùng hiển thị những kết quả đó trong màn hình LCD 16x2 bằng lcd.print ()
lcd.setCursor (0,0); lcd.print ("Một IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (đọc tương tự); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); chậm trễ (500); lcd.clear ();
Chuyển đổi kỹ thuật số sang tương tự bằng MCP4725 và Arduino
Sau khi hoàn thành tất cả các kết nối mạch và tải mã lên Arduino, thay đổi chiết áp và xem đầu ra trên màn hình LCD . Dòng đầu tiên của màn hình LCD sẽ hiển thị giá trị và điện áp ADC đầu vào, và dòng thứ hai sẽ hiển thị giá trị DAC và điện áp đầu ra.
Bạn cũng có thể kiểm tra điện áp đầu ra bằng cách kết nối đồng hồ vạn năng với chân OUT và GND của MCP4725.
Đây là cách chúng ta có thể chuyển đổi các giá trị Digital thành Analog bằng cách kết nối mô-đun DAC MCP4725 với Arduino.