[资料分享] Kinetis DAC模块

bluehacker   2012-5-3 22:55 楼主

DAC简介

    Kinetis10包含两个独立的12位数模转换模块,DAC0和DAC1,用于将数字转换成对应的模拟电压。转换后的模拟电压可由外部引脚输出,也可以通过芯片内部连接输入到比较器模块、放大器模块、和模数转换模块。

    DAC的参考电压可以二选一,一个来自外部或VREF模块的输出,默认连接到DACREF_1;另一个时VDDA,默认连接到DACREF_2。如果选择VDDA,则DAC的参考电压为3.3V。

    12位二进制的表示范围为0~4095的无符号数。对应数据转换成模拟电压输出范围从VREF/4096~VREF。以VREF为3.3V计算,则是约0.8mV~3.3V,数据每变化1,输出电压变化约0.8mV。

     将数据放入DAC的数据寄存器(DACx_DATL中的DACDATA[11:0]位),即可将数据转换为模拟电压。电压Vout= VREF * (1 + DACDAT0[11:0])/4096。在大量数据转换的应用中,也可以将数据放入DAC的缓冲区,由触发源输入触发信号,在触发信号的触发下,自动挨个将缓冲区中的数据转换为模拟电压。

    缓冲区大小为1~16可设置大小的以word为单位的区域,转换的时候,由读指针指向正在转换的数据,可通过访问读指针获知当前正在转换的缓冲区单元。数据转换的次序为从顶部到底部依次转换,从顶部到底部之间,用户可设置位置标记(watermark)作为预警位置,当读指针指向缓冲区顶部、底部或位置标记处时,都有状态位可供查询,也可以发出中断请求。

    触发信号可来自PDB模块的TRIG输出详细可查看PDB模块设置。

    同时DAC模块也支持DMA操作,可通过DMA的方式向缓冲区中传递数据,大大提高了效率。

相关寄存器

1.        DAC数据低位寄存器(DACx_DATnL)


在没有启用数据缓冲区的情况下,DATA[11:0]控制输出的电压,该寄存器存放的是DATA[7:0]位,此时Vout= Vin *(1 + DACDAT0[11:0])/4096。

2.        DAC数据高位寄存器(DACx_DATnH)


该寄存器存放的是DATA[11:8]位。

注意,数据寄存器共16个word,每个word都由高8位DACx_DATnH和低8位DACx_DATnH组成。16个word组成DAC的缓冲区,如不使用缓冲区,则默认只使用DACx_DAT0H和DACx_DAT0L。

3.        DAC状态寄存器(DACx_SR)


该寄存器中包含DMA缓冲区读指针位置的有关标志。缓冲区大小为1~16可设置大小的以word为单位的区域,转换的时候,由读指针指向正在转换的数据,数据转换的次序为从顶部到底部依次转换,从顶部到底部之间,用户可设置位置标记(watermark)作为预警位置,当读指针指向缓冲区顶部、底部或位置标记处时,都有状态位可供查询,该寄存器中存放的就是这些标志位。如果DMA功能使能的话,当DMA请求完成后,这些标志会被DMA自动清除。这些标志位都是写0清除,写1无效。

l  DACBFWMF:DAC缓冲区水位标志。

DACBFWMF=0:DAC缓冲区读指针未达位置标记;

DACBFWMF=1:DAC缓冲区读指针达到位置标记。

l  DACBFRPTF:DAC缓冲区读指针到顶标志,顶部为起始位置。

DACBFRPTF=0:DAC缓冲区读指针不为0;

DACBFRPTF=1:DAC缓冲区读指针为0。

l  DACBFRPBF:DAC缓冲区读指针到底标志,底部为结束位置。

DACBFRPBF=0:DAC缓冲区读指针不等于DACBFUP;

DACBFRPBF=1:DAC缓冲区读指针等于DACBFUP。

Nicrosystem专业提供freescale、TI和STM32高性价比开发板、解决方案 http://nicrosystem.taobao.com

回复评论 (1)

4.        DAC控制寄存器0(DACx_C0)

