ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

9.1 ADC模数转换系统原理及驱动代码的实现(单次非扫描及连续非扫描)_以GD32F303和SM32F103为例

9.1 ADC模数转换系统原理及驱动代码的实现(单次非扫描及连续非扫描)_以GD32F303和SM32F103为例 1.ADC的硬件结构1.1 GD32F303的ADC结构及资源12 位 ADC 是一种采用逐次逼近方式的模拟数字转换器。它有 18 个多路复用通道,可以转换来自 16 个外部通道和 2 个内部通道的模拟信号。各种通道的 A/D 转换可以配置成单次、连续、扫描或间断转换模式。ADC 转换的结果可以按照左对齐或右对齐的方式存储在 16 位数据寄存器中。片上的硬件过采样机制可以通过减少来自 MCU 的相关计算负担来提高性能。1.1.1 ADC0/1/2的模拟输入通道对应的I/O口情况1.1.2 ADC的各种转换模式单次模式:每一次ADC都需要外部触发源进行触发才能进行转换工作;连续转换模式:只需要在开始第一次触发即可;、扫描模式:针对某一个ADC是否使用单/多个通道;因为有16个外部通道;同步模式:针对的是多个ADC同时使用的场景,比如GD32F303/STM32F103共有3个ADC,表明2/3个ADC配合使用。比如交替触发:这一时刻使用ADC0,下一时刻使用ADC1,互相配合使用;独立模式:单独使用一个就可以,也是最常用的;可以这么记忆:判断是否需要一次触发还是每次触发对应的是单次/连续模式;一个ADC是使用一个通道还是多个通道用扫描/非扫描模式。单次转换,非扫描模式:连续转换,非扫描模式:不需要每次转化都需要触发源。单次转换,扫描模式:规则组只有一个数据寄存器,由5个通道都往一个数据寄存器中存放结果,若主流程来不及读取数据,那么有的通道的结果就会被覆盖掉,此时需要用到DMA,通过DMA不需要经过CPU,不需要经过代码程序,自动的将寄存器中的数据拷贝到数组中,放在内存中,所以可以在程序中定义5个容量的数组,然后通过DMA将每个通道转化的结果从数据寄存器中搬移到数组中,所以扫描模式通常和DMA配合使用。连续转换,扫描模式:不需要每次转化都需要触发源。1.1.3 规则组与注入组如在程序中,即使用了一个ADC的规则组,又使用了注入组:1.1.4 外部触发源1.1.5 数据对齐GD32F303和STM32F103的ADC的分辨率最大是12位,对应的转换结果也是12位,D0-D11,转换结果放在数据寄存器中,可以配置为右对齐或者左对齐,右对齐的高位填充0,左对齐的低位填充0;在项目中使用右对齐方式是最多的。对于12位的分辨率,若参考电压使用的是3.3V供电,那么对于输入信号电压变化的最小值就是0.81mV。1.1.6 ADC转换时间转换时间是ADC中的一个很重要的指标。ADC的采样步骤分为四步:采样,保持,量化,编码;ADC的总转换时间为:采样时间+12.5个ADC周期。其中采样时间可以在寄存器中配置,12.5个ADC周期是恒定不变的,采样时间对应的是采样+保持的时间,12.5对应的是量化+编码的时间。采样时间可配置为1.5个周期、7.5个周期等等,假设ADC时钟设置为30MHz,采样时间设置为1.5个周期,那么总转换时间为:(1.5+7.5)个ADC时钟周期,即14/30us约等于0.467us。ADC采集的大致原理:外部信号源的信号是实时动态变化,ADC采集某一时刻,某一个点位的电压值,当外部触发源触发后,ADC开始工作,此时采样开关闭合,对采样电容进行充电,当采样电容的电压和外部信号源电压相等时,采样开关断开,这样ADC内部就是对采样电容的电压进行量化和编码,转换成数字量的结果。步骤中的保持指的是将采样开关断开后,电容两端的电压就保持外部信号源的电压值的这个过程;采样开关从闭合后到断开这个阶段,这个时间就是采样。对于不同的采样时间,通过计算可得到外部信号源最大的输出阻抗,关系如下:此时可知:这个采样时间的配置是和外部表信号源的输出阻抗有关系,如果对采样的时间,转换的时间要求不是特别极致,可以将参数设置为最大值239.5,这样充电的时间有保障,采样的精度就更准确。举个例子:锂电池电压24V,分压成2.4V传给ADC引脚,电压和功耗都能满足ADC输入引脚的需求,但是计算(用戴维南定理)输出阻抗时,算出来的是0.9MΩ,是900KΩ,远远大于90多KΩ的阻抗,那么ADC采样就会不准确;可以参考兆易公司发布的一个文档《提高ADC采样精度的方法》,是一个应用笔记AN059,对信号的输出阻抗对采样时间的影响等等有更详细的描述。1.1.7 内部校准ADC内部有一个自校准模式,在初始化时进行自校准的配置,这样可以消除在ADC内部转换电路的误差,这个误差是产生在电容器上的,从而提高采样的精度。1.1.8硬件滤波在ADC内部有一个硬件滤波单元,也叫硬件过采样单元;可以将多次采集的结果取平均,类似于软件平均滤波算法,比如转换了10次的结果
返回列表