BOOSTXL-DRV8323RS: MOSFET switching speeds and deadtime.

Part Number: BOOSTXL-DRV8323RS
Other Parts Discussed in Thread: DRV8323, CSD88599Q5DC

Tool/software:

Hi, I recently used the BOOSTXL-DRV8323RS to prototype some BLDC motor controller. Then I basically copied the BOOSTXL Board but changed the MOSFETs to higher power MOSFETs. This is the part number: NTMFSC0D9N04CL. I am trying to run Lab02b just to test my custom PCB but the motor draws a lot of current during calibration and calculated the Rs value as basically infinity. I added 4.7 ohm gate resistors but nothing changed. I also tried to change these values: 

//! \brief Defines the PWM deadband falling edge delay count (system clocks)
//!
#define HAL_PWM_DBFED_CNT 54


//! \brief Defines the PWM deadband rising edge delay count (system clocks)
//!
#define HAL_PWM_DBRED_CNT 54.

It seemed like changing these did not do anything. I tried setting them to 9999 and it still exhibited the same behavior and nothing changed. Is there somewhere else I am supposed to change the deadtime? I also tried adding this to main:

#ifdef DRV8323_SPI
// Watch window interface to the 8323 SPI
DRV_SPI_8323_Vars_t gDrvSpi8323Vars;
#endif

#ifdef DRV8323_SPI
// turn on the DRV8323 if present
HAL_enableDrv(halHandle);

// initialize the DRV8323 interface
HAL_setupDrvSpi(halHandle,&gDrvSpi8323Vars);

// Set current sense amplifier gain and VREF_DIV, as in original code
gDrvSpi8323Vars.Ctrl_Reg_06.CSA_GAIN = Gain_20VpV;
gDrvSpi8323Vars.Ctrl_Reg_06.VREF_DIV = 1;


// Set the dead time to 400 ns
gDrvSpi8323Vars.Ctrl_Reg_05.DEAD_TIME = DeadTime_400_ns;

// Set the high-side gate drive peak source current
gDrvSpi8323Vars.Ctrl_Reg_03.IDRIVEP_HS = ISour_HS_1p000_A;

// Set the high-side gate drive peak sink current
gDrvSpi8323Vars.Ctrl_Reg_03.IDRIVEN_HS = ISink_HS_1p250_A;

// Set the low-side gate drive peak source current
gDrvSpi8323Vars.Ctrl_Reg_04.IDRIVEP_LS = ISour_LS_1p000_A;

// Set the low-side gate drive peak sink current
gDrvSpi8323Vars.Ctrl_Reg_04.IDRIVEN_LS = ISink_LS_1p250_A;

// Write the new values to the DRV8323
gDrvSpi8323Vars.WriteCmd = true;
HAL_writeDrvData(halHandle,&gDrvSpi8323Vars);

// Read the values back for verification
gDrvSpi8323Vars.ReadCmd = true;
HAL_readDrvData(halHandle,&gDrvSpi8323Vars);
#endif

I tried setting the currents to lower values than what is shown and still no luck, nothing has changed. Any suggestions would be greatly appreciated. Thanks!

  • Hi Aiden,

    I'm not sure what could be happening, have you tried editing anything in the user.h file? is this what you have listed?

    Regards,

    Yara

  • Hi Yara,

    I just tested the code again on the original BOOSTXL-DRV8323RS board to make sure I did not change anything in the code and it still worked and it worked without any flaws. I tried reducing the PWM frequency to 5kHz, I tried changing the current sense gain. and the res_est_current. All of them did not change anything. I am not sure if my deadtime is taking effect in the code, or if that is even the issue. Any troubleshooting suggestions would be helpful.

    Thanks!

  • Hi Aiden,

    I was asking about the user.h file because from my understanding that has some motor parameters stored in there. I'm not sure if there are any FET parameters stored in there but it would be worth it to take a look since the BOOSTXL-DRV8323RS was intended to be used with the original FETs CSD88599Q5DC and could have those values already populated.

    This could also potentially be a layout related issue. How did you copy the BOOSTXL-DRV8323RS layout if the footprint of the FETs are different?

    also the Qg and Qgd of NTMFSC0D9N04CL are roughly 3 times the value of Qg and Qgd of CSD88599Q5DC meaning you're switching a lot slower (higher switching losses and more heat)

    What is your VM voltage? 

    Regards,

    Yara

  • I created a custom PCB while looking at the BoostXL-DRV8323RS schematic. I effectively just swapped the MOSFETs. I found the issue, I swapped the current sense capacitor and resistor for the LPF when assembling the PCB. It is now all operational. 

    My VM voltage is 24VDC.

    One other thing is that Kp is set by the code to approximately 1.6. This shakes my motor when it is at rest. I have to manually set it to 0.07 to stop the oscillations. Is there a problem in the PID calculations I need to address? This happened on the original BOOSTXL board as well. Also, will I run into issues with the much slower switching speeds when the motor is under load?

    Thanks!

  • Hi Aiden,

    I'm not entirely familiar with existing parameters in the code but I think they almost always need to be tuned according to the motor you are using either manually or I think there are specific "labs" that address specific parameters that end up editing the user.h file. You would just have to ensure the the user.h file is saving correctly and that you use the edited version in your labs rather than the one that is the default.

    In general switching slower can mean more energy loss in the form of heat (typically the FETs) but better EMI performance. Fast switching, less losses, but worse EMI performance. 

    Regards,

    Yara