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.

DRV8301: DRV8301 GVDD is always LOW

Part Number: DRV8301

Hi, I have DRV 8301 designed with circuitry same as given in reference design of its datasheet.

I have not connected 22 uH inductor to the circuitry as it was causing high current issue for microcontroller as %v from microcontroller was connected to Vcc end of inductor. 

Rest of the circuitry is same except inductor is removed. The I applied PWM to all the 6 pins of DRV8301 then I observed that no PWM out at any GH_X and GL_X is working. While debugging I found that GVDD pin has 0V always. And nFault pin is low and OCTW is high.

And PWRGD is low, nFault pin is low and OCTW is high. This indicates that there is shutdown due to low voltage as GVDD low status indicates the same. Also no MOSFET related circuitry is connected to DRV8301.

Why is GVDD low all the time? I have just connected 2.2uF to GVDD to ground. Also IC gets heated ver quickly to temperature of 100 C. I don't understand why this is happening, Any ideas!!

  • Hi Suraj,

    Since you removed the inductor, can you also set the EN_BUCK to less than 1.2V. This will disable the buck to aid in debugging.

    Do you have the power pad connected to GND?
    Prior to applying the PWM signals:
    Do you have EN_GATE set to a logic high when measuring GVDD?
    What is the voltage at AVDD, GVDD, and DVDD when EN_GATE is set to a logic high?
    Do you have a motor connected? Can you remove the motor for initial debugging?

    Have you read the SPI registers to determine the cause of the fault?
  • Hi Rick,

           Thanks for your reply,

    Yes, powerPAD is connected to ground.

    And EN_GATE is logic high before starting with anything and I wait for 20 msec after EN_GATE is high.

    AVDD = 6.3V

    DVDD = 2.7V

    GVDD = 0.1V

    No motor is not connected to circuitry.

    I tried reading SPI registers but no luck and I believe it is because of undervoltage shutdown as SPI block stops responding to external commands (as per the datasheet).

  • Hi Rick,
    I just manually connected ground pin to EN_BUCK (pin 55 of DRV8301 IC) and PWM is suddenly working. Prior to connecting EN_BUCK to ground its voltage was 2.7V. But just as I ground EN_BUCK PWM and SPI are working fine.
    I have set always,
    PVDD1 = 24V
    PVDD2 = 24V

    and If EN_BUCK = 0V (manually connected to ground)
    GVDD = 11V
    AVDD = 6.3V
    DVDD = 3.3V
    is observed.

    and If EN_BUCK = 2.2V (left floating)
    GVDD = 0.1V
    AVDD = 6.3V
    DVDD = 2.7V
    is observed.

    Q1: I'm keeping EN_BUCK to 0V for now but what should be its value ideally?

    Q2: Also I'm writting 3-phase command to SPI with register value of 0x1008 and when I read it for the first time I get 0x1008 as return value which is I believe correct for 3-pwm mode. But when I try to read same register again then I just get 0x1400 as return value. Why is 0x1008 overwritten automatically if that's what happened?

    Q3: Sometimes SPI just returns 0x0000 or i.e. doesn't return anything and in that case I keep reading with the same command then with tries of 2 or 3 I get success. Why is SPI communication unreliable?

    Q4: Even when I do not apply PWM and EN_BUCK=0V then there is by default a PWM signal of 3.3V at the GX_X pins of DRV8301. When I apply PWM at INX_X pins I get output very noisy PWM (not rectangular in shape but shape like that of capacitor charging) of 5V only, how do I increase this output voltage of PWM to say 8V??

    I'm using following code on 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;
    boolean is3PMWmode = false;
    byte Hcheck3PWM = 0x00,Lcheck3PWM = 0x00;
    void setup() {
    Serial.begin(9600);
    pinMode(chipSelectPin, OUTPUT);
    pinMode(EN_GATE, OUTPUT);
    digitalWrite(EN_GATE, LOW);
    digitalWrite(chipSelectPin, LOW);
    SPI.begin();
    // DRV8301 communicates with MSB first and has low clock polarity and data is shifted on rising edge
    // SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE1));
    SPI.setBitOrder(MSBFIRST);
    SPI.setDataMode(SPI_MODE1); // While Idle SPI CLK = 0, falling Egde latching for Rx
    digitalWrite(EN_GATE, HIGH);
    delay(20); // Start up time
    }

    void loop() {
    if(Hcheck3PWM == 0x10 && Lcheck3PWM == 0x08){
    is3PMWmode = true;
    runPWM();
    }
    if(!is3PMWmode){
    writeRegister(0x02,0x08);
    readRegister(0x02);
    delay(1000);
    }
    if(Serial.available()){
    int rcmd = (int)Serial.read();
    if(rcmd==0x31){
    readRegister(0x02);
    }
    if(rcmd==0x30){
    writeRegister(0x02,0x08);
    }
    }
    }

    unsigned int readRegister(byte Register ) {
    byte HdataToSend = 0x80,LdataToSend = 0x00,HdataToRead = 0x00,LdataToRead = 0x00;
    // bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    // R=1/W=0 |-Raddr--| |-----------Data---------------------|
    // Fault=1/0 |-Raddr--| |-----------Data---------------------|
    HdataToSend = HdataToSend | Register << 3;
    Serial.print("Sending read command: ");
    Serial.print(HdataToSend,HEX);Serial.print(" ");Serial.println(LdataToSend,HEX);
    digitalWrite(chipSelectPin, LOW);
    SPI.transfer(HdataToSend);
    SPI.transfer(LdataToSend);
    digitalWrite(chipSelectPin, HIGH);
    digitalWrite(chipSelectPin, LOW);
    HdataToRead = SPI.transfer(0x00);
    LdataToRead = SPI.transfer(0x00);
    digitalWrite(chipSelectPin, HIGH);
    Hcheck3PWM = HdataToRead;
    Lcheck3PWM = LdataToRead;
    Serial.print(HdataToRead,HEX); Serial.print(" ");Serial.println(LdataToRead,HEX);

    }

    void writeRegister(byte Register, byte Value) {
    byte HdataToSend = 0x00,LdataToSend = 0x00,HdataToRead = 0x00,LdataToRead = 0x00;
    // bit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    // R=1/W=0 |-Raddr--| |-----------Data---------------------|
    HdataToSend = HdataToSend | Register <<3 ;
    LdataToSend = Value;
    Serial.print("Sending write command: ");
    Serial.print(HdataToSend,HEX); Serial.println(LdataToSend,HEX);
    digitalWrite(chipSelectPin, LOW);
    SPI.transfer(HdataToSend);
    SPI.transfer(LdataToSend);
    digitalWrite(chipSelectPin, HIGH);
    Serial.print(HdataToRead,HEX); Serial.print(" ");Serial.println(LdataToRead,HEX);
    }

    void runPWM() {
    delay(1000);

    pinMode(HpinA,OUTPUT);
    pinMode(LpinA,OUTPUT);
    pinMode(HpinB,OUTPUT);
    pinMode(LpinB,OUTPUT);
    pinMode(HpinC,OUTPUT);
    pinMode(LpinC,OUTPUT);

    analogWrite(HpinA,200);
    analogWrite(LpinA,50);
    analogWrite(HpinB,100);
    analogWrite(LpinB,100);
    analogWrite(HpinC,100);
    analogWrite(HpinC,100);

    }

  • Hi Suraj,

    Q1: I'm keeping EN_BUCK to 0V for now but what should be its value ideally?

    Ideally, the EN_BUCK should be floating if the buck is enabled. The 22uH inductor should be connected.

    Q2: Also I'm writting 3-phase command to SPI with register value of 0x1008 and when I read it for the first time I get 0x1008 as return value which is I believe correct for 3-pwm mode. But when I try to read same register again then I just get 0x1400 as return value. Why is 0x1008 overwritten automatically if that's what happened?

    Q3: Sometimes SPI just returns 0x0000 or i.e. doesn't return anything and in that case I keep reading with the same command then with tries of 2 or 3 I get success. Why is SPI communication unreliable?

    The SPI transactions should be reliable. Noise could be affecting the operation. Please provide scope captures of the SPI transactions with all 4 signals.

    Q4: Even when I do not apply PWM and EN_BUCK=0V then there is by default a PWM signal of 3.3V at the GX_X pins of DRV8301. When I apply PWM at INX_X pins I get output very noisy PWM (not rectangular in shape but shape like that of capacitor charging) of 5V only, how do I increase this output voltage of PWM to say 8V??

    Can you provide a scope capture of the GX_x outputs with and without a PWM?
  • Hi Rick,

    Upper half shows actual signal and lower half shows zoom in signal,

    Without PWM input,

      First signal is input at INH_A

     Second signal is output at GH_A

                 

    With PWM

  • Hi Rick,

                  I have posted screen shot of CRO captures of the PWM outputs. Please review those captures and provide insight on what is possibly going wrong?