当前位置:首页 > 技术心得 > 正文内容

PWM实现ADC和DAC

xjtudll15年前 (2010-10-02)技术心得109372

一、PWM实现AD

利用普通单片机的2个IO及一个运算放大器即可实现AD转换电路,而且很容易扩展成多通道。其占用资源少,成本低,AD转换精度可以达到8位甚至更高,因此具有一定的实用价值。

clip_image002

图1

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),若单片机的工作电压为稳定的+5V,则U1=5V*D1/(D1+D2)。

图一中的LM324作为比较器使用,其输入负端的U1电压与输入正端的模拟量电压值进行比较,当U1大于模拟量输入电压时,比较器的输出端为低电平,反之为高电平。

1.2 AD转换过程

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

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

1.3如何减少AD转换的误差

AD转换的误差主要由以下几个方面决定,分别说明如下:

(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转换速度,推荐使用图一中所示的R1、C1参数,在纹波合理的情况下,其转换误差也可通过软件消除。

AD转换误差的解决办法:

(1)对VDD造成的误差,只能通过提高VDD电压精度来解决,它相当于A/D转换的基准电压。

(2)对于软件中PWM设计不良导致的误差,可修改软件进行解决。

(3)对比较器及RC滤波电路的纹波导致的误差,在软件中可通过上、下检测法进行消除,即先将PWM的占空比由小到大变化,使U1电压由低往高逐渐变化,在比较器输出端变化时记录其A/D转换值,再将PWM的占空比由大到小变化,使U1电压由高到低变化,在比较器输出端变化时记录其A/D转换值,将两次的A/D转换值进行平均,可有效地消除这两种误差。

(4)对A/D转换值进行数字滤波,如多次转换求平均值等。数字滤波消除误差的方法很多,在此不再赘述。

1.4 如何提高AD转换的速度

由于该A/D转换是通过PWM滤波后再进行比较来完成的,其PWM的产生与滤波都需要一定的时间,因此其A/D转换速度较慢,适用于对A/D转换速度要求不高的产品中,其A/D转换速度取决于以下几个方面:

(1)单片机的运行速度:单片机的运行速度越高则PWM的频率可以越高, RC值就可以取得越小,其延时时间也可以更短,转换速度就更快。

(2)被测电压值的大小:由于U1电压时是由小到大逐渐加大的,当被测电压值较小时,U1电压上升到相应值的时间就越短,完成A/D转换的速度就越快。

(3)初始占空比:初始占空比越高,U1电压较大,其上升到被测电压值的时间也就会越短,完成A/D转换的速度也就越快。

由上所述,A/D转换的速度可以通过提高单片机的工作频率,并在预知被测电压范围时尽可能地设置较高的初始占空比值来加快转换速度,如果所要求的A/D转换精度要求不高,还可以在软件中缩短PWM输出的延时时间来提高A/D转换速度。若单片机带有外部电平变换中断和定时器中断,其A/D转换的精度和速度还可以得到提高。

二、PWM实现DA

利用同样的原理,可使该电路很容易的只用单片机的一个I/O脚实现D/A转换功能。其输出的模拟量电压Vout=VDD*D1/(D1+D2)。该输出电压带有纹波,当RC值足够大时,该纹波值几乎为零,可忽略不计。如图2所示。

clip_image003

图2

为进一步减小纹波,可使用两级RC滤波。

此处LM324作为一个跟随器,提高电路的负载能力。

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://www.xjtudll.cn/Exp/143/

标签: PWMADC
分享给朋友:

“PWM实现ADC和DAC” 的相关文章

用Allegro导出DXF/DWG格式文件

用Allegro导出DXF/DWG格式文件

在硬件系统设计过程中,有时需要导出PCB文件的二维模型用以设计对应的结构件。 以下内容介绍的是采用Cadence套件中的Allegro软件将brd文件导出为DXF文件。1.在Allegro中打开brd文件,设置好要导出的layer,选择File->Export->DXF 2....

PowerPCB转Protel

PowerPCB转Protel

第一步:用PowerPCB打开文件,选择Export导出,保存类型选择"ASCII Files(*.asc)",按保存按钮,弹出"ASCII Output"对话框,在导出格式(Format)中选择"PowerPCB V3.5",然后Sele...

金蝶 报废/补料是否会参与倒冲领料

金蝶 报废/补料是否会参与倒冲领料

产品入库倒冲领料单没有考虑报废补料数量,一般领料时则会考虑。此种情况可以通专过【报废倒冲领属料】的功能生成【生产领料单】。 请按下列方法步骤操作: 1、登录K/3主控台,依次单击【生产管理】→【生产任务管理】→【生产物料报废/补料】,双击【生产物料报废/补料单-维护】; 2、打开...

苹果电脑备份还原Windows操作系统

苹果电脑备份还原Windows操作系统

苹果电脑可以通过BootCamp安装Windows系统(毕竟,有很多“Just For Windows”和“IE Only”的软件和服务--比如国内的网上银行)。但是,苹果电脑的macOSX操作系统及其下的文件可以通过Time Machine备份、还原,通过BootCamp装的Windows系统及其...

C# MDI 子窗体被父窗体控件挡住

C# MDI 子窗体被父窗体控件挡住

https://blog.csdn.net/chenyblog/article/details/40752029最近在做一个小工具,发现了一个过去做项目没有遇到的问题:子窗体被父窗体的控件给挡住了!如下图所示:子窗体的TopMost 已经设为true,父窗体的控件已经置于底层,但是结果还是很悲观!无...

Altium Drag妙用——批量添加引脚(PIN)延长导线

Altium Drag妙用——批量添加引脚(PIN)延长导线

使用Altium画单片机相关的原理图的时候,因为要对单片机的引脚添加网表(Netlist),所以必然会用导线将PIN延长,然后加网表。要达到的效果如图所示: 最笨的办法就是:一根线一根线画。这样的话效率很低,典型的浪费时间。有没有更高效的办法呢?答案是肯定的,这就是我标题里提到的Drag的功效。...

评论列表

error
error IP:江苏省
8年前 (2017-06-06)

你这最后一幅图是电压跟随器?电压跟随器引入的为串联电压负反馈吧。。。

x
x IP:广东省
9年前 (2016-05-03)

PWM输出做DAC建议用二阶RC滤波

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。