不基于STM32的ADC模数转换的简单理解

  我们知道单片机的IO能够检测二进制的高低电平(即0或1的数字信号),比如通过IO的高低来判断按键是否按下,之类的。假设我们给单片机供电是5v,那么它就会将0v(GND)理解为二进制0,将5v(VCC)理解为二进制1。然而这个世界并不是非黑即白的,在0到5v之间会出现2.73v这样的“灰色”数值,那咋办嘛?

  现实世界的数值/数据都是连续变化的(不是台阶式跳变的),我们称为模拟信号,比如声音、温度、光线、压力,之类的。上面提到的2.73v就是一个模拟电压值,而我们单片机只能按照0/1的level去处理数据(数字信号),对这种模拟信号却无能为力。所以我们希望说有一个中介设备,能够把模拟信号转化成数字信号,以便和单片机进行交流。

  于是ADC,即模数转换器应运而生。ADC是一种集成电路,能把(某个引脚上的)模拟信号转换成数字或者二进制形式(0或1)的信号,以利于单片机/处理器来处理。

  ADC在采样时钟信号的每个时钟上升沿/下降沿对模拟信号进行采样,获取模拟信号,然后通过精确地逼近信号来测量并将其转换成数字值并输出给单片机——ADC的原理挺复杂的,最常见的一种技术是使用模拟电压给内部电容充电,然后测量其通过内部电阻放电所需的时间。单片机监控(计数)在电容器放电前通过的时钟周期数,这个周期数就是ADC最后的返回值。

  简单来说,ADC输出的是一个比率值,(即测得电压除以参考电压再乘上ADC能表示的最大数值)。拿10位的ADC来说,转换0~5V,这意味着ADC假设5V是1023(即2^10-1),任何小于5V的值都是0到1023之间的数值,而具体数值则是根据比例换算。

  这样讲还是不清楚,举个例子。

  一个3位的ADC,能够表示0~7共8个数(000到111)。如果用它来转换0~5V的电压,那么0V就对应000,即0;5V就对应111,即1;那么,这0~5V之间的任何连续值就可以用8个数字来分阶表示,每阶即为5/8=0.625V。比如2.73V,则2.73V/5V8=4.368≈4,即用数字4来表示2.73V。或者转过来,如果通过该ADC检测到的数值为6,那么6/85V=3.75V。

在这里插入图片描述
  同样是转换0~5V,如果我们把ADC的位数(即分辨率)提高,那么,这5V就能被进一步细分成更小份,也就更精确了。比如12位的ADC,那么5V能分成2^12=4096份,每一份为5V/4096=1.22mV。

  影响ADC的两个主要因素是分辨率和采样率。

  分辨率决定了模数转换的精度,由ADC的位数来确定。比如同样是0~5V的电压,分别用1位、2位、4位、16位去转换,1位只能把电压分成非黑即白的0V或5V,2位的则可以分成4份,以此类推。通过下图能够很好的解释这一点:
在这里插入图片描述
  采样率则是决定了采样的频率,与ADC的速度挂钩。采样率是用“每秒采样”来测量的,单位是SPS或S/S(或者如果你使用采样频率,它的单位是Hz),指的是一秒内采集的样本或数据点的数量。

  采样率的选取还是有讲究的。如果说分辨率只是决定了精度,(比如上图中,如果精度要求不高,4bit相对16bit而言也勉强能用),那么采样率的选取不当却会造成失真。

如图:
在这里插入图片描述
  拿上图举例,一个正弦波的模拟输入信号,如果采样频率和模拟输入的频率相近(图中采样频率低于信号频率),则可能造成上图的情况——失真。

  针对这一点,有一条经验法则,就是奈奎斯特著名的采样定理:

在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>2fmax),采样之后的数字信号完整地保留了原始信号中的信息。

  也就是说,根据该定理,采样速率/频率至少需要是信号中最高频率的两倍,才能重现原始模拟信号,否则可能会出现失真。

  ADC模数转换其实就是就是一个将模拟电压进行数字化的过程,需要事先定义好量程和分辨率。量程其实就是电压基准,ADC转换需要电压基准,没有基准的电压就没有准确的数值。ADC的转换结果是根据基准电压得到的,得到的满量程数据就是基准电压值,也就是最大值。单片机的ADC参考电压可以是电源电压或者单独输入的参考电压,也可以是单片机内部产生的参考电压。

  假如以5V电压为基准,那么测量的范围就是0V~5V;分辨率就是测量的精度了,假如12位ADC,12位二进制最大值为4095;这时候就可以知道0V=0, 5V=4095了,把5V分为4096份就可以了,由此可见,单片机ADC的分辨率越高,测量出来的结果就越精确了。

  单片机读到的是什么值?是从0到4095(或其它相应位数所能表示的最大值),当你把ADC引脚接了GND,读到的就是0,当你把ADC引脚接了VDD,读到的就是4095。

CSDN中博文图片居中方式:在图片链接末尾加#pic_center
CSDN中博文首行缩进方式:在文字开头加上两个&emsp(要加分号)

参考资料:
参考网站1
参考网站2
参考网站3

猜你喜欢

转载自blog.csdn.net/weixin_44692935/article/details/106568034
今日推荐