资讯详情

如何在 STM32F103C8 中使用 ADC 测量模拟电压

几乎每个嵌入式应用程序中使用的一个常见功能是 ADC 模块(模数转换器)。从温度传感器、倾斜传感器、电流传感器、弯曲传感器等模拟传感器中读取电压。现在,我们学习 如何使用 STM32F103C8 中的 ADC 读取模拟电压,我们连接电位器 STM32 Blue Pill 改变电位器电阻值的板ADC提供不同的电压,显示读取电压 1602 LCD 上。

STM32F103C8 中的 ADC

在 STM32F103C8有 10 个通道、12 位 ADC,输入范围为 0V -3.3V。它将 0 到 3.3 输入电压映射在伏伏之间 0 到 4095 之间的整数值。

这里的术语 10 通道意味着有 10 个 ADC 模拟电压可用于测量引脚。术语 12 位表示ADC 1111111111111111111^12即 4096)。这是我们 ADC 因此,我们的采样步数 ADC 值的范围从 0 到 4095。该值将从 0 基于每步电压值增加到4095,可以通过各种方式计算

电压 / 步数 = 参考电压 / 4096 = (3.3/4096= 8.056mV) 每单位。

如何将模拟信号转换为数字格式

由于计算机只存储和处理二进制/数字值(1) 和 0)。因此,模拟信号(如传感器的伏特输出)必须转换为数字值进行处理,转换需要准确。当在模拟输入端方向时 STM32 在提供输入模拟电压时,模拟值被读取并存储在整数变量中. 存储的模拟值(0-3.3V)转换为整数值(0-4096):

输入电压 = (ADC 值 / ADC 分辨率) * 参考电压

分辨率 = 4096

参考电压 = 3.3V

STM32F103C8T6 中的 ADC 引脚

STM32 中有 10 个ADC引脚,从 PA0 到 PB1。

电路图及说明

LCD与STM32连接

1602 LCD连接按上表进行。电路中有两个电位器,第一个用于分压器,用于改变电压并为 STM32 提供模拟输入。电位器的左引脚来自电位器 STM32(3.3V)输入正电压,右引脚接地,电位器中心引脚连接 STM32 的模拟输入引脚(PA7)。另一个电位器用于改变 LCD 显示屏的对比度。STM32 的电源由 PC的 USB 电源提供。

对 STM32 编程读取 ADC 值

通过 STM32 的 USB 连接到端口 PC 并开始使用 ARDUINO IDE 编程。在程序中,读取模拟值并使用该值计算电压 LCD 模拟值和数字值显示在屏幕上。

#include <LiquidCrystal.h> // LCD 库 //首先 定义出 LCD 引脚。这些定义了 LCD 引脚连接到 STM32 哪个引脚。 //你可以根据自己的需要进行修改。 const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //初始化LCD const int analogip = PA7.//模拟输入引脚 void setup() {     lcd.begin(16, 2); 我们用的是 16*2 LCD     lcd.clear(); //清屏     lcd.setCursor(0, 0); //设置光标在第一行第一列     lcd.print("Hello Wrold!"); //LCD显示这个     lcd.setCursor(0, 1); ///在第二行第一列设置光标     lcd.print("STM32F103C8"); //LCD显示这个     delay(2000)     lcd.clear(); //清屏     lcd.setCursor(0, 0); ///将光标设置在第一行光标     lcd.print("USING ADC IN");//打印这个     lcd.setCursor(0,1); ///在第二行第一列设置光标     lcd.print("STM32F103C8");//打印这个     delay(2000); 等两秒钟     lcd.clear(); //清屏 }  void loop() {     int val = analogRead(PA7); // 从引脚 A7 读取 ADC 值     float voltage = (float(val)/4096) * 3.3; //将 ADC 值转换为电压值     lcd.setCursor(0, 0); // 在第一位设置光标 0 列第 0 行     lcd.print("ADC Val:");     lcd.print(val); //显示ADC值     lcd.setCursor(0, 1); // 在第一位设置光标 0 列第 1 行     lcd.print("Voltage:");     lcd.print(voltage);//显示电压 }

本文到此结束,错误之处欢迎指出。

标签: stm8外接传感器电位器的103

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台