5667|2

190

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

第10/15原创:事无巨细,DAC应用 [复制链接]

本帖最后由 dontium 于 2015-1-23 13:10 编辑

事无巨细,DAC应用
大家虎年大吉,我们继续来学习AVR Mega16单片机,年后的第一篇,我们来学习DAC。DAC,英文全称是digital-to-analog converter,即数字模拟转换器,简称数模转换。与ADC刚好相反,DAC是把数字量转变成模拟量的器件。 我们处在一个数字时代,而我们的视觉、听觉、感觉、嗅觉等所感知的却是一个模拟世界。如何将数字世界与模拟世界联系在一起,正是模拟数字转换器(ADC)和数字模拟转换器(DAC)大显身手之处。任何一个信号链系统,都需要传感器来探测来自模拟世界的电压、电流、温度、压力等信号。这些传感器探测到的信号量被送到放大器中进行放大,然后通过ADC把模拟信号转化为数字信号,经过处理器、DSP或FPGA信号处理后,再经由DAC还原为模拟信号。所以ADC和DAC在信号链的框架中起着桥梁的作用,即模拟世界与数字世界的一个接口。 DAC的原理稍微有点复杂,下面我列出一段话,如果无法理解,可以暂时跳过,不理解原理不一定会影响我们对DAC的简单应用: DAC主要由数字寄存器、模拟电子开关、位权网络、求和运算放大器和基准电压源(或恒流源)组成。用存于数字寄存器的数字量的各位数码,分别控制对应位的模拟电子开关,使数码为1 的位在位权网络上产生与其位权成正比的电流值,再由运算放大器对各电流值求和,并转换成电压值。 我讲点个人的理解,不准确但是有助于建立一个思维模型:上述的模拟电子开关都分别接着一个分压的器件,比如说电阻。模拟开关的个数取决于DAC的精度。那么N个电子开关就把基准电压分为N份(并不是平均分哦),而这些开关根据输入的二进制每一位数据对应开启或者关闭,把分压的器件上的电压引入输出电路中。 但是如果无论如何你都不明白的话,请保持参考电压的值符合器件要求,并且尽可能的稳定。 DAC有几个必须要懂得的参数: 1.转换精度 : 在DAC中一般用分辨率和转换误差来描述转换精度。 1>.分辨率 一般用 DAC 的位数来衡量分辨率的高低,因为位数越多,其输出电压V的取值个数(2^n个)就越多,也就越能反映出输出电压的细微变化,分辨能力就越高。 此外,也可以用DAC能分辨出来的最小输出电压1 LSB与最大输出电压FSR之比定义分辨,即: 该值越小,分辨率越高。 2>.转换误差 转换误差是指实际输出的模拟电压与理想值之间的最大偏差。常用这个最大偏差与FSR之比的百分数或 若干个LSB表示。实际上它是三种误差的综合指标。 2.转换速度 转换速度一般由建立时间决定。从输入由全0突变为全1时开始,到输出电压稳定在FSR±½ LSB范围(或以FSR±x%FSR指明范围)内为止,这段时间称为建立时间,它是DAC的最大响应时间,所以用它衡量转换速度的快慢。 CEPARK AVR开发板上集成了TLC5615数字模拟转换器,10位精度,两倍参考电压输出,支持SPI协议,只需要外接三个IO口便可以控制。以下是原理图: 如图所见: DIN:串行数据输入口,在这个引脚输入我们想要输出的模拟电压的数字量; SCLK:时钟信号输入口,在这个引脚产生数据传输时钟,每一次下降沿写入数据 CS:片选端,低电平有效。 DOUT:串行数据输出口,用于级联,本例不使用,所以不做论述。 时序图: 首先说这个时序图并不是非常的清晰,我一开始看的时候也看不太明白,于是找来下面这样一段话: “由时序图可以看出,当片选CS为低电平时,输入数据DIN由时钟SCLK同步输入或输出,而且最高有效位在前,低有效位在后。输入时SCLK的上升沿把串行输入数据DIN移入内部的16位移位寄存器,SCLK的下降沿输出串行数据DOUT,片选CS的上升沿把数据传送至DAC寄存器。 当片选CS为高电平时,串行输入数据部能由时钟同步送入移位寄存器;输出数据DOUT保持最近的数值不变而不进入高阻态。由此想要串行输入数据和输出数据必须满足两个条件:第一时钟SCLK的负跳变;第二片CS为低电平。这里,为了使时钟的内部馈通最小,当片选CS为高电平时,输入时钟SCLK应当为低电平。” 再附上详细注释的程序和器件资料,感谢这些资料的作者(请下载附件): main.rar (779 Bytes, 下载次数: 52) 照旧的提取一些关键点: ★首先是端口设置,“为了使时钟的内部馈通最小,当片选CS为高电平时,输入时钟SCLK应当为低电平。” ★TLC5615是10位精度DAC,所以写入的最大数据为(2^10-1),就是1023,所以定义DAC写数据函数的时候,注意输入数据最好是unsigned int的,而不是unsigned char。 ★写入的数据是从最高位开始,但是要知道unsigned int是16位宽度,所以我们写入数据的最高位并不是在16位宽度的最左边,所以程序中,先将数据左移6位,将最高位在16位宽度里左对齐。 ★因为写入的数据是16位形式,所以分离数据时也要用16位数据分离,即(&0x8000),这个与我们常用的8位器件有区别。 ★器件资料里面提到,如果不用TLC5615的级联方式,则需要在写入10位数据之后连续写入两个0数据。

最新回复

谢谢楼主分享~!  详情 回复 发表于 2012-3-27 09:37

赞赏

1

查看全部赞赏

点赞 关注

回复
举报

633

帖子

0

TA的资源

裸片初长成(中级)

沙发
 
等着楼主更新 哈哈 相当赞赏这种分享的感觉
个人签名DIY是一种信仰~~
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
谢谢楼主分享~!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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