大家好,欢迎来到IT知识分享网。
一、ADC 简介
ADC 即模拟数字转换器,英文详称 Analog-to-digital converter,可以将外部的模拟信号转换为数字信号。
STM32F4xx 系列芯片拥有 3 个 ADC,这些 ADC 可以独立使用,其中 ADC1 和 ADC2 还可以组成双重模式(提高采样率)。STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。ADC1 有 16 个外部通道和 3 个内部通道,而 ADC2和 ADC3 只有有 16 个外部通道。ADC1 的外部通道是通道 17、通道 18 和通道 19,分别连接到内部温度传感器、内部Vrefint和Vbat。 ADC 中的各个通道的A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以以左对齐或者右对齐存储在16 位数据寄存器中。ADC 具有模拟看门狗的特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。
STM32F407 的 ADC 主要特性我们可以总结为以下几条:
1、可配置 12 位、10 位、8 位或 6 位分辨率;
2、转换结束、注入转换结束和发生模拟看门狗事件时产生中断
3、单次和连续转换模式
4、自校准
5、带内嵌数据一致性的数据对齐
6、采样间隔可以按通道分别编程
7、规则转换和注入转换均有外部触发选项
8、间断模式
9、双重模式(带 2 个或以上 ADC 的器件)
10、ADC 转换时间:最大转换速率为 2.4MHz,转换时间为 0.41us
11、ADC 供电要求:2.4V 到 3.6V
12、ADC 输入范围:V REF – ≤V IN ≤V REF+
13、规则通道转换期间有 DMA 请求产生
二、ADC 的配置流程
(1)输入 电压
将需要采样获取电压的一端 连接到 指定MCU的引脚
(2)输入通道
(3)转换顺序
当任意 ADCx 多个通道以任意顺序进行一系列转换就诞生了成组转换,这里就有两种成组转换类型:规则组和注入组。规则组允许最多 16 个输入通道进行转换,而注入组允许最多 4 个输入通道进行转换
通过设置寄存器里面不同的值,来配置不同通道的转换顺序以及转换的总通道数量
(4)触发源
ADC 的触发转换有两种方法:分别是通过软件或外部事件(也就是硬件)触发转换。
(5)转换时间
T CONV = 采样时间 + 12 个周期
(6)数据寄存器
ADC 转换完成后的数据输出寄存器。
(7)中断
规则和注入组转换结束时能产生中断,当模拟看门狗状态位被设置时也能产生中断。
三、单片机供电
LDO(Low Dropout Regulator,低压差线性稳压器)是一种在输入电压与输出电压压差很小的条件下能正常工作的稳压器。与传统的线性稳压器相比,LDO能够在更低的压差下提供稳定的输出电压,例如在输入3.3V时,输出可以达到3.2V。这使得LDO在电源转换中非常有用,尤其是在需要从5V转换到3.3V这样的低压差场合
四、ADC参考电压
问题点:使用ADC时,通常的用法是Vref+接电源VDD3.3V,然后计算时直接用3.3V做参考电压,但是这种方法忽略了一些情况如供电电压有可能随外部一些其他用电器工作使用的大电流而导致电压不稳定,还有可能MCU供电LDO转换的精度个别偏差较大。这时候依然用3.3V的定值做参考电压计算显然得出的值就会出现与实际电压偏差较大的问题。
五、ADC几种模式
1、扫描模式: 使用STM32CUBEMX配置了多通道后,这一项默认开启且无法设置成关闭。这个模式就是自动扫描你开启的所有通道进行转换,直至转换完。例如你开启了CH0、CH1、CH2、CH3这四个通道,启动转换后ADC会自动将这4个通道全部转换完,但是这种连续性是可以被打断的,所以就引出了间断模式。
2、连续模式: 在CUBE中选中ENABLE就是连续模式,DISABLE就是单次模式。开启连续模式后,ADC的转换不由其他控制。例如将ADC设置为了定时器的TGRO触发采样,如果开启连续模式,ADC将忽略定时器的触发采样。(连续转换模式开启后其实就是满频率的采样)。
六、ADC时钟频率和转换时间
ADC采样两点间隔的时间一定要大于ADC的采样时间!
ADC时钟频率如何看:
STM32F103一般将时钟配置主频为72M、APB2为72M。ADC挂在APB2时钟总线上,且ADC的时钟不能超过14M。所以一般将ADC的分频设置为6,ADC的时钟主频就为72/6=12MHz。那么一个周期就是:1/12MHz=0.0833us。
ADC采样频率如何看:
转换时间 = 1/采样频率
ADC转换时间 = 采样时间 + 12.5个周期
当ADC时钟主频为12MHz并且采样时间为1.5个周期时:转换时间 = 1.5 + 12.5 = 14个周期;一个周期的时间为1/12MHz,一共14个周期,1 / 12MHz * 14个周期 = 1.167us,那么说明我采集一次AD值需要1.167us。
当ADC时钟主频为12M并且采样时间为1.5个周期时,ADC采样两点的时间必须大于1.167us。
注意:采样时间的1.5个周期,这个时间越长,ADC采样精度越高
七、为什么STM32的ADC频率需要小于14Mhz
ADC采样时间的最小周期为1.5个周期,加上12.5个周期,那就是最小为14个周期,即总转换时间会大于或等于14个周期
STM32 的 ADC 最大的转换速率为 1Mhz,也就是ADC转换时间最快 1us
当选择14MHz的时钟频率作为ADC的时钟频率时;
因为ADC最小转换周期为14个时钟周期,14MHz的时钟,转换时间刚好为1us
而STM32 的 ADC 最大的转换速率为 1Mhz,转换最小时间为 1us,
如果选择大于14MHz的时钟频率作为ADC的时钟频率时,转换时间就会少于1us,所以会降低结果的准确性。
八、ADC 增益误差Gain Error详解
增益误差是指ADC实际传输特性曲线和理想传输特性曲线的偏差程度。
蓝线为实际ADC的传输特性曲线。对于一个理想的ADC来说,如果模拟输入和数字输出在x轴和y轴增量相等,则它们之间便的传输特性便如图中红色虚线所示(k=1)。然而,实际的ADC传输特性并非如此,蓝色虚线的增量系数并不等于1。红色和蓝色虚线的差值,便是Gain error。因此,就需要校准来尽量减小或消除增益误差。消除的办法,可以采用两点或多点校准的办法进行。
最常用的一种校准方法是两点标定法。
这一方法假定ADC传输特性是一条直线。在两点标定中,一个点可以选在AD输入的最低点,另一个选在接近最高点处。举例来说,一个单端输入的ADC,输入范围为0-2.2V,我们可以采用一个基准为Vref1=0V和一个为Vref2=2.049V的来进行校准。然后去测量他的实际输出,然后根据校准公式求出增益系数。
校准公式为: 增益系数=(Vref2时实际输出- Vref1时实际输出)/(Vref2时理想输出- Vref1时理想输出)
例如,一个输出对于一个Vref时的实际输出为99,而增益系数通过计算为0.008,则实际输出为99*1.008=99.792.
九、ADC采样偏差较大可能原因
软件层面:
1、系统时钟是否正确
2、ADC时钟频率是否过高,等待转换时间是否较短,可以让ADC采样频率降低,此时误差较少。
硬件层面:
1、基准源是否稳定,LDO芯片是否有问题
2、尝试软件滤波,滤波后偏差在2mv内
3、主控芯片ADC有问题,如果外围电路没有问题情况下,可以判断是不是主控芯片因为批次不同产生误差
4、是否有外围电路干扰到ADC采样,导致ADC采样误差较大
十、ADC其他名词解释
1、模数转换,即Analog-to-Digital Converter,常称ADC,是指将连续变量的模拟信号转换为离散的数字信号的器件
2、模数转换ADC是怎么实现的呢? 简单来说需要采样、保持、量化和编码。我们首先需要对这个信号进行采样,每隔一段时间记录一下信号当时的电压值。采集到的数值会经过量化,转换成相应的数字信号值,最后再通过某种编码表示出来,比如补码、格雷码等等。
3、ADC转换速率:ADC每秒钟将模拟量转换成数字量的操作次数。它反映了ADC的转换速度有多快,即从输入端获取到模拟信号到输出端得到数字化结果所需的时间。常见的单位为每秒转换次数(samples per second或samples per second,简写为sps)。
4、ADC采样率:ADC每秒钟对模拟信号进行采样的次数。采样率决定了对模拟信号进行离散采样的频率,也是数字化过程中模拟信号在时间上的离散化程度。采样率通常以每秒采样次数(samples per second或samples per second,简写为sps)表示。总结来说,ADC转换速率是指ADC完成一次完整的模拟转数字转换所需的时间,而采样率是指ADC在单位时间内对模拟信号进行采样的频率。
5、通道:Arduino UNO的ATmega328有一个8通道10位ADC。术语“8通道”意味着ATmega328微控制器上有8个引脚可以读取模拟电压,每个引脚可以读取10位分辨率的电压。并非微控制器上的每个引脚都可以读取模拟电压,这因不同型号的微控制器而异。
6、分辨率:分辨率被定义为输入信号值的最小变化,这个最小数值变化会改变ADC数字输出值的一个码值。在ADC有同样输入范围的情况下,分辨率越高,一个码值所代表的最小变化就越小。如果我们的 ADC 范围是从 0V 到 5V,并且我们有一个 10 位 ADC,这意味着我们的输入电压 0-5 伏将被分成 1024 级离散模拟值(0000000000—,2^10 = 1024)。1024 是 10 位 ADC 的分辨率,类似地,8 位 ADC 的分辨率为 216 (2^8 ),16 位 ADC 的分辨率为 65536 (2^16 )。实际输入电压为 0V,则 MCU 的 ADC 会将其读取为 0,如果为 5V,则 MCU 将读取为 1024,如果是2.5V,则 MCU 将读取为 512。
7、ADC 的参考电压: ADC 转换过程中,通过将其与已知电压进行比较来找到未知电压的值,这个已知电压,称为参考电压。注意:ADC量程与基准电压值的关系是典型ADC的量程恰好是基准电压值的两倍,并且ADC测量误差与基准电压误差成正比
8、ADC的吞吐率并不等同于转换速率。吞吐率指的是ADC在单位时间内能够完成的转换数量,通常以每秒转换次数(SPS)来表示。而转换速率指的是ADC完成一个单次转换所需的时间。
9、ADC量程和分辨率C输入和GPIO输入具有相同的量程和分辨率。ADBMS1818内部的ADC量程约为–0.82 V至+5.73V。负读数四舍五入为0 V。数据格式为16位无符号整数,LSB表示100μV。因此,读数0x80E8(十进制33,000)表示测量值为3.3 V。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132574.html