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 #
| Name | Description |
|---|---|
| en | input, 0 resets scale to 1 |
| duty | input, modulation, hv0.duty |
| duty_setpoint | parameter, duty held in field weakening |
| ki | parameter, regulator gain [1/s], 0 = 2.5 / tr |
| scale_min | parameter, lowest flux fraction |
| vel | input, electrical speed [rad/s], angle0.vel |
| polecount | parameter, pole pairs |
| p_max | parameter, continuous power [W], 0 = no power limit |
| p_boost | input, overload factor on p_max, iit0.cur_boost, below 1 = 1 |
| pwm_volt | input, voltage limit [V peak], hv0.pwm_volt, 0 = no feedforward |
| ls | input, stator inductance l + lmr [H], 0 = l + lmr |
| id_n | input, rated flux current [A], acim_foc0.id_n, 0 = no feedforward |
| l | input, leakage inductance [H], conf0.l, for ls 0 |
| lmr | input, magnetizing inductance [H], acim_flux0.lmr_act, for ls 0 |
| tr | input, rotor time constant [s], acim_flux0.tr_act, for ki 0 |
| scale | output, flux command fraction |
| t_lim | output, torque limit [Nm], 0 = none |
| scale_ff | output, feedforward flux fraction, 1 without feedforward |
| trim | output, regulator factor on scale_ff |
References #
Source: .c File