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.

[参考译文] DAC161P997:DAC161P997输出问题

Guru**** 1640390 points
Other Parts Discussed in Thread: TIDA-00648, DAC161S997, MSP430F5172, XTR115
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/749455/dac161p997-dac161p997-output-problem

器件型号:DAC161P997
主题中讨论的其他器件:TIDA-00648DAC161S997MSP430F5172XTR115

您好!

我无法将 DAC 的 Iout 设置为低于5mA 或高于16mA。

CONST Timer_A_ContinuousModeConfig Fast_Mode =
{
Timer_A_CLOCKSOURCE_SMCLK、 // ACLK 时钟源
Timer_A_CLOCKSOURCE_DELAG_48、 // ACLK/1 = 32.768kHz
Timer_A_TAIE_INTERRUPT_ENABLE、 //启用溢出 ISR
Timer_A_do 清除 //清除计数
器};

int main(){

map_Timer_a_configureContinuousMode (timer_A0_BASE、&Fast_Mode);
map_Interrupt_enableSlepOnIsrExit();
map_Interrupt_enableInterrupt (INT_TA0_N);
MAP_Timer_A_startCounter (TIMER_A0_BASE、TIMER_A_CONSTACT_MODE);
Setup_DAC161 (DAC161_STD_ERR_CONFIG_STERR_SABLED、0、21800);
while (1)
{
MAP_PCM_gotoLPM0 ();
}
}

