news 2026/4/16 17:28:23

STM32 CubeIDE 读取模拟信号电压值

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32 CubeIDE 读取模拟信号电压值

ADC模数转换器:把连续的模拟信号(电压、电流、温度、声音等),转成离散的数字信号(二进制代码),是模拟世界与数字系统的桥梁。

平常的电信号分为数字信号和模拟信号,ADC有许多实现模拟数字转换的方法,这里使用的是逐次逼近法。

模拟信号:连续不断变化的电压值。

数字信号: 高/低电平。

逐次逼近法(以STM32F103内的12位二进制ADC为例):

二进制:0000 0000 0000 ---- 1111 1111 1111 转换为10进制

十进制: 0 (0V) ---- 4095 (3.3V)

假设有一个未知模拟电压 Vin,我们要转成数字。
内部有一个 DAC + 比较器:
- DAC:把数字转成模拟电压
- 比较器:Vin > DAC输出?→ 是/否

步骤:从高位到低位,一位一位试,大就留1,小就清0,全部试完,数字就出来了。

1. 先试最高位(bit11)=1
输出电压 → 和 Vin 比
- 若 Vin 更大 → 保留 1
- 若 Vin 更小 → 改为 0
2. 再试下一位(bit10)=1
把上一轮结果 + 这一位 → 再比较
- 大 → 留 1
- 小 → 改 0
3. 依次往下:bit9 → bit8 → bit7 → bit6 → bit5 → bit4 → bit3 → bit2 → bit1 → bit0

12次比较后,12 位数字就确定了。

然后ADC将结果放入数据寄存器,程序就可以从此寄存器取到转换结果并计算得待测电压。

结果 / 4095 * 3.3V = 待测电压

ADC测量电压值(例)

在学习板上有一个蓝色的电位器

其内部结构通过调节输出引脚在电阻上的位置来改变PA5测的电压值

在CubeIDE新建工程在SYS将Debug模式设置为Serial Wire,设置RCC高速外部时钟为晶振,时钟设置HCLK为72MHz将ADC专用的分频器改为/6

在ADC1将通道5启用,将持续转换模式开启

打开串口用于输出ADC测量结果

最后实现结果通过小螺丝刀调节电位器 ADC测量的电压值就会改变。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 17:58:19

2机5节点系统潮流仿真模型附Simulink仿真

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/4/15 14:31:10

【综合能源】电热冷综合能源优化调度研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/4/16 12:03:59

C++之函数模板

文章目录函数模板的定义函数模板的实例化模板参数模板参数的匹配问题解决参数的匹配问题的方法模板函数的形参表函数模板的特化函数模板提供了一种通用的函数行为,该函数行为可以用多种不同的数据类型进行调用,编译器会根据调用类型自动将它实例化为具体…

作者头像 李华
网站建设 2026/4/16 12:07:05

elasticSearch之API:基础命令及文档基本操作

文章目录一、基本检索1、cat API2、索引文档初探二、文档操作1、示例数据2、添加(索引)文档3、修改文档(1)PUT 全量更新(2)使用_update部分更新(3)使用 _update_by_query 更新文档&a…

作者头像 李华
网站建设 2026/4/16 12:02:09

Flask-SocketIO深度详解

1. 他是什么 Flask-SocketIO 是 Flask 框架的一个扩展,用来给 Web 应用添加实时通信能力。可以把普通的 HTTP 请求想象成你去邮局寄信——你发一封信,对方收到后回一封信,一来一回,每次都要走完整流程。而 Flask-SocketIO 提供的…

作者头像 李华