Other Parts Discussed in Thread: 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);
}





