基于8OC196的高精度、低成本A/D转换
2 A/D转换的硬件实现
利用80C196KB自带的10位A/D转换器和PWM输出,实现高精度A/D转换的原理如下:假设传感器提供的信号为Vs,经放大后提供给A/D转换器信号为As,A/D转换的结果为Rd,A/D转换的舍入误差为Ed,对于逐次逼近式A/D转换有0≤Edlbit,若As对应的真实数字量为Ad,则有:Ad=Rd+Ed,所以有:Ad-Rd=Ed,在此,Rd信号由10位A/D转换结果舍掉后两位后得到,它作为A/D转换结果的高8位,然后由PWM信号输出,经滤波后得到Rd的模拟量RA,取As与RA的差分信号Es=As-RA,放大28倍后再次A/D转换,第二次转换后的数字量作为低10位数字量,两次A/D转换的结果合成后可以达到18位精度,其电路实现如图2所示。该图经实验验证和实际运行证明性能良好,具有实用性和参考价值。
图中,运算放大器H1和H2构成了差分放大器,H1和H2应选用性能较好的运算放大器,该电路具有极高的共模抑制比,传感器信号Vs经过差分放大器放大后得到As,As连接到80C196KB的0号A/D通道输入口ACH0,A/D转换后得到高8位数字量;80C196KB的PWM输出信号经过U2与E2构成的滤波器滤波后,得到直流信号Rd,这就是80C196KB通过PWM进行D/A转换的典型电路;运算放大器H3构成的电路实现Es×28,该信号连接到80C196KB的1号A/D通道输入口ACH1,完成Es的A/D转换,得到低位数字量。通过软件合并高位数字量和低位数字量即可实现高精度A/D转换。
3 A/D转换的软件实现
为保证实时性,A/D转换的软件通过中断方式实现,首先主程序在初始化中设定定时器和A/D中断工作模式,定时器中断到来时启动0通道A/D转换。A/D中断时,判断A/D的通道号,当0通道ACH0中断时,读取并保存A/D结果的高8位,通过PWM输出该结果,然后启动下一次l通道ACHl的A/D转换;当ACHl中断时,读取A/D转换结果并与高8位合并,得到最终结果。
当采用12MHz晶振时,80C196KB的A/D转换时间为22us,PWM输出周期是64us,PWM信号输出后,为使D/A结果稳定后再启动ACHl,延时了3倍PWM周期,整个A/D转换时间(包括A/D转换时间和软件运行时间)可以在1ms内完成。A/D中断服务程序的流程框图如图3所示。初始化程序和定时器中断服务程序较简单,流程图略。
4 结束语
利用80C196KB单片机的内置10位A/D转换器和PWM信号,辅以简单的放大电路和滤波电路实现模数转换。这种方法成本低、精度高、速度快、容易实现,具有较高的实用价值。该A/D转换方法在我单位研制的全自动数控对刀仪上得到成功应用。
评论