模数转换(A/D)与数模转换(D/A)

发布者:自由探索者最新更新时间:2020-04-19 来源: eefocus关键字:模数转换  数模转换 手机看文章 扫描二维码
随时随地手机看文章

单片机是一个典型的数字系统,数字系统只能呢个对输入的数字信号进行处理,其输出信号也是数字的。但工业或者生活中的很多量都是模拟量,这些模拟量可以通过传感器变成与之对应的电压、电流等模拟量。为了实现数字系统对这些电模拟量的测量,运算和控制,就需要一个模拟量和数字量之间的相互转化的过程。


A/D和D/A的基本概念

A/D是模拟量到数字量的转换,依靠的是模数转换器(Analog to Digital Converter),简称ADC。D/A是数字量到模拟量的转换,依靠的是数模转换器(Digital to Analog Converter),简称DAC。它们的道理是完全一样的,只是转换方向不同,因此我们讲解过程主要以A/D为例来讲解。 


什么是模拟量?就是指变量在一定范围内连续变化的量,总之,任何两个数字之间都有无限个中间值,所以称之为连续变化的量,也就是模拟量。ADC就是起到把连续的信号用离散的数字表达出来的作用


A/D的主要指标

我们在选取和使用A/D的时候,依靠什么指标很重要。由于AD的种类很多,分为积分型,逐次逼近型,并行/串行比较型,Σ-Δ型等多种类型。同时指标也比较多,并且有的指标还有轻微差别。


1.ADC的位数

一个n位的ADC表示这个ADC共有2的n次方个刻度。8位ADC,输出的是从0-255的256个数字,也就是2的8次方的一个数据刻度。


2.基准源

基准源也叫基准电压,是ADC的1个重要标准,要想把输入ADC的信号测量准确,那么基准源首先要准,基准源的偏差会导致转换结果的偏差比如一根米尺,总长度本应该是1米,假定这根米尺被火烤了一下,实际变成了1.2米,再用这根米尺测物体长度的话自然就有了较大的偏差。假如我们的基准源应该是5.10V,但是实际上提供的却是4.5V,这样误把4.5V当成了5.10V来处理的话,偏差也会比较大。


3.分辨率

分辨率是数字量变化的一个最小刻度时,模拟信号的变化量,定义为满刻度量程与2n-1的比值。假定5.10V的电压系统,使用8位的ADC进行测量,那么相当于0-255一共256个刻度把5.10V划分成255份,那么分辨率就是5.10/255=0.02V.


INL(积分非线性度)和DNL(差分非线性度)

一般容易混淆两个概念就是分辨率和精度,认为分辨率越高,则精度越高,而实际上,两者并没有必然的联系。分辨率是用来描述刻度划分的,而精度是用来描述准确程度。同样一根米尺,刻度数相同,分辨率就相当,但是精度却可以相差很大,ADC精度关系重大的两个指标是INL(Integral NonLiner)和DNL(Differencial NonLiner)。 


INL指的是ADC器件在所有的数值上对应的模拟值,和真实值之间的误差最大的哪一个点的误差值,是ADC最重要的一个精度标准,单位是LSB。LSB是最低有效位的意思,那么实际上对应的就是ADC的分辨率。一个基准为5.10V的8位ADC,它的分辨率就是0.02V,用它去测量一个电压信号,得到的实际结果是100,就是表示它测到的电压值是100*0.02=2V,假定它的INL是1LSB,就是表示这个电压信号真实的准确值是在1.98V——2.02之间的,按理想情况对应的数字因该是99-101,测量误差是一个最低的有效位,即1LBS。 


DNL表示的是ADC相邻两个刻度之间最大的差异,单位也是LSB。一把分辨率是1毫米的尺子,相邻的刻度之间并不都刚好是一毫米,而总是会存在或大或小的误差。同理,一个ADC的两个刻度线之间也不总是准确的等于分辨率,也是存在误差,这个就是DNL。一个基准为5.10V的8位ADC,假定DNL是0.5LSB,那么当它的转换结果从100增加到101时,理想情况下实际电压应该增加0.02V,但DNL为0.5LSB的情况下实际电压为0.01——0.03V之间,值得一提的是DNL并非一定小于1LSB,很多时候它会等于或者大于1LSB,这在相当一定程度上刻度紊乱,当实际电压保持不变时,ADC得出的结果可能会在几个数值之间跳动,很大程度上由于这个原因(但并不完全是,因为还有很多干扰)。


