In my long term 350A peak 72V DC brushed motor controller project, I've been playing around with some way of calculating the necessary power input capacitance, at least to have an initial estimate. So I came up with a "method" and would like to ear your opinions on this.
Late note: The scenario assumed is that of a stalled, very low inductance/resistance motor.
I start by setting up 2 main questions:
1) How much capacitance?
2) At what maximum ESR?
For 1) I take the energy stored at the wiring inductance and postulate that the capacitance must be able to store at least the same amount of energy for a defined maximum raise of voltage at the capacitance (that is, at the controller's power input). I decided that a variation of 4V maximum would be acceptable. There's no special reason for this value unless that it is small enough to keep things under control but also big enough to allow some relaxation of requirements. The energy stored in an inductor is EL(i) = 1/2 x L x i^2 and the capacitor one is EC(v) = 1/2 x C x v^2 . The energy the capacitor must absorb from the inductor is what can be contained in a 4V or less variation. Therefore we have EL(350A) <= EC(72V + 4V) - EC(72V) {NOTE: should have used the minimum battery voltage, see posts below}. I assumed the capacitor starts from the battery voltage (Vbat), which I believe to be an acceptable assumption to start with, since although the capacitor is charged 4V above Vbat, it will strongly discharge when the controller turns the power switches ON on the next cycle.
We have all data except the wiring inductance. For that I assumed a worst case scenario of having 2m length of AWG4 wire, and used well-known approximate formulas (checked with other sources), obtaining 2.64uH (and about 1.7mOhm resistance). To play on the safe side, I decided to use 5uH inductance as the value to work with. Now I have all data for the calculation to find out the value of C:
1/2 x 5uH x 350^2 <= 1/2 x C x (72V + 4V)^2 - 1/2 x C x (72V)^2 <=>
C >= 1,035mF
Now for 2), I need to see that once the power switches turn off on the controller at 350A current, the wiring inductance wants to keep pushing 350A somewhere. This somewhere is mainly the capacitance, and its ESR must allow 350A in with a maximum 4V voltage drop. I assumed the capacitor was at Vbat when it starts to be charged by the wiring inductance. So, we have the "ideal" capacitor with Vbat on one side of the ESR and 350A being pushed from the other side of the ESR; applying Ohm's Law,
ESR x 350A <= 4V
ESR <= 11.4mOhm
I then put this through a SPICE simulation using a current source with a sawtooth waveform, rising linearly in 10us to 350A (late note: that's a 2uH winding inductance motor, ouch!), then dropping to 0A in 250ns and repeat within 100us (~10KHz PWM), trying to simulate that there's an inductor (motor) being driven.
I had to either increase the capacitance to 2mF or decrease ESR to 9mOhm for the ripple to be within the target design of 4V maximum (with the calculated values I got 5.5V maximum). I guess this difference should be expected since I calculated both parameters as if they didn't influence one another (ESR slows down charging of capacitor).
After some simulations on SPICE I also concluded that the capacitance should be made much higher because of... resonance. If the switching frequency is low, like in the 5KHz, we start seeing the wiring inductance resonating with the capacitance and the inductor starts "dumping" current back at the battery! So here's another formula, the resonance frequency of a series LC circuit: Fr = 1 / (2 x pi x SQRT(L x C)) . For the values I calculated, the frequency is 2.25KHz. Increasing capacitance to 10mF we lower the resonant frequency to 711Hz, a much safer place when PWMing at 5KHz .
This is interesting because I know some controllers will do something like 1.5KHz PWM frequency at low speed (reduce power dissipation), so they've probably went through this problem.
Besides this I will still need to consider capacitor ripple current and associated heat dissipation.
So what do you think of this analysis?
Note1: 72V is actually already a conservative value, the maximum Vbat the controller will see in my design is ~66V, I got 72V adding 10% K factor
Note2: SPICE file (generated from LTspice):
Late note: The scenario assumed is that of a stalled, very low inductance/resistance motor.
I start by setting up 2 main questions:
1) How much capacitance?
2) At what maximum ESR?
For 1) I take the energy stored at the wiring inductance and postulate that the capacitance must be able to store at least the same amount of energy for a defined maximum raise of voltage at the capacitance (that is, at the controller's power input). I decided that a variation of 4V maximum would be acceptable. There's no special reason for this value unless that it is small enough to keep things under control but also big enough to allow some relaxation of requirements. The energy stored in an inductor is EL(i) = 1/2 x L x i^2 and the capacitor one is EC(v) = 1/2 x C x v^2 . The energy the capacitor must absorb from the inductor is what can be contained in a 4V or less variation. Therefore we have EL(350A) <= EC(72V + 4V) - EC(72V) {NOTE: should have used the minimum battery voltage, see posts below}. I assumed the capacitor starts from the battery voltage (Vbat), which I believe to be an acceptable assumption to start with, since although the capacitor is charged 4V above Vbat, it will strongly discharge when the controller turns the power switches ON on the next cycle.
We have all data except the wiring inductance. For that I assumed a worst case scenario of having 2m length of AWG4 wire, and used well-known approximate formulas (checked with other sources), obtaining 2.64uH (and about 1.7mOhm resistance). To play on the safe side, I decided to use 5uH inductance as the value to work with. Now I have all data for the calculation to find out the value of C:
1/2 x 5uH x 350^2 <= 1/2 x C x (72V + 4V)^2 - 1/2 x C x (72V)^2 <=>
C >= 1,035mF
Now for 2), I need to see that once the power switches turn off on the controller at 350A current, the wiring inductance wants to keep pushing 350A somewhere. This somewhere is mainly the capacitance, and its ESR must allow 350A in with a maximum 4V voltage drop. I assumed the capacitor was at Vbat when it starts to be charged by the wiring inductance. So, we have the "ideal" capacitor with Vbat on one side of the ESR and 350A being pushed from the other side of the ESR; applying Ohm's Law,
ESR x 350A <= 4V
ESR <= 11.4mOhm
I then put this through a SPICE simulation using a current source with a sawtooth waveform, rising linearly in 10us to 350A (late note: that's a 2uH winding inductance motor, ouch!), then dropping to 0A in 250ns and repeat within 100us (~10KHz PWM), trying to simulate that there's an inductor (motor) being driven.
I had to either increase the capacitance to 2mF or decrease ESR to 9mOhm for the ripple to be within the target design of 4V maximum (with the calculated values I got 5.5V maximum). I guess this difference should be expected since I calculated both parameters as if they didn't influence one another (ESR slows down charging of capacitor).
After some simulations on SPICE I also concluded that the capacitance should be made much higher because of... resonance. If the switching frequency is low, like in the 5KHz, we start seeing the wiring inductance resonating with the capacitance and the inductor starts "dumping" current back at the battery! So here's another formula, the resonance frequency of a series LC circuit: Fr = 1 / (2 x pi x SQRT(L x C)) . For the values I calculated, the frequency is 2.25KHz. Increasing capacitance to 10mF we lower the resonant frequency to 711Hz, a much safer place when PWMing at 5KHz .
This is interesting because I know some controllers will do something like 1.5KHz PWM frequency at low speed (reduce power dissipation), so they've probably went through this problem.
Besides this I will still need to consider capacitor ripple current and associated heat dissipation.
So what do you think of this analysis?
Note1: 72V is actually already a conservative value, the maximum Vbat the controller will see in my design is ~66V, I got 72V adding 10% K factor
Note2: SPICE file (generated from LTspice):
Code:
L1 N002 in 5µ
C1 N003 0 1.035m
Vbat N001 0 72 Rser=1m
I1 in 0 PULSE(0 350 250n 10u 250n 0 100u 1000)
Resr in N003 11.4m
R2 N001 N002 1.7m
.tran 0 10m 8m
.backanno
.end