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.

[参考译文] 通过 SPI 实现 DAC81404配置和控制

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1045029/dac81404-configuration-and-control-through-spi

主题中讨论的其他器件:DAC81404DAC81404EVM

对于 DAC81404、我设法使用 Arduino Uno 来配置和控制其电压输出。

这是 DAC 设置的代码。

  // Chip Select 
  pinMode(DAC_SS_PIN, OUTPUT);
  digitalWrite(DAC_SS_PIN, HIGH);
    
  // DAC Reset
  pinMode(DAC_RESET_PIN, OUTPUT);
  digitalWrite(DAC_RESET_PIN, HIGH);

  /*** ***
    This delay is very important !!! 
    *** ***/
  delay(100);

  // Write
  write_reg(0x03, 0x04); // SPICONFIG: DEV-PWDWN=0
  write_reg(0x04, 0x0); // GENCONFIG: REF-PWDWN=0
  write_reg(0x09, 0x0); // DACPWDWN: DACx-PWDWN=0, x={A,B,C,D}
  write_reg(0x0A, 0x02); // DACx-RANGE=0b0101, i.e. +/-5V

我使用 了 WRITE_reg (0x10,(I)%65535);// DAC-A 来调整通道 A 的电压输出。

但是、当我尝试使用 STM32 G431电路板时、我无法使 DAC 正常工作。

我已使用 PicoScope 示波器记录 Uno 和 STM32板的 SPI 波形、如下所示:

                          Uno SPI 波

                           G431 SPI 波

如果仔细观察、G431信号比 Uno 好、因为对于 Uno、CS 中存在尖峰。

对于 Uno、每个字节之间存在一些差异;但是对于 G431、则没有。 差距很重要吗?

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

    BTW、引脚连接如所示

    EVM 板 LaunchPad 接口      

      不是

     

    3.3V        

     3.3V  

     我发现在此期间只需要连接3.3或5V  

    5V        

     5V

     配置。 操作似乎不需要这些2

    LDAC      (保留打开)

     6  LDACz_PIN

    未在代码中设置/复位

    同步      

      10  DAC_SS_PIN

     

    SDIN       

      11 MOSI

     

    SDO       

     12 MISO

    未使用;但可能需要用于调试

    SCLK      

      13 SCLK

     

    CLR、RST  

       5  DAC_RESET_PIN

     上拉

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

    您好!

    SPI 帧将需要满足以下时序要求:

     只要满足 SCLK 低电平和高电平时间、G431就应该在没有 Uno 存在的间隙的情况下工作。 从我在示波器照片中看到的情况来看、似乎大多数要求都得到了满足。 您能否放大并验证是否 满足每个 SCLK 下降沿前后5ns 的 SDIN 设置和保持时间?  

    您是否将 G431的正确3.3V 和 GND 连接到 DAC81404EVM 的 Launchpad 接口? G431和 Uno 的 SPI 电压电平是否均为3.3V?

    正确的是、未使用 AEVM_5V0。 当跳线 J19闭合时使用 AEVM_3V3、以使用 Launchpad 3.3V 作为 DAC IOVDD 电源。  

    最棒的

    Katlynne Jones

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

    我刚刚检查了 G431逻辑高电平为3.3V、而 Uno 逻辑高电平为5。 这是原因吗? 根据数据表、只要在1.7至5V 范围内、就应该正常。

    在 G431 SPI 波形中、一个电网为5us、其中有12个时钟脉冲。 一 个数据位 采用 1个时钟。 因此在5us 内、有12位、每个位的持续时间为417ns。  这对于 保持时间来说绰绰有余。 对于设置时间、我需要一个更好的范围来进行双重检查。

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

    您好!

    数字输入不应大于 IOVDD。 当 IOVDD 连接到 AEVM_3V3时、G431的3.3V 逻辑电平应该正常。 使用 Uno 时、请确保将 IOVDD 连接到5V。  

    自尝试 G431以来、您是否能够使用 Uno 写入 DAC?

    看起来您正在使用内部基准。 当您使用 G431时、您是否在 DAC_VREF 节点上看到2.5V 电压?

    为了仔细检查、您是否已连接系统中的所有接地端? 我看不到您与 LaunchPad 连接共享的上表中提到的接地。  

    最棒的

    Katlynne Jones

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

    您好 Katlynne、

    虽然我仍然不能确定问题的确切原因、但我还是设法使其正常工作。

    首先、GND 引脚已正确连接。

    我所做的是使用信号示波器实时监控 SPI 时钟、MOSI 波形。 我发现 G431的 SPI 输出模式与 Uno 不同、因此我将其调整为与 Uno 相同。

    我所做的另一件事:在 Uno 中、我在设置阶段仅进行一次配置、而 在 G431中、我在设置期间重复10次相同的代码。 然后、我可以根据需要更改 DAC 电压输出。

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

    您好 Katlynne、

    我想从 DAC 中读取寄存器配置、我需要从 DAC 中读取多少个字节?

    3字节、不是吗? 第一个是0x0、第二个和第三个是设置值。

    我对数据表的理解:在 SPI MOSI 线路上、我需要发送3个字节:第一个字节是寄存器地址、读取位被设定;第二个和第三个字节可以是任何值。 在此期间、DAC 将在 SPI MISO 线路上发回特定寄存器保存的2个字节的值。

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

    您好!

    您应该需要3个字节:

    地址位被回显、然后是16个数据位。

    您需要发送一个读取命令、然后发送一个"虚拟"周期来激活时钟、以便回读数据可以在 MISO 线路上计时:

    读取命令是您所说的具有读取位的寄存器地址。 第二个和第三个字节可以是任何字节。 第二个"虚拟"周期可以全为0、也可以是另一个读取或写入命令。

    最棒的

    Katlynne Jones