5.转换速率

转换速率,是指ADC每秒能进行采样转换的最大次数,单位是sps(或s/s、sa/s,即samples per second),它与ADC完成一次从模拟到数字的转换所需要的时间互为倒数关系。ADC的种类比较多,其中积分型的ADC转换时间是毫秒级的,属于低速ADC;逐次逼近型ADC转换时间是微妙级的,属于中速ADC;并行/串行的ADC的转换时间可达到纳秒级,属于高速ADC。 


ADC的这几个主要指标大家先熟悉一下,对于其它的,作为一个入门级别的选手来说,先不着急深入理解。以后使用过程中遇到了,再查找相关资料深入学习,当前重点是在头脑中建立一个ADC的基本概念。


PCF8591

PCF8591是一个单电源低功耗的8位CMOS数据采集器件,具有4路模拟输入,1路模拟输出和一个串行I2C总线接口用来与单片机通信。引脚1、2、3、4是4路模拟输入,引脚5、6、7是I2C总线的硬件地址,8脚是数字地GND,9脚和10脚是I2C总线的SDA和SCL。12脚是时钟选择引脚,如果接高电平表示用外部时钟输入,接低电平则用内部时钟,我们这套电路用的是内部时钟,因此12脚直接接GND,同时11脚悬空。13脚是模拟地AGND,在实际开发中,如果有比较复杂的模拟电路,那么AGND部分在布局布线上要特别处理,而且和GND的连接也有多种方式,这里大家先了解即可。在我们板子上没有复杂的模拟部分电路,所以我们把AGND和GND接到一起。14脚是基准源,15脚是DAC的模拟输出,16脚是供电电源VCC。 


PCF8591的ADC是逐次逼近型的,转换速率算是中速,但是它的速度瓶颈在I2C通信上。由于I2C通信速度较慢,所以最终的PCF8591的转换速度,直接取决于I2C的通信速率。由于I2C速度的限制,所以PCF8591得算是个低速的AD和DA的集成,主要应用在一些转换速度要求不高,希望成本较低的场合,比如电池供电设备,测量电池的供电电压,电压低于某一个值,报警提示更换电池等类似场合。 


软件编程 

PCF8591的通信接口是I2C,那么编程肯定是要符合这个协议的。单片机对PCF8591进行初始化,一共发送三个字节即可。第一个字节,和EEPROM类似,是器件地址字节,其中7位代表地址,1位代表读写方向。地址高4位固定是0b1001,低三位是A2,A1,A0,这三位我们电路上都接了GND,因此也就是0b000,发送到PCF8591的第二个字节将被存储在控制寄存器,用于控制PCF8591的功能。其中第3位和第7位是固定的0,另外6位各自有各自的作用。 


控制字节的第6位是DA使能位,这一位置1表示DA输出引脚使能,会产生模拟电压输出功能。第4位和第5位可以实现把PCF8591的4路模拟输入配置成单端模式和差分模式,单端模式和差分模式的区别,我们在17.5节有介绍,这里大家只需要知道这两位是配置AD输入方式的控制位即可 


控制字节的第2位是自动增量控制位,自动增量的意思就是,比如我们一共有4个通道,当我们全部使用的时候,读完了通道0,下一次再读,会自动进入通道1进行读取,不需要我们指定下一个通道,由于A/D每次读到的数据,都是上一次的转换结果,所以同学们在使用自动增量功能的时候,要特别注意,当前读到的是上一个通道的值。为了保持程序的通用性,我们的代码没有使用这个功能,直接做了一个通用的程序。 


控制字节的第0位和第1位就是通道选择位了,00、01、10、11代表了从0到3的一共4个通道选择。 


发送给PCF8591的第三个字节D/A数据寄存器,表示D/A模拟输出的电压值。D/A模拟我们一会介绍,大家知道这个字节的作用即可。我们如果仅仅使用A/D功能的话,就可以不发送第三个字节。


/* 读取当前的ADC转换值,chn-ADC通道号0~3 */


