高精度ADVF32与51系列单片机接口介绍
扫描二维码
随时随地手机看文章
由于当前12位以上的A/D转换器价格昂贵,人们正在寻找新的途径来取代它,而V/F变换器便是一种较好的选择。由于V/F变换器具有高精度、高线性度的特点,如美国模拟器件公司的ADVFC32(国产型号为5GVFC32),在满度频率为10 kHz时的非线性误差仅为0.005 %FSR,而AD650可达0.002%FSR,而且外电路简单。因此用V/F变换器可以制成精度高,价格低廉的高性能A/D转换器,其分辨率可达16位以上。在速度要求不太高的场合是很适用的,如用于称重、压力等各种传感器信号的高精度数据测量系统中。可以预见,以V/F变换器制成的高精度A/D转换电路在不久的将来将成为微计算机的一种具有竞争性的接口电路。
用V/F变换器作A/D转换时,通常由一些硬件电路如振荡器、二分频器、计数器和门电路等组成,而由计数器计得的计数值,即A/D转换结果,再通过接口电路送入微计算机进行处理,较为复杂和不便;或者采用F/BCD变换电路,将V/F变换器输出的频率信号变为BCD码,再通过接口电路送入微计算机,也较为复杂,而且还要对BCD码进行变换。这些方法成本都较高。
现介绍一种以单片机直接与V/F变换器接口进行A/D转换的方法,无需额外的硬件电路,完全利用单片机内部的硬件资源,简单方便,成本最低,大大地提高了V/F变换器作为A/D转换电路的可行性。
当前,单片机特别是INTEL公司的51系列单片机已在智能仪器仪表和过程控制等方面得到广泛应用,已取代280,因此A/D转换电路与单片机的接口方法也是人们所关注的。本文主要介绍V/F变换器ADVFC32作高分辨率A/D转换时与51系列单片机(如8031等)接口的硬件和软件。
一、硬件接口电路
ADVFC32与51系列单片机的硬件接口电路如图1所示。图中是输入电压信号为正时的情况。在输入信号为负时,只要把电阻R1、R3接地,从第14脚直接输入即可。AD650的电路与ADVFC32的外电路相似。关于这两种芯片的引脚排列及内部结构等请参考有关手册。
由图1可见,接口电路非常简单,只要把V/F变换器输出的频率信号直接送到单片机8031的定时器1的计数输入端T即可。其设计思想为:从传感器来的mV级电压信号经运算放大器放大到0~10 V的电压后,加到ADVFC32的输入端,从频率输出端,OUT输出的频率信号加到单片机8031定时器1的计数输入端Tl上。在单片机内部由定时器作计数器时,由定时器1对输入脉冲计数。定时器O的定时时间由要求的A/D转换分辨率设定。因为定时器O在工作方式1时为16位定时器,所以最长的定时时间为:
式中:foc为单片机晶体振荡器的振荡频率,如foc=12 MHz,则
如要求的定时时间超过这一数值,定时器产生溢出中断,可用单片机内部RAM的存储单元作软件计数,则可延长定时时间。
8031的定时器1作计数器使用时,可计数的外部脉冲最高频率为单片机晶体振荡器振荡频率的1/24,即
等于ADVFC32的最高允许工作频率,故单片机8031的内部定时器TO和Tl满足对定时和计数的要求。
另外,单片机的定时器在作计数器使用时,要求外部输入脉冲的宽度至少为一个机器周期的时间。8031的一个机器周期等于12个振荡周期,即V/F变换器输出信号的脉冲宽度应
而ADVFC32的输出脉冲宽度为(0. 1~0. 15/ FMax)μs,其中fmax为满度时输出频率。如fmax=100 kHz,则输出脉冲宽度为:
满足对脉冲宽度的要求。如fmax再提高,则脉冲宽度变小,需将脉冲展宽,如接一个555定时器等,然后再接到单片机上。
一次A/D转换所须计数的脉冲数和定时器的定时时间是由所要求的分辨率决定的。
设分辨率为12位,则脉冲数=212 =4 096个。ADVFC32的最高工作频率fmax有三种:
10 kHz、100 kHz和500 kHz。现取fmax=100 kHz,则其脉冲周期
类似地,对于其他分辨率,由计算得出:
●分辨率为13位,脉冲数=8 192,定时时间=81. 92 ms;
●分辨率为14位,脉冲数=16 384,定时时间=163. 84 ms;
●分辨率为15位,脉冲数=32 768,定时时间=327. 68 ms;
●分辨率为16位,脉冲数=65 536,定时时间=655. 36 ms;
●分辨率为16.6位,脉冲数=100 000,定时时间=1s。
所以在fmax=100 kHz时,如定时时间为1s,则其A/D转换的分辨率超过16位。但实际上对分辨率的选取应按实际的需要而定,过高的分辨率将使A/D转换的速度下降。
为便于计算,现以最大脉冲数=20 000为例进行设计,则定时时间=200 ms,根据式2X-20 000,可求出分辨率为
即分辨率大于14位,满足一般对高分辨率的要求。定时时间为200 ms,可转换4~5次每秒,相当于双积分式A/D转换器的转换时间,亦不算太长。
定时器O的初值计算如下:
设定时器0工作在方式1,为16位定时器。
①机器周期=12Toc=12×l/fc=12×1/(12×106)=1 μs
②16位定时器的最长定时时间为216×机器周期-65 536×1μS= 65. 536 ms
现取整数值,设定时器0的定时时间=50 ms,则定时器O溢出4次即为200 ms,在定时器0溢出中断程序中,由软件计数4次即可。
③定时器O在定时时是对机器周期进行计数,定时50 ms的机器周期数=50 ms/1μs=5 000。
④定时器0可计的最大机器周期数= 216=65 536,故定时器O的初值=65 536 - 50 000=15 536-3CBOH
设定时器1也工作在方式1,为计数器状态,是16位计数器,最多可计216= 65 536个脉冲,而外部输入的最大脉冲数=20 000<65 536,无溢出,故定时器1不必开中断。
二、A/D转换软件
根据上述分析,得出A/D转换的流程图如下图所示。在程序中,定时器1的低8位TL1和高8位TH1的值即为A/D转换的结果,为二进制数,分别进入单片机8031的内部RAM单元31H和32H中暂存;然后即可对此结果进行数据处理,如标度变换等;或输出显示。本程序为一次A/D转换的程序,如需多次A/D转换,只须稍加修改,使其重复运行,并将转换结果存入不同的RAM单元,然后再加以处理即可。在程序中以内部RAM的30H单元作为定时器0溢出次数的计数缓冲器,定时器O每溢出一次,30H的内容溢出中断服务程序便加1.当30H的内容为4时,转换结束。
此外,在中断服务程序中要给定时器O重置初值,并且修正在重置初值前定时器已运行的.7个机器周期。因为在中断服务程序中没用到累加器及其他寄存器,所以不必进行保护现场和恢复现场等操作。
A/D转换的程序如下:
A/D转换主程序
用单片机实现编码器VD5026的工作时序