l  DACEN:DAC使能。
DACEN=0:DAC被禁止;
DACEN=1:DAC使能。
l  DACRFS:DAC参考选择。
DACRFS=0:选择DACREF_1为参考电压;
DACRFS=1:选择DACREF_2为参考电压。
DAC的参考电压由两个,一个是VREF_OUT,来自外部或VREF模块的输出,默认连接到DACREF_1;另一个时VDDA,默认连接到DACREF_2。
这里注意,如果ADC和DAC都使用VREF_OUT作为参考电压,则ACC精度的下降有可能和DAC切换有关。
l  DACTRGSEL:DAC触发选择。触发事件的发生会使得缓冲区读指针自动指向下一个数据并进行转换。硬件触发信号默认来自PDB模块,软件触发则通过向DACSWTRG中写1实现。
DACTRGSEL =0:选择DAC硬件触发器;
DACTRGSEL =1:选择DAC软件触发器。
l  DACSWTRG:DAC软件触发器。当DAC选择软件触发且缓冲区使能时,向该位写1即可实现软件触发,缓冲区读指针自动指向下一个数据。
DACSWTRG=0:DAC软件触发无效;
DACSWTRG=0:DAC软件触发有效。
l  LPEN:DAC低功耗控制。
LPEN=0:大功率模式;
LPEN=1:低功率模式。
l  DACBWIEN:DAC缓冲区位置标记中断使能。用于设定当读指针指向设定的位置标记处时,是否引发中断请求。
DACBWIEN=0:DAC缓冲区位置标记中断禁止;
DACBWIEN=1:DAC缓冲区位置标记中断使能。
l  DACBTIEN:DAC缓冲区读指针顶部标志中断使能。
DACBTIEN=0:DAC缓冲区读指针到达顶部禁止中断;
DACBTIEN=1:DAC缓冲区读指针到达顶部触发中断。
l  DACBBIEN:DAC缓冲区读指针底部标志中断使能。
DACBBIEN=0:DAC缓冲区读指针到达底部禁止中断;
DACBBIEN=1:DAC缓冲区读指针到达底部触发中断。
5.        DAC控制寄存器1(DACx_C1)

l  DMAEN:DMA使能。
DMAEN=0:DMA功能禁止;
DMAEN=1:DMA功能使能。
l  DACBFWM:缓冲区水位标志选择。该位允许用户设置,水位标志相当于预警标志,表示还差多少,缓冲区中数据就即将转换完毕。水位标志应位于顶部和底部之间,意义是表示当缓冲区读指针已经距离最高限还差多少的时候,水位标志置1。
DACBFWM=00:1word;
DACBFWM=01:2word;
DACBFWM=10:3word;
DACBFWM=11:4word。
l  DACBFMD:DAC工作模式选择。
DACBFMD=00:普通模式,在触发信号驱动下,从缓冲区顶部逐个转换数据到最底部,然后读指针回到缓冲区顶部,循环往复;
DACBFMD=01:摇摆模式,在触发信号驱动下,从缓冲区顶部逐个转换数据到最底部,再从底部逐个转换回到顶部,循环往复;
DACBFMD=10:单次扫描模式,在触发信号驱动下,从缓冲区顶部逐个转换数据到最底部,然后读指针回到缓冲区顶部并停止转换。
DACBFMD=11:保留。
l  DACBFEN:DAC缓冲区使能。只有在缓冲区使能的情况下,才可使用触发信号触发逐个转换缓冲区中数据。
DACBFEN=0:DAC缓冲区读指针禁止,转换数据永远来自缓冲区的第一个字,即DAC数据寄存器中的数;
DACBFEN=1:DAC缓冲区读指针使能,转换数据来自读指针指向的字。
6.        DAC控制寄存器2(DACx_C2)

l  DACBFRP:DAC缓冲区读指针。
l  DACBFUP:DAC缓冲区最高限,相当于指定缓冲区大小,如不指定,缓冲区大小默认为16个,即最大值。该最高限不允许DAC读指针超越。
Nicrosystem专业提供freescale、TI和STM32高性价比开发板、解决方案 http://nicrosystem.taobao.com
点赞  2012-5-3 22:56
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复