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.

[参考译文] DRV8305:故障问题

Guru**** 2470720 points
Other Parts Discussed in Thread: DRV8305, MOTORWARE

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1260102/drv8305-nfault-issue

器件型号:DRV8305
主题中讨论的其他器件: MOTORWARE

大家好、

客户采用 F28069M+Drv8305方案控制无刷直流电机。 在控制期间、Drv8305的 nFault 引脚置为低电平。 根据数据表、通过读取寄存器0x1、0x2、0x3的值来找到问题。

不过、寄存器0x01中的 FAULT 字段会在0和1之间不时地变化、即使器件中没有发生错误、也不会保持不变。 0x2、0x3寄存器中的某些域的值在没有发生错误时也会改变。  

1) 1) 寄存器0x01的故障域是否与 Drv8305引脚的状态相对应? 如果 Drv8305引脚为高电平、寄存器0x1中的 FAULT 域始终为0。 如果 Drv8305引脚为低电平、寄存器0x1的 FAULT 域始终为1。 对吧?  

2) 2) 寄存器0x2、0x3中的值是否仅在发生 nFault 错误时设置? 它是否保持不变且无错误?  

您能帮助检查这个案例吗? 谢谢。

此致、

切里

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

    您好、Cherry:

    感谢您的提问。  

    Unknown 说:
    1) 寄存器0x01的 FAULT 字段是否与 Drv8305引脚的状态相对应? 如果 Drv8305引脚为高电平、寄存器0x1中的 FAULT 域始终为0。 如果 Drv8305引脚为低电平、寄存器0x1的 FAULT 域始终为1。 对吗?

    可以。 如果检测到故障、则0x1的第10位将为1。  

    Unknown 说:
    2) 寄存器0x2、0x3中的值是否仅在发生 nFault 错误时才设置? 它是否保持不变且没有错误?

    可以。 由于0x2和0x3中的所有位仅 在发生故障时变为1、因此如果 nFAULT 为高电平、它们不会改变。 有关故障寄存器的详细信息、请参阅第7.6.1节。  

    数据表中的第7.3.8节提供了有关故障状况的更多信息。 如果您的问题得到了解答、请告诉我。

    此致!

    Eli

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

    尊敬的 Eli:

    感谢您的支持。

    将 nFault 引脚连接到 LED、如果 nFault 为低电平、LED 将亮起。

    根据以下线程、寄存器0x1中的 FAULT 字段应始终为0、但客户通过 SPI 读回的值不断在0和1之间跳跃。  

    https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1109565/drv8305-nfault-in-status-register

    通过 SPI 读取电机状态的最快频率是多少? 1秒内有多少次读取是最大数量? MotorWare 中 DRV8305的读取实现具有超时限制、如果读取超时、仍会提取 SPIRXEMU 数据作为返回值。 SPIRXEMU 寄存器值是否由于读取超时而未定义?  

    uint16_t DRV8305_readSpi(DRV8305_Handle handle,const DRV8305_Address_e regAddr)
    {
      DRV8305_Obj *obj = (DRV8305_Obj *)handle;
      uint16_t ctrlWord;
      const uint16_t data = 0;
      volatile uint16_t readWord;
      static volatile uint16_t WaitTimeOut = 0;
      volatile SPI_FifoStatus_e RxFifoCnt = SPI_FifoStatus_Empty;
    
      // build the control word
      ctrlWord = (uint16_t)DRV8305_buildCtrlWord(CtrlMode_Read,regAddr,data);
    
      // reset the Rx fifo pointer to zero
      SPI_resetRxFifo(obj->spiHandle);
      SPI_enableRxFifo(obj->spiHandle);
    
      // write the command
      SPI_write(obj->spiHandle,ctrlWord);
    
      // wait for the response to populate the RX fifo, else a wait timeout will occur
      while((RxFifoCnt < SPI_FifoStatus_1_Word) && (WaitTimeOut < 0xffff))
      {
        RxFifoCnt = SPI_getRxFifoStatus(obj->spiHandle);
    	if(++WaitTimeOut > 0xfffe)
    	{
    		obj->RxTimeOut = true;
    	}
      }
    
      // Read the word
      readWord = SPI_readEmu(obj->spiHandle);
    
      return(readWord & DRV8305_DATA_MASK);
    } // end of DRV8305_readSpi() function

    谢谢。此致、

    切里

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

    您好、Cherry:

    感谢您的澄清。

    根据以下线程,寄存器0x1中的 FAULT 字段应始终为0,但客户通过 SPI 读回的值不断在0和1之间跳跃。  [/报价]

    请让客户阅读数据表的第7.3.8.1节、了解 SPI 寄存器 故障位何时会开启以及 nFAULT 引脚何时会变为低电平。 您链接的主题是正确的、但可以在数据表中找到更广泛的信息。

    通过 SPI 读取电机状态的最快频率是多少? 1秒内有多少次读数是最大数?

    有关此信息、请参阅数据表中的第6.6节。 下表应包含所需的所有 SPI 时序信息。 由于最小 SPI 时钟周期为100ns、因此最大时钟频率为10MHz。  

     

    如果 SPIRXEMU 寄存器值由于读取超时而未定义吗?

    读取超时时间是多少? 请让客户检查他们是否遵守数据表中列出的 SPI 要求。

    此致!

    Eli

    [/quote]