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.
大家好,我有DRV 8301,其电路设计与 数据表参考设计中提供的电路相同。
我没有将22 uh电感器连接到电路,因为它导致微控制器出现高电流问题,因为微控制器的%v连接到电感器的Vcc端。
除电感器被移除外,电路的其余部分相同。 我对DRV8301的所有6个引脚应用了PWM,然后我观察到任何GH_X和GL_X处的PWM输出都不工作。 在调试过程中,我发现GVDD引脚始终具有0V。 nFault针脚低,OCTW高。
PWRGD为低,nFault引脚为低,OCTW为高。 这表示由于GVDD低位状态指示的电压过低而导致停机。 此外,没有MOSFET相关电路连接至DRV8301。
为什么GVDD始终处于低位? 我刚刚将2.2uF连接到GVDD接地。 此外,IC可快速加热至100 C。我不明白为什么会发生这种情况,有什么想法!!
您好,Rick:
感谢您的回复,
是的,PowerPAD已连接到接地。
EN_GATE逻辑值很高,但在EN_GATE高时,我会等待20毫秒。
AVDD = 6.3V
DVDD = 2.7V
GVDD = 0.1伏
没有电机未连接至电路。
我尝试读取SPI寄存器,但没有成功,我认为这是因为SPI块停止响应外部命令时欠压关闭(根据数据表)。
您好,Rick:
我只是手动将接地引脚连接到EN_Buck (DRV8301 IC的引脚55),PWM突然工作。 在将EN_BUCK连接至接地之前,其电压为2.7V。 但正如我接地EN_BUCK PWM和SPI工作正常一样。
我始终设置,
PVDD1 = 24V
PVDD2 = 24V
如果EN_BUCK = 0V (手动连接到接地)
GVDD = 11伏
AVDD = 6.3V
DVDD = 3.3V
。
如果EN_BUCK = 2.2V (左浮动)
GVDD = 0.1伏
AVDD = 6.3V
DVDD = 2.7V
。
问题1:我目前将EN_BUCK保持在0伏,但理想情况下,它的值应该是什么?
问题2:另外,我正在将3相命令写入寄存器值为0x1008的SPI,当我第一次读取它时,我得到0x1008作为返回值,我认为这对于3-PWM模式是正确的。 但是当我尝试再次读取相同的寄存器时,我只得到0x1400作为返回值。 如果发生这种情况,为什么会自动覆盖0x1008?
问题3:有时SPI只返回0x0000或即不返回任何内容,在这种情况下,我使用相同的命令继续阅读,然后尝试2或3次,我就成功了。 为什么SPI通信不可靠?
问题4:即使我不应用PWM和EN_BADH=0V,在DRV8301的GX_X引脚上也默认有3.3V的PWM信号。 当我在INX_X引脚上应用PWM时,我只获得5V的输出噪声非常大的PWM (形状不是矩形,但形状类似于电容器充电),如何将PWM的输出电压提高到8V?
我在Arduino MEGA上使用以下代码,
#include <SPI.h>
Const int HpinA =11;
Const int LpinA =10;
Const int HpinB =9;
Const int LpinB =6;
Const int HpinC =5;
Const int LpinC =3;
Const Int ChipSelectPin =53;
const int EN_gate = 8;
布尔值is3PMWmode = FALSE;
字节Hcheck3PWM = 0x00,Lcheck3PWM = 0x00;
void setup(){
Serial.begin(9600);
PinMode (芯片选择引脚,输出);
PinMode (EN_gate,输出);
DigitalWrite (EN_gate,低);
digitalWrite (低芯片选择引脚);
SPI.begin();
// DRV8301首先与MSB通信,具有低时钟极性,数据在上升沿上移位
// SPI.beginTransaction(SPISettings(400万,MSBFIRST,SPI_MODE1));
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE1);//空闲SPI CLK =0时,为Rx下降自锁
digitalWrite (EN_gate,高);
Delay(20);//启动时间
}
void loop(){
IF (Hcheck3PWM == 0x10 && Lcheck3PWM == 0x08){
is3PMWmode =真;
runPWM();
}
IF (!is3PMWmode){
writeRegister (0x02,0x08);
readRegister (0x02);
延迟(1000);
}
IF (Serial.Available ()){
int rcmd =(int)Serial.Read();
如果(rcmd=0x31){
readRegister (0x02);
}
如果(rcmd=0x30){
writeRegister (0x02,0x08);
}
}
}
无符号int readRegister (字节寄存器){
字节HdataToSend = 0x80,LdataToSend = 0x00,HdataToRead = 0x00,LdataToRead = 0x00;
//位1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// R=1/W=0 |-Raddr--||----------- 数据----------------------- |
// Fault=1/0|-Raddr--||----------- 数据----------------------- |
HdataToSend = HdataToSend |注册<<3;
serial.print("正在发送读取命令:");
serial.print (HdataToSend,hex);Serial.print (");Serial.println (LdataToSend,hex);
digitalWrite (低芯片选择引脚);
SPI.transfer (HdataToSend);
SPI.transfer (LdataToSend);
DigitalWrite (ChipSelectPin,高);
digitalWrite (低芯片选择引脚);
HdataToRead = SPI.transfer (0x00);
LdataToRead = SPI.transfer (0x00);
DigitalWrite (ChipSelectPin,高);
Hcheck3PWM = HdataToRead;
Lcheck3PWM = LdataToRead;
serial.print (HdataToRead,hex);Serial.print (");Serial.println (LdataToRead,hex);
}
void writeRegister (字节寄存器,字节值){
字节HdataToSend = 0x00,LdataToSend = 0x00,HdataToRead = 0x00,LdataToRead = 0x00;
//位1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// R=1/W=0 |-Raddr--||----------- 数据----------------------- |
HdataToSend = HdataToSend |注册<<3;
LdataToSend =值;
serial.print("正在发送写入命令:");
serial.print (HdataToSend,hex);Serial.println (LdataToSend,hex);
digitalWrite (低芯片选择引脚);
SPI.transfer (HdataToSend);
SPI.transfer (LdataToSend);
DigitalWrite (ChipSelectPin,高);
serial.print (HdataToRead,hex);Serial.print (");Serial.println (LdataToRead,hex);
}
void runPWM(){
延迟(1000);
pinMode (HpinA,输出);
PinMode (线夹模式)(LpinA,输出);
pinMode (HpinB,输出);
pinMode (线插槽B,输出);
pinMode (HpinC,输出);
pinMode (LpinC,输出);
类比写入(HpinA,200);
类比书写(LpinA,50);
类比书写(HpinB,100);
类比书写(LpinB,100);
类比书写(HpinC,100);
类比书写(HpinC,100);
}
您好,Rick:
我已经发布了PWM输出的CRO捕获的屏幕截图。 请查看这些捕获并提供可能出错的见解?