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.

[参考译文] DAC7760:偶尔 SPI 故障:DAC7760在地址字节和第一个数据字节之间读取一个额外的0位

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1202129/dac7760-occasional-spi-failure-dac7760-reads-an-extra-0-bit-between-address-byte-and-first-data-byte

器件型号:DAC7760
主题中讨论的其他器件: DAC8760EVMDAC8760

我们的 DAC7760有时会在地址字节和第一个数据字节之间读取一个额外的零位。 这种情况并不是始终发生、但发生时、问题将一直存在、直到下电上电或进行复位。 我还不知道导致这种情况的原因是什么、或者如何可靠地避免这种情况。 这里是三条连续的逻辑分析仪轨迹。

  1. 向数据寄存器写入0x2CF0值
  2. 数据寄存器的写入读取命令
  3. 读取数据寄存器为0x1670、即0x2CF0向右移动了一位

我有很多像这样的引线。 它也不限于数据寄存器。 我首先看到了增益和零点寄存器的问题。 我将以2 MHz 的频率运行 SPI 时钟。 我已经在示波器上验证了逻辑分析仪的布线。

我们的原理图:

写入0E20数据。 它被读回0710。

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

    我认为 DAC7760在您读取数据寄存器时会返回用户校准值。 我没有看到这一点记录在案。 可编程转换率下最接近的提示是:"如果在 DAC 输出仍在更改时读取 DAC 数据寄存器、将读取瞬时值。"

    更新了增益: 1.20 b353 
    在增益更新前注册####
    DAC CTL:1001 Cfg:0320 增益:8000 零点:0000 状态:0000 数据:0ff0
    增益更新后的####寄存器
    DAC CTL:1001 Cfg:0320 增益:b350 零:0000 状态:0000 数据:1320
    DAC 数据写入失败0ff0 => 1320
    DAC 数据写入失败0ff0 => 1320
    ...

    0x0ff = 255
    255 * 1.2 = 306
    306 = 0x132

    此外、数据表未提及与数据寄存器不同的增益和零偏移是具有最低有效半字节屏蔽的16位值。 请注意、写入的增益为0xB353将得到增益寄存器0xB350。 我想在内部、它全部是16位、该数据实际上是一个16位数字、DAC7760上的值之间的步长为16、从而产生了一个12位的有效范围。

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

    我认为应用于数据值的"额外插入"零位是默认增益0.5。 除以2就是一个位的右移。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    • GAIN 是一个16位无符号数字、其中0x0000 = 0.5x、0xFFFF = 1.5x。 最低有效4位为零。
    • 0是存储在16位寄存器的最高有效12位中的12位带符号数。
    • 数据
      • 写入:所需的未校准设置
      • 阅读:
        • 进行转换时的当前值
        • 如果禁用转换、则校准设置、即设置*增益+零
        • 校准后的值不能超过寄存器范围
          • 您不能使范围的底部通过负偏移降低
          • 因此、0.1的偏移将输出 Range_Min + 0.1
          • 但是、-0.1的偏移将读取 Range_Min、因为 Range_Min +(-0.1)低于 Range_Min
          • 但是、负偏移适用于较大的值
          • 以上所有内容均通过测试得出经验
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Harvey:

    Joe 将在星期一审查并回复。

    谢谢。

    保罗

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

    Harvey、


    我不得不去为自己测试这一点,你是正确的。 使用增益和零点校准寄存器更新 DAC 数据后、读取 DAC 数据寄存器将报告返回的瞬时值、或者在器件启用转换时报告瞬时值。 我使用 DAC8760EVM 对此进行了测试、DAC8760EVM 具有写入和读回前帧中寄存器的能力。 我还查阅了设计文档、发现这是预期的设计、因此不使用数据表就属于疏忽。 抱歉混淆了。

    我整理了一个方框图、这是路径看起来的样子(没有绘制转换使能):

    这是否回答了您的原始问题,其中读取是间歇性错误,还是这是您的问题的根源?


    约瑟夫·吴

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

    感谢您的确认。 我发现描述这样的校准参数会有所帮助:

    • ZERO:有符号12位(在16位寄存器中向左移4位)
      • -2048...2047
    • 增益:无符号16位(已屏蔽最低有效4位)被映射至0.5...1.5
      • 0...65535、步长为16

    相关的后续问题:

    在4-20mA 模式下、如何纠正芯片端点短路的情况?

    示例1:

    • 增益=1.0、零=0.0、CODE_OUT=0
    • 芯片读数为4.01mA。 我们想应用负零偏移、但它没有效果、因为数学运算后、这个数字被钳位到0...4095的 CODE_OUT。 所以、0 -偏移仍然为0。

    示例2:

    • 增益=1.0、零=0.0、CODE_OUT=FFF (12位7760值)
    • 芯片读数为19.85mA。 我们想提高增益、但情况与以前相同。 FFF * 1.x 仍然是 FFF。

    如何解决该问题?

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

    Harvey、


    我认为没有任何简单的方法来校正端点的值。 DAC8760/DAC7760中的校准是数字校准。 可以基于修改 DAC 代码来调整 DAC 的输出、而不是通过增加或减去输出端的电流(或电压)来进行调整。

    获得精确范围的一种方法是将输出范围设置为0-24mA。 在此范围内、您可以调整增益和偏移、以便可以精确地获得4-20mA 的该范围。 由于数字校准的内插、可能会有一些轻微的 INL 误差、但它们应该小于1LSB。 您也可以用更高的分辨率对 DAC8760执行相同的操作、因此这些误差更小。


    约瑟夫·吴

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

    Harvey、

    顺便说一下、将 MODE 设置为0-24mA、然后将增益和零偏移校准代码设置为0x2AAB、应将范围设置为4-20mA。 这些值应将增益设置为约0.6667、将偏移设置为4.000mA。

    约瑟夫·吴  

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

    谢谢、这也是我得出的结论。 我会问、拥有分辨率或准确的端点是否更重要。