- Thành phần bắt buộc
- Mô-đun DAC MCP4725 (Bộ chuyển đổi kỹ thuật số sang tương tự)
- Giao tiếp I2C trong MCP4725
- Sơ đồ mạch và giải thích
- Lập trình STM32F103C8 để chuyển đổi kỹ thuật số sang tương tự
- Kiểm tra DAC với STM32
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.
Chúng tôi đã giao tiếp Mô-đun DAC MCP4725 với Arduino. Hôm nay chúng ta sẽ sử dụng cùng một IC DAC MCP4725 để thiết kế một bộ chuyển đổi Digital sang Analog sử dụng Vi điều khiển STM32F103C8.
Thành phần bắt buộc
- STM32F103C8
- IC DAC MCP4725
- Chiết áp 10k
- Màn hình LCD 16x2
- Breadboard
- Kết nối dây
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 MCP4725Dướ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
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. Theo liên kết để biết thêm về giao tiếp I2C trong STM32F103C8.
Các chân I2C trong STM32F103C8:
SDA: PB7 hoặc PB9, PB11.
SCL: PB6 hoặc PB8, PB10.
Sơ đồ mạch và giải thích
Kết nối giữa STM32F103C8 và 16x2 LCD
Pin LCD Không |
Tên pin LCD |
Tên pin STM32 |
1 |
Mặt đất (Gnd) |
Mặt đất (G) |
2 |
VCC |
5V |
3 |
VEE |
Ghim từ Trung tâm của Potentiometer cho độ tương phản |
4 |
Đăng ký Chọn (RS) |
PB11 |
5 |
Đọc / Ghi (RW) |
Mặt đất (G) |
6 |
Bật (EN) |
PB10 |
7 |
Bit dữ liệu 0 (DB0) |
Không có kết nối (NC) |
số 8 |
Bit dữ liệu 1 (DB1) |
Không có kết nối (NC) |
9 |
Bit dữ liệu 2 (DB2) |
Không có kết nối (NC) |
10 |
Bit dữ liệu 3 (DB3) |
Không có kết nối (NC) |
11 |
Bit dữ liệu 4 (DB4) |
PB0 |
12 |
Bit dữ liệu 5 (DB5) |
PB1 |
13 |
Bit dữ liệu 6 (DB6) |
PC13 |
14 |
Bit dữ liệu 7 (DB7) |
PC14 |
15 |
LED tích cực |
5V |
16 |
LED âm bản |
Mặt đất (G) |
Kết nối giữa MCP4725 DAC IC và STM32F103C8
MCP4725 |
STM32F103C8 |
Đồng hồ vạn năng |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
NGOÀI |
PA1 |
Thăm dò tích cực |
GND |
GND |
Đầu dò âm tính |
VCC |
3,3V |
NC |
Một chiết áp cũng được kết nối, với chân giữa được kết nối với đầu vào tương tự PA1 (ADC) của STM32F10C8, Chân trái kết nối với GND và chân phải nhất kết nối với 3.3V của STM32F103C8.
Trong hướng dẫn này, chúng tôi sẽ kết nối một IC DAC MCP4725 với STM32 và sử dụng một chiết áp 10k để cung cấp giá trị đầu vào tương tự cho chân STM32 ADC PA0. Và sau đó sử dụng ADC để chuyển đổi giá trị tương tự sang dạng số. Sau đó, gửi các giá trị kỹ thuật số đó đến MCP4725 thông qua bus I2C. Sau đó chuyển đổi các giá trị kỹ thuật số đó sang tương tự bằng cách sử dụng IC DAC MCP4725 và sau đó sử dụng chân ADC khác PA1 của STM32 để kiểm tra đầu ra tương tự của MCP4725 từ chân OUT. Cuối cùng, hiển thị cả giá trị ADC & DAC với điện áp trên màn hình LCD 16x2.
Lập trình STM32F103C8 để chuyển đổi kỹ thuật số sang tương tự
Bây giờ không cần lập trình FTDI để tải mã lên STM32F103C8. Đơn giản chỉ cần kết nối nó với PC qua cổng USB của STM32 và bắt đầu lập trình với ARDUINO IDE. Truy cập liên kết này để tìm hiểu thêm về Lập trình STM32 của bạn trong Arduino IDE. Chương trình hoàn chỉnh cho hướng dẫn DAC STM32 này được đưa ra ở cuối.
Đầu tiên, bao gồm thư viện cho I2C và LCD bằng thư viện wire.h, SoftWire.h và liquidcrystal.h. Tìm hiểu thêm về I2C trong Vi điều khiển STM32 tại đây.
#include
Tiếp theo xác định và khởi tạo các chân LCD theo các chân LCD được kết nối với STM32F103C8
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Sau đó xác định địa chỉ I2C của IC DAC MCP4725. Địa chỉ I2C mặc định của MCP4725 DAC là 0x60
#define MCP4725 0x60
Trong thiết lập void ()
Đầu tiên hãy bắt đầu giao tiếp I2C tại các chân PB7 (SDA) và PB6 (SCL) của STM32F103C8.
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); lcd.print ("ĐOẠN MẠCH"); chậm trễ (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); 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 đọc giá trị tương tự từ chân PA0 và chuyển nó thành giá trị số từ 0 đến 4096 vì ADC là độ phân giải 12 bit và lưu trữ trong biến adc .
adc = analogRead (PA0);
3. Câu lệnh sau đây là công thức dùng để tính điện áp từ giá trị đầu vào ADC (0 đến 4096) với điện áp tham chiếu là 3,3V.
float ipvolt = (3.3 / 4096.0) * adc;
4. Đặ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à các giá trị bit quan trọng nhất trong 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 giá trị tương tự từ chân ADC PA1 của STM32 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.
unsigned int analogread = analogRead (PA1);
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 với câu lệnh sau.
float opvolt = (3.3 / 4096.0) * đọc tương tự;
7. Trong cùng một vòng lặp void (), có một số câu lệnh khác được giải thích bên dưới
Bắt đầu 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ờ, hiển thị các 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 ();
Kiểm tra DAC với STM32
Khi chúng ta thay đổi giá trị ADC đầu vào và điện áp bằng cách xoay chiết áp, giá trị DAC đầu ra và điện áp cũng thay đổi. Ở đây các giá trị đầu vào được hiển thị ở hàng đầu tiên và giá trị đầu ra ở hàng thứ hai của màn hình LCD. Đồng hồ vạn năng cũng được kết nối với Chân đầu ra MCP4725 để xác minh điện áp tương tự.
Mã hoàn chỉnh với video minh họa được đưa ra bên dưới.