This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DAC8775:DAC8775初始化,不带内部降压-升压转换器

Guru**** 2582445 points
Other Parts Discussed in Thread: DAC8775

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/633490/dac8775-dac8775-initialization-without-internal-buck-boost-converter

部件号:DAC8775

您好,

我正在通道A使用带+/-15V外部电源的DAC8775,我想将通道A用作电流源。

是否有任何初始化顺序? 例如,在通道A上生成1mA的步骤是什么。

谢谢!  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Howdy Wahib,

    如果我理解正确,您正在尝试定位初始化序列以将通道A设置为1mA,这是否正确? 如果是这样,我创建了一个伪寄存器序列,这可能会很有帮助。

    *写入寄存器之前,请验证硬件重置*
    *这不包括内部DCDC*的设置
    SPIWrite (0x01,0x0001);//软件重置
    SPIWrite (0x02,0x0012);//启用参考,断电条件,VOUT和IOUT更改为高-Z
    SPIWrite (0x03,0x0020);//选择DAC通道A
    SPIWrite (0x04,0x000F);//设置为4至20mA范围
    SPIWrite (0x04,0x100F);//启用输出
    SPIWrite (0x05,0x8000);//将DAC数据寄存器值写入中尺度

    此致,
    马特
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是初始化代码,但仍然不起作用!

    void DAC8775_init()

    //初始化SPI
    SPI_A0_init();

    //将报警引脚初始化为具有中断的输入
    P6REN || DAC8775_ALARM_PIN;//启用内部电阻器
    P6OUT |= DAC8775_ALARM_PIN;//将电阻器设置为上拉
    P6DIR &= DAC8775_ALARM_PIN;//将引脚设置为输入


    P6OUT &=~(DAC8775_CLR_PIN + DAC8775_LDAC_PIN + DAC8775_RST_PIN);//初始化为低
    P6OUT |= DAC8775_CS_PIN;//初始化为高
    P6DIR || DAC8775_RST_PIN + DAC8775_CS_PIN + DAC8775_CLR_PIN + DAC8775_LDAC_PIN;//设置为输出引脚

    //将RST设置为高
    P6OUT |= DAC8775_RST_PIN;

    DAC8775_writeToRegister (DAC8775_RST, 0x0001);//软件重置
    DAC8775_writeToRegister (DAC8775_RST_config, 0x0012);//启用参考,关闭电源条件,将VOUT和IOUT更改为高-Z
    DAC8775_writeToRegister (DAC8775_select_DAC,0x0020);//选择DAC通道A
    DAC8775_writeToRegister (DAC8775_CONFIG_DAC,0x000F);//设置为4至20mA范围
    DAC8775_writeToRegister (DAC8775_CONFIG_DAC,0x100F);//启用输出
    DAC8775_writeToRegister (DAC8775_DAC_data, 0x8000);//将DAC数据寄存器值写入中尺度
    }

    void DAC8775_writeToRegister (uint8_t registerAddress,uint16_t值)

    DAC8775_select();

    SPI_A0_sendByte (registerAddress);
    SPI_A0_sendByte ((value & 0xFF00)>> 8);
    SPI_A0_sendByte (值和0x00FF);

    DAC8775_Deselect ();
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Wahib,

    对于我们的调试工作来说,最好是接收上述其中一项事务的示波器捕获。 这将使我们能够验证它是否符合我们的数据表中所示的定时规格。 此外,解决方案的示意图还有助于查看零件是否设置和配置正确。

    此致,
    马特
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    这是示意图:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Wahib,

    您提供的示意图有几个潜在问题。 我在下面概述了我的反馈:

    • 对于未使用的通道,您必须确保它们各自的PVDD和PVSS引脚分别连接到AVDD和GND。
    • DVDD引脚应具有某种形式的旁路电容,我们通常列出0.1uF
    • 在REFOUT/REFIN引脚附近添加0.1uF旁路电容
    • 您是否知道启动时RESET,LDAC和CLR的状态?
    • 设置DAC寄存器后,是否已声明/LDAC?

    还请提供具有以下信号的完整SPI事务:

    • SDI,SCLK,SYNC,LDAC

    此致,

    马特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Matt,您好!

    首先感谢您的帮助,我检查了SPI和LDAC交易并找出了问题,
    新代码现在为:

    包括"dac8775.h"

    内联空DAC8775_select()

    P6OUT &=~DAC8775_CS_PIN;
    }

    内联空DAC8775_Deselect ()

    P6OUT |= DAC8775_CS_PIN;
    }

    void DAC8775_init()

    //初始化SPI
    SPI_A0_init();

    //将报警引脚初始化为具有中断的输入
    P6REN || DAC8775_ALARM_PIN;//启用内部电阻器
    P6OUT |= DAC8775_ALARM_PIN;//将电阻器设置为上拉
    P6DIR &= DAC8775_ALARM_PIN;//将引脚设置为输入


    P6OUT &=~(DAC8775_CLR_PIN + DAC8775_RST_PIN);//初始化为低
    P6OUT |= DAC8775_CS_PIN + DAC8775_LDAC_PIN;//初始化为高
    P6DIR || DAC8775_RST_PIN + DAC8775_CS_PIN + DAC8775_CLR_PIN + DAC8775_LDAC_PIN;//设置为输出引脚

    //将RST设置为高
    P6OUT |= DAC8775_RST_PIN;

    DAC8775_writeToRegister (DAC8775_RST, 0x0001);//软件重置
    DAC8775_writeToRegister (DAC8775_RST_config, 0x0012);//启用参考,关闭电源条件,将VOUT和IOUT更改为高-Z
    DAC8775_writeToRegister (DAC8775_select_DAC,0x0020);//选择DAC通道A
    DAC8775_writeToRegister (DAC8775_CONFIG_DAC,0x0007);//设置为-24mA至+20mA范围
    DAC8775_writeToRegister (DAC8775_CONFIG_DAC,0x1007);//启用输出
    }

    void DAC8775_writeToRegister (uint8_t registerAddress,uint16_t值)

    DAC8775_select();

    SPI_A0_sendByte (registerAddress);
    SPI_A0_sendByte ((value & 0xFF00)>> 8);
    SPI_A0_sendByte (值和0x00FF);

    P6OUT &=~DAC8775_LDAC_PIN;
    DAC8775_Deselect ();
    P6OUT |= DAC8775_LDAC_PIN;
    }

    问题是LDAC应在使SYNC变为HIGH之前变为LOW,然后在使SYNC变为HIGH之后应将LDAC再次设置为HIGH。

    另一件事是SPI的CLK,它必须设置为ClockPolarity =0和ClockPhase =0。

    要更新通道当前值:

    DAC8775_writeToRegister (DAC8775_DAC_data, 1.9114万);//-10mA

    DAC8775_writeToRegister (DAC8775_DAC_data, 4.6421万);//+10mA

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Howdy Wahib,

    我很高兴您能够确定解决方案。 请注意,/sync之前或之后的LDAC都是有效的条件,但您可能需要参阅数据表了解计时要求--这在数据表的第13页中显示。 此外,如果您希望在SPI事务后立即更新输出,则可以将LDAC永久绑定到GND。

    此致,
    马特