您好、芯片、
当我尝试读取 IC 状态寄存器时、您能否告诉我为什么第一个字节(0xc6或0xc4或0xc0)与第二个字节0x04不相同?我的问题基于链接 (+) DRV8908-Q1EVM:SPI 消息详细信息-电机驱动器论坛-电机驱动器- TI E2E 支持论坛
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.
您好、芯片、
当我尝试读取 IC 状态寄存器时、您能否告诉我为什么第一个字节(0xc6或0xc4或0xc0)与第二个字节0x04不相同?我的问题基于链接 (+) DRV8908-Q1EVM:SPI 消息详细信息-电机驱动器论坛-电机驱动器- TI E2E 支持论坛
您好!
感谢您的提问。 IC 状态分配如下。 我为 C4放置一个示例。 如果 DRV 有一些故障状态、它会反映到 IC 状态。 如果故障状态发生变化、IC 状态也会发生变化。
为了清除故障、CLR_FLT 是解决方法。 在地址0x07h 写入01h。
我建议先设置 CLR_FLT、然后通过发送一些注释来检查 IC 状态(读取0x00h 上的 IC_STAT 可能是一个好的状态)。
此致
Shinya Morita
您好,
很抱歉 我迟到了。谢谢 你的回答。 正如您所说,我可以使用 CLR_FLT 清除 故障。
现在,我 有3个问题。
1.当系统发生2个错误(例如 OCP 和 TSD)但系统仅 显示 TSD 消失时,我需要将 CLR_FLT 设置为1,OCP 错误不消失,对吧?
为什么我需要检查 IC 状态? 如果系统未恢复,则 IC 状态未更改, 对吧?
3.我已禁用 openload, 为什么在发送控制1,2,4通道输出1,3通道输出0时状态返回旧故障?
我的初始化寄存器代码:
InitSSP0_Drv8908();
initdataback = ReadOrSetSpiData( 0, CONFIG_CTRL_ADDR ,(1<<1)|(1<<3)|(1<0),REG_WRITE_CMD);//0SET 0端口过压阈值为33V,OCP 不报告故障引脚
initdataback = ReadOrSetSpiData( 0,old_CTRL_1_ADDR,0xff,REG_WRITE_CMD );//设置0端口禁用所有开路负载检测
initdataback = ReadOrSetSpiData( 0,old_CTRL_2_ADDR,0xc0,REG_WRITE_CMD );//在 nFAULT 中设置0端口无报告
initdataback = ReadOrSetSpiData (0、old_CTRL_3_ADDR、0、REG_WRITE_CMD);//设置0端口禁用所有低电流开路负载检测
initdataback = ReadOrSetSpiData (0、old_CTRL_4_ADDR、0、REG_WRITE_CMD);//设置0端口禁用所有低电流开路负载检测
initdataback = ReadOrSetSpiData (0、old_CTRL_5_ADDR、0、REG_WRITE_CMD);//设置0端口禁用所有低电流开路负载检测
initdataback = ReadOrSetSpiData (0,old_CTRL_6_ADDR,0,REG_WRITE_CMD);//设置0端口禁用所有低电流开路负载检测
initdataback 为什么 是0x00??????
我的控制代码:
uint16 SPI_outdata= OutputPorts_drv8908 (端口、OP_CTRL_1_ADDR、outdata);//OP_CTRL_1_ADDR
为什么 SPI_outdata 是0xd19a? 我需要知道 为什么老派是真的(我的电路正在中继、形成贿赂、在电路中没有开路负载)?
等待您的回答,谢谢!
我 的宏定义:
#define IC_STAT_ADDR 0x00 // IC 状态(IC_STAT)寄存器
#define OCP_STAT_1_ADDR 0x01 //过流保护(OCP)状态1 (OCP_STAT_1)寄存器
#define OCP_STAT_2_ADDR 0x02 //过流保护(OCP)状态2 (OCP_STAT_2)寄存器
#define OLD_STAT_1_ADDR 0x04 //开路负载检测(OLD)状态1 (OLD_STAT_1)寄存器
#define OLD_STAT_2_ADDR 0x05 //开路负载检测(OLD)状态2 (OLD_STAT_2)寄存器
#define OP_CTRL_1_ADDR 0x08 // OP_CTRL_1 //1-4 DO 引脚
#define OP_CTRL_2_ADDR 0x09 // OP_CTRL_2 //5-8 DO 引脚
#define CONFIG_CTRL_ADDR 0x07 //配置(CONFIG_CTRL)寄存器
#define OLD_CTRL_1_ADDR 0x1F //开路负载检测(OLD)控制1.
#define OLD_CTRL_2_ADDR 0x20 //开路负载检测(OLD)控制2.
#define OLD_CTRL_3_ADDR 0x21 //开路负载检测(OLD)控制3.
#define OLD_CTRL_4_ADDR 0x22 //开路负载检测(OLD)控制4.
#define OLD_CTRL_5_ADDR 0x23 //开路负载检测(OLD)控制5.
#define OLD_CTRL_6_ADDR 0x24 //开路负载检测(OLD)控制6.
您好!
感谢您的提问。
1.是的、需要 CLR_FLT 清除故障寄存器。 即使故障条件已消除、故障寄存器也会被锁存。
这里是数据表说明- TSD 示例。
2.通过检查 IC STAT,我们可以确定发生哪种类型的故障事件。 (热、过流、旧等)
3.在启用输出(地址0x08和0x09)之前需要禁用 OLD。
或者、如果 nSLEEP=低电平或 VDD 变为低电平、则所有寄存器设置包括旧禁用(0x1F)。 OLD_CTRL 的默认设置为"已启用 OLD "。 供参考。
此致
Shinya Morita
你(们)好, Morita
感谢 您的回答。 我得到了它、beacuse nSLEEP=low、因此 OLD 是使能的。 我的板载硬件有一些不可预期的现象。
现在、我有另一个问题。 nSLEEP 为高电平后,我将寄存器(地址 0x07)设置为0x0B,VM 为24V,启用输出(地址0x08or 0x09),返回数据(OVP)具有 过压 状态,为什么?
如果我尝试设置寄存器(地址 0x07), 我启用输出(地址0x08or 0x09) ,返回数据没有这个过压状态,为什么?
你(们)好, Morita
感谢 您的回答。 我得到了它、beacuse nSLEEP=low、因此 OLD 是使能的。 我的板载硬件有一些不可预期的现象。
现在、我有另一个问题。 nSLEEP 为高电平后,我将寄存器(地址 0x07)设置为0x0B,VM 为24V,启用输出(地址0x08or 0x09),返回数据(OVP)具有 过压 状态,为什么?
如果我再次尝试将寄存器(地址 0x07)设置为0x0B, 我启用输出(地址0x08or 0x09) ,返回数据没有这个过压状态,为什么?
你(们)好,Morita
感谢您的回答。 我有两个问题。请帮助我。 谢谢你。
我知道 OVP 故障设置是21V,所以 我将寄存器(地址0x07)设置为0x0B ,请看 图片,然后我启用输出(地址0x08或0x09),返回数据(OVP)具有 过压 状态,为什么?
但是当我 再次将该寄存器(地址0x07)设置为0x0B 时, 那么我启用输出(地址0x08或0x09),返回数据(OVP)没有 这个过压状态 ,为什么?
SDO 数据中的 OT 位 是什么意思? 位 OT 是否代表 IC 状态下的 OTSD 和 OTW? 也就是说、当 OT 位为1时 、它显示芯片具有 OTW 或 OTSD、我需要检查 IC 状态 、检查故障是 OTW 还是 OTSD?
再次感谢你。
你(们)好, Morita
我有第三个问题。 当我读取 IC 状态重制器时,返回数据是 OTW 或 OTSD 设置1,我需要检查发生了哪个通道 OCP? 您可以看到图片、如果 OTW 或 OTSD 为1、则显示 检测到过流、因此我需要检查 OCP_STAT_1 (地址0x01)或 OCP_STAT_2 (0x02)以查找哪个通道是 OCP?
再次感谢您。 祝你一切顺利。
您好、 芯片
感谢您的回答。 我有两个问题。请帮助我。 谢谢你。
我知道 OVP 故障设置是21V,所以 我将寄存器(地址0x07)设置为0x0B ,请看 图片,然后我启用输出(地址0x08或0x09),返回数据(OVP)具有 过压 状态,为什么?
但是当我 再次将该寄存器(地址0x07)设置为0x0B 时, 那么我启用输出(地址0x08或0x09),返回数据(OVP)没有 这个过压状态 ,为什么?
SDO 数据中的 OT 位 是什么意思? 位 OT 是否代表 IC 状态下的 OTSD 和 OTW? 也就是说、当 OT 位为1时 、它显示芯片具有 OTW 或 OTSD、我需要检查 IC 状态 、检查故障是 OTW 还是 OTSD?
再次感谢你。
您好!
1)通常、如果 DRV 检测到 OVP 时设置为33V、则也应检测到 OVP 时设置为21V。
一些调试建议。
-读回 IC 状态(Addre4ss 0x00)。 它可以是更直接的方法来检查故障状态。 这可能不是您的情况、但 MCU/固件可能无法理解 IC_STAT (Bit13-8)、因为它是唯一的格式。
-当大容量电容器太小且电机停止时、通常会发生 OVP。 尝试在 VM 与 GND 之间添加更大的大容量电容器(~200uF)以进行试用。
2) 2)是 OT=1意味着 OTW 或 OTSD。 需要读回0x00 IC 状态以进行识别。
此致
Shinya Morita
您好、Morita、
感谢您的回答。 问题2是可以的,谢谢。
但是,对于答案一,我不明白为什么 DRV 设置为33V,也需要检查21V,?
对于您的建议,SDO 数据中的返回数据与 IC_STAT 相同,对吧? SDO 数据(8-13位)中的返回数据是否 与 IC_STAT (0-6位)不同 ?
您的意思是,任何寄存器( OP_CTRL_1 、 OCP_STAT_2、 OLD_CTRL_2 等 )都可能错过或丢失返回数据中的 Bit13-8,对吧?
我应该读取 IC_STAT 并使用该数据(0-8位) 来显示 DRV 状态、对吧?
最后一个问题,当 DRV 不处于睡眠状态时,我将一些寄存器设置为某个值,但之后,我将 DRV 设置为睡眠模式 , 寄存器(我已设置)将恢复默认值?
当睡眠为低电平时、myMCU 可以 将任何寄存器(例如:地址0x08或0x09)设置 为其他 值? 换句话说,当睡眠为低 电平且 VM 为12V 时,我可以经常将寄存 器设置为其他值,一旦睡眠为高电平,输出(1-8通道)是我设置的最小值 ,而其他寄存器是我设置的最小值,对吧?
谢谢。
你(们)好
感谢您的反馈。 对于1)、 IC_STAT (地址0x00)和 SDO 数据(8-13位)信息应该相同。 但是、您观察到的 OVP 很奇怪。
>>但是,当我 再次将该寄存器(地址0x07)设置为0x0B 时, 那么我启用输出(地址0x08或0x09),返回数据(OVP) 没有这个过压状态 ,为什么?
因此、我建议读取 IC_STAT (地址0x00)以进行双确认。
当 nSLEEP 为低电平时、SPI 接口被禁用、所有寄存器恢复为默认值。
和 tWAKE 时间(200us)存在。 在 nSLEEP L->H 之后、需要等待200us 才能使 SPI 就绪
此致
Shinya Morita