STM32 ADC基础内容

adc,analog-to-digital converter(模数转换器),其应用非常广泛,比如温度、湿度、压力、声音等传感器领域。
adc的类型很多,stm32内部集成的adc为逐次逼近型。stm32虽然是通用mcu芯片,但它内部集成的adc也非常出色,不比一些专用adc芯片差。
1
stm32 adc 基础内容
stm32内部集成的adc与型号有关,有16位、12位adc,内部集成adc多达4个,通道数多达40个,甚至更多。
1. adc分辨率
分辨率决定了adc的转换精度,按理说分辨率越高越好,但价格更贵。
stm32内部集成的adc最高16位,2的16次方,即65536的分辨率。只有少数stm32才集成16位分辨率的adc,绝大部分支持12位。
当然,有时出于提高转换速率的考虑,可以软件配置成10 位、 8 位或 6 位的分辨率。
2. adc采样率
采样率指每秒进行ad转换的次数,stm32的采样率由adck时钟,以及分频比决定。
不同型号的stm32,其adcclk时钟也有差异,具体可参看芯片对应的手册。
3. adc通道
stm32的每个adc有数条复用模拟输入通道,具体通道数因不同系列及型号而异。片内温度传感器、内部参考电压、vbat还可以与内部模拟通道相连,便于测量和使用。
4. adc数据对齐
stm32的ad转换后存储数据的对齐方式可通过软件配置成左对齐、右对齐。比如规则组12位分辨率左右对齐如下:
这里数据对齐还与规则组/注入组、分辨率等有关。
5.adc触发方式
stm32触发adc转换的方式有很多种,软件触发、外部事件(如定时器事件、 exti 中断事件)触发转换。
外部事件触发还分为上升沿和下降沿触发:
stm32 adc基础内容及配置参数比较多,更多细节请查阅芯片对应的参考手册。
嵌入式专栏
2
stm32 adc 参数配置
stm32 adc配置的参数相对较多,只要理解了adc的基础内容,再结合stm32cubemx或官方提供的例程,使用adc就较容易了。
比如:最基础的单通道配置(默认配置):
1.stm32cubemx
2.标准外设库
adc_inittypedef adc_initstructure;adc_commoninittypedef adc_commoninitstructure; rcc_apb2periphclockcmd(rcc_apb2periph_adc1, enable); adc_commoninitstructure.adc_mode = adc_mode_independent;adc_commoninitstructure.adc_prescaler = adc_prescaler_div4;adc_commoninitstructure.adc_dmaaccessmode = adc_dmaaccessmode_disabled;adc_commoninitstructure.adc_twosamplingdelay = adc_twosamplingdelay_5cycles;adc_commoninit(&adc_commoninitstructure); adc_initstructure.adc_resolution = adc_resolution_12b;adc_initstructure.adc_scanconvmode = disable;adc_initstructure.adc_continuousconvmode = disable;adc_initstructure.adc_externaltrigconvedge = adc_externaltrigconvedge_none;adc_initstructure.adc_externaltrigconv = adc_externaltrigconv_t1_cc1;adc_initstructure.adc_dataalign = adc_dataalign_right;adc_initstructure.adc_nbrofconversion = 1;adc_init(adc1, &adc_initstructure); adc_regularchannelconfig(adc1, adc_channel_0, 1, adc_sampletime_3cycles); adc_cmd(adc1, enable);
这里结合stm32f4,stm32cubemx和标准外设库描述了最基础的参数配置。
stm32cubemx图形化工具配置起来很简单,但前提需要理解各参数的含义。
每项独立的参数其实不难理解,难在各项参数复合使用,比如:多通道、外部事件定时器触发、dma等。
3
stm32 adc 常见问题
stm32内部集成adc是一个常用的模块,单通道简单采集电压比较容易,但多通道、高频次等一些特殊情况下,对软件和硬件的要求更高。
些特殊情况下,对软件和
问题一:参考电压电阻问题
‍stm32部分型号芯片具有vref+、 vref-参考电压引脚。而且,参考电压必须低于vdda电压。

实际应用存在 vref+ 与 vdda 之间通过电阻(比如10k)连接的情况,这样就会因电阻分压导致测量值存在偏差。
解决办法:vref+ 与 vdda通过0ω电阻连接,同样,vref- 与 vdds也要通过0欧电阻连接。
问题二:输入引脚浮空问题
有工程师会会习惯性在外部信号和stm32引脚间加一个二极管。
如果外部电压为0时,在stm32引脚处的状态即为浮空状态,读取出来的电压就是一个不确定值(通常为1/2vdd电压)。
解决办法:去掉二极管,同时增加外围抗干扰电路。
问题三:多通道序列采集问题
在多通道采集时,采集电压都为序列中第一个的电压,通常是因为未理解规则组序列转换,因软件配置不对导致的问题。
解决办法:首先要使能扫描模式,再次要正确配置规则组序列。(同样的问题在使用dma情况下也容易出现,需要正确理解连续转换这些细节问题)。
问题四:通道间串扰问题
使用 adc 常规通道的扫描模式采集多路模拟信号时,可能存在各路信号转换相同结果的情况(实际各路电压不同)。
问题原因是相邻通道之间透过采样电容cs发生了藕合。
当 adc 的采样电容在两个通道之间进行切换时,电路类似如下图:
解决办法:增大 adc 相邻两个通道采样之间的延时:adc_twosamplingdelay.
问题五:采样时间与外部输入阻抗不匹配
在做ad转换时,我们需考虑信号输入电路的阻抗,整体上,该阻值越大,为保证转换精度,所需采样时间就越长,stm32芯片可编程的采样时间是有限的,显然这个外部输入阻抗也是有上限的。关于这点,在stm32芯片数据手册里有关adc特性的章节有详细解释,可以阅读。
解决办法:根据实际输入阻抗和具体应用来配置合适的采样时间。


开发CSP产品需要解决的技术问题
AN-2021: ADMV4801/ADMV4821 SPI应用笔记
华硕ROG XG27UQ高端IPS显示器开启预约 售价7999元
触觉反馈技术为人机交互带来更多的细节之处
NS4823双声道音频功放概述、特性及应用范围
STM32 ADC基础内容
达尔优lk200新型无线键盘已正式发布
AR工厂数字化远程运维系统:实时监控设备状态,及时发现潜在问题
【产品应用】GLCOM-NET网关一分钟实现LoRa转MQTT(初阶版)
“人工智能+养老”能否满足老人从身体到精神的多层次需求?
智芯传感电子雷管控制模组成为地下隧道爆破开挖利器
TE Connectivity推出伺服电机解决方案新成员Motorman混合型连接器
一只广明源空气净化球泡灯帮你有效改善家庭空气
华为数据通信商业市场百城行系列活动在深圳站成功举行
食品安全检测一体机的操作步骤的介绍
保约上榜2022年中国十大充电桩品牌排行
static属性为什么不会被序列化
华为P10才发布三个月做成败笔,华为P11又要来了是什么鬼!
基于CCP协议实现汽车电子控制单元标定系统的设计
iphone7/7plus上手体验:配置升级已经足够更新换代了