• How to use ADC in STM32F103C8 - Measuring Analog Voltage

QC

How to use ADC in STM32F103C8 - Measuring Analog Voltage

 

How to use ADC in STM32F103C8 - Measuring Analog Voltage




   Một tính năng phổ biến được sử dụng trong hầu hết mọi ứng dụng nhúng là mô-đun ADC (Bộ chuyển đổi tương tự sang kỹ thuật số). Các Bộ chuyển đổi Analog sang kỹ thuật số này có thể đọc điện áp từ các cảm biến tương tự như Cảm biến nhiệt độ, Cảm biến nghiêng, Cảm biến dòng điện, Cảm biến Flex và nhiều hơn thế nữa. Vì vậy, trong hướng dẫn này, chúng ta sẽ học cách sử dụng ADC trong STM32F103C8 để đọc điện áp Analog bằng Energia IDE. Chúng tôi sẽ giao tiếp một chiết áp nhỏ với bảng STM32 Blue Pill và cung cấp điện áp thay đổi cho chân Analog, đọc điện áp và hiển thị trên màn hình LCD 16x2.


So sánh ADC trong Arduino và STM32F103C8
Trong bảng Arduino, nó chứa 6 kênh (8 kênh trên Mini và Nano, 16 kênh trên Mega), ADC 10 bit với dải điện áp đầu vào là 0V – 5V. Điều này có nghĩa là nó sẽ ánh xạ điện áp đầu vào từ 0 đến 5 volt thành các giá trị nguyên từ 0 đến 1023. Bây giờ trong trường hợp của STM32F103C8, chúng ta có 10 kênh, 12-Bit ADC với dải đầu vào 0V -3,3V. Nó sẽ ánh xạ điện áp đầu vào từ 0 đến 3,3 volt thành các giá trị nguyên từ 0 đến 4095.

ADC trong STM32
ADC được nhúng trong vi điều khiển STM32 sử dụng nguyên tắc SAR (thanh ghi xấp xỉ liên tiếp), theo đó việc chuyển đổi được thực hiện theo một số bước. Số bước chuyển đổi bằng số bit trong bộ chuyển đổi ADC. Mỗi bước được điều khiển bởi đồng hồ ADC. Mỗi đồng hồ ADC tạo ra một bit từ kết quả đến đầu ra. Thiết kế bên trong ADC dựa trên kỹ thuật chuyển mạch tụ điện. Nếu bạn chưa quen với STM32, hãy xem hướng dẫn Bắt đầu với STM32 của chúng tôi.

Độ phân giải 12 bit

ADC này là ADC 10 kênh 12-bit. Ở đây thuật ngữ kênh 10 ngụ ý rằng có 10 chân ADC sử dụng mà chúng ta có thể đo điện áp tương tự. Thuật ngữ 12-bit ngụ ý độ phân giải của ADC. 12-bit có nghĩa là 2 với lũy thừa của mười (212) là 4096. Đây là số bước mẫu cho ADC của chúng tôi, vì vậy phạm vi giá trị ADC của chúng tôi sẽ từ 0 đến 4095. Giá trị sẽ tăng từ 0 đến 4095 dựa trên giá trị của điện áp mỗi bước, có thể được tính bằng công thức

ĐIỆN ÁP / BƯỚC = ĐIỆN ÁP THAM KHẢO / 4096 = (3,3 / 4096 = 8,056mV) trên mỗi đơn vị.
Làm thế nào một tín hiệu tương tự được chuyển đổi thành định dạng kỹ thuật số
Vì máy tính chỉ lưu trữ và xử lý các giá trị nhị phân / kỹ thuật số (1 và 0). Vì vậy, các tín hiệu tương tự như đầu ra của cảm biến tính bằng vôn phải được chuyển đổi thành giá trị kỹ thuật số để xử lý và việc chuyển đổi cần phải chính xác. . Giá trị Analog được lưu trữ đó (0-3,3V) được chuyển đổi thành giá trị số nguyên (0-4096) bằng công thức dưới đây:

