Loading
Once the engine runs, IGNIS decides how hard to load it as a generator: the ICE and the generator must settle on a stable operating point that fulfills the generation demand. Who closes that load coupling — the ICE governor, the SGCU, or a load line — is selectable, and the load is always applied gradually, so the engine is never load-stepped.
The generation demand
The demand (0–100 %) is the combination of everything that limits the generation, evaluated continuously:
demand = min( host charging limit, battery limits )
- The host charging limit is the
cmdfield of the CAN control message (100 % when no host is connected). - The DC-side limits come from the DC regulation — the voltage limiter and the current limiter.
The followed demand is visible in the /gen_demand state. During a rampdown and at idle it holds the last nonzero value — the ramp, not the demand collapse, performs the unloading.
Loading sequence
demand > 0: warmup ──▶ ramp up ──▶ generating ──┐
demand = 0: warmup ──▶ idle ◀── ramp down ◀────┘
- Warmup — after the engine starts it runs with no generation load for
warmup_tim. The starter assist stays engaged and catches the engine if it chokes (Starting). - Ramp up — with a nonzero demand, the load rises from zero to the demanded level over
ramp_tim(MODE_RAMPUP), then stays there (MODE_GENERATING). - Idle — with zero demand the engine idles unloaded: the motor freewheels and applies no torque at all (
MODE_IDLE). This is how an ICE is kept running while no power is needed — command start withcmd = 0. - Ramp down — when the demand drops to zero during generation, the load ramps down over
ramp_timat the last demanded level (MODE_RAMPDOWN) and ends in idle. If the demand returns mid-way, the ramp reverses from its current position — no load step in either direction.
The capability reported in the system status — the torque scale the system is ready to sink at the moment — follows this behavior exactly: zero at idle and warmup, rising with the ramp up, descending with the ramp down.
Load coupling
Generating means the ICE and the generator cooperate: the engine produces power, the generator absorbs it, and the pair must settle on a stable operating point — a speed and a torque — that fulfills the generation demand. Something has to balance the engine torque against the braking torque, and the loading paths differ exactly in who closes this loop: the ICE governor, the SGCU itself, or the physics of a load line.
Demand-driven (default)
With a positive load_cmd_k, the demand itself sets the loading level: low-pass filtered against demand steps and mapped through the loading curve. The SGCU dictates one side of the operating point and the ICE supplies the other — in the torque loading mode (8) the SGCU sets the braking torque and the ICE governor holds the speed; in the voltage loading mode (4) the SGCU clamps the speed and the ICE throttle sets the torque (the SGCU acts as the governor). Either way, the loop is closed deterministically by whoever holds the speed.
Typical use: a governed four-stroke genset (mode 8), or a two-stroke held at a fixed working speed by the SGCU (mode 4).
Speed-driven
With a zero or negative load_cmd_k, the loading curve maps the relative engine speed (|rpm| / speed ceiling) to the loading torque: the braking torque rises with the speed along the curve, exactly like a propeller load. Nobody dictates the operating point — it is the intersection of the engine's torque curve with the load line, and the throttle moves it: more throttle, higher speed, more load, until torque balance. A propeller simulation with a shapeable prop curve. The demand no longer sets the level, but it still gates the loading and still feeds the capability: the system-level unloading acts on the ICE throttle following the capability, and the driver-level limiters remain the electrical backstop in each controller.
Typical use: a governor-less engine (typically two-stroke) with the torque loading mode (8) and an ECU throttle following the capability — or a plain hand throttle, with the load line alone defining the load at every speed.
Option — scaled by the demand (negative load_cmd_k): the load line is additionally multiplied by the demand, low-pass filtered with |load_cmd_k| as the constant — the variable pitch of the propeller analogy. The DC limiters keep direct authority over the loading torque even when the host does not follow the capability, typical for a simple charger-style integration. Mind the physics of a governor-less engine, though: reducing the braking torque lets it rev up, so the generated power does not necessarily decrease — prefer the pure load line with a capability-following throttle where possible.
Both ends of the diagram meet again at the shaft: the loading command brakes it (the fast torque balance with the load line), and the capability steers the throttle driving it (the slow system loop). The dashed scaling edge is the negative-load_cmd_k option:
The speed ceiling that normalizes the relative speed is voltage-referenced: with the default /driver/uref = 0 it follows the live bus voltage, so the load line shifts slightly with the battery state (a fuller battery unloads it). Set /driver/uref to the nominal system voltage to pin the load line to fixed RPM.
The loading curve
Between the loading input — the demand, or the relative speed in the speed-driven path — and the motor command sits a configurable loading curve — the f() of the configuration table below: an 11-point table mapping the input 0–100 % to the generator loading command 0–100 %, with linear interpolation. Use it to match the generator loading to the torque characteristics of your engine, or to shape the prop curve of the speed-derived load line (the default is a straight line).
In the demand-driven current loading (load_cmd_mode = 8), keep the first table point at 0 so that a near-zero demand stays effectively unloaded. In the voltage loading mode (4) a nonzero first point is valid and useful: the voltage command clamps the engine speed from the top, so at zero load it sinks no torque until the engine runs up against it. With the speed-derived load line, the low end of the curve is the load at low RPM — keep it near zero up to the engine's idle speed region so a loaded engine can still accelerate from idle (a propeller curve naturally rises steeply toward the top).
Typical configurations
| ICE | Load analogy | load_cmd_k | load_cmd_mode | Load defined by | Loop closed by |
|---|---|---|---|---|---|
| governed | torque sink | positive (default) | 8 | f(filtered demand) | the ICE governor holds the speed |
| free running | speed clamp | positive | 4 | f(filtered demand) | the SGCU clamps the speed |
| free running | propeller simulation | 0 | 8 | f(relative speed) | torque balance on the load line |
| free running | variable-pitch propeller simulation | negative | 8 | f(relative speed) × filtered demand | as above, plus the demand acts as the pitch — it can unload directly |
In every configuration, the ICE must do at least one of the two: follow the capability — reduce the throttle when the reported capability drops, because the torque can no longer be sunk — or guarantee by design that its RPM can never exceed the shaft speed at which the generation becomes uncontrollable (above it the back-EMF outruns the generator's voltage authority and the regeneration physically cannot be limited). An engine that honors neither will sooner or later push the system into the overvoltage protection: the engine is killed and latched on both controllers until the start request is released.
Parameters (/loading)
load_curve
The loading curve: 11 equidistant points, input (demand or relative speed) 0–100 % → loading command 0–100 %, linear interpolation. Drag the points to shape the curve, then write it with the Set button:
load_cmd_k [1/ms]
Low-pass filter constant of the generation demand — and the load-coupling path selector: a positive value filters the demand-driven loading (the default 0.01 corresponds to a time constant of roughly 100 ms), 0 selects the speed-derived load line, a negative value the load line scaled by the demand — the magnitude |load_cmd_k| then filters the demand the same way.
load_cmd_mode
Drive mode used for the generator loading:
8— torque (current) loading — default. For four-stroke engines with a governor (the SGCU defines the torque, the ICE maintains the speed), and for governor-less engines together with the speed-derived load line (the load line defines the torque-vs-speed balance)4— voltage (speed) loading; the SGCU defines the speed, the ICE defines the torque. Do not combine with the speed-derived load line (self-referential)
ramp_tim [ms]
Duration of the loading ramp — both up to the full load and down to idle.
warmup_tim [ms]
No-load warmup after the engine start.