第6课-DAC编程实践..docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[跟我学OSKinetis]第6课-DAC编程实践Posted on?2013 年 11 月 4 日?by?lpldcn上节讲了ADC模拟转数字模块,这节趁热打铁,说说DAC数字转模拟模块。ADC和DAC就像一对欢喜冤家,大家可以把这两个模块理解为互逆过程,就像录音机与播音机两个东西,前者负责把模拟量采集进来,后者负责把模拟量输出出去。其实当你会用了这两个模块之后,完全可以自己做一个简单的录音和播音机了。与ADC的复杂程度不同,DAC模块可以说是非常简单了,不但它本身的寄存器很少,而且你在直接使用固件库编程的时候就更简单了。因此我们就先讲一下的工作模式,了解了工作模式之后再使用固件库编程便是极好的了。DAC转换原理K60中的DAC是12位精度的,这个概念与ADC的精度概念一样,就是把参考电压分成2的12次方份,每一份的电压就是它的最小输出精度,因此DAC的输出电压精度就是3.3V/4096=0.00081V。至于内部的转换原理如何,我们可以从官方技术文档中的模块框图看出:上图是截取的模块框图的上半部分,其中红框内就是实现电压转换的部分,大家可以理解为K60内部通过4096个等值的电阻将参考电压分成了4096分,而MUX则根据蓝框中的值来判断到底选择哪个分压值进行输出。这个蓝框中的值就是大家在编程中设置的输出值,它其实是一个缓冲区,可以配置为不同的模式来输出缓冲区中的值。绿框中的部分是一个缓冲放大器,途中的DACEN是一个寄存器控制位,用来使能DAC工作,DACRFS用来选择参考电压,LPEN用来使能低功耗模式。至于本框图的下半部分,则是DAC的比较重要也是难点所在,本文中没有示出,大家可以自己到技术文档中感受下,这部分用于控制DAC的硬件触发、缓冲区工作模式选择、中断等等。DAC工作模式非缓冲区工作模式这个“非缓冲区工作模式”一看就是和“缓冲区工作模式”相对应的,如果大家在用固件库初始化DAC时不做任何配置,默认就是非缓冲区工作模式。该模式是DAC最简单的工作模式,因为几乎不用做任何配置,使能DAC后,只要向DAC数据寄存器(DAC[x]_DAT)的第一个缓冲区(DAC[0]_DAT)写入0~4095之间的数值,就可以在DAC输出引脚输出电压。缓冲区工作模式既然该模式叫做“缓冲区工作模式”,那么它必然会用到了DAC数据寄存器(DAC[x]_DAT)的所有缓冲区,而不仅仅是第一个缓冲区。那么DAC是如何选择缓冲区中的数据进行输出的呢,原来在缓冲区工作模式下,DAC还分为了3个不同的工作模式。在学习3中工作模式前,你要了解什么是DAC数据寄存器的缓冲区。DAC输出的模拟电压值是由DAC数据寄存器(DAC[x]_DAT)决定的,它不是一个寄存器,而是一系列缓冲区,x为0~15,即长度为16。DAC可根据触发模式(硬件触发或软件触发)的不同,依次将缓冲区中的值输出出去。至于按照什么顺序输出,就是要看你设置的工作模式了。在固件库的使用中,如果你要使用缓冲区工作模式,需要配置初始化结构体的变量DAC_BufferEnable为TRUE。普通模式在该模式下,DAC的读指针会从最底部的缓冲区依次读出数据并输出,每触发一次,地址+1,到达最高上限后(比如设置缓冲区最高为4),那么读指针会在下一次触发时会到底部缓冲区(DAC[0]_DAT)。如果使用普通模式,需要配置DAC_BufferWorkMode为BUFFER_MODE_NORMAL。摆动模式顾名思义,在该模式下,读指针像单摆一向,不会在到达顶端后立即返回底部,而是会在下次触发后由地址+1改为地址-1,也就是说读指针会一直在缓冲区底部和最高上限之间游走。如果使用普通模式,需要配置DAC_BufferWorkMode为BUFFER_MODE_SWING。单次扫描模式在该模式下,读指针从底部逐渐增加到最高上限后,就会停止在那里不动,只有在再次复位指针后,它才会再一次开始增加。如果使用普通模式,需要配置DAC_BufferWorkMode为BUFFER_MODE_ONETIMESCAN。以上所说的缓冲区最高上限是由DAC_BufferUpperLimit配置的,取值为1~16。关于DAC的触发如果你使用“非缓冲区工作模式”,那么不必理会这节,因为只有只用“缓冲区工作模式”时才需要配置DAC的触发模式。每触发一下DAC,它的数据读指针就会改变一次地址,从而改变数据的输出。最简单的方式是配置DAC为软件触发(.DAC_SoftTrgEnable=TRUE),你就可以使用库函数LPLD_DAC_SoftwareTrigger()触发指针变更。当然DAC也可配置为硬件触发,也需要用到PDB模块来配合使用。关于DAC的中断同样,如果你使用DAC的缓冲区工作模式,那么也可以配置是否触发不同的中断。当使能读指

文档评论(0)

yxnm + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档