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.

[参考译文] DAC60508:DAC60508 MRTET

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/856951/dac60508-dac60508-mrtet

器件型号:DAC60508

运行 DAC60508 MRTET 时出现问题。

我已经坐了几天了,结果没有信号:-(

这些是我发送的配置位:

uint8_t ID[]=      { 0x01、0x00、0x00 };
uint8_t SYNC[]=   { 0x02、0x00、0xFF };
uint8_t config[]= { 0x03、0x00、0x00 };
uint8_t gain_[]=   { 0x04、0x00、0xFF };
uint8_t 触发[]={ 0x05、0x00、0x0A };
uint8_t Brdcast[]={ 0x06、0x00、0x00 };
uint8_t status[]=   { 0x07、0x00、0x00 };

这是 SPI 配置:

 hspi1.instance = SPI1;
 hspi1.Init.Mode = SPI_MODE_MASTER;
 hspi1.Init.direction = SPI_DIRECT_2LINES;
 hspi1.Init.DataSize = SPI_DATASIZE_8位;
 hspi1.Init.CLKPolarity = SPI_POLICY_LOW;
 hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
 hspi1.Init.nss = SPI_NSS_soft;
 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
 hspi1.Init.TIMode = SPI_TIMDE_DISABLE;
 hspi1.Init.CRCCalcirc= SPI_CRCCALCULATION_DISABLE;
 hspi1.Init.CRCPolynomial = 7;
 hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATAIZE;
 hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;

问题出在哪里?
谢谢!
Andrew

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

    您好 Andrzej、

    我看到您已将 SYNC 位设置为1、这意味着您正在使用软件 LDAC 来更新 DAC? 写入 DAC (写入寄存器0x05值0x0010)后、是否发出触发命令?

    如果要写入器件,则为触发器声明的值(uint8_t trigger[]={ 0x05、0x00、0x0A };)将重置器件。  你是?

    您的 SPI 设置看起来正确、但我还需要使用示波器进行验证。  您是否检查了输出格式?

    您没有分享您的书写顺序、但我认为您应该这样做:

    1.回读 ID 以确认通信。

    2.写入 SYNC、CONFIG 和 GAIN 寄存器

    3.写入 DAC 通道或广播地址

    4、写入触发寄存器(0x0010)

    确认输出。

    请告诉我这是否有用、如果您愿意、可以随时发布示波器捕获以进行验证。

    谢谢、

    Paul

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

    您好 Paul、
    感谢您的快速回答。
    我尝试根据您的建议执行此操作。 不幸的是、它不起作用。 请查看屏幕:

    你怎么看?
    我对读取 ID 有疑问。 要读取 ID、我需要先发送地址位吗?

    谢谢、致以诚挚的问候
    Andrew

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

    尊敬的 Andrew:

    我看到您正在为此使用连续 CS 帧。  这在独立操作中不受支持。  您需要在每个写入命令之间将 CS 设置为高电平。 由于创建此器件是为了支持菊花链运行、因此只会锁存最后一条命令。

    2.要读取寄存器,您需要发出两条命令:第一条命令是读取命令(0x81 0x00 0x00),第二条命令可以是任何 SPI 事务,但回读数据会在该命令上计时。  例如、您可以使用 NOP 命令(0x00 0x00 0x00)。

    谢谢、

    Paul

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

    Paul、


    事实上,我没有读过 CS。

    遗憾的是、我仍然无法启动 DAC。
    查看这些寄存器、请:

    uint8_t ID_READ[]={ 0x81、0x00、0x00 };
    uint8_t ID[]=      { 0x01、0x00、0x00 };
    uint8_t SYNC[]=   { 0x02、0x00、0x00 };
    uint8_t config[]= { 0x03、0x00、0x00 };
    uint8_t gain_[]=   { 0x04、0x01、0xFF };
    uint8_t 触发[]={ 0x05、0x00、0x00 };
    uint8_t Brdcast[]={ 0x06、0x00、0x00 };
    uint8_t status[]=   { 0x07、0x00、0x00 };

    我以这种方式发送它:

       SPI_1_CS_ON;
       HAL_SPI_transmit (&hspi1、SYNC、3、HAL_MAX_DELAY);
       SPI_1_CS_OFF;
       HAL_DELAY (1);
       SPI_1_CS_ON;
       HAL_SPI_transmit (&hspi1、config、3、HAL_MAX_DELAY);
       SPI_1_CS_OFF;
       HAL_DELAY (1);
       SPI_1_CS_ON;
       HAL_SPI_transmit (&hspi1、GAIN_、3、HAL_MAX_DELAY);
       SPI_1_CS_OFF;
       HAL_DELAY (1);
       SPI_1_CS_ON;
       HAL_SPI_transmit (&hspi1、trigger、3、HAL_MAX_DELAY);
       SPI_1_CS_OFF;
       HAL_DELAY (1);
       SPI_1_CS_ON;
       HAL_SPI_transmit (&hspi1、Brdcast、3、HAL_MAX_DELAY);
       SPI_1_CS_OFF;
       HAL_DELAY (1);
       SPI_1_CS_ON;
       HAL_SPI_transmit (&hspi1、DAC_1、3、HAL_MAX_DELAY);
       SPI_1_CS_OFF;
       HAL_DELAY (1);

    但我能够从 DAC 中读取一些内容:

    名称:SPI_RecivedData
       详细信息:"\201 (\226)"
       默认值:0x20000243
       十进制:536871491
       十六进制:0x20000243
       二进制:10000000000000001001000011
       八进制:04000001103

    您能从这里读取一些内容吗?

    您好!

    Andrew

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

    尊敬的 Andrew:

    您读回的数据长度为4字节。  您是否知道数据是如何对齐的? 该命令只能是三个字节。

    在同步配置中、不需要触发器和广播命令。   

    如果您写入:

    SYNC = 0x0000

    CONFIG = 0x0000

    增益= 0x01FF

    DAC1 = 0x8000

    则 DAC 应为1.25V。   

    这起作用了吗?

    此外、您的电源值是多少? 您能否确认基准引脚为2.5V。

    谢谢、

    Paul

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

    尊敬的 Paul:

    是第一个成功! :-)
    上传配置位后、DAC 输出端出现1.25V 电压。


    电源电压为3.3V (VDD、VIO)。 REF 为2.5V、带接地电容器。


    我能够获得 ID。 但是、它们是3个字节:

       十六进制:0x81
       二进制:10000001

       十六进制:0x28
       二进制:101000

       十六进制:0x96
       二进制:10010110

    这看起来不错吗?

    问题是我发送一些 DAC 值。 例如:

    uint8_t DAC_1_[]=   { 0x08、0xF、0xFF }; //发送到 DAC1的变量的样本值

          SPI_1_CS_ON;
          HAL_SPI_transmit (&hspi1、DAC_1、3、HAL_MAX_DELAY);
          SPI_1_CS_OFF;

    则 DAC 电压为0.16V。 下面是 SDI 信号视图:

    Paul、可能会出什么问题?

    非常感谢您的帮助...

    您好!

    Andrew

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

    尊敬的 Andrew:

    只是代码的一个小问题。  DAC 寄存器左对齐:

    您应该写入:DAC_1[]=   { 0x08、0xFF、0xF0 };  

     通过写入0x0FFF、您实际上已经将0x0FF 写入 DAC、大约(1/16)×2.5 = 0.156V。

    您应该只将数据左移4位。

    解码器件 ID 寄存器:

    您的0x2896结果表明您使用的是12位、8通道、复位到中量程器件。

    谢谢、
    Paul

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

    很不错! :D


    Paul、我现在了解了一切。 您指出、所有内容都是在数据表中编写的。 我是初学者、我只是在学习。


    非常感谢你的帮助。 这个集成电路保留在我的项目中。


    祝你一切顺利


    谢谢!
    Andrew