Brake chopper control algo

Thread Starter

ak52

Joined Oct 15, 2014
230
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:
1686199409699.png
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;
    }
}
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.
 
Last edited:

tsan

Joined Sep 6, 2014
138
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?
Do you know that braking power increases slowly so that it's ok to increase the duty cycle slowly? In industrial applications braking power can increase to high values much faster than in seconds and in those applications starting from low (almost no duty cycle) and increasing the duty cycle slowly would not work. It would be like no brake resistor at all and there would be an overvoltage fault.

I have seen braking resistor control done so that it's turned on when DC voltage is above threshold level and turned off when/if DC voltage level drops below turn off level which was 1-2% lower than turn on level. This way there is maximum braking power available if needed. There is also several on/off cycles during one regenerative braking incident.
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.
Typically there is a bleeder resistors to discharge capacitors but anyway it's good to disable resistor from overheating by setting the duty cycle to zero.

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.
I don't see resistor cooling down time calculation/estimation at all. Energy variable is just set to zero. What if there is a new braking while the resistor is still hot from earlier braking? Do you know from the application that the resistor has always time to cool down before next braking?
Actually braking re-activation can and is likely to happen at the same braking incident. It's possible that DC voltage drops below the threshold for a moment but rises soon back above the threshold and energy calculation starts from zero and the resistor can burn.
 

Thread Starter

ak52

Joined Oct 15, 2014
230
Hi tsan,
Do you know that braking power increases slowly so that it's ok to increase the duty cycle slowly? In industrial applications braking power can increase to high values much faster than in seconds and in those applications starting from low (almost no duty cycle) and increasing the duty cycle slowly would not work. It would be like no brake resistor at all and there would be an overvoltage fault.
The braking power can increase fast, i am yet to measure the exact raise time of the DC bus in this case, but I choose a very slow ramp rate arbitrarily . Ultimately it will be a fast duty cycle change.

I don't see resistor cooling down time calculation/estimation at all. Energy variable is just set to zero. What if there is a new braking while the resistor is still hot from earlier braking? Do you know from the application that the resistor has always time to cool down before next braking?
Actually braking re-activation can and is likely to happen at the same braking incident. It's possible that DC voltage drops below the threshold for a moment but rises soon back above the threshold and energy calculation starts from zero and the resistor can burn.
This is a good point, I did not think about this at all. I do have an NTC which measure the brake resistor's temperature , but that is only used as an over-temperature monitor event, meaning if the temperature crosses a certain threshold, all operations are stopped.
How would you go about estimating the cool down time?
Maybe:
coolDownTime = (resistance * temperature rise) / (heatCapacity * energyDissipated) ?
 

tsan

Joined Sep 6, 2014
138
It would be good to have a coarse estimation of the resistor temperature which requires a model where temperature rises during braking and decreases when there is no braking. Time constants can be much different (like 10 times or more) between braking and cooling. Calculation or modelling method depends on cooling method but it could be a ramp but at least with natural cooling perhaps a first order model gives sufficient results.

Benefit of temperature estimation is that it works with different braking sequences. There can be several repeated braking events made with a lower power and the model would show that there is still braking capacity left. Fixed cooling time could block braking for unnecessary long time. Unfortunately, I don't know how to actual implement the model but I would have quite big margin between the model and real temperature in order to use a basic model.

Perhaps existing NTC measurent can be used also for braking control. Temperature model is often used when there is no measurement or there is just a bimetallic switch as a back to avoid burning the resistor.
 
Top