this describes a technique for extending proportional PWM power control of loads with mass, such as motors, pumps, etc down into very small input-power ranges. while "massless" loads (LEDs, etc) will produce proportional output down to zero energy, loads with mass exhibit "stiction" and require a minimum energy input to overcome inertia.
this technique extended useful proportional control down to a few percent of maximum.
this technique does introduce a variable low-frequency component into the load. in my particular application bursts ran from 83 Hz at 20% power, to 10Hz at 5% power. in my application (pumping liquid) this had no inegative effect.
my application is a PWM-driven water pump an an internal combustion engine cooling system that requires proportional pump control. using ordinary PWM the main pump was reliably proportional between 100% and approximately 25%. below approximately 20% the pump became unreliable, and asymetrical: it would reliably slow down past 25%, to something around 10%, but to start pumping from a stopped motor was unusable until power input reached 20% or so.
as input power increases from zero to the threshold, the motor/pump output remains zero, until the stiction/stalled load threshold is crossed, at which point motor/pump output suddenly increases. as power input surpasses the threshold motor/pump output begins to be proportional to power input.
assume that the input power range, I, runs from 0 (no power) to 1 (full power), typically mapped directly to the PWM signal proportional ON time. assume also that E is the lowest PWM value at which the motor begins to operate reliably.
when input power I > E, I simply maps to the usual PWM value. but when I ≤ E a time-proportional burst mode is used.
in burst mode (I ≤ E) power is applied in fixed-width bursts of PWM energy followed by a variable OFF period, O. the fixed-width power burst has width W and a PWM value of 2 × E -- twice the reliable-operation value.
burst mode works because bursts of width W are selected a priori to reliably operate the pump for one small unit of work, in this case, push water. each burst is a packet of work done.
for the case where I == E, right at the threshold, the burst off time, O, is equal to the burst on time, W. since the burst PWM value is 2 × E, the average power applied to the motor is equal to power input I.
my testing did not detect a noticable difference between I=E+1 (one "step" into proportional PWM power) and I=E, in bursts of twice-power/half-time.
the burst mode proportional off time, O, is calculated as
W O= ----------- - W I / E / 2 (a) (b)
I / E is the OFF time proportion, 2 is the PWM burst-energy multiplier. subterm (a) is then the total burst period (sum of on and off times). subterm (b) subtracts the fixed on time leavine O to be burst off time.
for the case where I == E:
12 O= ------------- - 12 .2 / .2 / 2 O= 12 ms burst OFF time
for the case where I=.05 and E=.2:
12 O= -------------- - 12 .05 / .2 / 2 O= 84 mS burst OFF time
as the power input fraction decreases, the burst OFF time increases, and eventually becomes ridiculuously large, and 0% power would cause a divide by zero error. therefore input power values, I, below some threshold (here, 5% power has a burst cycle time of 96 mS) power should be simply cut off.
i determined E and W experimentally. i'd originally just ran the pump on simple PWM, and determined through careful but non-rigorous observation that below approximately 15% power the pump didn't seem to run right; when slewing the motor slower, it ran OK as speed declined, but as power increased from zero/small value, it fairly obviously exhibited stiction and nonlinear burstiness. (the pump is in a PID loop which would become wildly unstable; a change in error term would not cause a proportional change in pump output effect, causing the error term to continue to increase, until motor drive exceeded "E", at which point the pump would run and the loop would overshoot, leading to oscillations at low pump speeds.)
the E threshold also sets the burst power on PWM value. when the pump would not reliably start under load with 15% power applied, it seemed OK at 20%, so that is where i set E. the burst algorithm then applies 2E power, well above the stiction/load threshold. with this burst ON value i tested for the shortest value for W that would reliably do work. 8 milliseconds seemed OK so i increased that 50% to 12 milliseconds.
the bottom line is that E is not particularly critical; probably a fixed 20..25% would work for most pumps. W determines the "graininess" of the resulting bursts; given that W is fixed I values that approach E are rapid and smooth, and as I drops in value, the on pulses spread out. some loads won't tolerate this; pumps pushing water into a mixer don't care.
PS: the math would be better if it were juggled to be multiplications instead of so many divisions.