Hello experts ,
I am trying to design a brake chopper control algorithm which dumps excessive energy to a brake resistor when ever the DC bus crosses a certain voltage level.
This is the typical circuit:

The emphasis here is not just to bring down the DC bus , but to make sure that the brake resistor does not over heat and potentially burn out and cause a fire hazard.
Here is what i have so far, let me know your thoughts:
Some potential points:
1.At the moment the rate of change of the duty cycle is fixed, is this going to be a problem or maybe adjust the rate depending upon how far off is the DC bus from the Base value?
2. Second , if the brake resistors energy crosses the maximum allowable limit, does it make sense to force the duty cycle to zero?, In this case the excessive DC bus voltage will be self discharged as per the DC bus capacitor's ESR value.
I am trying to design a brake chopper control algorithm which dumps excessive energy to a brake resistor when ever the DC bus crosses a certain voltage level.
This is the typical circuit:

The emphasis here is not just to bring down the DC bus , but to make sure that the brake resistor does not over heat and potentially burn out and cause a fire hazard.
Here is what i have so far, let me know your thoughts:
C:
#define BRAKE_RES 10 //Brake resistor value(ohm)
#define BRAKE_POWER 2000 //Maximum power the brake resistor can handle(wat)
#define BRAKE_ENERGY_MAX 10000 //Maximum energy of the brake resistor (2000 wats for 5 seconds)(J)
void autoDutyCycleEnergyCalcBrCp(BrCp_Vars_t *pBrCp, MotorParams_t *pMotor)
{
//Activate the chopper only if the DC Bus crosses the Base Value.
if(pMotor->dcbus > pBrCp->a_base_voltage)
{
//Increment the brake counter to keep track of how long the chopper has been active.
//Every increment of the counter means approximately 10ms has passed. (autoDutyCycleEnergyCalcBrCp() runs every 10 ms)
pBrCp->counterBrcp++;
//Increment the brake chopper duty cycle at 20% per second.(or 0.2% per 10 millisecond)
pBrCp->a_duty += 0.002F;
//Calculate the energy of the brake resistor
//Since we don't have the actual brake resistor current, we derive the power and energy from the DC bus.
pBrCp->a_energyCalc = ((pMotor->dcbus * pMotor->dcbus)/BRAKE_RES) * (pBrCp->counterBrcp * 0.01F);
//Make sure that the brake resistor is operating in SOA(Safe operating area)
if(pBrCp->a_energyCalc > BRAKE_ENERGY_MAX)
{
//Stop the motor operation and declare an error
pMotor->ErrCode |= 0x0400;
//Force duty cycle to zero
pBrCp->a_duty = 0;
}
}
else
{
pBrCp->counterBrcp = 0;
pBrCp->a_duty = 0;
pBrCp->a_energyCalc = 0;
}
}
1.At the moment the rate of change of the duty cycle is fixed, is this going to be a problem or maybe adjust the rate depending upon how far off is the DC bus from the Base value?
2. Second , if the brake resistors energy crosses the maximum allowable limit, does it make sense to force the duty cycle to zero?, In this case the excessive DC bus voltage will be self discharged as per the DC bus capacitor's ESR value.
Last edited: