智能小车50:ADC的原理与Arduino的实现

ADC是把模拟信号转换为数字信号的电路,模拟信号在数值上是连续的,而且具有无穷多的数值。数字信号则相对简单得多,它的幅度和取值不连续,只有表示“1”的高电平和表示“0”的低电平两种。在将模拟量转化为数字量的过程中,一般需要经过采样、量化和编码三个步骤。

转换原理如下图:

模拟信号从Vin端输入,参考电压从Vref端输入。转换过程初始时,逐次逼近寄存器SAR的值清零,转换开始后SAR将最高位置1,SAR中的数字量经过D/A转换后生成试探反馈电压Vf,这个电压随即送入比较器中与模拟输入电压Vin进行比较。如果Vin>Vf,则所置的1被保留,否则最高位的1会被舍掉,再将次高位置1,并重新经D/A转换后得到新的Vf再与Vin进行比较。此试探性比较重复进行,直至定出所有数据位的取舍,最后将得到的所有数据位作为转换结果输出出来。

从上面的原理图可以看到vin与vref两个输入。同时arduino的引脚有vin与aref两个引脚,它们完全是不一样的。先看一下arduino的vin引脚:

这里的vin引脚就是一个输入引脚,电压高于5V,经过一个稳压器NCP1117ST50T3G变成稳定的5v电压。

而aref引脚确实是一个基准电压的输入引脚,可以通过一个analogReference函数来设定是片内基准电压还是自外基准电压,片外基准电压就是给这个引脚一定的电压。api的详解如下:

如图所示,arduino默认的参考电压为5v。就是说写一句analogReference(DEFAULT)与不设置参考电压是一样的,都会以5v作为参考电压。另外还有一个INTERNAL,为1.1v,其它两个mega板用的参数先不管了。还有一个EXTERNAL,我分别把aref连到5v与3.3v还有悬空状态,把这三种状态下的测试结果作一个对比。得到以下表格:

从上面的表格可以看出,使用默认的5v与aref连接5v的测试结果是一样的。说明一下我的试验设备,一个arduino uno,3根导线与一节5号电池。如下图:

实验代码如下:

文/程忠 浏览次数:0次   2018-01-23 14:13:49

相关阅读


评论: