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.

[参考译文] DRV8860:Drv8860故障寄存器读取时序咨询

Guru**** 2763595 points

Other Parts Discussed in Thread: DRV8860

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/965608/drv8860-drv8860-fault-register-read-timing-consultation

器件型号:DRV8860

您好、技术支持

有关 drv8860故障寄存器读取时序问题咨询。

MSP430参考例程中时序序列的开始和结束与数据手册中的不同。 例如、最后一个锁存器应该为低电平、并且会注释常规语句。

2.严格按照数据手册的时间序列读取故障寄存器数据、发现最高和最低位数据不正确、因此请参考 MSP430例程来修改程序。

3、现在发现故障寄存器数据的第一次读数正确。 一旦执行复位故障寄存器操作、读取故障寄存器后立即读取的数据就会出错、这类似于向左移动一个位、即最高位和最低位错误。  因此,我在序列_ H 的开头添加了"CLK"“CLK_ ”,这样它是正确的,但我们找不到基础,我不知道它是否可行。

下图是根据例程确定的测试波形。 所有8 OUT 均为开路、理论上读取的数据应为0x00ff、且测量数据首次正确。 故障寄存器复位后、再次读取的数据为0x01de

下图显示了在根据例程读取故障寄存器时序之前添加额外时钟脉冲的测试波形。 所有8输出均为开路。 理论上读取的数据应为0x00ff。 测量数据首次正确。 复位故障寄存器后、再次读取数据0x00ff、这仍然正确。 继续尝试恢复不同输出接口的正常连接以及开路和短路测试、读数正确。

蓝色表示 dout、绿色表示 LATCH、黄色表示 CLK

以下是此部件的过程、请查看是否可行。

UINT16 DRV8860_ReadFault ()

uint16 dat=0;
uint8 i;

CLK_H ();//
CLK_L ();//

CLK_H();
LATCH_H();
CLK_L();
LATCH_L();
CLK_H();
LATCH_H();


对于(I = 0;I < 8;I++)

CLK_H();
CLK_L();
DAT <<= 1;
if (DOUT_PIN) dat |= 1;

对于(I = 0;I < 8;I++)

CLK_H();
CLK_L();
DAT <<= 1;
if (DOUT_PIN) dat |= 1;

DRV8860_DELAY();
//LATCH_L();
返回 dat;

while (1)

drv8860.Stu_FAULT = DRV8860_ReadFault ();
B_8860_HOT =(drv8860.Stu_FAULT)? 0:1;
如果(!b_8860_hot)

DRV8860_RESET_FAULT_CMD ();