INPUT VOLTAGE = (Giá trị ADC / Độ phân giải ADC) * Điện áp tham chiếu
Độ phân giải = 4096

Tham chiếu = 3,3V




Thành phần bắt buộc
STM32F103C8
LCD 16 * 2
Chiết áp 100k
Breadboard
Kết nối dây
Sơ đồ mạch và giải thích
Sơ đồ mạch để giao diện 16 * 2 LCD và Ngõ vào Analog vào bảng STM32F103C8T6 được hiển thị bên dưới.

The connections which are done for LCD are given below:

LCD Pin NoLCD Pin NameSTM32 Pin Name
1Ground (Gnd)Ground (G)
2VCC5V
3VEEPin from Centre of Potentiometer
4Register Select (RS)PB11
5Read/Write (RW)Ground (G)
6Enable (EN)PB10
7Data Bit 0 (DB0)No Connection (NC)
8Data Bit 1 (DB1)No Connection (NC)
9Data Bit 2 (DB2)No Connection (NC)
10Data Bit 3 (DB3)No Connection (NC)
11Data Bit 4 (DB4)PB0
12Data Bit 5 (DB5)PB1
13Data Bit 6 (DB6)PC13
14Data Bit 7 (DB7)PC14
15LED Positive5V
16LED NegativeGround (G)


Các kết nối được thực hiện theo bảng trên. Có hai chiết áp hiện diện trong mạch, một đầu tiên được sử dụng cho bộ chia điện áp có thể được sử dụng để thay đổi điện áp và cung cấp đầu vào tương tự cho STM32. Chân trái của chiết áp này nhận điện áp dương đầu vào từ STM32 (3.3V) và chân phải được nối với đất, chân giữa của chiết áp được kết nối với chân đầu vào tương tự (PA7) của STM32. Chiết áp còn lại được sử dụng để thay đổi độ tương phản của màn hình LCD. Nguồn điện cho STM32 được cung cấp bằng nguồn điện USB từ PC hoặc Máy tính xách tay.





#include <LiquidCrystal.h> // include the LCD library
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //mention the pin names to with LCD is connected to 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Initialize the LCD
const int analogip = PA7;//Initialize the analog input pin
void setup() 
{
  lcd.begin(16, 2); //We are using a 16*2 LCD
  lcd.clear(); //Clear the screen
  lcd.setCursor(0, 0); //At first row first column 
  lcd.print("CIRCUITDIGEST"); //Print this
  lcd.setCursor(0, 1); //At secound row first column 
  lcd.print("STM32F103C8"); //Print this
  delay(2000); //wait for two secounds 
  lcd.clear(); //Clear the screen
  lcd.setCursor(0, 0);  //At first row first column
  lcd.print("USING ADC IN");//Print this
  lcd.setCursor(0,1); //At secound row first column 
  lcd.print("STM32F103C8");//Print this
  delay(2000); //wait for two secounds 
  lcd.clear(); //Clear the screen
}
void loop()
{   
  int val = analogRead(PA7);    // read the ADC value from pin A7
  float voltage = (float(val)/4096) * 3.3; //formulae to convert the ADC value to voltage
  lcd.setCursor(0, 0);   // set the cursor to column 0, line 0
  lcd.print("ADC Val:");
  lcd.print(val); //Display ADC value
  lcd.setCursor(0, 1);   // set the cursor to column 0, line 1
  lcd.print("Voltage:");
  lcd.print(voltage); //Display voltage
}
















Nap Code vào PY32F003 dùng Stlink

 Nap Code vào PY32F003 dùng Stlink Bước 1: Cài đặt  KeilC v5.39 theo link sau ( chú ý 5.39 keil c mới nạp ok). https://edge07.111.ir.cdn.ir/...