STM32基础篇:ADC

ADC简介

ADC是Analog to Digital Converter的缩写,是一种将模拟信号转换为数字信号的转换器。

采样深度

指用多少位二进制数来表示一个采样点。

比如对于单片机来说,输入到单片机的模拟电压范围为:0~3.3V,现在我们要通过ADC将其表示为数字信号,如果使用的是4位ADC,就意味着二进制的0000~1111用来表示模拟信号的0~3.3V,因此二进制每一位就代表0.22V;对于8位ADC同理,具体如下:

 ADC的采样深度越深,转换的结果越精细,因此采样深度是衡量ADC性能的重要指标之一。


逐次逼近型

逐次逼近型式ADC的一种最常见的类型,STM32里的ADC就属于这种类型。其工作原理类似于天平称重,我们需要不断的调整砝码的组合,来一次一次的逼近被测物体的实际质量。

如下为逼近型ADC的内部结构框图:

首先需要被转换的模拟信号(假设为2.21V电压)通过开关闭合,向电容充电;当电容充满电后,它两端的电压就相当于输入信号的电压,也就是2.21V;

然后开关断开,被充进电容的电只能继续锁在电容里(因为比较器虚断),始终维持2.21V,因此比较器的正输入端也维持在2.21V不变。

向b3比特位写1,此时为1000,电压发生器输出的电压就是1.76V,比2.21V要小;继续往b2比特位写1,此时为1100,电压发生器输出电压为2.64V,比2.21V要大,因此b2比特位为0;以此类推,最终得到4位比特位为:1010

附其他ADC类型:


ADC模块基本原理

我们将上述的逼近型ADC的内部结构框图用如下图形表示:

其中SAR就是逐次逼近型的英文缩写。

通过上文提到的模数转换过程,我们可以得到如下的基本结构:ADC将模拟信号转换为数字信号后,再把结果(二进制数)保存在结果寄存器当中,最后我们再从结果寄存器中读出数据即可。

但我们需要对不止一个模拟信号进行同时转换,比如有很多路模拟信号都被输入到单片机当中(如下图所示),难道我们需要为每一路模拟信号都提供一个ADC吗?

答案是否定的,我们对上图电路稍作变形,如下所示:可以只使用一个ADC对多路信号进行同时转换了。

注意,ADC虽然只有一个,但采样开关却有多个。首先闭合第一路模拟信号的开关,将第一路模拟信号进行模数转换并保存数据后,再读出来;然后对后面几路的进行重复的步骤,直到所有路的模拟信号都被转换完为止。

对于STM32芯片来说,它内部的单片机最多可以同时接收12路模拟信号,如下图所示:

其中前10路模拟信号通过芯片的IO引脚输入进来的,而剩下2路模拟信号来自于芯片内部,其中一路来自于芯片内部的温度计,另一路来自于参考电压


常规序列与注入序列

ADC内部通过常规序列注入序列控制采样开关,而且这两种序列都有一个外部触发信号,我们通过这个外部触发信号来启动序列的执行

例如我们想依次对AIN1、AIN4、AIN2进行模数转换,首先我们需要将这个“计划”写入序列中(两种任选一个),然后向外部触发输入一个脉冲信号。这样,序列就会执行“计划”,通道1,4,2就会被依次转换。

每输入一个外部触发信号,序列就会将“计划”执行一遍,如下图所示:


采样时间与转换时间

1、基本概念

我们已经知道,使用逐次逼近型ADC将模拟信号转换为数字信号的过程,就类似于使用天平称重。

称重的过程可分为两步:第一步,把待测物品放在天平的托盘上;第二部,通过调整砝码的组合来逼近待测物体的实际质量。

而对于ADC来说,可以把放重物所消耗的时间类比成ADC的采样时间,把调整砝码所消耗的时间,类比成ADC的转换时间


2、ADC的时钟信号

输入到ADC的时钟信号,是通过PCLK2分频后得到的,并且对于ADC来说,其时钟频率不能大于14MHz,否则无法正常工作。

对于采样时间和转换时间,都需要表示成时钟周期的倍数的形式(为了方便后面的编程)。

例如,假设输入到ADC模块的时钟频率是14MHz, 那么可以计算出时钟周期为1/14us;再假设采样时间为0.1us、转换时间为0.9us,因此要将采样时间表示为1.5*1/14us=1.5周期、将转换时间表示为:12.5*1/14us=12.5周期。


3、两种时间的计算

  • 关于转换时间:

转换时间的长短取决于采样深度,对于STM32芯片,其ADC为12位,每确定一位都要消耗一个时钟周期(因此共12个周期)。此外还要加上0.5倍的额外周期,总转换时间就固定等于12.5倍周期。

  • 关于采样时间:

采样时间就是把模拟信号通过采样保持电路输入到ADC里花的时间。结合采样的过程可知,采样时间就等于电容充电时间

且电容两端的电压只会无限接近于充电电压,两者之间总会存在误差。充电时间越长,这个误差就越小(即:采样时间越长,误差越小,结果就越精确)。

但这个时间不是越长越好,因为太长会导致时间的浪费,且ADC的精度本来就是有限的。因此我们要在精度和效率之间找一个平衡点。

我们只需要保证采样所产生的误差远小于ADC最大精度就可以了,这样就不会对最终的测量结果产生任何影响。

具体标准是:采样误差<¼*ADC分辨率,以12位ADC为例:

采样时间就是根据这个原理得来的,具体如下:

其中R_AIN为信号源内阻,其他均已在芯片内部被配置好,因此采样时间只与信号源内阻有关。


4、采样时间的档位

对于STM32单片机而言,它里面的ADC采样时间只有几个固定的档位,我们需要从这几个固定的档位里面选择一个。

采样时间的8个可选档位
1.5周期7.5周期13.5周期28.5周期
41.5周期55.5周期71.5周期239.5周期

实际编程时选择一个最接近的档位即可。

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值