delay_ms (10);

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

    Yunlong、

    我看不到波形。 您是否会比较良好的读取命令和错误命令的 CLK、nSCS、SDI、SDO 示波器波形?

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

    以下是故障寄存器可以正确读取的波形、以及在 drv8860的两个测试条件下无法正确读取的波形。 前两个波形都是针对输出8的开路条件、只读取故障寄存器。 最后两个条件是 OUT1开路和 OUT8过流情况。 程序循环读取故障寄存器、然后清除故障寄存器、再写入数据寄存器0x00。 正确与错误之间的唯一区别是、读取故障寄存器的程序在开始时具有额外的时钟高电平和时钟低电平。

    1、以下是正确的测试波形(所有8 OUT 保持开路)

    故障寄存器读取的数据正确:0b0000 1111 1111。

    读取故障寄存器的功能为:

    UINT16 DRV8860_ReadFault ()

    uint16 dat=0;
    uint8 i;

    CLK_H();
    CLK_L();

    CLK_H();
    LATCH_H();
    CLK_L();
    LATCH_L();
    CLK_H();
    LATCH_H();

    对于(I = 0;I < 8;I++)

    CLK_H();
    CLK_L();
    DAT <<= 1;
    if (DOUT_PIN) dat |= 1;

    对于(I = 0;I < 8;I++)

    CLK_H();
    CLK_L();
    DAT <<= 1;
    if (DOUT_PIN) dat |= 1;

    DRV8860_DELAY();
    //LATCH_L ();  MSP430的参考程序会阻止该指令并降低手册
    返回 dat;

    黄色: DOUT

    绿色:CLK

    蓝色:闩锁

    红色: DIN

    2、以下是错误的测试波形(全部8 OUT 保持开路)

    故障寄存器读取的数据为错误:0b0000 1111 1110。

    读取故障寄存器的功能为:

    UINT16 DRV8860_ReadFault ()

    uint16 dat=0;
    uint8 i;

    //clk_H ();
    //CLK_L();

    CLK_H();
    LATCH_H();
    CLK_L();
    LATCH_L();  
    CLK_H();  
    LATCH_H();

    对于(I = 0;I < 8;I++)

    CLK_H();
    CLK_L();
    DAT <<= 1;
    if (DOUT_PIN) dat |= 1;

    对于(I = 0;I < 8;I++)

    CLK_H();
    CLK_L();
    DAT <<= 1;
    if (DOUT_PIN) dat |= 1;

    DRV8860_DELAY();
    //LATCH_L ();  MSP430的参考程序会阻止该指令并降低手册
    返回 dat;

    3、第二个测试条件(OUT1开路、OU8过流)的正确波形

    A.程序与第一个程序相似。

    b.读取故障寄存器后、执行清除故障寄存器指令、然后将0x00写入数据寄存器。

    c.故障寄存器读取的数据正确:0b1000 0000 0001。

    3、第二个测试条件(OUT1开路、OU8过流)的误差波形

    A.程序与第二个程序类似。

    b.读取故障寄存器后、执行清除故障寄存器指令、然后将0x00写入数据寄存器

    C.故障寄存器读取的数据是错误:0b0000 0000 0010。


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

    Yunlong、

    我本周在度假。 因此、响应可能会延迟。

    我刚刚检查了数据表: 在锁存脉冲前有5个特殊命令需要一个额外的点击信号(第1部分时钟)。 它能解释您的情况吗?

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

    您好、WangLi

    我明白你的答覆的意思,但这与我所谘询的读错寄存器问题无关。 读取故障寄存器不属于5条特殊指令。

    我对读取故障寄存器序列的开始有疑问。  如果我按照手动序列写入程序、 那么在读取数据时将丢失最高位。  如果配置如下、则可以正确读取。

    问题1:在 MSP430评估板的参考程序中读取故障寄存器的时序开始和结束与数据表不同。假定 MSP430参考程序正确、 我发现故障寄存器的数据在第一次读数中被左移、最高位将丢失。 第二个读数和后续读数正确。 如果我添加 CLK 高电平和 CLK 低电平、那么读数第一次和之后都是正确的、但这种操作没有可靠的基础、我不知道它是否可行。

    问题2: 如果我不添加 CLK 高电平和 CLK 低电平、最高位也将丢失。

    问题3: clk_H ();//? 根据数据表时序图、它应位于 LATCH_H 之后;在更换后无法正确读取。

    UINT16 DRV8860_ReadFault()

    uint16 dat=0;

    uint8 i;

    CLK_H ();//?数据表序列图、无需

    CLK_L ();//?数据表序列图、无需

    CLK_H();

    LATCH_H();

    CLK_L();

    LATCH_L();

    CLK_H ();//?根据数据表序列图、它应该在 LATCH_H 之后;

    LATCH_H();  

    //LATCH_H ();//以下内容与数据表一致,缺少 MSB

    // clk_L ();

    // LATCH_L();

    // LATCH_H();

    // clk_H ();

    对于(I = 0;I < 8;I++)

    CLK_H();
    CLK_L();
    DAT <<= 1;
    if (DOUT_PIN) dat |= 1;

    对于(I = 0;I < 8;I++)

    CLK_H();
    CLK_L();
    DAT <<= 1;
    if (DOUT_PIN) dat |= 1;

    LATCH_L ();//
    返回 dat;

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

    您好!

    我理解您遇到的问题、但不知道如何解释额外时钟脉冲的工作原理。  在锁存脉冲为低电平之前、时钟信号应为"无关"信号。  

    就我从数据表中的时序图中可以看出、您为解决该问题而添加的额外时钟脉冲应该被器件完全忽略、只有时钟上的第一个高-低转换应该移出一个位。   

    从你的第一个帖子中、我强调了我的担忧:

    3、现在发现故障寄存器数据的第一次读数正确。 一旦执行复位故障寄存器操作、读取故障寄存器后立即读取的数据就会出错、这类似于向左移动一个位、即最高位和最低位错误。  因此,我在序列_ H 的开头添加了"CLK"“CLK_ ”,这样它是正确的,但我们找不到基础,我不知道它是否可行。

    "故障寄存器复位"命令是否可能无法正确执行(上面复制了特殊命令序列)?  在执行读取操作之前、您能否显示正在发送 RESET 命令的范围捕获?   

    由于第一次读取后读取的内容是正确的、我想知道复位过程中可能与您遇到的问题有关的内容。

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

    您好!

    非常感谢您的回复、我确信重置故障寄存器的特殊说明是正确的。 此外,我的表达可能不清楚。 在这两种情况下都存在首次读取故障寄存器的错误。 首先、程序从 main 中执行、第一个读数错误、第二个连续读数正确。 其次、只要故障寄存器复位、第一次读数是错误的、第二次连续读数是正确的、这个问题的测试波形的中间部分是故障寄存器复位的波形。

    在下面、我将附加一个单独的复位操作波形。

    黄色: DOUT

    绿色:CLK

    蓝色:闩锁

    红色: DIN

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

    您好、再说一次、

    似乎有另一位客户出现此问题、只是在上面找到了该帖子。  请滚动至关闭前的最后一个回复。

    似乎需要这个额外的时钟周期来避免您看到的问题。  遗憾的是、数据表中未记录该问题、但已证明可以纠正该问题。

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

    您好、Ryan Kehr

    我很高兴看到你的答复。 您是否可以安排他人对其进行测试? 验证我描述的问题和解决方案。

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

    您是否查看了我在上面标记的 Rick 的帖子?  Rick 确实测试了它。  已验证问题和解决方案。