void TA0_N_IRQHandler (void){

MAP_Timer_A_clearInterruptFlag (timer_A0_BASE);

DAC161_SET_OUT_VALUE (int)(x * 2730));
dacStatus = DAC161_READ_Status ();
DAC161_NOP ();
} 

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

    我看不到 DAC161_SET_OUT_VALUE ()函数的代码、您能否共享它?

    此外、您能否共享示波器或逻辑分析仪对写入命令的捕捉?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我从 TIDA-00648获取了代码。 然后针对 msp432p401R 对其进行编辑。 我将使用逻辑分析仪进行检查并告知您。

    void DAC161_Write_Regs (无符号短整型*writeValues、无符号 char startReg、无符号 char lengthBytes)

       unsigned char outData[3];

       outData[0]= DAC161_SPI_WRITE_CMD (startReg);

       //切换无尾功能
       outData[1]=*writeValues >> 8;
       outData[2]=*writeValues & 0xff;

       USCIB0_SPI_WRITE (outData、RcvData、lengthBytes+1);   //为命令字节添加1到长度

    void Setup_DAC161 (无符号短整型 errConfig、无符号短整型 errLow_uA、无符号短整型 errHigh_uA)

       无符号短整型 errValue;

       DAC161_Write_Regs (errConfig、DAC161_ERR_CONFIG_REG、2);

       errValue = DAC161_convert_ERR_Value (errLow_uA)& 0x7f00;
       DAC161_Write_Regs (&errValue、DAC161_ERR_LOW_REG、2);

       errValue = DAC161_convert_ERR_Value (errHigh_uA)& 0x0000;
       如果(errValue < 0x80)
          errValue = 0x80;
       DAC161_Write_Regs (&errValue、DAC161_ERR_HIGH_REG、2);

    void DAC161_SET_OUT_VALUE (无符号短整型值)

       DAC161_Write_Regs (&value、DAC161_DACCODE_REG、2);

    空 USCIB0_setupMasterSPI (空)


       DAC_USCIB0_PORTDIR |=(USCIB0_SIMO + USCIB0_SOMI+ USCIB0_CLK);
       DAC_USCIB0_PORTSEL ||(USCIB0_SIMO + USCIB0_SOMI+ USCIB0_CLK);            //将 SPI 引脚分配给 USCI_B0的主外设
       DAC_CS_PORTOUT |= DAC_CS_N;
       DAC_CS_PORTDIR |= DAC_CS_N;

       EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_SWRST;                                                      //启用软件复位
       EUSCI_B0->CTLW0 ||(EUSCI_B_CTLW0_SWRST + EUSCI_B_CTLW0_MST + EUSCI_B_CTLW0_MSB + EUSCI_B_CTLW0_SYNC + EUSCI_B_CTLW0_CKPH);    // SPI 主站,3线,同步模式
           EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_ssel_SMCLK;// SMCLK
           EUSCI_B0->BRW = 8;
       EUSCI_B0->CTLW0 &=~EUSCI_B_CTLW0_SWRST;                                             //清除软件复位,恢复操作

    空 USCIB0_SPI_WRITE (无符号 char * outData、无符号 char * inData、无符号 char 长度)

       unsigned char i;

           // CS 低电平有效
           DAC_CS_PORTOUT &=~DAC_CS_N;
           //_DELAY_CYCLES (100);                    //暂停位

           (i=0;<length; i++)
           {
               inData[i]= USCIB0_SPI_writeByte (outData[i]);
           }
           while (!(EUSCI_B0->IFG 和 EUSCI_B_IFG_TXIFG));              // USCI_B0 TX 缓冲区准备就绪?
           //_DELAY_CYCLES (100);                     //暂停位
           DAC_CS_PORTOUT |= DAC_CS_N;

    unsigned char USCIB0_SPI_writeByte (unsigned char 数据)

           while (!(EUSCI_B0->IFG 和 EUSCI_B_IFG_TXIFG));                 // USCI_B0 TX 缓冲区准备就绪?
           EUSCI_B0->IFG &=~EUSCI_B_IFG_RXIFG;                         //清除 RX 中断标志

           EUSCI_B0->TXBUF = DATA;                            //将数据放置在 TX 缓冲区中
           while (!(EUSCI_B0->IFG & EUSCI_B_IFG_RXIFG));                //等待数据接收结束
           返回((unsigned char) EUSCI_B0->RXBUF);

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

    正如 Paul 在前面提到的、我认为开始调试的最佳方法是查看 SPI 波形。 更新 DAC 时、您能否在一次捕获中提供 SCLK、SDO 和 CS?

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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如您在代码中看到的、我读取错误状态、因此如果存在错误、我将其清除、但我认为它会持续提供错误、从而使输出无法变为高电平或低电平。 假设我决定获得2mA 的输出电流。 在万用表上,我可以看到我决定的值,但它一直变化,大约5mA 后2mA 10ms,然后再次2mA,然后再次5mA……
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将 SETUP_DAC161 (DAC161_STD_ERR_CONFIG_STOPEND、0、21800)置于 DAC161_SET_OUT_VALUE 和问题解决之后。 还可以吗? 这很奇怪
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我不希望这能解决这个问题。 将 ERR_LOW_REG 设置为0无效、将保留之前的值。 输出现在是否稳定在正确的值? 在前一种情况下、您能否监控 ERRB 引脚以查看是否发生会导致电流输出达到某个误差级别的错误?

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

    好的。 我有两个板采用 DAC161S997。 其中一个具有自己的 MCU (msp432p401R)、另一个仅用于 DAC、并使用跳线连接到 MSP-exp432p4111。 代码是相同的。 设计是相同的、但具有 MCU 的设计仍然无法将输出设置为低于5.5mA。 但它可以完美地达到20mA。 使用 SETUP_DAC161 (DAC161_STD_ERR_CONFIG_STOPEND、3375、21750);正如您所说的0无效。

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

    TIDA-00648的软件是为 MSP430F5172编写的。 我不确定它是否与您在未做任何修改的情况下尝试过的器件兼容、因为这些架构总体上是非常不同的。

    谢谢、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我做了很多修改。 正如我说的那样、它是有效的。 请在本主题的第三个评论中查看我的代码
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    很高兴您能使其正常工作。 只要 DAC 在 SPI 写入后生成正确的值、代码就可以了。

    谢谢、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为这个 DAC 有一些问题。 可能我把其中的5个坏了。 我不知道有什么损坏它。发生了什么、它停止工作、我看到我的直流/直流转换器的输出端为20V。 测量输出是否有必要? 我可能会使用另一个电压 DAC 和 xtr115。 但感谢您的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我以前没有看到过 DAC 损坏的问题。 一种可能是器件引脚上的电压超过绝对最大额定值。 您看到哪个电压将达到20V、环路电源电压? 您如何连接环路电源和负载?

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

    我将万用表的一个探针连接到回路、另一个探针连接到 AGND。 是的、如果其引脚超过绝对最大额定值、则会损坏。 但它是这样做的。 如果我用新的更改它。 一切都可以正常工作、直到它再次损坏。 我有一个将24V (LOC+)转换为5V 的转换器和一个将5V 转换为3.3V 的 LDO。 发生了什么事情、一切停止工作。 我看到这些转换器的输出端为20V。 正如我说过的、如果我用新的 DAC 更改 DAC。 一切都好。 是的、奇怪的是、没有任何东西会因此而损坏!

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