Fluxopt

FLUXOPT #

Brief #

fluxopt reduces the flux of an induction motor at light load (acim_foc) to cut the copper loss. conf/template/acim_foc.txt loads it between the field weakening and the field oriented control with fluxopt0.torque = pid0.torque_cmd, fluxopt0.scale_in = acim_fw0.scale, fluxopt0.id_n = acim_foc0.id_n, fluxopt0.lmr = acim_flux0.lmr_act, fluxopt0.polecount = conf0.polecount and acim_foc0.scale = fluxopt0.scale. It is off there (min 1); fluxopt0.min = 0.5 in a config turns it on.

Component Explanation #

All work is done in rt.

  1. Flux for a torque:
  • With k = 1.5 * polecount * lmr the torque is T = k * id * iq. The copper loss for a torque is lowest with id = iq, i.e. id = sqrt(abs(T) / k).
  • Target scale: sqrt(abs(torque) / k) / id_n, clamped to MAX(min, 0.05) .. scale_in.
  • With min >= 1, k <= 0 or id_n <= 0 the target is scale_in (off).
  1. Rise and fall:
  • Rising flux follows the torque at once (the rotor flux lags by tr anyway).
  • Falling flux is low passed at fall_hz (0 = at once), so a pause between cuts does not demagnetize the motor.
  • scale never exceeds scale_in, so field weakening always wins.
  1. Results (spindle bench, 12 Oct): idle copper loss 111 W down to 28 W. Start torque 9.8 Nm instead of 13.9 Nm until the flux is back.

Lower flux at idle means less torque on a sudden load until the rotor flux has built up again (tr).

Pins #

NameDescription
torqueinput, Torque command (Nm), pid0.torque_cmd
scale_ininput, Field weakening scale, upper limit of scale (default 1), acim_fw0.scale
scaleoutput, Flux scale, to acim_foc0.scale
minparameter, Lowest flux scale, 1 = off (default 1, at least 0.05)
id_ninput, Rated magnetizing current (A), acim_foc0.id_n
lmrinput, Magnetizing inductance lmr (H), acim_flux0.lmr_act
polecountinput, Pole pairs, conf0.polecount
fall_hzparameter, Low pass of falling flux (Hz, default 1, 0 = no filter)

References #

Source: .c File