新闻  |   论坛  |   博客  |   在线研讨会
普通单片机实现低成本高精度A/D与D/A转换
yanqin | 2009-04-17 16:13:07    阅读:1215   发布文章

  本文介绍一种用普通单片机实现的A/D转换电路,本设计只用普通单片机的2个I/O口加1个运算放大器即可实现1路A/D转换,而且很容易扩展成4通道A/D转换。该电路占用资源少,成本低,A/D转换精度可达到8位或更高,很具实用价值。

  其工作原理如下:

  1.硬件电路

  电路如图1所示。RA0和RA1为单片机的I/O口。进行A/D转换时,通过软件产生PWM,从RA0口送出预定占空比的PWM波形,RA1口用于检测比较器输出端的状态。

  R1、C1构成滤波电路,对RA0口送出的PWM波形进行平滑滤波。RA0输出的PWM波形经过R1、C1滤波并延时后,在U1产生稳定的电压,其电压值U1=VDD×D1/(D1+D2)。
LM324作比较器用,其负输入端的电压U1与正输入端的模拟电压值进行比较,当U1大于模拟量输入电压时,比较器的输出端为低电平,反之为高电平。

  2.A/D转换过程

  如果使RA0输出PWM波形,且占空比由小到大逐渐变化,则U1的电压随之由低到高。当U1电压超过被测电压时,比较器的输出端由高电平变为低电平,因此可以认为在比较器输出电压由高到低跳变的瞬间被测的模拟量与U1的电压相等。

  由于U1的电压值=VDD×D1/(D1+D2),当VDD为固定值时,其电压值取决于PWM波形的占空比,而PWM的占空比由内部用于控制PWM输出的寄存器的值决定。若用寄存器A来存放RA0输出的PWM的占空比值D1,在RA1口由“1”变为“0”的瞬间,A寄存器的值D1即为被测电压的A/D转换值,其A/D转换值为8位数。如果用16位寄存器来作输出PWM的占空比,则可达到16位。

  3.A/D转换误差分析及误差解决

  (1)误差分析

  A/D转换的误差主要由以下几个方面决定。

  1)单片机的电源电压VDD:在此A/D转换中,VDD电压不稳定是造成A/D转换误差的主要原因。若VDD电压精度较高,则A/D转换误差可以很小,在VDD电压精度为0.5%时,实际的A/D转换误差小于1%。

  2)PWM占空比:若产生PWM的软件设计不合理,会使存放占空比的寄存器值与实际输出的PWM占空比不一致,引起测量误差。

  3)比较器输入端的失调电压:该电压对A/D转换精度有一定影响,但影响较小。

  4)RC滤波电路的纹波:若R1、C1取值不当,U1处的电压纹波较大,延时时间不够,会使A/D转换产生误差,因此R1、C1取值不能太小,但太大了又会影响A/D转换速度,推荐使用图1中所示的R1、C1参数。在纹波合理的情况下,其转换误差可以通过软件消除。

  (2)误差的解决办法

  1)提高VDD电压精度。

  2)修改软件,解决软件中PWM设计不良导致的误差。图2为产生PWM的程序流程图,可按此流程设计程序。

  3)比较器及RC滤波电路的纹波导致的误差可通过上、下检测法消除,即先将PWM的占空比由小调到大,使U1电压由低向高变化,并记录比较器输出端的A/D转换值,再将PWM的占空比由大调到小,使U1电压由高向低变化,记录比较器输出端的A/D转换值,将两次的A/D转换值进行平均。

  4)对A/D转换值进行数字滤波,如多次转换求平均值等。

  4.A/D转换速度及其提高

  由于A/D转换是通过PWM滤波后再进行比较来完成的,而PWM的产生与滤波都需要一定的时间,因此转换速度较慢,适用于对A/D转换速度要求不高的场合。

 

 

 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客