DRV8301 GVDD低压保护

Other Parts Discussed in Thread: DRV8301, CSD19535KTT

调试DRV8301时,启动电机时#fault拉低,芯片保护,经查GVDD管脚电压低,小于3V,请问是什么问题

  • GVDD电容接了多大的
  • GVDD电容是2.2uF,CP1和CP2的电容是22nF,检查后发现芯片损坏了,EN_GATE使能后,发热很厉害。更换芯片后可以正常工作,电机急加速时又容易出现GVDD低压保护的现象。是否需要在GH、SH和BST加保护呢

  • 看一下输出的电路图?另外看一下输出波形。

  • 下面是一路的输出电路、上下桥波形,谢!

    输出电路

    上桥波形

    下桥波形

  • 电流检测电阻用0.5mohm,你是要驱动多大的电流?

    CSD19535KTT Qgate只有75nC,门极电阻取太小了吧。

    上下管波形为什么驱动频率都不一样?你这样的上下管波形是会产生shoot through逻辑的,是怎么搞出来的?
    而且上管电压那么低,Bootstrap完全没有升压上去啊。
  • 需要驱动50A的电流,门极电阻取多大合适呢?
  • 门极电阻已经增大到了33欧姆,还是出现上面的问题
  • 测量了下BST_A和SH_A间的电压,是11.2V,波形是方波,这个正常吗
  • 你的问题应该不只是门极电阻的问题。
  • 贴出来看一下。那你上下管频率不同是什么问题?
  • Cbst波形,和对应的下桥波形是反向的

    对应的下桥波形

  • 上下管频率是相同的,可能是脉宽太窄,显示不出来
  • 检查损坏的芯片,发现上桥某一相BST管脚对地电阻变得很小,在20-100欧姆之间,造成芯片发热及保护,请问这是什么原因造成的。
  • BST与SH之间约GVDD-DIODE的电压。
  • 反向是对的。可是你这也不符合3相驱动时序呀。
  • 这是启动时序,因为现在接上电机就容易损坏芯片,所以上面的波形是电机没有连接时的
  • 驱动的是无刷电机,因此下桥没有斩波,是否和此有关。另外测到,如果下桥较长时间为低,则Cbst的电压会很低,也就2-3V。
  • 这是相关的程序
    /* Convert "Period" (Q15) modulation function to Q0 */\
    Tmp = (int32)v.PeriodMax*(int32)v.MfuncPeriod; /* Q15 = Q0xQ15 */\
    Period = (int16)(Tmp>>15); /* Q15 -> Q0 (Period) */\
    /* */\
    /* Check PwmActive setting */\
    if (v.PwmActive==1) /* PWM active high */\
    GPR0_BLDC_PWM = 0x7FFF - v.DutyFunc; /* */\
    /* */\
    else if (v.PwmActive==0) /* PWM active low */\
    GPR0_BLDC_PWM = v.DutyFunc; /* */\
    /* */\
    /* Convert "DutyFunc" or "GPR0_BLDC_PWM" (Q15) duty modulation function to Q0 */\
    Tmp = (int32)Period*(int32)GPR0_BLDC_PWM; /* Q15 = Q0xQ15 */\
    /* */\
    /* State s1: current flows to motor windings from phase A->B, de-energized phase = C */\
    if (v.CmtnPointer==0) /* */\
    { /* */\
    EPwm1Regs.AQCSFRC.bit.CSFA = 0; /* Forcing disabledd on output A of EPWM1 */\
    EPwm1Regs.AQCTLA.bit.CAU = 2; /* Set high when CTR = CMPA on UP-count */\
    EPwm1Regs.AQCTLA.bit.ZRO = 1; /* Set low when CTR = Zero */\
    EPwm1Regs.CMPA.half.CMPA = (int16)(Tmp>>15); /* PWM signal on output A of EPWM1 (Q15 -> Q0) */\
    EPwm1Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM1 */\
    /* */\
    EPwm2Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM2 */\
    EPwm2Regs.AQCSFRC.bit.CSFB = 2; /* Forcing a continuous High on output B of EPWM2 */\
    /* */\
    EPwm3Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM3 */\
    EPwm3Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM3 */\
    } /* */\
    /* */\
    /* State s2: current flows to motor windings from phase A->C, de-energized phase = B */\
    else if (v.CmtnPointer==1) /* */\
    { /* */\
    EPwm1Regs.AQCSFRC.bit.CSFA = 0; /* Forcing disabledd on output A of EPWM1 */\
    EPwm1Regs.AQCTLA.bit.CAU = 2; /* Set high when CTR = CMPA on UP-count */\
    EPwm1Regs.AQCTLA.bit.ZRO = 1; /* Set low when CTR = Zero */\
    EPwm1Regs.CMPA.half.CMPA = (int16)(Tmp>>15); /* PWM signal on output A of EPWM1 (Q15 -> Q0) */\
    EPwm1Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM1 */\
    /* */\
    EPwm2Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM2 */\
    EPwm2Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM2 */\
    /* */\
    EPwm3Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM3 */\
    EPwm3Regs.AQCSFRC.bit.CSFB = 2; /* Forcing a continuous High on output B of EPWM3 */\
    } /* */\
    /* */\
    /* State s3: current flows to motor windings from phase B->C, de-energized phase = A */\
    else if (v.CmtnPointer==2) /* */\
    { /* */\
    EPwm1Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM1 */\
    EPwm1Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM1 */\
    /* */\
    EPwm2Regs.AQCSFRC.bit.CSFA = 0; /* Forcing disabled on output A of EPWM2 */\
    EPwm2Regs.AQCTLA.bit.CAU = 2; /* Set high when CTR = CMPA on UP-count */\
    EPwm2Regs.AQCTLA.bit.ZRO = 1; /* Set low when CTR = Zero */\
    EPwm2Regs.CMPA.half.CMPA = (int16)(Tmp>>15); /* PWM signal on output A of EPWM2 (Q15 -> Q0) */\
    EPwm2Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM2 */\
    /* */\
    EPwm3Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM3 */\
    EPwm3Regs.AQCSFRC.bit.CSFB = 2; /* Forcing a continuous High on output B of EPWM3 */\
    } /* */\
    /* */\
    /* State s4: current flows to motor windings from phase B->A, de-energized phase = C */\
    else if (v.CmtnPointer==3) /* */\
    { /* */\
    EPwm1Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM1 */\
    EPwm1Regs.AQCSFRC.bit.CSFB = 2; /* Forcing a continuous High on output B of EPWM1 */\
    /* */\
    EPwm2Regs.AQCSFRC.bit.CSFA = 0; /* Forcing disabled on output A of EPWM2 */\
    EPwm2Regs.AQCTLA.bit.CAU = 2; /* Set high when CTR = CMPA on UP-count */\
    EPwm2Regs.AQCTLA.bit.ZRO = 1; /* Set low when CTR = Zero */\
    EPwm2Regs.CMPA.half.CMPA = (int16)(Tmp>>15); /* PWM signal on output A of EPWM2 (Q15 -> Q0) */\
    EPwm2Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM2 */\
    /* */\
    EPwm3Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM3 */\
    EPwm3Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM3 */\
    } /* */\
    /* */\
    /* State s5: current flows to motor windings from phase C->A, de-energized phase = B */\
    else if (v.CmtnPointer==4) /* */\
    { /* */\
    EPwm1Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM1 */\
    EPwm1Regs.AQCSFRC.bit.CSFB = 2; /* Forcing a continuous High on output B of EPWM1 */\
    /* */\
    EPwm2Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM2 */\
    EPwm2Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM2 */\
    /* */\
    EPwm3Regs.AQCSFRC.bit.CSFA = 0; /* Forcing disabled on output A of EPWM3 */\
    EPwm3Regs.AQCTLA.bit.CAU = 2; /* Set high when CTR = CMPA on UP-count */\
    EPwm3Regs.AQCTLA.bit.ZRO = 1; /* Set low when CTR = Zero */\
    EPwm3Regs.CMPA.half.CMPA = (int16)(Tmp>>15); /* PWM signal on output A of EPWM3 (Q15 -> Q0) */\
    EPwm3Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM3 */\
    } /* */\
    /* */\
    /* State s6: current flows to motor windings from phase C->B, de-energized phase = A */\
    else if (v.CmtnPointer==5) /* */\
    { /* */\
    EPwm1Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM1 */\
    EPwm1Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM1 */\
    /* */\
    EPwm2Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM2 */\
    EPwm2Regs.AQCSFRC.bit.CSFB = 2; /* Forcing a continuous High on output B of EPWM2 */\
    /* */\
    EPwm3Regs.AQCSFRC.bit.CSFA = 0; /* Forcing disabled on output A of EPWM3 */\
    EPwm3Regs.AQCTLA.bit.CAU = 2; /* Set high when CTR = CMPA on UP-count */\
    EPwm3Regs.AQCTLA.bit.ZRO = 1; /* Set low when CTR = Zero */\
    EPwm3Regs.CMPA.half.CMPA = (int16)(Tmp>>15); /* PWM signal on output A of EPWM3 (Q15 -> Q0) */\
    EPwm3Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM3 */\
    }
  • 这种Bootstrap电路,必须在下桥开通的时候,给Boost电容充电。是不能用100%占空比的。否则,电容充不上电,GVDD被拉低了。你给下桥一个最小5%的PWM信号看一下。
  • 好的,我试一下,没有其他解决方案吗?是不是有其他原因造成芯片损坏?

  • 一个一个问题来看吧。可能一个解了,别的也就没问题了。
    你其实可以换新的DRV8323RS啊。那个是Charge Pump,就没有这种问题了。
  • 又看了下DRV8301的资料,上面说“The DRV8301 uses bootstrap gate drivers with trickle charge circuitry to support 100% duty cycle.” 是支持100%占空比的

  • Bootstrap支持100%占空比是有条件的。启动前下管先PWM给电容充电。运转中不长期工作在100%。这些是基本。
  • 调整后还是相同的问题,谢谢多次回复,我再查找下其他原因吧

  • 建议再看一下你的驱动时序。