I'm trying to sum up all the ingredients for motor control power electronics:
High Inrush current circuit – The short circuit and starting current rating of the DC motor is 7 times higher than the steady state operating state.
Current Sensing circuit - Active current control/feedback is needed as torque (~current) is the only right control parameter.
Current limiting circuit
Protection circuit from transient/spike from power supply
Overheating protection/Thermal shutdown
Overvoltage Clamping
Overvoltage and undervoltage shutdown
Better heat dissipation IC & Board layout
Back EMF protection circuit
Reverse current protection – Charge builds up can cause damage back to the circuit by a reverse current surge when switch is closed. The electrical energy stored in the windings that have inductance in the DC motor. Flyback diode is a solution that dissipate the stored charge.
PWM Interface - Use a PWM, measure current, feedback the PWM with a PI controller from the current measurement
I have covered it all, unless I've missed anything.
You are maybe overcomplicating it a bit, just like many IC designs do due to the legacy of inefficient / fundamentally wrong solutions.
You just need the current to be the controlled parameter; this is easy to implement because the huge motor inductance means, when you apply a voltage, the current starts rising slowly, when you apply ground level (i.e., short the motor), current start decaying slowly. So just measure the current and turn on and off. This way,
* there is never any inrush
* there is never "overcurrent event" (or you can say it's there every cycle, normal part of the operation)
* current "limiting" becomes a poor choice of words. It's the primary control.
Power supply transients rarely are an issue with the usual supplies (batteries, mains, etc.), because you tend to use quite a bit of DC link capacitance.
Thermal shutdown is good to have against hot environments but it can be slow and inaccurate, like a MCU's own internal temperature sensor. This is because you can do thermal analysis from Tj through Tc through thermal interface material to the final heatsinking and work back to calculate max Tj in certain max Tambient. Or you can just oversize heatsinking and do lab testing. Usually high efficiency is the target to ease the thermal design. This is fairly easy because the large motor inductance (again) allows slow PWM such as 10kHz, which again allows low switching losses, which allows you to use MOSFETs with lower Rds_on despite them having larger Qg.
My motor controllers consist of these fundamental parts
* DC link capacitance, a combination of low-ESL (i.e. small; place them close to the loop) low-ESR parts, for low voltage stuff that is 0805 MLCCs; and larger higher-ESR electrolytics
* Power MOSFETs - 2 for unidirectional brushed DC, 4 for bidirectional brushed DC, 6 for 3-phase AC like BLDC
* MOSFET gate driver - usually for low voltage medium power just a half bridge bootstrap driver IC. For higher voltage/power, isolated gate drivers with isolated power supplies.
* Current sense, usually a low-side shunt resistor, often in a 2512 or 1206 package with Kelvin sensing under the pads, going to a current sense amplifier IC, usually something like 50x gain. In larger drivers, possibly an off-the-shelf hall sensor unit.
* DC link voltage measurement; basically a resistor divider into ADC. This way you can shut down (hi-Z) the bridge if regeneration is causing excessive rise of the DC link.
* Microcontroller; current sense to ADC and/or internal analog comparator. Gate driver driven from a timer PWM output pin.
* Some software. With brushed DC this is all less than 100 lines of code. The classic solution is a PI controller, curr_err = curr_setpoint - curr_meas; curr_err_cumul += curr_err; pwm_output = p_term * curr_err + i_term * curr_err_cumul; And of course, because your p_term and i_term are not Perfectly Tuned^tm, if(curr_meas > MAX_CURR) safety_shutdown();
Now one way to deal with the issue of motor being driven with external forces to higher speed than the supply voltage could, is just to increase maximum allowed supply voltage, i.e., rate the FETs and capacitors for that max back-EMF voltage. This lets the motor freewheel, no energy needs to be dissipated. Series diode can be used to prevent that high voltage from messing up the supply side, but that prevents regen, too. Note that you have had to oversize MOSFET voltage ratings already due to
ringing present while switching fast; but as the DC link voltage rises, you stop switching, there is no ringing, and you can then utilize this new margin. I think this is the way to go for slight overspeeds.
Other options include isolating the motor with a large contactor/relay capable of handling that voltage and current, or dissipating the power somewhere causing the motor to generate and act as a mechanical load. The last one is good if you know for sure that the external mechanical driver can cause high RPM but doesn't have much of torque in it sustaining the high RPM if you add some load. For an EV going downhill, this isn't an option, the dissipative braking clamp would become huge and expensive.
Note that all of the solutions have some point of failure, enough RPM finally generates high enough voltage (with ability to supply a lot of current) that some part in the system breaks. So how fast is that external force really going to turn the motor, in worst case, and how much mechanical energy there is backed up?