很多开发者在嵌入式项目中都会用到传感器采集信号,无论是温度、光照,还是电压电流测量,都离不开 ADC(模数转换器)。但是,很多人对 ADC 的使用仍停留在“能读就行”的层面,忽略了精度、采样率、参考电压等关键因素。今天,我们就从原理到实战,带你搞懂 ADC,帮你精准读取传感器信号。
一、ADC 基础回顾
ADC(Analog-to-Digital Converter)是将连续的模拟信号转换为数字信号的模块,便于 MCU 处理。
- 分辨率:ADC 能输出的数字位数。比如 12 位 ADC 的输出范围是 0~4095,对应参考电压范围。
- 采样率:ADC 每秒能读取多少次信号,单位 Hz。
- 参考电压(Vref):ADC 将模拟信号映射到数字值的参考电压。
二、如何选择 ADC 通道
STM32 等 MCU 的 ADC 通常带多个通道,用于采集不同的传感器信号。选择时要注意:
- 信号源的电压范围:确保传感器输出在 Vref 范围内。
- 通道干扰:避免高频信号或噪声信号靠近 ADC 引脚。
- 引脚复用:一些 ADC 引脚可能同时有其他外设功能,需要查看手册。
三、ADC 精度优化技巧
- 稳定参考电压:使用 LDO 或参考芯片,减少 Vref 波动。
- 信号滤波:在 ADC 输入端加 RC 滤波或低通滤波,降低高频干扰。
- 多次采样平均:通过软件对多次采样结果取平均,提高测量精度。
- 降低采样速率:在允许情况下,适当降低 ADC 采样率,减小噪声影响。
四、STM32 ADC 使用实战
假设我们要读取一个光敏电阻的电压值:
- #include"stm32f1xx.h"
- voidADC_Config(void){
- RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;// GPIOA 时钟
- RCC->APB2ENR|=RCC_APB2ENR_ADC1EN;// ADC1 时钟
- GPIOA->CRL&=~GPIO_CRL_CNF1;// PA1 模拟输入
- GPIOA->CRL&=~GPIO_CRL_MODE1;
- ADC1->SQR3=1;// 第1个通道
- ADC1->SMPR2|=ADC_SMPR2_SMP1;// 采样时间
- ADC1->CR2|=ADC_CR2_ADON;// 开启 ADC
- }
- uint16_tADC_Read(void){
- ADC1->CR2|=ADC_CR2_ADON;// 启动转换
- while(!(ADC1->SR&ADC_SR_EOC));
- returnADC1->DR;
- }
- intmain(void){
- ADC_Config();
- while(1){
- uint16_tvalue=ADC_Read();
- // 处理采样值,例如转换为电压或亮度
- }
- }
五、多通道采样与 DMA
当你需要同时读取多个传感器信号时,单次轮询效率低,容易拖慢 MCU 主循环。此时可以使用 ADC 的扫描模式 + DMA:
- 配置 ADC 扫描模式,依次采集多个通道。
- 配置 DMA,将采样结果自动存储到内存数组中。
- MCU 只需在数据更新后处理数组,无需频繁轮询。
六、ADC 与实际传感器匹配
不同传感器信号特点不同,需要匹配 ADC 参数:
七、常见坑点
- 忽略 Vref 稳定性:参考电压波动会直接影响采样精度。
- 采样时间太短:高阻抗输入在短采样时间下可能不稳定。
- 引脚干扰:ADC 输入邻近高频信号会引入噪声。
- 单次采样依赖性高:未做多次平均,导致测量抖动明显。
八、小结
通过今天的学习,你应该掌握了:
- ADC 的基本原理、分辨率和采样率
- 如何选择 ADC 通道并减少干扰
- 软件与硬件结合提高 ADC 精度的方法
- STM32 下 ADC 实战代码示例
- 多通道采样与 DMA 使用
- 不同传感器信号与 ADC 匹配策略
掌握这些内容后,你就能在嵌入式项目中精准读取各种传感器信号,为数据处理和控制算法提供可靠输入。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
嵌入式
+关注
关注
5209文章
20645浏览量
336913 -
adc
+关注
关注
100文章
7946浏览量
556872 -
传感器信号
+关注
关注
0文章
22浏览量
5038
发布评论请先 登录
相关推荐
热点推荐
如何读取LPC55S28温度传感器?
我正在尝试读取芯片温度传感器。
我尝试使用 LPADC 组件来读取传感器。我意识到我必须禁用掉电、启用 kclock_adc0 并为其附加一
发表于 04-04 06:46
ADIS的传感器接线和信号读取问题
CLM-112-02的连接器,这个连接器引出的端口是直接焊接吗?我看距离太近了焊接技术不够啊。或者说原来传感器的接口直接有线可以接吗?另这个传感器
发表于 06-15 18:42
Micropython TPYBoard读取芯片上的温度传感器
过高或者过低了 则马上睡眠或者停止运转. 可以保证您的设备工作的可靠性。 STM32内部温度传感器参数1.STM32内部温度传感器与ADC的通道16相连,与ADC配合使用实现温度测量。
发表于 03-30 09:07
arduinoUNO怎么读取采用UART的传感器传入的信号
我初学Arduino,买了传输数字信号的传感器模组,采用的是UART。老板给出了下面的信息:实在是搞不明白怎么读取信号,请教一下各位大神!万分感谢
发表于 05-03 21:09
怎样提高霍尔传感器测量的精准度
的精准度虽然好但是霍尔传感器测量的精准度对于用于来说是非常重要的,如果有提高霍尔传感器精准度的方法那是更加好的,今天小编就来为大家介绍一下方
发表于 08-15 10:29
如何去读取ADC1内部温度传感器及内部参照电压
单片机为:STM32F103RCT6软件:STM32CubeMX,MDK功能:不使用DMA,不使用中断,读取ADC1内部温度传感器及内部参照电压VREFINT的值描述:温度传感器和通道
发表于 12-10 07:39
如何正确配置温度传感器并通过ADC进行转换并读取数字结果?
供电。温度传感器仍然没有任何反应。使用 SEQA_CTRL 寄存器访问序列 A。按照第 45 章读取温度传感器读数的步骤。谁能告诉我如何正确配置温度
发表于 03-29 07:50
接触式图像传感器的信号读取与补偿技术
图像传感器是利用光电转换原理将图像数据装换为一系列电子信号的一种装置。接触式图像传感器CIS是80年代末初相是一种新型图像传感器,是以CMOS技术为主的一种光电扫描器件
发表于 06-25 10:39
•27次下载
接触式图像传感器的信号读取与补偿技术
接触式图像传感器的信号读取与补偿技术
图像传感器是利用光电转换原理将图像数据转换为一系列电子信号的一种装置。接触式图像
发表于 02-09 10:00
•791次阅读
STM32使用ADC获取内部温度传感器数据输出(直接读取/DMA两种方式实现)
STM32使用ADC获取内部温度传感器数据输出(直接读取/DMA两种方式实现)前言一、内部温度传感器的使用?二、代码操作讲解1.直接读取2.
发表于 12-02 18:36
•34次下载
雪深数据精准采集:激光传感器抗干扰技术实战指南
。本文结合实战经验,拆解激光雪深传感器的抗干扰技术细节与实操要点,助力搭建稳定可靠的监测系统。 一、雪天激光传感器核心干扰源解析 1. 光学类干扰 自然强光(阳光直射、雪地反射)会淹没激光回波
ADC 实战:如何精准读取传感器信号
评论