1引言
AT89CX051系列单片机是一种低功耗、高性能的片内含有闪速可编程存储器的8位CMOS微控制器,使用高密度、非易失存储技术制造,输出管脚少,工作电压范围宽,内部集成了模拟比较器,与80C51引脚和指令系统完全兼容。该系列芯片将具有多种功能的8位CPU与FPEROM结合在一个芯片上,为很多嵌入式控制应用提供了非常灵活而又价格便宜的方案,其性价比远高于8751。
由于AT89CX051系列单片机内部不具备A/D转换功能,使一些需要进行模拟量处理的应用装置的成本提高,为此,本文介绍一种利用AT89CX051内部比较器及RC阻容器件使AT89CX051能够处理模拟量的简单技术。在这种使用少量元件的转换方法中,分辨率为50mV,精度低于0.1V,转换时间为7ms或更长,可见它是以损失精度和转换时间为代价的。但在精度要求不高的应用场合不失为一种有效的方法。
2硬件原理
如图1所示,实现A/D转换仅需要两个电阻、一个电容和一片AT89CX051。AT89CX051的输出引脚P11的电位从地到Vcc之间摆动,一交替充放电的电容被连接到AT89CX051内部比较器的正向输入引脚P12上,AT89CX051的检测时间为电容上电压达到与施加在内部比较器反向输入端P13上的被测电压相等时所需的时间。显然,被测电压是测量时间的函数。
可以看出,该转换方法的本质就是利用电容的充放电原理。对于典型的电容充放电,其波形的充放电部分相等并在Vc=Vcc/2处转变,电容上的电压是一时间函数:
式中,Vc表示时间t内电容上的电压;Vcc为电源电压;RC为时间常数,其大小影响波形的形状。
要对式(1)进行求解,必须使用浮点计算和超越函数,这种运算若利用AT89CX051的指令来实现是很困难的。为此,采用将每个采样点的预计算值映象为搜索表,就无需实时求解上述的指数等式。同时,在这种方式中,利用数据编码和格式化可以简化转换软件,利用数据的对称性可以减小表格的大小。
3RC参数的确定
基于RC的A/D转换方法中对元件参数的变化比较敏感。如图2所示,由于电阻、电容值的变化引起了电容上电压的变化。从图中可以看出,当电容容量减小时,电容上电压也相应减小。利用电容充放电的对称性可以减小器件参数变化对准确度的影响。理由在于充电周期的测量电压<VCC/2,放电周期的测量电压>VCC/2,这样,最大误差不会超过VCC/2,所以RC参数的确定至关重要。
在确定RC参数之前,必须确定比较器输出的采样间隔。采样间隔应尽可能短,以提高转换精度,缩短转换时间。采样间隔主要受执行时间的限制,而程序代码的执行速度取决于单片机的时钟速率。
RC时间常数影响充放电波形的形状,为使波形最陡段的可分辨率达到希望的值,必须对时间常数进行选择。充电周期波形的最陡处发生在原点附近,而放电周期的最陡处靠近Vcc。由于波形的对称性,在充放电周期性中均采用同一时间常数。图3给出了充电初期电压和采样时间的关系曲线。在图中,△V是希望的转换器电压分辨率;△t为采样间隔;Vc表示电容上的电压,在图示比例下表现为线性。采样点位于电压当量的中间,曲线的斜率有可能比图示小,但不可能比图示大(或降低分辨率)。为了获得首次采样要求斜率所需要的最小时间常数,由(1)式得:
设△V为小分辨率(0.05V),△t为采样间(2)隔(5μs),计算首次采样点的RC,取Vc=1/2△V,t=1/2△t
R与C的积不能小于最小时间常数的计算值,利用误差为1%的电阻及误差为5%的电容,即:
在图1中,所选电阻值为267kΩ,电容值为2μF则相应的时间常数近似为5.02×10-4。单片机的P11连接了一个5.1kΩ的上拉电阻,该电阻用于补充单片机内部上拉的不足,但它在充放电周期的充放电过程中对时间常数有不利影响,导致充放电周期的非对称性,产生转换误差。为减小这种影响,R标称值的选择应远远大于上拉电阻值。
时间常数是期望转换精度和确定电容充放电持续时间的函数,电容充放电的时间越长,整个测量过程要求的采样次数也就越大。电容充放电的要求时间近似于电容上电压从渐近线上升到最小电压当量的一半所需的时间。对于充电,渐近线位于Vcc。由于波形的对称性,下面的计算值适合于充放电两个周期,
由(1)式得,假定分辨率为0.05V,则电容上的电压为:
整个测量中,采样次数的最小值由电容上电压由(5)式得:
则充电或放电周期的最小采样次数为:
为增加准确度,在充放电周期的充电段测量电压范围为0~Vcc/2,放电段为Vcc~Vcc/2,从而使搜索表的数据前面对每个半周期采样的两倍。
4算法
搜索表包含与每个采样点相对应的计算电压值,对于每半个周期,表中第N个入口(条目)与t=(N-1)时刻的电压相对应(△t为采样间隔),对充电的半周期,每个采样点的电压通过等式(1)计算,t取值为充电开始到该采样点的累计时间;对于放电的半周期,每个采样点的电压通过下式计算,t的取值为放电开始到该采样点的累计时间,即:
表的内容大小是变化的,它取决于采样间隔和转换精度,当分辨率增加时,表中的条目就增加,当分辨率为0.05V时,表中的条目为158。
对充电周期,将等式(1)的t用N△t代替,便可计算出相应采样点的电压。这里N表示采样点数(0~78)。设△t等于5μs的采样间隔,R=267kΩ,C=2μF,Vcc=5V,则等式(1)变为:
同理,对于放电周期,将等式(10)中的t用N△t代替,其余同上,则等式(10)变为:
在充电周期电压值为升序,在放电周期为降序,电容上电压的轨迹即为表的条目顺序。
5误差分析
RC型A/D转换方法的准确度为±0.1V,但实际上有可能达不到,即使采用精密器件,其参数的变化将会引起±0.104V的误差。
当Vc=2.5V时,误差最大,由(5)式:
结果表明,有0.208的变化,或者说最大误差为±0.104V这种转换误差可通过利用更多允许误差的器件来减小。
参 考 文 献
1 周航慈.单片机应用系统程序设计技术.北京:北京航空航天大学出版社,1991
2 李大有,姜秀芳.单片微型机硬件、软件及应用.北京:高等教育出版社,1992
3 吴万峰,吴万钊.模糊数学与计算机应用.北京:电子工业出版社,1998