unsigned char GetADCValue(unsigned char chn)

      {

unsigned char val;

 

I2CStart();

if (!I2CWrite(0x48<<1))  //寻址PCF8591,如未应答,则停止操作并返回0

{

    I2CStop();

    return 0;

}

I2CWrite(0x40|chn);         //写入控制字节,选择转换通道

I2CStart();

I2CWrite((0x48<<1)|0x01);  //寻址PCF8591,指定后续为读操作    

I2CReadACK();                //先空读一个字节,提供采样转换时间

val = I2CReadNAK();         //读取刚刚转换完的值

I2CStop();

return val;

 }

DAC的输出


此处输入代码/* 设置DAC输出值,val-设定值 */

 void SetDACOut(unsigned char val)

  {

I2CStart();

if (!I2CWrite(0x48<<1)) //寻址PCF8591,如未应答,则停止操作并返回

{

    I2CStop();

    return;

}

I2CWrite(0x40);         //写入控制字节

I2CWrite(val);          //写入DA值  

I2CStop();

}

关键字:模数转换  数模转换 引用地址:模数转换(A/D)与数模转换(D/A)

上一篇:51单片机外围模块——A/D模数转换
下一篇:C51:数模模数转换

推荐阅读最新更新时间:2024-11-11 14:29

D类音频系统中斩波运放电路的设计
       1 引言   在D类音频放大器的运放电路设计中,信号的低谐波失真(Total Harmonic distortion)和噪声对运放的设计形成挑战。对于20~20KHz范围的音频信号而言,运放的失真主要是由电压失调和低频1/f噪声引起的。而CMOS工艺相对较高的1/f噪声和电压失调,使得这一问题尤为严重。当要求电路的失调电压低于1mV且输入等效噪声低于100nV/Hz时。普通的CMOS运放很难满足需求。而常见的静态失调消零技术,如trimming修调,虽然能很好地消除电压失调的影响,但是却不能降低1/f噪声。解决这个问题的最好方法就是采用动态消零技术(dynamic offset—cancellation techn
[电源管理]
<font color='red'>D</font>类音频系统中斩波运放电路的设计
大界机器人已完成了近五千万元的A轮融资
据报道,智能建造方案提供商大界机器人近日宣布完成近五千万元A轮融资,由深圳高新投、正轩投资及线性资本联合投资,老股东龙腾资本以及PlugAndPlay超份额加注。 据悉,本轮融资主要用于促进建筑机器人产品和服务的持续升级、落地及市场推广。 大界机器人成立于2016年,主要研究建筑机器人的控制系统、智能算法与人机交互的核心技术,专注于为建筑工厂的机器人解决方案,针对建筑工厂项目定制化、产品多样化、生产设备碎片化的问题,提出了综合的智能建造解决方案,降低工业机器人的使用门槛。目前,大界机器人已经与数十家建筑生产企业达成长期合作。 企查查数据显示,大界机器人曾于2018年5月完成天使轮融资,投资方为Plug and P
[机器人]
墨芯人工智能获数亿元A轮融资,首颗AI芯片将量产
据36氪报道,墨芯人工智能科技(深圳)有限公司获数亿元A轮融资,本轮融资由基石资本、大湾区共同家园发展基金领投,同威资本、中科华盛投资基金、及深圳天使母基金跟投。本轮融资将用于首颗芯片量产以及稀疏化生态系统的拓展等。 墨芯2018年创立于硅谷创立,目前公司总部位于深圳。创始团队大多是来自卡内基梅隆大学顶尖AI科学家、世界顶尖半导体公司 (如Intel、Marvell和Oracle等) 核心高量产芯片研发团队。墨芯可提供终端和云端AI芯片加速方案,相较于现有产品算力,该产品可带来数量级提升。墨芯还通过优化计算模式,支持全面稀疏化神经网络开发,提供超高算力、超低功耗的通用AI计算平台。 墨芯作为一家致力于颠覆式创新的AI芯片设计商,
[手机便携]
陆行之:台积16nm制程 牵动苹果A9订单
   巴克莱资本证券陆行之昨(25)日指出,台积电16奈米FinFET制程量产时间点若提前1季、至明年第二季,除了拿下极具指标意义的苹果A9订单机率大增外,预估明年将带来15亿美元营收,且占第三季与第四季营收比重将快速攀升、分别为5%与12%。 巴克莱资本证券亚太区半导体首席分析师陆行之认为,台积电16奈米FinFET若提前量产,将享「加乘效果」,因为20与16奈米制程有95%的设备可以互相转换,有助于16奈米良率的攀升,因此预计最快从明年第四季起就可透过16奈米取得市占率优势。 尽管台积电昨天股价并未反应这项传闻,仍小跌0.5元收125元,但来自外资圈的乐观基调越来越多,港商里昂证券认为从「全球IC设计厂商库存水位」与「智慧型
[手机便携]
再论IAR 4_42A工程配置
新建一个IAR工程,并将ST32固件库移植到了该工程中,此时如果直接Compile,会出现找不到头文件的情况。这在情理之中,因为,我们没设置源文件的头文件的寻找路径。此外,我们也没指定芯片的类型。这些工作就是配置IAR的工程,这与IAR的版本密切相关(不同版本的配置界面都不一样,最经典的是IAR 4_42A)。 预备知识:将代码下到单片机中有两种方法: 1.先生成.sim文件,然后再将该文件下载到单片机中(要更换IAR配置Linker - Output),每次更改代码都要重复上面两个步骤,才能将新代码下到单片机中。 2.用调试模式,将代码下到单片机的Flash或RAM中,经过配置IAR工程(一次就行),可以达到代码更改后,只需
[单片机]
再论IAR 4_42<font color='red'>A</font>工程配置
打印3D柔性线材的步骤有哪些?看完下文你就会了
3D打印 一直是21世纪的热门话题。人们一直在使用3D打印机,并试图创建许多对象。 柔性线材 是广泛使用的材料,可用于制造任何复杂的弹性设计。下面就由使用柔性线材进行3D打印展开讨论吧。     如果你是新手,你可能会遇到很多挑战。但是,使用柔性线材打印比看起来更容易。这个概念从TPE到Soft PLA被广泛使用。如果我们谈论这种设计,这些线材实际上是可打印的橡胶,并且由于这个原因,它允许创建复杂的弹性设计,否则是不可能的。这些线材有不同的品种、颜色、硬度和化学成分,可帮助您将不同的属性应用于您的产品。   什么是灵活的3D打印?   大多数人会想知道灵活的3D打印究竟是什么。如果你已经用PLA打印过,你会知道它们很硬脆。用于
[嵌入式]
cortex-a8 uboot系列:第六章 uboot源码分析2-启动第二阶段
第一阶段结束后,调用了start_armboot函数。开始第二阶段。 start_armboot函数在lib_arm/board.c文件里。 一、uboot第二阶段 uboot第一阶段主要就是初始化了soc内部的部件(如看门狗,时钟),然后初始化DDR并且完成重定位,建立MMU映射表,启动MMU。 Uboot第二阶段就是要初始化剩下的还没有被初始化的硬件。主要是soc外部的硬件(如iNand,网卡芯片……),uboot本身的一些东西(uboot命令,环境变量……)。然后最终初始化完必要的东西后进入uboot的命令行准备接收命令。 1.uboot的完结 uboot启动后自动运行打印很多信息(这些信息就是uboot在第
[单片机]
cortex-<font color='red'>a</font>8 uboot系列:第六章 uboot源码分析2-启动第二阶段
大众首款纯电动赛车I.D. R Pikes Peak 传动系统新技术曝光
据外媒报道, 在距2018派克峰国际爬坡赛(Pikes Peak International Hill Climb)不到两个星期的时间里,大众汽车公司(Volkswagen)在第一辆纯电动赛车I.D. R Pikes Peak上展示了其动力传动系统技术。 I.D. R Pikes Peak配备了两个相互连接的车载集成锂离子电池组,安装于驾驶舱的左右两侧,为前后轴两个独立的电动机提供能量,一共输出500千瓦时(680PS)的功率。汽车的实际性能水平是电子控制的,取决于赛道情况。也就是说,对于赛车而言,理想的驾驶行为是在加速完成紧急转弯时实现的,例如,除了驱动力之外,前轮还需将转向力传递给赛道。加速器或制动踏板的运转通过电子油门和
[汽车电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved