几乎每个嵌入式应用程序中都使用的一个常见功能是 ADC 模块(模数转换器)。这些模数转换器可以从温度传感器、倾斜传感器、电流传感器、弯曲传感器等模拟传感器读取电压。现在,我们学习 如何使用 STM32F103C8 中的 ADC 读取模拟电压,我们将一个电位器连接到 STM32 Blue Pill 板,通过改变电位器阻值为ADC提供不同的电压,将读取的电压显示在 1602 LCD 上。7 c' Q& y% f, x0 y9 h STM32F103C8 中的 ADC 在 STM32F103C8有 10 个通道、12 位 ADC,输入范围为 0V -3.3V。它将 0 到 3.3 伏之间的输入电压映射为 0 到 4095 之间的整数值。 5 r8 ]' Q( q+ T1 y5 W) t* z 这里的术语 10 通道意味着有 10 个 ADC 引脚可以用来测量模拟电压。术语 12 位表示ADC 的分辨率,表示000000000000-111111111111(2^12即 4096)。这是我们 ADC 的采样步数,因此我们的 ADC 值的范围从 0 到 4095。该值将从 0 增加到4095基于每步电压值,可通过方面方式计算+ i9 B% O% v4 p$ B; b! e4 H# G, V 5 G& q. i& b- { 电压 / 步数 = 参考电压 / 4096 = (3.3/4096= 8.056mV) 每单位。, `4 i! t' Z0 P7 Z$ }; d9 v- s 模拟信号如何转换为数字格式 由于计算机仅存储和处理二进制/数字值(1 和 0)。因此,模拟信号(如传感器的伏特输出)必须转换为数字值以进行处理,并且转换需要准确。当在模拟输入端向 STM32 提供输入模拟电压时,模拟值被读取并存储在整数变量中. 使用以下方式将存储的模拟值(0-3.3V)转换为整数值(0-4096): ! E5 @$ g& m$ a& v+ Z3 g. F( C 输入电压 = (ADC 值 / ADC 分辨率) * 参考电压 2 l* I7 [ R5 U9 J 分辨率 = 4096$ D$ j& `9 i7 J- ]/ w- ]2 j : @, ?8 A. Y( J$ u 参考电压 = 3.3V2 m7 D+ [- j( G+ r+ x s; J0 w STM32F103C8T6 中的 ADC 引脚( @# s/ \* E$ {4 W$ @ STM32 中有 10 个ADC引脚,从 PA0 到 PB1。1 s) @* Y$ e5 M+ Y # A4 s j3 d% E6 r+ _) F3 M 电路图及说明 c4 d" T1 l* k' Z / g" k, J5 H7 Q% V. } LCD与STM32连接+ w" b* L" C8 N% h5 L $ D& |; I8 Y+ B( V9 F/ i; g) g* w; ?4 O 9 u, b5 n1 ]0 N# Y 1602 LCD根据上表进行连接。电路中有两个电位器,第一个用于分压器,用于改变电压并为 STM32 提供模拟输入。该电位器的左侧引脚从 STM32(3.3V)获得输入正电压,右侧引脚接地,电位器的中心引脚连接到 STM32 的模拟输入引脚(PA7)。另一个电位器用于改变 LCD 显示屏的对比度。STM32 的电源由 PC的 USB 电源提供。+ k y( o+ _) h& `& N : {& @& @+ j8 C; } 对 STM32 进行编程以读取 ADC 值& x7 f# p. Z; ?% L& _' v8 t 通过 STM32 的 USB 端口将其连接到 PC 并开始使用 ARDUINO IDE 进行编程。在程序中,读取模拟值并使用该值计算电压,然后在 LCD 屏幕上显示模拟值和数字值。6 R3 u6 U2 d. K7 V- I+ g9 @1 U , ^$ O( a. N3 w5 O$ G. R$ c8 V
|
小马哥STM32F103开源小四轴RoboFly全部资料大放送
STM32固件库分享,超全系列整理
【MCU实战经验】+STM32F107的USB使用
基于STM32F103两轮平衡小车设计(开源)
STM32F107VCT6官方原理图和PCB
【福利】用STM32库的朋友有福了:STM32F10x_StdPeriph_Lib_V3.5.0chm...
基于STM32F10xx存储器和系统架构经验分享
基于STM32F1的CAN通信之BH1750
基于STM32F1的CAN通信之OLED
基于STM32F1的CAN通信之之串口IAP