Limiting current to DC brushed motor
This question is related to my previous question. I want to drive a brushed DC motor using H-bridge. To power the motor two 18650 cells will be used in series. The issue is that I want to limit the current to 10 A (to prolong the battery life span, lower power dissipation on MOSFETs, etc).
Is there a way to limit the maximum discharge current of the 18650 cells to 10 A? Or is it better to utilize some sort of current sensing that would turn off the MOSFET drivers if the current exceeds 10 A. Or is there different/better/easier solution?
Placing a sense resistor between the lower MOSFETs of the H-brigde and ground, with combination with INA180, the MCU could turn the enable (OD) pin of the MOSFET driver down if the current exceeds 10 A. Is this a viable solution?
1 answer
I don't think there is a simple way to inherently limit the current to 10 A.
The best approach seems to me to add a low side current sensor between the bottom of the H bridge and ground. The main tradeoff is getting enough current resolution without excessive voltage drop or power dissipation.
If you limit the voltage drop to 100 mV, then the H bridge driver chip should still function normally. Note that even at this low drop, the sensor will still dissipate 1 W at 10 A. Maybe that's not so bad when 70 W is being delivered to the motor. If this sensor is a current-sense resistor, it would be (100 mV)/(10 A) = 10 mΩ. You'd probably want to use 4-wire measurement because other parts of the system could easily have a mΩ of resistance here and there.
With the current sensor producing 100 mV full scale, you have to decide whether to amplify the signal or not. If you're using a 12 bit A/D on a micro that runs from 3.3 V, then you get 124 counts full scale, which is basically 7 bits. Maybe that's enough. It's better than 1%, and it doesn't sound like the 10 A limit needs to be that accurate anyway.
This might be a good application for a Hall effect current sensor instead of a resistor. Those can have quite low voltage drop because they sense the magnetic field around a conductor due to the current thru it. At 10 A, these can be viable options. They also inherently isolate the output voltage from whatever is conducting the current.
Either way, you incorporate the current measurement into the lowest level control loop. A simple method is to assert the hardware shutdown of the PWM when the current exceeds the maximum limit. That will definitely limit current, but it limits the peak, not the average. The advantage is that it's totally in hardware once the PWM generator in the microcontroller is set up. In your case, peak might not be so different from average since the load has a significant inductive component. Limiting the peak current might be good enough.
The more fancy method would be to add the current sense as an input to the controller. There might be occasional excursions that go higher, but it should regulate the average current well enough over a few cycles. This is more tricky to implement, but might allow operating right up to the current limit more accurately.
Another advantage of current-feedback into the controller is that it can then control the current outright. That's usually what you want with a motor anyway, not voltage control. The motor torque is proportional to current, so this is a better parameter for the higher level control loop to specify. Limiting current is then just clipping the request from the outer control loop. In this case, you want more than 7 bits of resolution from the current sensor. This is not because of the greater accuracy, but that with a small number of steps the current can appear to jump when it really hasn't. Put another way, the derivative of the current signal will have nasty spikes, and the controller may need to look at that derivative.
0 comment threads