Loading
Once the engine runs, IGNIS decides how hard to load it as a generator. The loading always follows the generation demand and applies it 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 battery limits come from the battery module — the charging current limiter and the battery voltage 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.
The battery module can take over the primary regulation: set the voltage limiter (/battery/ubmax) to the desired system voltage and pair the generator with a small DC battery or a supercapacitor to stabilize the bus. The demand then regulates itself — when the host system draws power, the bus voltage sags and the limiter releases more generation; when the draw stops, the voltage rises and the limiter winds the generation back down toward idle.
The result is a genset that dynamically follows the power draw of the host system and behaves as a standalone, regulated DC voltage source — no active cmd management by the host is required.
Loading behavior
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.
The loading curve
Between the demand and the motor command sits a configurable loading curve — an 11-point table mapping demand 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 (the default is a straight line). A low-pass filter (gen_cmd_k) smooths the command against demand steps.
In the current loading mode (gen_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.
Parameters (/loading)
load_table
The loading curve: 11 equidistant points, demand 0–100 % → loading command 0–100 %, linear interpolation.
gen_cmd_k [1/ms]
Low-pass filter constant of the loading command. The default 0.01 corresponds to a time constant of roughly 100 ms.
gen_cmd_mode
Drive mode used for the generator loading:
8— current loading; suitable for four-stroke engines with a governor (default)4— voltage loading; suitable for two-stroke engines
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.