TI中文支持网
TI专业的中文技术问题搜集分享网站

DRV8305-Q1EVM: Drv8305的nFault问题

Part Number:DRV8305-Q1EVMOther Parts Discussed in Thread:DRV8305, MOTORWARE

我使用F28069M+Drv8305的方案做无刷直流电机的控制。

控制过程中,Drv8305会出现nFautt错误,nFault引脚会置为低电平.

根据Dr8305 datasheet手册的指引,我通过SPI读取会寄存器0x1,0x2,0x3的值,以辅助定位问题。

但是有个奇怪的问题,寄存器0x01的FAULT字段,即使在Drv8305没有错误发生时,时不时在0,1来回变化,并不是保持不变的,0x2,0x3的一些字段的值在未发生错误时也会变化。

问题 1:寄存器0x01的FAULT字段是不是跟Drv8305引脚的状态对应的?

如果Drv8305引脚是高电平,则寄存器0x1的FAULT字段是不是一直是0,如果Drv8305引脚是低电平,则寄存器0x1的FAULT字段一直是1。是不是这样的对应关系?

问题 2:寄存器0x2,0x3的值是不是只有发生nFault错误时,对应才会被置位,为出错情况下是不是保持不变?

Cherry Zhou:

您好,您的问题我们需要升级到英文论坛寻求帮助,如有答复将尽快回复您。

,

Cooper White:

我将nFault引脚跟一个LED灯相连,如果nFault低电平,是可以看到LED灯会亮:

正常运行过程中,电机正常控制,LED是一直常灭。

根据下面这个帖子,寄存器0x1的FAULT字段应该是一直为0才对,但我通过SPI读取回来的值是不断在0,1之间跳变。

e2e.ti.com/…/drv8305-nfault-in-status-register

,

Cooper White:

通过SPI去读取8305的状态,允许的最快频率是多少,最快可以1秒钟读取多少次?

如果太过频繁的读取,会不会引起这个问题?

贵公司MotorWare的DRV8305的读取实现,是有超时限制的,如果读取超时了,仍然会去取SPIRXEMU的数据作为返回值的。

会不会是读取超时,导致SPIRXEMU寄存器的值是未定义,导致这个问题的出现。

下面是贵司的8305读取代码的实现:

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 wordctrlWord = (uint16_t)DRV8305_buildCtrlWord(CtrlMode_Read,regAddr,data);// reset the Rx fifo pointer to zeroSPI_resetRxFifo(obj->spiHandle);SPI_enableRxFifo(obj->spiHandle);// write the commandSPI_write(obj->spiHandle,ctrlWord);// wait for the response to populate the RX fifo, else a wait timeout will occurwhile((RxFifoCnt < SPI_FifoStatus_1_Word) && (WaitTimeOut < 0xffff)){RxFifoCnt = SPI_getRxFifoStatus(obj->spiHandle);if(++WaitTimeOut > 0xfffe){obj->RxTimeOut = true;}}// Read the wordreadWord = SPI_readEmu(obj->spiHandle);return(readWord & DRV8305_DATA_MASK);
} // end of DRV8305_readSpi() function

,

Cherry Zhou:

Cooper White said:

问题 1:寄存器0x01的FAULT字段是不是跟Drv8305引脚的状态对应的?

如果Drv8305引脚是高电平,则寄存器0x1的FAULT字段是不是一直是0,如果Drv8305引脚是低电平,则寄存器0x1的FAULT字段一直是1。是不是这样的对应关系?

是的,如果检测到故障,那么0x1的第10位将为1。 

Cooper White said:问题 2:寄存器0x2,0x3的值是不是只有发生nFault错误时,对应才会被置位,为出错情况下是不是保持不变

是的,由于0x2和0x3中的所有位仅在发生故障时变为1,因此如果 nFAULT 为高电平,它们则不会改变。 有关故障寄存器的详细信息,请参阅第7.6.1节。 数据表中的第7.3.8节提供了有关故障状况的更多信息。 

其他问题我们需要向工程师确认,应该会在下周工作日给到您答复。 

,

Cherry Zhou:

Cooper White said:根据下面这个帖子,寄存器0x1的FAULT字段应该是一直为0才对,但我通过SPI读取回来的值是不断在0,1之间跳变。

请参阅数据表的第7.3.8.1节,了解 SPI 寄存器故障位何时会开启以及 nFAULT 引脚何时会变为低电平。 您参考的帖子是正确的,但您可以在数据表中找到更广泛的信息。 

Cooper White said:通过SPI去读取8305的状态,允许的最快频率是多少,最快可以1秒钟读取多少次?

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

Cooper White said:会不会是读取超时,导致SPIRXEMU寄存器的值是未定义,导致这个问题的出现。

请检查是否遵守数据表中列出的 SPI 要求。 

赞(0)
未经允许不得转载:TI中文支持网 » DRV8305-Q1EVM: Drv8305的nFault问题
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1