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.

[参考译文] TLV5616:与 SPI DAC 通信

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/715684/tlv5616-communicating-with-spi-dac

器件型号:TLV5616

我正在尝试通过 SPI 将 TLV5616与 mbed 连接。

我建立的连接如下:

https://i.stack.imgur.com/duiLJ.png

注意:mbed 由相同的5V 电源供电。


我修改了 mbed SPI helloworld prorgam:

#include "mbed.h"

SPI SPI (P5、P6、p7);// mosi、mISO、 SCLK
DigitalOut cs (p8);


int main (){

uint16_t fixed = 0x4000;
uint16_t value = 1000;

uint16_t final = value << 2;
final = fixed ^ value;
cs = 1;


spi.format (16、3);
spi.frequency(1000000);


//通过设置芯片选择 low
cs = 0来选择器件;

//发送0x8F,读取 whoami 寄存器
spi.write (final)的命令;

//取消选择设备
cs = 1;


}

前4位(从左侧)应为0100、后2位为00。 10位值介于两者之间。 数据表(www.tij.co.jp/.../tlv5616.pdf)对此进行了说明。

我已经使用了位模式0x4000、并将其与10位值进行异或运算、后者被移位2。 这将导致 DAC 接受一个位模式。

然而、当测量 DAC 输出时、该值往往保持在200mV 左右、有时会低于、这会导致我相信某种情况不太正常。 如果值为1000、您将期望值接近3.3V (REF)。

我应该提到的是、虽然我认为没有必要测试基本功能、但我没有在该电路中使用过电容器。

是否有任何关于出错的想法?

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

    我认为您使用的 SPI 模式不正确。 mbed 的快速谷歌显示、SPI.format 模式3意味着 PHA = 1且 POL = 1。 我相信对于该器件、您希望改用模式1或模式2。 请尝试一下、并让我们知道这是否可行。

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

    尊敬的 Paul:

    我怀疑这可能是问题所在、因此我尝试了所有模式。 遗憾的是、没有一个工作...

    EE

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

    我已经更新了代码、以便在发送数据(FS 行)之前生成脉冲。 仍然不幸运:

    #include "mbed.h"
    
    SPI SPI (P5、P6、p7);// mosi、mISO、 SCLK
    DigitalOut FS (p8);
    
    
    int main(){
    //必须取消选择芯片
    uint16_t 固定= 0x4000;
    uint16_t 的值= 1024;
    
    uint16_t final =值<< 2;
    final =固定^值;
    FS = 1;
    
    //为8位数据设置 SPI、高稳定状态时钟、
    //第二个边沿捕获、时钟速率为1MHz
    SPI.format (16、1);
    spi.frequency(1000000);
    
    
    
    
    FS = 0;
    FS = 1;
    等待(1);
    FS = 0;
    
    
    spi.write (final);
    
    等待(1);
    
    FS = 1;
    
    
    } 

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

    您是否能够通过示波器或逻辑分析仪确认您的 SPI 帧是否正确? 您能否确认 VDD 和 VREF 电压? DAC 的输出端有什么电路?

    谢谢!
    Paul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有示波器、很难知道。 我刚才检查过、VREF 实际上是3.3V。 然而、VDD 似乎是~12、所以我的5V 电源必须有故障。
    这是什么最可能导致问题的原因? 我需要更换芯片吗?

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

    1) 1)在传输之前、我是否应该将 FS 置于高电平(从低电平)、然后再次变为低电平?
    2) 2)传输后、我是否需要再次将 FS 变为高电平和低电平?

    谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    数据通过 FS 的低电平到高电平转换进行锁存。 在通信数据包之后、FS 可能保持高电平、并且只有在新 SPI 命令开始时才会置位低电平。

    您可能会通过为器件提供12V 电压来损坏器件、因为这超出了绝对最大额定电源电压。 我怀疑您的稳压器电路有问题。 您可以尝试排除电源问题、然后更换 DAC 以进行确认。

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

    好的、我已经更换了芯片、并获得了新的5V 和3.3V 电源、我可以确认工作正常。

    代码现在如下所示:

    代码(文本):
    1. #include "mbed.h"
    2. SPI SPI (P5、P6、p7);// mosi、mISO、 SCLK
    3. DigitalOut Fs(p8);
    4.  
    5. int main(){
    6.   FS = 0;
    7.  
    8.   uint16_t 固定= 0x4000;
    9.   uint16_t 的值= 1024;
    10.  
    11.   uint16_t final =值<< 2;
    12.   final =固定^值;
    13.  
    14.  
    15.   SPI.format (16、2);
    16.   spi.frequency(1000000);
    17.   等待(1);
    18.   FS = 1;
    19.   等待(1);
    20.   FS = 0;
    21.   spi.write (final);
    22.  
    23.   等待(1);
    24.  
    25.   FS = 1;
    26.  
    27.  

    首先、电压表测得的 OUT 大约为9mv (通常为-9mv)。 大约5到20秒后、电压尖峰达到1.6V 左右、然后达到3.3V。

    您能解释一下这种延迟和不精确度吗?

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

    我认为使用示波器或数字逻辑分析仪来查看 SPI 数据包是明智的。 在这种情况下、很难判断器件的行为。