"); //-->
本文介绍一种用普通单片机实现的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转换速度要求不高的场合。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
新人的问题
555简易线圈匝数测量仪电路
需要澄清的基本概念
海乐DZC-1000W电磁炉电路
索浦SP-200型电磁炉电路
三菱FX系列PLC教程 45 —— FX系列的字右移指令
《嵌入式Linux研究现状及发展方向》视频下载
《嵌入式操作系统Windows CE专题》PDF课件下载
555双线圈金属探测器电路
NVIDIA再掀AI散热革命! 散热大厂送样微通道盖4Q开奖
万宝牌DC2-13系列电脑型电磁灶电路
避免隔离设计的隐藏成本!
如何设计PCB布局以提升半桥GaN驱动器性能
三菱FX系列PLC教程 48 —— FX系列的先入先出读出指令(FIFO)
为机器人技术的未来发展筑牢安全防线
《嵌入式Linux应用程序开发详解》本书配套源代码下载
桥接差距:为何设计者-制造商合作在 PCB 制造中至关重要
想用89C51对AT45DB081B进行读写!
揭秘 PCB 设计与制造过程
(初学者)我想用51来控制红外线,不知怎么弄?
三菱FX系列PLC教程 47 —— FX系列的数据处理指令
商务部公布对原产于美国的进口相关模拟芯片发起反倾销立案调查
三菱FX系列PLC教程 44 —— FX系列的循环左移指令
中国在贸易谈判前对美国芯片发起反倾销调查
三菱FX系列PLC教程 46 —— FX系列的字左移指令
模拟对话丨实现更智能的数字预失真引擎:一种基于神经网络的方法
中国开始针对美国模拟半导体行业进行调查
《嵌入式Linux应用程序开发详解》本书相关工具下载
《嵌入式Linux应用程序开发详解》第3章 Linux下的C编程基础
s3c4510B驱动中断号irq怎样和Int0对应?