0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用单片机实现低成本的高精度AD转换和DA转换

Wildesbeast 来源:网络整理 作者:佚名 2020-01-26 09:25 次阅读

目前单片机电子产品中已得到广泛应用,许多类型的单片机内部已带有A/D转换电路,但此类单片机会比无A/D转换功能的单片机在价格上高几元甚至很多,本文给大家提供一种实用的用普通单片机实现的A/D转换电路,它只需要使用普通单片机的2个I/O脚与1个运算放大器即可实现,而且它可以很容易地扩展成带有4通道A/D转换功能,由于它占用资源很少,成本很低,其A/D转换精度可达到8位或更高,因此很具有实用价值。

其电路如图一所示:

图一

工作原理说明如下:

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大于模拟量输入电压时,比较器的输出端为低电平,反之为高电平。

2、A/D转换过程:

如果使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位。

3、A/D转换误差分析及解决办法:

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

A/D转换误差的解决办法:

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

(2) 对于软件中PWM设计不良导致的误差,可修改软件进行解决,本文提供了用软件产生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转换速度较慢,适用于对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转换的精度和速度还可以得到提高。

5、输入电压的测量范围:

A/D转换的输入电压测量范围为0V至单片机的电源电压(VDD),若需要提高被测电压范围,可将输入电压通过电阻分压后进行测量,但其A/D转换的误差会受分压电阻影响。

6、A/D转换通道的多路扩展:

图中所用的运算放大器为LM324,该集成电路内部带有4个运放,其余3个运放的输入端可分别作为另外3个A/D转换通道,其输出端与单片机连接,在软件上略作修改,就可以在不增加成本的情况下实现4路A/D转换。

7、用同样的工作原理实现D/A转换:

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

8、单片机的A/D转换软件程序流程图:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6029

    文章

    44480

    浏览量

    631596
  • AD转换
    +关注

    关注

    3

    文章

    167

    浏览量

    45260
  • DA转换
    +关注

    关注

    1

    文章

    30

    浏览量

    17679
收藏 人收藏

    评论

    相关推荐

    基于单片机低成本高精度A/D与D/A转换设计

    电路,它只需要使用普通单片机的2个I/O脚与1个运算放大器即可实现,而且它可以很容易地扩展成带有4通道A/D转换功能,由于它占用资源很少,成本很低,其A/D
    发表于 09-17 14:23 1258次阅读
    基于<b class='flag-5'>单片机</b>的<b class='flag-5'>低成本</b><b class='flag-5'>高精度</b>A/D与D/A<b class='flag-5'>转换</b>设计

    单片机高精度快速积分型AD转换

    单片机高精度快速积分型AD转换
    发表于 06-25 21:57

    高精度DA转换电路图

    高精度DA转换电路图
    发表于 07-15 16:29 2256次阅读
    <b class='flag-5'>高精度</b><b class='flag-5'>DA</b><b class='flag-5'>转换</b>电路图

    如何实现高精度高稳定性的DA输出

    单片机的PWM输出来做一个DA,PWM可以通过定时器来产生,然后经过一个转换电路,可以实现一个隔离的DA输出。
    发表于 05-22 00:48 1.1w次阅读
    如何<b class='flag-5'>实现</b><b class='flag-5'>高精度</b>高稳定性的<b class='flag-5'>DA</b>输出

    基于单片机低成本高精度A/D转换方案设计

    目前单片机在电子产品中已经得到了广泛的应用,许多类型的单片机内部已带有A/D转换电路,但此类单片机会比无A/D转换功能的
    发表于 07-09 14:07 935次阅读
    基于<b class='flag-5'>单片机</b>的<b class='flag-5'>低成本</b><b class='flag-5'>高精度</b>A/D<b class='flag-5'>转换</b>方案设计

    基于单片机的AD-DA转换 【C语言与汇编对照版】

    基于单片机的AD-DA转换 【C语言与汇编对照版】,多种集合,符合同时爱好C语言+汇编的学习者的胃口。
    发表于 12-31 10:22 0次下载

    单片机AD-DA转换程序 【C语言+汇编版】

    单片机AD-DA转换程序 【C语言+汇编版】。
    发表于 12-31 10:36 0次下载

    基于单片机低成本高精度A-D相互转换应用

    本文给大家提供一种实用的用普通单片机实现的A/D转换电路,它只需要使用普通单片机的2个I/O脚与1个运算放大器即可实现,而且它可以很容易地扩
    发表于 09-07 16:11 4次下载
    基于<b class='flag-5'>单片机</b><b class='flag-5'>低成本</b><b class='flag-5'>高精度</b>A-D相互<b class='flag-5'>转换</b>应用

    A/D转换过程与基于单片机低成本高精度A_D与D_A转换设计

    电路,它只需要使用普通单片机的2个I/O脚与1个运算放大器即可实现,而且它可以很容易地扩展成带有4通道A/D转换功能,由于它占用资源很少,成本很低,其A/D
    发表于 10-20 11:29 4次下载
    A/D<b class='flag-5'>转换</b>过程与基于<b class='flag-5'>单片机</b>的<b class='flag-5'>低成本</b><b class='flag-5'>高精度</b>A_D与D_A<b class='flag-5'>转换</b>设计

    单片机低成本高精度A/D与D/A转换设计解析

    电路,它只需要使用普通单片机的2个I/O脚与1个运算放大器即可实现,而且它可以很容易地扩展成带有4通道A/D转换功能,由于它占用资源很少,成本很低,其A/D
    发表于 10-20 16:12 3次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>低成本</b><b class='flag-5'>高精度</b>A/D与D/A<b class='flag-5'>转换</b>设计解析

    使用单片机DA转换实现正弦波的程序免费下载

    本文档的主要内容详细介绍的是使用单片机DA转换实现正弦波的程序免费下载。
    发表于 08-15 17:32 30次下载
    使用<b class='flag-5'>单片机</b>的<b class='flag-5'>DA</b><b class='flag-5'>转换</b><b class='flag-5'>实现</b>正弦波的程序免费下载

    如何进行51单片机的AD和DA转换

    本文档的主要内容详细介绍的是如何进行51单片机的AD和DA转换详细资料说明。
    发表于 06-17 17:44 18次下载
    如何进行51<b class='flag-5'>单片机</b>的AD和<b class='flag-5'>DA</b><b class='flag-5'>转换</b>

    使用单片机控制PCF8591的AD转换DA转换的程序详细资料说明

    1.利用单片机控制PCF8591的AD转换,控制AD0和AD1电位器,在数码光上显示DA转换的值。2.利用单片机控制PCF8591的
    发表于 05-31 17:54 29次下载
    使用<b class='flag-5'>单片机</b>控制PCF8591的AD<b class='flag-5'>转换</b>和<b class='flag-5'>DA</b><b class='flag-5'>转换</b>的程序详细资料说明

    使用单片机控制PCF8591进行AD转换和进行DA转换的详细资料说明

    1.利用单片机控制PCF8591的AD转换,控制AD0和AD1电位器,在数码光上显示DA转换的值。
    发表于 05-06 18:23 24次下载
    使用<b class='flag-5'>单片机</b>控制PCF8591进行AD<b class='flag-5'>转换</b>和进行<b class='flag-5'>DA</b><b class='flag-5'>转换</b>的详细资料说明

    使用单片机实现DA转换的实验文件免费下载

    本文档的主要内容详细介绍的是使用单片机实现DA转换的实验文件免费下载。
    发表于 03-24 11:11 20次下载