Acim Fw

ACIM_FW #

Brief #

The acim_fw component is the induction motor’s field weakening: it lowers the flux command (scale, 1 = rated flux) to hold the modulation duty at duty_setpoint, and gives a constant power torque limit t_lim.

This is acim_ttc’s regulator on its own. duty unlinked reads 0, so scale sits at 1 and there is no field weakening, which is stmbl’s default; linking acim_fw0.duty = hv0.duty is the machine builder’s choice.

t_lim = p_max * p_boost / mechanical speed. p_max is the motor’s continuous (S1) power; p_boost (iit0.cur_boost in the acim_foc template) lets it the same overload the thermal model lets the current, so field weakening uses the S2 headroom and iit0 limits how long (spindle: 2200 W * 1.19 = 2617 W).

Feedforward (optional) #

With pwm_volt (hv0.pwm_volt, live from the dc link), ls (conf0.l + lmr, the stator inductance) and id_n all set, the flux target comes straight from the voltage limit,

scale_ff = duty_setpoint * pwm_volt / (|vel| * ls * id_n)

(constant back emf above the corner, nothing motor specific), and the duty regulator only trims it: scale = scale_ff * trim, trim 0.5 .. 1.2. trim stops rising while scale is at 1, so it does not wind up below the corner. Any of the three at 0 is the plain regulator above (for ls, only when l or lmr is 0 too). ls 0 takes l + lmr, as the acim_foc template links them.

ki 0 (default) = 2.5 / tr (acim_flux0.tr_act): the stator voltage follows the flux command through the rotor flux lag tr, so integral gain ki on that lag rings with damping 1 / (2 sqrt(ki tr)); 2.5 / tr gives about 0.3 (spindle: 28; 150 limit cycled, 30 was clean). 50 without tr. Do not slow ki below that: ki 5 leaves the flux low for seconds after an acceleration (spindle). vel_bw 74 is clean at the base speed edge.

Top speed: above the corner the flux goes as 1/speed, so scale_min (0.1) allows about 10 times the corner speed. Torque falls as p_max * p_boost / speed, and faster near the leakage voltage limit.

Pins #

NameDescription
eninput, 0 resets scale to 1
dutyinput, modulation, hv0.duty
duty_setpointparameter, duty held in field weakening
kiparameter, regulator gain [1/s], 0 = 2.5 / tr
scale_minparameter, lowest flux fraction
velinput, electrical speed [rad/s], angle0.vel
polecountparameter, pole pairs
p_maxparameter, continuous power [W], 0 = no power limit
p_boostinput, overload factor on p_max, iit0.cur_boost, below 1 = 1
pwm_voltinput, voltage limit [V peak], hv0.pwm_volt, 0 = no feedforward
lsinput, stator inductance l + lmr [H], 0 = l + lmr
id_ninput, rated flux current [A], acim_foc0.id_n, 0 = no feedforward
linput, leakage inductance [H], conf0.l, for ls 0
lmrinput, magnetizing inductance [H], acim_flux0.lmr_act, for ls 0
trinput, rotor time constant [s], acim_flux0.tr_act, for ki 0
scaleoutput, flux command fraction
t_limoutput, torque limit [Nm], 0 = none
scale_ffoutput, feedforward flux fraction, 1 without feedforward
trimoutput, regulator factor on scale_ff

References #

Source: .c File