在前面的文章中分别介绍了两种用普通单片机实现低成本A/D转换的方法,这两种方法中在单片机的外部都要使用到一个比较器,在本文中继续向大家介绍低成本的A/D转换的一种方法,只是这种方法成本会更低,而且外部无需使用比较器。此种方法的A/D转换精度不高,只有6~7bit,并且被测电压范围较为有限,但在某些精度要求不高,且被测电压值变化不大的场合也很有实用价值,比如温度测量方面。
其电路如图一所示:
其工作原理说明如下:
1、硬件说明:
图一中的R1、R2和C1构成RC充电电路,被测量通过R1、R2对C1充电。N1为单片机,本电路中采用MICROCHIP的PIC12C508A来举例说明。C2为给电源供电用的滤波电路,VD1为保护用稳压二极管,以避免输入电压过高而损坏单片机。
2、A/D转换过程:
首先GP5输出低电平,使电容C1上的电量完全放光,随后GP5即转变为输入状态,此时单片机开始计时,被测电压经过R1、R2电阻对电容C1进行充电,电容C1上的电压会逐渐升高,C1上的电压U满足以下公式:
其中U为电容C1上的电压,E为输入电压(被测量),T=(R1+R2)*C1,t为时间。
当C1上的电压U达到单片机I/O脚的门嵌电压时,单片机的GP5由低电平状态转变为高电平状态。记录从充电开始至此时所经过的时间t。
从上式可知,当单片机I/O脚的门嵌电压、R1、R2、C1值都固定不变时,被测量的电压值E与时间t呈一一对应关系。
因此测量输入电压对C1电容充电到门嵌电压的时间,进行查表计算,就可以得到被测电压值,从而实现了A/D转换。
3、A/D转换误差分析及解决办法:
A/D转换的误差主要由以下几个方面决定,分别说明如下:
(1)单片机的电源电压VDD:在该A/D转换中,VDD电压变化较大时有可能造成I/O口的门嵌电压发生变化,不过其影响较小。
(2)单片机内部的定时器对C1电容上电压上升时间的测量偏差:该测量偏差是A/D转换误差的主要因素。
(3)电阻、电容不稳定导致的误差:当电阻R1、R2或电容C1的值发生变化时,也会使C1电容的电压上升至门嵌电压时间发生变化,这也将影响A/D转换结果。
(4)单片机I/O脚的输入阻抗:如果单片机的I/O脚输入阻抗较低,相当于使RC值发生变化,也会影响A/D转换结果。
(5)单片机的门嵌电压:对于不同的单片机,其门嵌电压可能略有相同,这也会导致测量误差。
A/D转换误差的解决办法:
(1)对VDD造成的误差,只能通过提高VDD电压精度来解决,VDD的电压最好能稳定在2%范围内,普通的7805就有2%的稳压精度。
(2)对单片机内部的定时器产生的误差,可以增加RC值,从而使C1电容上电压上升时间延长,计数器测得的值较大,误差会较小。不过R值若太大,受I/O口输入阻抗影响也会较大。
(3)R1、C1选用精度较高较稳定的电阻、电容,或增加一个微调电阻器来解决。
(4)若单片机I/O脚输入阻抗较低,可以减小R1、R2电阻,增加C1电容来解决。
4、A/D转换速度及提高办法:
由于该A/D转换是通过被测值经过一个电阻对电容充电使电压到达门嵌电压后测量充电时间来得到A/D转换值的,因此其A/D转换速度会比较慢,它适用于对A/D转换速度要求不高的产品中,其A/D转换速度取决于以下几个方面:
(1)RC值:当RC值太大时,测量速度会较慢,减小RC值可以提高A/D转换速度,但由于计数时间较短,测量误差会增大。
(2)被测电压值的大小:由于C1上的电压U是由小到大逐渐加大的,当被测电压值较小时,U电压上升到门嵌值的时间就越长,完成A/D转换的速度就越慢。反之被测电压越高,测量速度越快。
由上所述,A/D转换的速度可以通过减小RC值来提高。若单片机带有外部电平变换中断,其A/D转换的精度还可以得到提高。
5、输入电压的测量范围:
A/D转换的输入电压测量范围为单片机门嵌电压至单片机的电源电压(VDD),若需要提高被测电压范围,可将输入电压通过电阻分压后进行测量,但其A/D转换的误差会受分压电阻影响。
6、单片机的A/D转换应用实例:
下图为采用PIC12C508实现A/D转换的应用实例,图中用4个发光二极管来作相应的电压值范围指示。其电压测量范围为1.4V至2.55V,其测量精度为10mV。
该应用实例与原程序可参考MICROCHIP公司的单片机应用笔记,该文件可从MICROCHIP网站上下载。