ADC STM32 Mbed
AnalogIn
Sử dụng API AnalogIn để đọc điện áp bên ngoài được áp dụng cho chân đầu vào tương tự. AnalogIn () đọc điện áp dưới dạng một phần nhỏ của điện áp hệ thống. Giá trị là một dấu phẩy động từ 0,0 (VSS) đến 1,0 (VCC). Ví dụ: nếu bạn có hệ thống 3,3V và điện áp áp dụng là 1,65V, thì AnalogIn () đọc 0,5 là giá trị.
Một trong những loại bộ chuyển đổi tương tự sang số phổ biến nhất được sử dụng trong vi điều khiển ngày nay được gọi là ADC xấp xỉ kế tiếp. Xấp xỉ kế tiếp là một lựa chọn phổ biến trong các bộ vi điều khiển hiện đại vì thực tế là nó chính xác và tốn ít năng lượng và chiếm một lượng nhỏ không gian bên trong vi điều khiển.
Một loại ADC khá phổ biến khác là ADC flash. Flash ADC cung cấp giải pháp tương tự sang kỹ thuật số nhanh nhất. Tuy nhiên, do cách xây dựng các ADC flash, chúng sử dụng nhiều năng lượng và chiếm nhiều không gian, trong đó chúng sử dụng nhiều thành phần.
Độ phân giải cho một bộ ADC là sự thay đổi nhỏ nhất có thể phân biệt được trong đầu vào tương tự khiến đầu ra kỹ thuật số thay đổi. Ví dụ, một bộ ADC 12 bit trong hệ thống 3.3V có 4.096 đầu ra có thể phân biệt được. Do đó, độ phân giải của ADC 12 bit là 3,3 / 4096 = 0,81mV. Trong hệ thống Mbed Enabled, nơi kết quả kỹ thuật số từ đầu vào tương tự nằm trong phạm vi từ 0,0 đến 1,0, sự thay đổi 0,81mV trong đầu vào tương tự dẫn đến sự thay đổi trong đầu ra kỹ thuật số là 1,0 / 4096 = 0,00024.
#include "mbed.h"
AnalogIn analog_value(PA_0); // Chân A0 đọc ADC
DigitalOut led(PC_13); // Led trên bluepill khỏi mất công nối.
#define SERIAL1_TX PA_9 // UART 1 TX-định nghĩa SERIAL2_TX tại chân PA_2
#define SERIAL1_RX PA_10 //UART 1 RX-định nghĩa SERIAL2_RX tại chân PA_3
Serial serial1(SERIAL1_TX, SERIAL1_RX, 115200);
int main()
{
float doc;
float chuyendoi;
serial1.printf("\n VD ADC STM32 MBEDn");
while(1) {
// DOC ADC (value from 0.0 to 1.0 = full ADC conversion range)
doc= analog_value.read();
chuyendoi= doc* 3300; // Converts value in the 0V-3.3V range
// Display values
serial1.printf(" value measure = %f = %.0f mV\n", doc, chuyendoi);
// LED is ON is the value is below 1V
if (chuyendoi< 1000) {
led = 1; // LED ON
} else {
led = 0; // LED OFF
}
wait(1.0); // 1 second
}
}