摘要:用普通单片机实现低成本的多路A/D转换
关键词:单片机 A/D转换 比较器 计时器
在此前笔者曾介绍了普通单片机实现低成本A/D转换的一种方法,在实际使用中还有其它的不少方法可以实现低成本A/D转换,在本文中我们继续为电子设计者们提供又一种A/D转换方法,该方法同样占用较少的单片机资源,成本也很低,仍然有很强的实用性,该电路曾在锂离子电池充电器中作A/D转换使用,效果良好。
其电路如图一所示:
图一
其工作原理说明如下:
1、硬件电路说明:
图一中的R1和N1(TL431)产生一个2.495V的稳定电压,作为A/D转换比较基准。R2、V1、VD1、VD2和R3构成一个恒流源电路给C1充电,C1上的电压与恒流源的电流大小及充电时间成正比。
MC74HC4051为8选1模拟开关,其输入通道由单片机控制来选择。LM393作为比较器,当C1上的电压由低到高上升到超过模拟开关输出电压时,其输出端会从低电平转变为高电平。“RA0”、“RA1”和“RA2”为单片机的3个 I/O脚,RA0设置为输入状态,用于检测比较器输出电平变化,RA1和RA2设置为输出状态,RA1输出高电平时,V2导通,用于将C1上的电荷放空, RA2用于选择模拟开关的输入通道。
2、A/D转换过程:
首先RA2输出低电平,使模拟开关选择X0(基准电压)作为输入,RA1输出高电平,使V2导通将C1上的电量放完,然后使RA1输出低电平,使 V2截止,此时C1上的电容开始被充电,同时计数器开始计数,当C1上的电压不断上升,并达到比较器输入负端的电压(此时为基准电压Vref)时,比较器的输出端由低电平转为高电平,此时记录下计数器的计数值,为T1。
接着RA2输出高电平,使模拟开关选择X1(被测电压)作为输入,RA1输出高电平,使V2导通将C1上的电量放完,然后使RA1输出低电平,使V2截止,此时C1上的电容又开始被充电,同时计数器开始计数,当C1上的电压不断上升,并达到比较器输入负端的电压(此时为基准电压)时,比较器的输出端由低电平转为高电平,此时记录下计数器的计数值,为T2。
由于C1是被恒流充电,因此C1上的电压与充电时间成正比,即V="T"*k。当C1的容值与充电的恒流值不变时,k是一个固定不变的常数。由此可以得到:
Vref/T1=V1/T2 ,即 V1=Vref*T2/T1
由于Vref是基准电压(2.495V),因此只要利用单片机的定时器测出T1和T2,就可以计算出被测电压V1的值。
3、A/D转换误差分析及解决办法:
A/D转换的误差主要由以下几个方面决定,分别说明如下:
1、基准电压Vref:在该A/D转换中,Vref电压是造成A/D转换误差的主要原因,如果使Vref电压精度做到较高,则A/D转换误差可以做到很小,在Vref电压精度为0.5%情况下,实际的A/D转换误差小于1%。
2、定时器误差:若单片机对比较器输出端的电位变化反应慢,或定时器误差较大,则测量到的T1与T2值不准,也会导致测量误差。
3、比较器输入端的失调电压:该电压对A/D转换精度有一定影响,但影响较小。
4、运算误差:由于V1值要经过乘除法运算后得到,在进行运算过程中如果数据处理不当,如余数处理不当,也会产生误差。
5、干扰误差:当输入电压不稳时,恒流源的输出电流会有一定的影响,会产生干扰误差。
A/D转换误差的解决办法:
1、对Vref造成的误差,只能通过提高Vref电压精度来解决,它相当于A/D转换的基准电压。
2、对于定时器误差,在单片机中可使RA0口采用带电平变化中断功能的I/O口,以提高反应速度,同时减少恒流源的电流大小,或加大C1电容容量,可以增加T1、T2的测量时间,使计数值加大,达到提高A/D转换精度的目的。
3、选用灵敏度高的比较器可解决比较器输入端导致的误差问题。
4、对运算误差,可以通过软件上的改进来解决。
5、对于干扰造成的误差,可对A/D转换值进行数字滤波,如多次转换求平均值等方法来解决。数字滤波消除误差的方法很多,在此不再赘述。
4、A/D转换速度及提高办法:
由于该A/D转换是通过恒流源对C1电容充电后再进行比较来完成的,C1电容的充电过程需要一定的时间,因此其A/D转换速度较慢,适用于对A/D转换速度要求不高的产品中,其A/D转换速度取决于以下几个方面:
1、恒流源的电流大小:恒流源的充电电流越大,C1上的电压上升速度就越快,到达被比较电压的时间也就更短,转换速度就更快。
2、C1电容的大小:其道理与前一点一样,当电容小时,电压上升速度就越快,到达被比较电压的时间也会越短,转换速度就越快。但由于计数值小,由定时器造成的测量误差也有可能加大。
3、单片机的工作频率:由于A/D转换值是经过乘除运算后完成的,因此单片机的运算速度也会对A/D转换速度有影响,尤其当计数器值为16位时。
由上所述,A/D转换的速度可以通过提高单片机的工作频率,增大恒流源的输出电流,减小C1电容容值来加快A/D转换速度,但要注意当T1、T2 计数值太小时有可能使定时器因素造成的误差增大,因此在实际使用中要综合考虑,在提高转换速度时,保证A/D转换精度,选择最适用于产品的参数值。
5、输入电压的测量范围:
A/D转换的输入电压测量范围为0V至4.5V,当C1被充电至大于4.5V时,恒流源输出将不再恒流,C1上的电压与时间将不成正比,因此测量范围只到4.5V。若要提高被测电压范围,可将输入电压通过电阻分压后进行测量,但其A/D转换的误差会受分压电阻影响。
6、A/D转换通道的多路扩展:
图中的8选一模拟开关只用到其中的2路,实际应用中其它的6路也可使用,这样A/D转换的通道可扩展到7路,因此在用4个I/O口情况下,可实现3路A/D转换,在用5个I/O口情况下,可实现7路A/D转换。