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.

[参考译文] DAC81416:Arduino 巨型 DAC 控制

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1246874/dac81416-arduino-mega-control-over-dac

器件型号:DAC81416
主题中讨论的其他器件: REF5025
下午好!
我正在尝试使用 Arduino MEGA 以及 SPI 协议来控制 DAC 输出。 根据测试点、我已正确为所有电源输入供电、因此我怀疑程序中有问题。
该程序在其当前迭代中的目标是通过来自电路板的指令以5V 为 DAC 输出加电。
我怀疑问题在于差分模式。 我不明白必须对寄存器和跳线执行哪些步骤才能实现 我的目标、我认为这意味着禁用差分模式。
下面描述了我编写的程序、但未包括所有寄存器的定义(尽管在环境中声明了)。
void setup(){
 Serial.begin(9600);
 serial.println ("设置")
 //将设置代码放在这里,运行一次:
 SPI.begin();
 SPI.setBitOrder(MSBFIRST);
 SPI.setClockDivider(SPI_CLOCK_DIV4);// 4MHz
 SPI.setDataMode(SPI_MODE1);// CPOL = 0,CPHA = 1
 //将 SS 引脚设置为输出
 引脚模式(SS、输出)
 serial.println ("Pinmode Set")

 //配置 SDO 以读取 SPI
 writeRegister (SPIC名下、0x0004)
 //打开基准电压(如果我们需要这个 IDK?)
 writeRegister (GENCONFIG、0x3F00)
 //打开所有 DAC 端口(如果给定0,则 DAC 端口打开)
 writeRegister (DACPWDWN、0x0000)
 //设置为立即更新
 writeRegister (SYNCONFIG、0x0000)
 //将 DAC 输出设置为0V 至5V,将0x0001设置为0至10V
 writeRegister (DACRANGE0、0x0000)
 writeRegister (DACRANGE1、0x0000)
 writeRegister (DACRANGE2、0x0000)
 writeRegister (DACRANGE3、0x0000)
 
 serial.println ("设置完成")

void loop(){
 //寄存器地址是8位
 //寄存器存储16位
 serial.println ("开始")
 //写入 DAC 端口
 写寄存器(DAC0、0x8000)
 写寄存器(DAC1、0x8000)
 写寄存器(DAC2、0x8000)
 写寄存器(DAC3、0x8000)
 写寄存器(DAC4、0x8000)
 写寄存器(DAC5、0x8000)
 写寄存器(DAC6、0x8000)
 写寄存器(DAC7、0x8000)
 写寄存器(DAC8、0x8000)
 写寄存器(DAC9、0x8000)
 写寄存器(DAC10、0x8000)
 写寄存器(DAC11、0x8000)
 写寄存器(DAC12、0x8000)
 写寄存器(DAC13、0x8000)
 写寄存器(DAC14、0x8000)
 写寄存器(DAC15、0x8000)
 
 serial.println ("铸造")
 延迟(1000000000);

//将16位(4个十六进制数字)值传输到给定的寄存器
void writeRegister (字节地址无符号整型 val)
 serial.println ("写作")
 
 
 digitalWrite (SS、low)
 // SPI.beginTransaction(settings);
 spi.transfer (地址)
 spi.transfer16 (val)
 // spi.endTransaction ();

 serial.print ("发送的值:")
 serial.print (val、hex)
 serial.print (" 至 register:")
 serial.println (地址、十六进制)
 
 //添加延迟?
 digitalWrite (SS、HIGH)
 serial.println ("完成写入")
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     这是我运行该脚本时的输出(减去下面看到的更多对引脚的写入)、但我计划用一个振荡器来检查这些命令是否确实正在发送。

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

    Timothy、您好!  

    桑贾伊明天会审查这件事。

    同时、您能分享一个写命令的屏幕截图吗? 验证是否满足时间安排对我们来说很有帮助。 此外、您使用的是 DAC81416EVM 还是其他电路板? 如果是 EVM、请分享所有跳线设置。 如果是另一个板、您能分享一下原理图吗?  

    此致!

    K·琼斯  

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

    该图像由"writeRegister (DAC10、0x8000);"调用产生。

    已修改 writeRegister 函数、以打印出从值到地址的传输中接收到的值、新代码如下所示:

    //将16位(4个十六进制数字)值传输到给定的寄存器
    void writeRegister (字节地址无符号整型 val)
     serial.println ("写作")
     
     digitalWrite (SS、low)
     // SPI.beginTransaction(settings);
     spi.transfer (地址)
     uint16_t x = spi.transfer16 (val)
     // spi.endTransaction ();

     serial.print ("发送的值:")
     serial.print (val、hex)
     serial.print (" 至 register:")
     serial.println (地址、十六进制)

     serial.print ("得到的值:")
     serial.println (x、hex)
     //添加延迟?
     digitalWrite (SS、HIGH)
     serial.println ("完成写入")
    跳线当前处于以下位置:
    J2:开路
    J3:开路
    J9:开路(REFGND 连接到 VCC、VAA 和 VIO 电源上的 GND;由 GND 测试 点确认)
    J10:2-3 (为 J7.4提供5V 作为 VIO;通过 VIO TP 确认)
    J11:1-2 (REF5025)(这是我感到不确定的一个)
    J12:1-2 (GND 作为 VSS)
    感谢您的帮助:)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    将0x8000写入每个 DAC 寄存器的代码为循环中的某些寄存器返回0x0000、同时为少数寄存器返回0x8000。 DAC 寄存器返回的值似乎是从这两个中随机选择的、至少对我来说是这样。

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

    Timothy、您好!

      

    跳线设置看起来没有问题。

    请尝试以下操作:

    1. 将这些值写入相应的寄存器

    1.在 SPICKAN 中写入0x0A84 (0x73)

    2.在 DACPWDN (0x09)中写入0x0000

    3. 在  DACn_DATA 中写入0x8000 (n = 0x10至0x1F)

    2.可以探测 PCB 上的数字测试引脚()并将示波器波形发送给我们吗?

     

    谢谢。

    桑贾伊

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

    我跑左边的图片、产生右边的图片。 我监测了使用示波器发送的 SPI 信号、这些信号肯定是由电路板发送的。

    DAC 和 GND 的任何输出引脚之间仍然没有出现电压降。

    假设通过数字测试点、您指的是 VDD、那么我有以下振荡环路轨迹。 这可能很难判断、但它是5V (顶行)、与(1)下方的绿色方形(通过万用表确认)相比

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

    Timothy、您好!

      

    图形看起来是可以的、但我通过探测数字引脚来表示:>> SCLK、SYNC 和 SDI 线路。

    请探测这些并确认。

     

    谢谢。

    桑贾伊

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

    MISO/SCK MISO (顶部)、SCK (底部)

     MOSI (顶部)、SCK (底部)

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

    Timothy、您好!

      

    为什么两个图中的 CH2 (SCL)的电压电平仅~0.35V? 请确保数字线路(SCL、SDI 和 SYNC)具有 VIO 电源规定的电压。

    2.我 无法  从图中了解 MOSI 数据、请捕获完整的图形帧、并验证 MOSI 数据是否与示波器捕获匹配。

    3. SCL 不干净,请将速度减少为~ 100KHz,而不是4MHz。

     

    谢谢。

    桑贾伊