查看: 968|回复: 0

【ADI EVAL-ADuCM360QSPZ开发套件】使用教程(五)---DAC学习

[复制链接]
  • TA的每日心情
    奋斗
    2020-5-27 15:41
  • 签到天数: 868 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-4-7 14:01:53 | 显示全部楼层 |阅读模式
    分享到:
    ADu360集成了一个12位DAC。包括一个16位的控制寄存器DACCON 和一个32位的数据寄存器DACDAT。

    值得注意的是,手册中上图的数据寄存器是只读的,但在例程中或在学习其它芯片是能够写数据的。在给出的DAC库里
    int DacWr(int iChan, int iData){pADI_DAC->DACDAT = iData;return pADI_DAC->DACDAT;}DacWr里面的两条语句,第一句是给pADI_DAC指向的结构体ADI_DAC_TypeDef的成员DACDAT赋值,第二句是作为函数值返回。
    typedef struct {                            /*!< pADI_DAC Structure                     */  __IO uint16_t  DACCON;                    /*!< Control Register                      */  __I  uint16_t  RESERVED0;  __IO uint32_t  DACDAT;                    /*!< Data Register                         */} ADI_DAC_TypeDef;<br>可见这个函数就是改变DACDAT值得的,由此可知数据手册上R是错误的。 在KEIL的调试界面里,也看到DACDAT是RW的。

    DAC有2个可选的参考电压 1:0 V to VREF (internal band gap 1.2 V reference)
                                              2:0 V to AVDD_REG (1.8 V)
    输出的电压可以用公式Vout=( Vref/4095)*DACDAT计算。
    DAC有一个端到端的电压输出缓冲器,能驱动5 kΩ||100 pF的负载。
    可配置成3种模式        1:正常模式  分辨率是12位,DACDAT[27:16]。缓冲器默认为使能,也可失能,但驱动能力下降为10pf。
                                       2:插值模式  分辨率是16位,14位有效值。DACDAT[27:12]。
                                       3:NPN-晶体管驱动模式  。在这个模式下,使用较少的外部元件能配置成控制 2线 4--20MA环路接口。
    对第2种和第3种模式不太熟悉,只能先学习下简单的了。不得不承认,外文能力不足影响理解,详细内容可参考手册。
    DAC输出电压程序如下:
    #include <stdio.h>#include <string.h>#include <ADuCM360.h>#include <..\common\DacLib.h>#include <..\common\UrtLib.h>#include <..\common\ClkLib.h>#include <..\common\WdtLib.h>#include <..\common\DioLib.h>void DACINIT(void);int main (void){     WdtCfg(T3CON_PRE_DIV1,T3CON_IRQ_EN,T3CON_PD_DIS); // Disable Watchdog timer resets   //Disable clock to unused peripherals   ClkDis(CLKDIS_DISSPI0CLK|CLKDIS_DISSPI1CLK|CLKDIS_DISI2CCLK|CLKDIS_DISPWMCLK|CLKDIS_DIST0CLK|CLKDIS_DIST1CLK|CLKDIS_DISDMACLK); // Only enable clock to used blocks   ClkCfg(CLK_CD0,CLK_HF,CLKSYSDIV_DIV2EN_DIS,CLK_UCLKCG);     // Select CD0 for CPU clock       while (1)   {       DACINIT();   }}void DACINIT(void){   // Configure DAC output for 0-1.2V output range, Normal 12-bit mode and immediate update.   DacCfg(DACCON_CLR_Off,DACCON_RNG_IntVref,DACCON_CLK_HCLK,DACCON_MDE_12bit);             DacWr(0,0xD540000);                 // Output value of1000mV  当然,你也可在while循环里+代码,把电压值输出到串口显示。也可设置变量来改变输出可变的电压。改变DACDAT的值,使用万用表可以测试DAC端的输出电压值。
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 18:07 , Processed in 0.125396 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.