

A wizard to pre-tune the current and voltage control loops (and some additional parameters) for this alternator.
Steps
Progress is saved on the regulator, so it survives a page reload and shows the same on any device. The badge on the right of each step shows its state: ✓ DONE = finished, ▶ = the step you're on (RUNNING while the wizard is open, RESUME when paused), ○ = not yet run. Tick the steps to run, then press the button below — coupled steps are selected automatically.
Only the ticked steps will run.
Physical Panel Override is on, so the charge rate is set by the switch on data Cable 3 pin 5 — switch on is High, switch off is Low — and these buttons only show which mode that switch has chosen. Turn the override off under Setup → System → Security & Maintenance to set the rate from here.
| RPM | Floor (%) | Onset (%) | Locked | Learn °F | Last seen |
|---|
Pick a pill to focus on one protection. Tune the control loops first (in the Tuning tab, protections off), then adjust these after.
Group 4 (Battery Limit) and Group 5 (Load Dump) both act on measured battery current, and no battery shunt is installed — so their pills and parameters are greyed. They arm themselves the moment a shunt is fitted under Setup → Battery → Measurement Sources.
When measured alternator current exceeds the safe limit for the debounce duration, the trip fires. Set Command Limit to the lowest safe maximum on the alternator side of the system — alternator continuous rating, mechanical belt drive capacity, fuse ratings, and wiring limits. Whichever is lowest. Battery acceptance is handled separately by the Group 4 Battery Charge Current Limit. The trip threshold is automatically 10 A above Command Limit.
Predicts where battery voltage will be a fraction of a second from now: predicted = measured + Prediction Horizon × voltage rise rate. Engages when the prediction exceeds the active charge target by more than the Group 1 Trigger Margin. dvdt EMA TC sets how much the rise rate is smoothed before prediction — larger TC means smoother but laggier. Group 1 Enable (in the Enable section above) turns the whole layer off.
Engages when measured battery voltage exceeds the active charge target by more than the Group 2 Trigger Margin. Group 2 Enable (in the Enable section above) turns the whole layer off. Above this proportional shed sits the Over-Voltage Ladder card: two timed cut tiers that fire only when the filtered voltage stays over their trip lines continuously for their set time to act, then the absolute software and hardware instant cuts.
Watches alternator output current. Two regimes, split at the Strict Over-Current Band below the active voltage target. Near the target — the voltage-limited (CV) phase: engages when the time-averaged current rises above the moving current setpoint by more than the Detection Threshold — the sloped trip line set by Slope and CV base below. Below the band — the current-limited (bulk / CC) phase: the looser Detection Threshold (Bulk) takes over — the same line raised by CC offset and judged against the commanded ceiling instead of the moving setpoint, so normal speed-up ramps toward the ceiling don't false-trip. Both thresholds are bounded by the Threshold Floor / Ceiling (amps); Averaging Time Constant sets how heavily the current is smoothed before each comparison, and Release Hysteresis sets the re-arm point.
Battery Charge Current Limit is a ceiling, not a trip: the commanded alternator current is capped at the limit plus the measured house-load draw, so the battery never sees more than the set amps no matter what the loads are doing. It needs the INA228 battery shunt and is off when set to 0.
Load Dump catches a battery disconnect under charge (a load dump) — FET-disconnect or load-drop events: three tiered thresholds on the rate-of-change of battery current, each firing when its set number of consecutive samples all exceed its threshold. Fewer samples act faster on a single spike; more samples reject noise but wait longer — each tier's effective time to act (samples × the ~5 ms battery-current sampling interval) is shown under its sample count. Unlike the over-current detectors, Load Dump stays armed even when test protections are disabled — only the Group 5 Enable toggle in the Enable section disarms it.
The field drive FET is switched off and the field collapses through the coil's natural time constant. The only knob is the trip debounce above; none of the integrator-bleed actions used by the other protections apply here.
KHard — Response Slope sets how aggressively the current cap is trimmed per volt of overshoot — recomputed from the live overshoot every tick. Shared with Measured OV. AW Bleed Rate continuously drains the voltage integrator while any of the other protections is clamping.
Same KHard — Response Slope cap-trim mechanism as Predictive OV (shared parameter). AW Bleed Rate continuously drains the voltage integrator while the clamp is active.
Trims the current cap by the measured amount of excess each tick — the same cap-trim action the OV groups apply, but driven by alternator-current overshoot rather than voltage. K_bleed — Integrator Bleed Mode additionally drains the voltage integrator when the event fires — 0 means snap to zero (maximum response); > 0 takes a single bite proportional to the amount of excess. AW Bleed Rate also drains continuously while active.
Battery Charge Current Limit has no trip response — it is a ceiling the command simply never exceeds.
Load Dump snaps the voltage integrator to 0 instantly on the rising edge of the trip — hardcoded, no adjustable parameter for the snap itself. AW Bleed Rate drains the integrator continuously while it is active.
After the trip, the regulator enters a ramp-and-lockout — the field stays at 0 until the over-current condition has cleared. The recovery path used by the other protections (Recovery Seed Fraction, Seed Protect Window) is not used here.
When all protections have released, the controller's stored current memory (the voltage-loop integrator) is restored to pre-event value × Recovery Seed Fraction. Seed Protect Window protects the fresh seed from being immediately drained by a brief subsequent event. Fast Setpoint Rise Rate then accelerates the slewed current setpoint back up while battery voltage is comfortably below target, so the alternator crosses its deadband and starts producing current again quickly. Two independent helpers speed the rest of the return — Recovery Refill rebuilds the stored current memory faster in proportion to what is missing, while Recovery Boost is an instant proportional bridge (P-boost) that scales up the loop's immediate corrective push while the bus is below target. Both pace themselves off live voltage error and taper away as the battery reaches target (Load Dump excepted; it re-asserts on its own). Smart Reseed corrects the restored current when the event was caused by a load switching off, and Load Pickup Boost applies the refill's fast rebuild to ordinary load steps outside protection events — both use the battery shunt's measurement.
Test Parameters
Test Results
Rise/fall delays from the most recent Step run. Sine Sweep (Bode) results appear in the test window while that test runs.
Rise Delays (ms)
Fall Delays (ms)
| # | Rise Avg (ms) | Fall Avg (ms) | Rise Trials (ms) | Fall Trials (ms) | Step Amp (A) | Quiet PP (A) | Setup (%) | RPM | Alt Temp (°F) | Bus V | Stage | Abort | Date/Time |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No records — open section to load. | |||||||||||||
Sorted by Rise Average (lower = faster plant = better). Aborted runs sink to end and are dimmed.
Abort column shows Rreason/Pphase — reason 254 = stabilize-phase timeout; others map to the firmware's FieldEventReason enum.
| # | Roll-off (Hz) ↑ | DC gain (A/%) | Worst lag (°) | Wave Amp (%) | Wave Floor (A) | Sweep (Hz) | RPM | Alt Temp (°F) | Bus V | Stage | Date/Time |
|---|---|---|---|---|---|---|---|---|---|---|---|
| No records — open section to load. | |||||||||||
Open-loop plant frequency response, one row per completed Sine Sweep. Sorted by −3 dB roll-off (higher = faster plant = better). Click a row to show that run's full gain/phase curve.
Apply Results
The test measures the field coil's electrical lag (plant delay). The "Set All Filters" button inside the modal writes plant/3 to the alternator-current PID feedback filter and the full plant delay to the voltage filter — see each tooltip below for the reasoning. You can also override any value individually.
plant/3 lets the controller see current dynamics in close to real time without feeding raw sensor noise into Kp/Kd. Separate from the alternator current display filter and from the iExcess detector's own averaging (Group 3). Mostly inert when the Output PID signal source is MA(N) or Raw, but the same EMA is also used unconditionally to seed the CV integrator on the AUTO→CV handoff. Echoed read-only in Current tab → Output Current Controller.
Control Loop
Term Contributions
Field Output
| # | Score ↑ | Kp | Ki | Kd | SDiv | Track | DRamp | Amp | Per | Floor | RPM | Temp°F | Worst | t(s) | BusV | Stage | Date/Time | Notes |
|---|
Score = ISE/s (lower is better). Scored within 5s of each setpoint step, after 2 ring-in cycles. ■ <5 ■ <10 ■ ≥10. Highlighted rows match current PID + wave settings.
| # | Bandwidth (Hz) ↑ | Peak gain | Worst lag (°) | Kp | Ki | Kd | Sweep (Hz) | Amp (A) | Base (A) | Bus V | RPM | RPM min–max | Temp°F | Coh | Clip | Stage | Date/Time |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No records — open section to load. | |||||||||||||||||
Sorted by −3 dB closed-loop bandwidth (higher = the loop follows faster setpoint motion = better). Click a row to show that run's full gain/phase curve. Highlighted row matches current Kp/Ki/Kd.
Shortcut to the damper's status, speed map and episode record →
Voltage Control Loop
| # | Score | ↑Settle | ↑OvV | ↑ISE | ↓Score | ↓Settle | ↓OvV | ↓ISE | ↓US | VKp | VKi | SRR | SFR | AwBl | AwRec | AwSP | RsF | KD | KH | IEx% | IEτ | IKB | LDT2 | LDT1 | LDT3 | WA | WP | KO | CR | OVf | IEf | LDf | HOCf | RPM | Temp | BattV | SOC% | CVT | Stage | Date/Time | P2P (V) | Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No records yet — open section to fetch. | ||||||||||||||||||||||||||||||||||||||||||
Score = (HIGH ISE + LOW re-overshoot ISE + LOW undershoot ISE) ÷ total active time, ×1000. HIGH phase: squared error; overshoot above 25mV dead-band weighted by Overshoot Penalty (K), approach weighted ×1. LOW phase overshoot: squared ISE, only after voltage crosses below target (no descent-from-HIGH penalty). LOW phase undershoot (↓US): squared ISE ×0.15, 1s grace from phase start then ramps to full weight over 10s. Both lower is better. ■ <10 ■ <20 ■ ≥20. Highlighted rows match current VKp/VKi + wave settings. OVf/IEf/LDf/HOCf = protection fire counts during scored phases.
The battery-temperature gain derate is Off, so the commissioned gains run unchanged at every temperature and the coefficient below has no effect. Turn the derate on above to use it.
Thermal Loop Status
Term Contributions
Provokes the over-voltage protection safely at any state of charge: it charges at idle until the battery voltage settles and stops creeping upward (typically 10–45 s), parks the bus at a constant-voltage target it can actually reach (a set headroom below the settled idle voltage, close enough that real charging current keeps flowing), and you snap the throttle to about half max RPM. The response is scored — protection-event count, any hard current-sensor cut, recovery time, and post-recovery stability; overshoot and the recovery dip are reported for context. All protections stay fully active; the firmware ends the run itself. Also the final commissioning wizard step — run it here any time after a tuning change.
Test Parameters
PID Control Architecture
Three-Loop Cascaded Control: Three independent controllers run at different rates and stack on top of each other. The output current loop runs 10 times per second and drives the alternator field duty cycle to chase a current target. The voltage loop also runs 10 times per second during the voltage-hold phases (Absorption and Float) — it computes the current target that holds the battery at the configured voltage. In the current-limited phase (Bulk) the voltage loop stands aside and the system charges at the ceiling. The temperature loop runs once every 5 seconds, and outputs a single thermal penalty in amps that gets subtracted from the RPM Cap Table ceiling before the inner loops see it. The cascade is strict: temperature constrains what current the voltage loop is allowed to ask for; the voltage loop constrains what the output current loop is allowed to chase; the output current loop is the only thing that touches the field. Each layer never reaches past the one below it.
RPM Cap Table: For each engine RPM range, you configure a hard ceiling based on your installation's physical limits — belt load, shaft stress, alternator and battery bank ratings. This ceiling is enforced after the thermal penalty is applied and is never exceeded regardless of thermal state. The ceiling can be entered as either a current limit (Amps mode) or a power limit (kW mode) using the toggle above the table. In Amps mode the configured value is a fixed current ceiling. In kW mode the regulator divides your power limit by live battery voltage on every control tick to derive the amp ceiling — so the mechanical load on the belt and shaft stays constant regardless of voltage sag or rise during charging.
Forecasted Thermal Penalty: The temperature controller acts on the higher of two temperatures: the present filtered reading, and a projected temperature — present temperature plus the measured rate of rise multiplied by the Thermal Lookahead horizon. Projection is what lets the loop pull current down before the alternator actually reaches the limit, while taking the higher of the two means a hot alternator is never given current back just because the temperature trend has flattened. The setpoint is the real damage limit (Alternator Temp Limit) and the output is a penalty in amps: zero means no restriction, higher numbers mean more current pulled away from what the RPM Cap Table would otherwise allow. Because the penalty is relative rather than absolute, it transfers cleanly across RPM and stage changes. The penalty itself is slew-limited so brief temperature noise doesn't cause harsh current swings.
Voltage Loop: A proportional-integral controller (Voltage Loop Kp and Ki) holds battery voltage at target during the voltage-hold phases (Absorption and Float). Its output is an alternator-current target, capped at the RPM Cap Table ceiling (with thermal derating) and, when the Group 4 Battery Charge Current Limit is set, at that limit plus the measured house-load draw — so the battery's share of the output is bounded regardless of what the loads are doing. The current-limited phase (Bulk) commands alternator current the same way. The integrator uses asymmetric gain — it bleeds down fast when voltage runs above target and rises slowly when below, biasing toward safety. A deadbanded derivative term (Voltage Kd) trims current straight out of the command when voltage is climbing quickly, which checks overshoot during the approach to target. Anti-windup freezes upward integration whenever the current ceiling — not voltage — is the binding constraint, so the integrator does not load up while unable to act. The loop gains are set by the commissioning wizard's autotuning rather than tuned by hand (see below), and can be automatically re-scaled with the measured battery temperature to hold the loop's speed and damping constant as the battery's internal resistance changes with temperature.
Three-Stage Charging: The regulator implements a constant-current / constant-voltage / float charging cycle (CC/CV/Float), with an optional Idle mode after Absorption for lithium longevity.
In Bulk, the voltage loop is off and the system charges at the maximum thermally allowed current from the RPM Cap Table. This continues until battery voltage has been held at the Bulk Voltage target continuously for the Bulk Voltage Debounce Time — a debounce that prevents transient voltage spikes from triggering a premature transition.
In Absorption, the voltage loop engages and holds the battery at the Absorption Voltage. The battery itself now dictates how much current it accepts — current tapers naturally as the battery fills. The system exits Absorption when charge current has dropped to or below the Tail Current for the Absorption Completion Time, confirming the battery is genuinely full. If the system is thermally constrained — meaning the thermal penalty is meaningfully active AND current is already near the Tail Current — tail detection is suspended until thermal headroom recovers, preventing a false exit before the battery is truly full. A safety timeout (Absorption Timeout) forces a transition to Float (or Idle, if Use Float is Off) if Tail Current is never reached.
In Float, the voltage loop holds the battery at the lower Float Voltage. After the Minimum Float Time has elapsed, the system monitors for voltage sag or sustained discharge current. If either condition persists for the Rebulk Debounce Time, or if Float Duration expires, Bulk charging restarts — subject to SoC blocking if SoC data is available. If Use Float is Off, the system skips Float entirely and enters Idle after Absorption, charging again only when rebulk criteria are met.
Independent Protection Layers: Several fast-response protections sit outside the three-loop cascade and act on raw sensor readings without filter lag. Fast OV (Groups 1 and 2) caps current immediately when raw battery voltage runs above a margin below the charging target. Load Dump protection (Group 5) caps current when a sustained battery-current rise rate is detected, catching FET disconnect or load drop events. The over-current detector (iExcess, Group 3) caps the current ceiling when measured alternator current overshoots the commanded setpoint — with a strict regime near the voltage target and a looser one in bulk — and collapses the voltage-loop integrator at the same time so it can't immediately re-demand the excess. Its trip threshold is not a single fixed number: it is max(floor, percent·commanded current, ceiling), so the percentage term rides up with the commanded current — tight at low current (catches real over-current sooner) and looser under heavy output (tolerates the larger legitimate ripple that comes with load) — while the floor guards the low-command case and the ceiling caps it. You set those in Protections; the commissioning wizard measures the ripple and plots it against your thresholds so you can check them, but never sets them for you. None of these depend on the control loops being active — they are always armed.
Stability and Recovery: All mode transitions are bumpless — both the output current loop integrator and the voltage loop integrator are seeded to the operating point before the new mode takes over, so transitions never produce a setpoint step. If the temperature sensor goes stale, the temperature loop holds its last penalty value and re-enters smoothly when fresh data returns rather than snapping back. Anti-windup keeps the temperature integrator parked near any tighter non-thermal constraint when thermals are not the binding limit, so the penalty can climb the instant temperature demands it. A hardware-level shutdown path (GPIO4) provides two independent escape hatches: immediate cut for critical conditions (temperature critically over limit, hard fault) and a controlled ramp-then-cut for sustained warning-level conditions. GPIO4 protection remains active regardless of loop state. Any fault that interrupts charging restarts from Bulk when charging resumes, never mid-cycle.
How the Control Loops Are Tuned
Start with commissioning — it does nearly all of this for you. The Commissioning tab runs a guided wizard that measures your specific alternator and battery bank and sets almost every loop and protection parameter automatically. You creep the throttle when it asks and confirm each step; it does the math. On most installs this is the only tuning you ever do — the manual procedure below is for hand-verifying or fine-tuning after the wizard, or for the rare case where you want to override what it found.
The wizard walks nine steps, each writing real settings on Apply:
• Prep — snapshots your current settings and checks preconditions (engine
running, headroom, a valid battery shunt) so a run can be reviewed or reverted.
• Field curve — ramps field duty open-loop and maps duty→output current,
finding the saturation knee.
• Current Control Autotuning — a sine sweep on field duty measures the inner current loop's
plant (time constant and gain) and proposes its PID gains and filter constants (also on the Plant
Delay tab).
• Verify Current Control — a closed-loop sweep with the new inner-loop gains, confirming the
loop is stable before anything downstream trusts it.
• Disturbances — you creep idle→cruise while it records the worst ripple
per RPM range (belt resonance) on both the alternator and battery signals, building the Resonance
& Ripple Map.
• Fault Threshold Autotuning — sets the over-current detector's trip line from
the ripple just measured: the line runs a Safety Margin above the ripple and is drawn against the
measured points so you can confirm it clears them. It writes straight to the Protections settings —
adjust the margin or the individual values by hand if you like.
• Voltage Control Autotuning — commands one bounded current pulse through the tuned inner
loop and measures how battery voltage responds to the current step (the finite-horizon gain K20),
then computes the voltage-loop gains from your chosen response time.
• Keep-Alive Floor & Field Decay — at each of three held speeds (max working
→ mid → idle) it finds the field onset point, filling the per-RPM Keep-Alive (%) column, then
cuts the field once and times the alternator-current drain at that speed; the three drain points fit
the speed-dependent line the over-voltage response's field-drain timing reads.
• Stress Test — charges at idle until the battery voltage settles, parks
the bus at a constant-voltage target it can actually reach, then you snap the throttle to about half
max RPM so the over-voltage protection fires on a reachable setpoint; the protection response and
recovery are graded, with corrective actions offered on a poor result. Writes nothing — a pure
acceptance check.
Every step is advisory — it proposes, and nothing changes until you press Apply. You can re-run a single step, or clear and start over. Progress is stored on the regulator, so it survives a reload and looks the same from any device.
Manual tuning (optional). The output current loop and the voltage loop each also have their own live tuning mode you can drive by hand — Tuning Mode for the inner current loop (Current tab), and the Auto-or-Manual gain selector on the Voltage tab for the voltage loop. Tune them in that order — inner loop first, then voltage — because each layer depends on the one beneath it being stable. The rest of this section covers hand-tuning the inner current loop; the voltage loop has its own dedicated tab with a built-in step test, an Auto mode that reuses the commissioned fit, and live scoring. The temperature loop is tuned offline from logged data (no live step test) — its tab shows the live control plot and the controller parameters.
Three-Phase Process: The goal is to tune the core PID first, then verify it handles the rate limiters gracefully with anti-windup tracking. Tune in bulk stage — absorption and float share the same output current loop, so a well-tuned bulk response carries through automatically.
Phase 1 — Core Loop (Unrestricted):
Set both slew limiters to very high values to effectively disable them:
• Setpoint Rise Rate: 1000 A/s
• Setpoint Fall Rate: 1000 A/s
• Duty Ramp Rate: 1000 %/s
Enable Tuning Mode and watch the step response on the plots. Tune Kp, Ki, and Kd until you get
well-damped step responses with minimal overshoot (10–20%) and fast settling time (2–4 seconds).
Phase 2 — Actuator Slew + Anti-Windup:
Re-enable the actuator slew limiter by setting Duty Ramp Rate to a realistic value (typically
10–30 %/s). Keep setpoint slew limiters high (1000 A/s). Run tuning mode again and watch for
overshoot after transitions. If you see overshoot once the duty ramp catches up, increase
PID Tracking Gain until the overshoot disappears. This is the
back-calculation gain that bleeds the integrator down whenever the duty output is rate-limited.
Phase 3 — Production Verification:
Set Setpoint Rise Rate and Setpoint Fall Rate to your desired production values
(typically 5–20 A/s rise, 20–50 A/s fall). Run tuning mode one final time to verify the loop remains
stable and well-behaved with both rate limiters active.
Tuning Philosophy for Cruising:
Run tests at moderate RPM within your typical cruising range. A slower, well-damped loop (4–6
second settling time) is preferable to a fast loop that causes harsh load transitions. The
independent protection layers (Fast OV, Load Dump, the Group 3 iExcess detectors, GPIO4 hard cut) handle the
unsafe edges — you don't need the loop itself to react instantly. Smooth and stable beats fast and
harsh.
Every installation is different — always verify with a step test in your own setup.
Four independent checkpoints decide what data gets recorded on the Live Data → Diag tab. These are their gates & tuning knobs — pick a pill to see only that checkpoint's settings; a setting shared by two checkpoints shows under both of them.
C1 — Anomaly Detection watches the fast current sensor for rectifier/stator fault signatures. It shares the fast channel and its steady-state admission gates (current drift floor/slope, input-range switching) with C2 — those live in the shared Fast Current Channel section. Its own pieces: the fault alarm, the fault-class and lifetime-anomaly readouts, and the anomaly snapshots in the Waveforms flipbook. Arming ignores engine speed entirely, so it keeps working with a dead tach.
C2 — Resonance & Ripple Map learns the strongest current-ripple tones at every engine speed and load, from the same fast channel as C1. It uses the shared current-drift gates plus two gates of its own: the steady-state RPM margin (a window is discarded when the engine sits on a speed-bin edge) and the minimum tone amplitude. Its results: the map itself, the worst ripple & tone table, and the biggest actionable disturbance.
C3 — Charging System Health grades output amps against the best this machine has ever done at the same operating point. A point is admitted only after every signal — RPM, field duty, voltage, temperature, amps — holds steady. Those admission gates and the curve-fit tuning are the knobs under Gates & Tuning in this section; the resulting health gauge, session plot, and engine-hours trend appear on Live Data → Diag → Alternator.
C4 — Ripple Measurements is one measurement engine with two collectors: the RPM ripple table is filled only by the commissioning game, and the ripple-vs-current line on the Protections plots is filled only by Commissioning Step 6. These gates define what counts as a valid measurement for both. They are deliberately separate from C1/C2’s gates, so tuning them can never loosen fault-detector arming.
Shortcut to the health gauge, session plot and trend →
Per-signal steadiness
Fuel Consumption ℹ️Fuel burn rate at each engine speed. The regulator reads straight between the points you enter, and holds the first and last value flat beyond the ends of the table. Ten points maximum; leave trailing rows at zero to use fewer.
No battery shunt is installed, so every setting that reads battery current is greyed below: Tail Current, zero-current float, Force "Maintain Mode" and the Rebulk Current Threshold. Absorption ends on time alone, and float (if enabled) then holds the float voltage, until a shunt is fitted under Setup → Battery → Measurement Sources.
Float Voltage and Float Duration only apply to the Voltage Float mode selected above. Pick Voltage Float to set them.
Physical Panel Override is on, so Force "Maintain Mode" is set by the switch on data Cable 3 pin 7, and this toggle only shows what that switch has chosen. Turn the override off under Setup → System → Security & Maintenance to set it from here.
Sensor cross-checks that stop charging when the two voltage readings disagree, plus the shared shutdown-timing knobs (fault lockout duration, settle time before the field is cut). The over-voltage cut thresholds — the timed cut tiers, the Alternator Hard Shutdown Voltage, and the Hardware Shutdown Voltage — live together in the Over-Voltage Ladder card under Setup → Alternator → Protections → Detection.
Shortcut to the Over-Voltage Ladder →
State of charge is counted from battery current, and no battery shunt is installed — so this whole card is greyed and no state of charge is reported. Fit a shunt and turn it on under Measurement Sources below.
Battery Shunt Present is Off, so the three rows that calibrate the shunt — Invert Battery Amps, Battery Current Offset and Shunt Resistance — are greyed. Switch it to Yes to set them up.
| Rated | µΩ | mΩ |
|---|---|---|
| 50 mV — Victron / marine | ||
| 100 A | 500 | 0.5 |
| 200 A | 250 | 0.25 |
| 300 A | 167 | 0.167 |
| 400 A | 125 | 0.125 |
| 500 A — BMV-712 | 100 | 0.1 |
| 1000 A | 50 | 0.05 |
| 2000 A | 25 | 0.025 |
| 75 mV — industrial / analog meter | ||
| 50 A | 1500 | 1.5 |
| 100 A | 750 | 0.75 |
| 150 A | 500 | 0.5 |
| 200 A | 375 | 0.375 |
| 300 A | 250 | 0.25 |
| 400 A | 188 | 0.188 |
| 500 A | 150 | 0.15 |
| 600 A | 125 | 0.125 |
| 100 mV | ||
| 100 A | 1000 | 1.0 |
| 200 A | 500 | 0.5 |
| 300 A | 333 | 0.333 |
| 500 A | 200 | 0.2 |
| 1000 A | 100 | 0.1 |
Rebulk: The system always begins in Bulk when charging is enabled. It returns to Bulk from Float or Idle if battery voltage drops below Rebulk Voltage or net discharge current exceeds Rebulk Current Threshold — continuously for Rebulk Debounce Time. The timer resets if the condition clears before the debounce expires. If SoC data is available, it suppresses rebulk when the battery is at or above the block threshold and permits it again when SoC drops to the allow threshold — but SoC alone cannot trigger rebulk; voltage, current, or (in float) timeout criteria must also be met.
Bulk: The system pushes the maximum thermally- (and otherwise-) allowed current from the RPM Cap Table. Bulk ends once battery voltage has remained continuously at or above Bulk Voltage for Bulk Voltage Debounce Time.
Absorption: The voltage loop holds the battery at Absorption Voltage. Current is no longer commanded — the battery dictates how much it accepts and it tapers naturally as the battery fills. Absorption ends when current drops to or below Tail Current continuously for Absorption Completion Time. If the system is thermally constrained (the thermal penalty is meaningfully active and current is already near the tail threshold), tail detection is suspended until thermal headroom recovers — this prevents a false "battery full" exit triggered by the thermal loop pulling current down. If tail current is never reached, a safety exit to float or idle occurs after Absorption Timeout.
Float (if enabled): The system holds the battery gently at Float Voltage. After Minimum Float Time has elapsed, rebulk criteria are evaluated. Float also has a hard ceiling — if Float Duration elapses while in float, the system returns to Bulk regardless of voltage or current. (Idle has no equivalent timeout; only the rebulk conditions can leave it.) If Use Float is OFF, charging stops after Absorption and the system idles until rebulk criteria are met — better for lithium longevity in cycling applications.
Full-charge detection watches battery current fall off, and no battery shunt is installed — so this card is greyed and full charge is never declared. Setup → Battery → Measurement Sources → Battery Shunt Present.
These correct the coulomb count, which needs measured battery current. No battery shunt is installed, so the card is greyed. Setup → Battery → Measurement Sources → Battery Shunt Present.
State-of-charge correction has nothing to correct without a coulomb count, and that needs a battery shunt. None is installed, so the card is greyed. Setup → Battery → Measurement Sources → Battery Shunt Present.
Battery Current Source below is greyed: no battery shunt is installed, so there is no battery-current measurement to choose a source for. Setup → Battery → Measurement Sources → Battery Shunt Present.
Warm one probe by hand to identify it; its reading rises within a few seconds.
| Serial | Temp | Age | Role |
|---|---|---|---|
| No probe data yet | |||
| Day | Irradiance (kWh/m²) ℹ️ Solar energy hitting your location per square meter per day | Predicted (kWh) ℹ️ Expected output based on your panels' rating and performance ratio |
|---|---|---|
| Today | 0.0 | 0.00 |
| Tomorrow | 0.0 | 0.00 |
| Day 2 | 0.0 | 0.00 |
Defer to Solar rests the alternator when the sun is forecasted to make up any charging shortfall in the next few days. The regulator downloads a solar irradiance forecast for your position, converts it to expected panel output using your array's nominal watts and performance ratio, and if the predicted output clears your High Solar Threshold on at least two of the next three days, it stops charging. The goal is to save fuel and alternator wear when it's energy the panels would deliver anyway.
Where your position comes from. Boat GPS (NMEA 2000) first. Your phone's location when the boat GPS goes quiet and the app has location permission. Or a position you type in, which is a sticky override that outranks both until you press "Use automatic GPS". Without a position there is no forecast, and the alert above the table says so.
Where the forecast comes from. The regulator fetches it straight from Open-Meteo, a public weather service. That request carries your latitude and longitude to their servers, and it repeats every few hours while Defer to Solar is on. This is a separate path from Cloud Features — the fetch continues whether Cloud Features is on or off. Turning Defer to Solar off is what stops it. If you would rather your position never leave the boat, leave Defer to Solar off.
When it refreshes. The download needs the field off for about 75 seconds, so the forecast updates while you are not charging — at anchor, or between engine runs. On a long motoring day the numbers above can be hours old; the line under the table tells you exactly how old. "Update Weather Now" forces a fetch on demand.
How it checks itself. Every day the regulator books what the forecast promised, what the panels delivered over VE.Direct, and what the boat consumed (from the battery shunt). With Learn Performance Ratio on, each complete day nudges the ratio toward the real array, so the forecast fits your boat rather than a typical one. With Size Threshold from Consumption on, the bar a day must clear becomes the consumption the last week predicts plus the margin, instead of a fixed number. The ledger and its chart are on Live Data, Weather.
If the forecast goes stale. A forecast the regulator can no longer refresh — no internet, Access Point mode, a run of failed fetches — stops holding the alternator off once it ages past its refresh window. Charging resumes normally, the table is marked invalid, and the pause returns on the next successful fetch.
The Extra temperature probe is off, so these alarms cannot fire. Turn it on under Setup → Temperature → Temperature Sensors, and assign a probe the Extra role.
The Low State of Charge Alarm is greyed: state of charge needs a battery shunt and none is installed. The voltage alarms are unaffected. Setup → Battery → Measurement Sources → Battery Shunt Present.
The High Current Alarm (Battery) is greyed: no battery shunt is installed, so battery current is not measured. The alternator current alarm is unaffected. Setup → Battery → Measurement Sources → Battery Shunt Present.
Nav, engine and battery data in and out over the 250 kbps CAN backbone. That one port is shared: the Victron VE.Can and RV-C charge limits under Battery Charge Limits over CAN below arrive on the same wire, and they are decoded whenever the receive switch here is on or the follow switch there is.
NMEA 0183 has its own protected serial input and its own wires, independent of VE.Direct, so both can be connected at once. Set the speed and signal type to match your talker, then watch the sentence count under Live Data → Integrations to confirm the link before trusting anything it carries.
Reads a Victron battery monitor or MPPT solar charger over the VE.Direct serial port. Live values appear under Live Data → Integrations.
Obeying the charge limits a managed battery, BMS or Victron GX publishes takes two parts. Pick the dialect your battery authority speaks — Victron VE.Can or RV-C — in its own card; a dialect card holds only what belongs to that dialect. Everything else is shared and lives in the Charge-Limit Follow card at the bottom of this group. Only one dialect is decoded and followed at a time.
Listens for the charge voltage and current limits (CVL/CCL) Victron equipment exchanges over its proprietary VE.Can messages — the coordination Victron calls DVCC. The GX device or managed battery must share this regulator's 250 kbps NMEA2000/VE.Can port, and that port has to be listening: turn on Receive NMEA2K Data in the NMEA 2000 card above, or the follow switch below. There is no bank filter here — the first device heard becomes the authority, and its address shows in the status row below.
Everything else this dialect uses is shared with RV-C and lives in the Charge-Limit Follow card below: the follow switch, decoded CVL/CCL and follow state, settling and silence times, the plausibility window, trust reset and raw frame capture.
Listens for the DC Source Status messages an RV-C battery management system broadcasts on the same CAN port, and that port has to be listening: turn on Receive NMEA2K Data in the NMEA 2000 card above, or the follow switch below. RV-C messages carry a bank number, so the instance filter here selects which battery bank is obeyed — the one setting that belongs to this dialect alone.
Everything else this dialect uses is shared with Victron VE.Can and lives in the Charge-Limit Follow card below: the follow switch, decoded CVL/CCL and follow state, settling and silence times, the plausibility window, trust reset and raw frame capture.
Everything here applies to whichever dialect is selected above — Victron VE.Can or RV-C — and the status row shows what that dialect has decoded. Received limits are requests: they can only lower this regulator's own targets, never raise them, and every local protection stays fully in charge.
The trust latch is not set, so there is nothing to reset. This button becomes live if the charge authority sends implausible values and the regulator stops following it.
One wire from a battery management system (BMS) that says charge, or don't — any BMS with a spare relay or a charge-enable output can drive it. The BMS applies 5 to 28 V to the BMS on/off wire (Cable 1, pin 16) and the regulator takes that as permission to charge.
If your BMS or Victron GX also publishes charge limits on the CAN backbone, use Battery Charge Limits over CAN above as well: those limits taper the charge, this wire is a full stop. Both can be connected at once, and the stop wins.
Cloud Features needs an internet connection, and the regulator is running as its own access point. The switch below is greyed until it is joined to a WiFi network with internet.
WiFi Standby keeps the regulator reachable on your boat’s router between engine runs. In access-point mode there is no router to stay joined to, so it is greyed. Join a WiFi network above to use it.
Position, Speed & Course Sources ℹ️Where the regulator gets the boat's position, speed and course. The phone can stand in for a missing NMEA 2000 GPS. The clock has its own separate setting under Setup → System, so you can let the phone set the time without sharing position.
Performance Learning ℹ️Settings for the best-ever boat-speed learning system. The live polar / motoring display is under Live Data → GPS/Travel/Wind.
A reading is only banked when conditions hold steady. Most inputs below come as a pair: a band (how much that value may drift) and a steady time (how long it must stay inside the band before the reading counts). Tighter bands and longer times give fewer but cleaner points.
Motion Events
Alternator Current
0 A ↑— ↓—
Temperature
Field Control
Alt Current Zero Offset (Auto-Learned)
0.00 A
No battery shunt is installed, so battery current, state of charge, time-to-full and the coulomb count cannot be measured and are not shown. The voltage readings below are unaffected. Setup → Battery → Measurement Sources → Battery Shunt Present.
State of Charge
0 % ↑— ↓—
Voltage
Charging Mode
-
Current
Temperature ℹ️The battery temperature the regulator is using and where it comes from: the battery probe, NMEA 2000 battery status, a VE.Direct monitor, or an RV-C source. The source is chosen under Setup → Battery → Battery Temperature. Greyed when the active source has stopped reporting.
Charge/Discharge Time
SOC Gain Factor (Auto-Learned)
1.000
Apparent Wind ℹ️ Wind as measured on the boat (includes boat motion). The needle points to the apparent wind angle off the bow; the two screens read apparent speed and angle.
Wind Trend ℹ️ Direction (left axis) and speed (right axis) over the last hour, so you can see wind shifts and gust trends. Toggle between true and apparent wind. The Beaufort force and gale duration (from the 2-minute sustained true wind) show as a watermark.
Received Battery Data (no data) ℹ️Latest values read from the battery instance set in Setup → Integrations. Shows "stale" when nothing has arrived for 20 seconds and "no data" when nothing has ever arrived - check that Receive NMEA2K Data is on and the instance number matches the sender.
Transmit Status ℹ️Address is the source address this device claimed on the network (-1 means transmit is off or no claim yet). Sent counts messages accepted for transmission; dropped counts messages discarded because the bus would not take them - a steadily climbing dropped count usually means no powered NMEA2000 network is connected. Both reset with Reset Peak Values.
Serial Link (no data) ℹ️Proof the wiring and the port settings are right, independent of what any sentence carries. Sentences counts every message that arrived complete and passed its checksum, whatever its type - if this climbs, the link works. Checksum errors climbing while sentences stays at zero means the speed or the signal type is wrong; both are set under Setup → Integrations → NMEA 0183. Both counts reset with Reset Peak Values.
Heading ℹ️A worked example of decoding one signal off this port - it reads HDT, THS, HDM and HDG sentences. It is shown here only, and is deliberately kept separate from the heading on the Boat tab, which comes from NMEA2000. Nothing on this regulator steers, navigates or charges by it.
Battery Monitor
Solar (Victron MPPT)
Charge Limit Status (off) ℹ️Live decoded limits and the follow state. off = follow disabled (decoded values still shown for verification); waiting = no limit messages heard; settling = values arriving and being vetted; following = limits actively clamping; stale = the authority went silent, so this regulator's own targets resumed; UNTRUSTED = an implausible or flapping value was received and the sender is ignored — control is fully local until the trust latch is reset in Setup → Integrations. Greyed when nothing has arrived for 20 seconds. Before enabling follow, confirm these numbers match what the BMS or GX itself displays.
Today ℹ️Harvest: what the forecast promised for today, frozen the evening before (the number Defer to Solar was acting on overnight), against what the panels have delivered so far over VE.Direct. Consumption: what the last week of history predicted for today against what the boat has drawn so far — alternator plus solar plus battery discharge, minus battery charge, which needs the battery shunt. A dash means the value is not measurable on this install or there is no history yet.
Predicted vs Actual, by Day ℹ️Bars are what happened; the line with points is what was predicted the evening before. Days the regulator was awake under 20 hours are drawn but do not feed the learned ratio or the consumption prediction. A missing bar means that quantity was not measurable that day (no VE.Direct link, no battery shunt); a missing point means there was no forecast or no history to predict from.
Speed ℹ️Best-ever boat speed versus the wind (Sailing) or engine RPM (Motoring), corrected for sea state — how much the boat pitches. Predicts speed through the water, or GPS speed if no log. Curve = learned best; the "now" dot is your current speed — green while it is being recorded into the learned best (a steady run), orange while conditions are still settling. A sustained drop below best = dirty bottom or adverse current.
What it measures. The fastest boat speed achieved for the conditions — apparent wind speed and angle when sailing, engine speed (RPM) when motoring — corrected for sea state (measured as how much the bow pitches) and wind. A sustained shortfall against best may point to a dirty bottom, poor sail trim, or adverse current (if not using STW).
Learned on the device. Steady-state capture runs about 10 times a second; the % of best comparison runs once per second. Instead of averaging nearby records (which reads falsely low at the edge of the conditions sailed so far), it fits the local slope of the best-ever surface through the nearby records and compares the present speed against that fit. The label under the % says what the comparison is based on — MEASURED (a recorded best exists for these conditions), ESTIMATED (interpolated between nearby records), or "learning" / "no reference" when there isn't enough recorded here to grade fairly (no number is shown). Two surfaces are learned independently: a sailing polar and a motoring speed-vs-RPM map.
Reading the plot. The blue curve is the learned best. The moving dot is your current speed for the conditions right now: it turns green once conditions have held steady long enough that the point is being recorded into the best (a steady run), and orange while conditions are still settling and nothing is being recorded yet. The status by the title mirrors this — Settling with a countdown of the seconds left before recording begins, then Settled once it does.
Pruned in the cloud (optional). About every 15 minutes, engine off and system online, new points upload and the cloud prunes redundant interior points back to the envelope, then returns the cleaned set.
Quick View
Fuel Economy vs RPM (this session) ℹ️ Observed naut mi/gal at each RPM, this session only. A point is recorded only after RPM and boat speed hold steady for 40 s (so the boat has reached true steady speed for that throttle), then the next 20 s of economy is averaged in. The peak is your most efficient cruise RPM. Cleared on reboot, on Reset, or when the fuel table is edited.
Most efficient so far: —
Heading & Course
GPS Position —
VMG (Manual Bearing)
Motion
Anchorage Comfort
Sea State Hours (Lifetime) ℹ️Cumulative hours bucketed by Motion Sickness Index and speed (moving = SOG ≥ 1.5 kt). Buckets: Gentle (MSI < 10), Moderate (10–30), Rough (30–70), Extreme (MSI ≥ 70). Logged once per minute.
Passage Comfort
Lifetime Maximums
Events (Current Window) ℹ️The current window is the regulator's fixed data-recording interval (10 minutes). At the end of each window the accumulated statistics are written to the history log and these counters reset to zero. The Events (Lifetime) counters are never reset.
Events (Lifetime)
Raw Accelerometer (g)
Raw Gyroscope (°/s)
Window Stats — Accel (g) ℹ️Min/max/average accumulated over the regulator's fixed data-recording window (10 minutes). Values reset when each window is written to the history log.
Window Stats — Gyro (°/s) ℹ️Min/max/average accumulated over the regulator's fixed data-recording window (10 minutes). Values reset when each window is written to the history log.
Window Stats — Calculated ℹ️Min/max/average accumulated over the regulator's fixed data-recording window (10 minutes). Values reset when each window is written to the history log.
System
Connectivity & Cloud
Signal strength, client disconnects, last cloud upload and Upload Now are greyed: The regulator is running as its own access point, so it has no internet connection and no router to report on. Join it to a WiFi network under Setup → System → WiFi to bring these back.
Memory ℹ️ Updated every 7 seconds. Internal RAM is fast on-chip SRAM shared by the CPU, stacks, and DMA. PSRAM is the external 8 MB SPI RAM used for most heap allocations. Heap fragmentation is an internal-only metric: 0% = fully contiguous, 100% = worst case. High fragmentation with adequate free space can still cause allocation failures for large contiguous buffers.
CPU Load (%) ℹ️ Core 0: WiFi/system tasks, Core 1: main control loop. Per-core CPU load for ESP32-S3 using FreeRTOS runtime stats. Works for SMP with unpinned tasks because idle tasks are core-pinned, but does not provide per-task or per-core attribution of non-idle time; values are estimates, not exact accounting of where each task actually executed.
Session Info
Sensor Bus Health
Accelerometer / IMU
Temperature Sensor Health (DS18B20)
Counts since boot. One read failure on startup is normal. Persistent failures need attention; occasional CRC recoveries are fine.
Per probe
| Serial | Role | OK | Fail |
|---|---|---|---|
| No probe data yet | |||
Bus totals
Function Timing — Worst Case (ms) ℹ️ Worst-case execution time (duration) per function. The 5s column resets every 5 seconds — shows active spikes. The "Worst — last X min / X.X hr" column shows the worst since the most recent "Reset Peak Values" press (or boot, if never pressed) — catches infrequent spikes. Nested calls are included: a flash write inside Read Analog Inputs shows up under that row. Important: because these are durations, a whole-core freeze is charged to whichever function happened to be running when it hit, so the row that spikes is not necessarily the cause. These rows are not gated by field state — to tell whether a spike actually landed during active control, use the gated interval cards lower down (INA228 Read Interval and CV Voltage Loop Firing Interval only count while the field is on).
Inner Current Loop Timing — two separate clocks: how often the current sensor is READ vs how often the control loop FIRES
Voltage Loop Timing — two separate clocks: how often the voltage sensor is READ vs how often the CV loop FIRES
Read Gaps & Telemetry Timing
NVS Full Save ℹ️ The full save writes all session and lifetime totals (charged energy, runtime, fuel, distance, lifetime damage, learned tuning, motion-event counters) to flash in one blocking commit. By design it runs only at the field-off edge (about 5 s after the field cuts), at shutdown, and on capsize/pitchpole events — never while the field is on. The commit freezes the control core for as long as it takes, which is safe precisely because the field is off so there is no overvoltage risk during the stall. Trade-off: if you run continuously for hours and lose power before the next field-off edge, everything accumulated since the last save is lost.
Counted on the regulator across everything that connects to it. "Today" resets at midnight; lifetime totals never reset.
Totals
| Today | Lifetime | |
|---|---|---|
| Screen Time | -- | -- |
| Opens | -- | -- |
| Days Uploaded | — | -- |
Top Pages (Today)
| Page | Opens | Screen Time |
|---|---|---|
| No data yet | ||
Top Buttons (Today)
| Button | Clicks |
|---|---|
| No data yet | |
XREG-010
Copyright (C) 2026 X Engineering LLC
Contact: joe@xengineering.net
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License.
This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details: www.gnu.org/licenses
This regulator is an accessory to a charging system, not a safety device. It must not be relied upon as the sole means of protecting batteries, alternators, wiring, or the vessel. Overcurrent protection, wire sizing, and installation practice conforming to applicable standards remain the responsibility of the owner and installer. Performance, navigation, and health data are provided for informational purposes only and must not be used for navigation or any safety-critical decision.
Source code and third-party license notices: docs.xengineering.net · Privacy Policy · Terms of Sale
Counts of protection events since boot or last reset. All counters are rising-edge — each number represents how many times that protection mechanism activated, not how long it was active. Use the per-category reset buttons to establish a clean baseline after tuning changes or suspected transient conditions. FastOV events are normal during load transients; sustained accumulation at idle is not.
Voltage & Current Protection
Thermal Protection Events
No battery shunt is installed, so the battery diagnostics panel has no signal to report and is not shown — only the alternator panel below. Setup → Battery → Measurement Sources → Battery Shunt Present.
Charging System Health vs Engine Hours ℹ️A healthy charging system holds a roughly flat line near 100 — a steady downward trend is what to watch for. The lower line is each hour's low 10% mark (a tenth of that hour's readings fell below it), so one odd reading never defines an hour.
This Session
Today's output vs. the highest the alternator has produced at the same conditions.
MEASURED — a recorded best exists at this operating point; ESTIMATED — interpolated between trustworthy nearby records; Learning this operating region — the recorded data around this point is too one-sided to grade fairly, so no number is shown; No reference here yet — nothing recorded nearby, and a steady run here records a new point instead of guessing.
Data is optionally pruned in the cloud. Every 15 minutes, if the engine is off and device online, new frontier points upload. The cloud then drops points that have become redundant (sitting below the envelope of their neighbours) and returns the cleaned set.
Fast current channel: ?
| Worst | Pk-Pk (A) | Tone (Hz) | RPM | Output Current (A) | Alt Temp (°F) | Date |
|---|---|---|---|---|---|---|
| Ripple Pk-Pk | ? | ALL | ? | ? | ? | ? |
| Highest Tone | ? | ? | ? | ? | ? | ? |
Some engine, alternator and belt combinations develop a slow wobble, somewhere between 0.3 and 2 Hz, in field drive, engine speed and voltage together. This damper watches field drive for it while speed is steady, makes a single test cut in the current loop's integral gain, and retains the cut (at that speed) only if the wobble significantly shrinks.
The damper also has a second lever, for a wobble that keeps the voltage damper (the D-term) rhythmically switching direction. This is tested by pausing the D-term instead — if the wobble significantly reduces, the change is kept.
Shortcut to the damper's settings →
Each loop reports how it performs during normal running — no test needed. Tracking is the share of challenged time (target moving, or just after a disturbance) spent inside the accuracy band — quiet steady running earns nothing here. Excursions counts how often the loop left its band, with the average time it took to get back. Time when the output was pinned at a limit or a protection held it is set aside as "constrained" (shown in the small line) rather than blamed on the loop. A dash means not observed yet — never perfection. Accumulates since the last reset; auto-resets after each daily cloud snapshot, or press Reset below.
| Good | Watch | Poor | |
|---|---|---|---|
| Tracking (all loops) | ≥ 95 % | 85 – 95 % | < 85 % |
| Current recovery | < 5 s avg | 5 – 15 s | ≥ 15 s |
| Voltage recovery | < 20 s avg | 20 – 60 s | ≥ 60 s |
Excursion cells show count · average recovery time and are colored by the recovery time. The thermal row's middle cell counts containment sessions (not colored).
Developer diagnostics. Study firmware to make better sense of this panel.
—
Lifetime record of bus-voltage excursions above the Bulk target, from any charge source (alternator, solar, shore). Each band measures how far the voltage climbed above the Bulk target in effect at that moment — the record follows the target wherever it is set or adjusted. Coverage is continuous from the Bulk target to more than 15 V above it: 0.2 V resolution through ≈18 V on a 12 V system, 1 V bands beyond, and an overflow band at the top. It survives restarts and firmware updates; a full power-down (battery disconnected) starts it fresh.
| Voltage band | Events | Total time |
|---|---|---|
| — | ||
Only bands with activity are listed, plus the first empty band above them — that zero row marks where the record continues upward. Band labels are printed using the current Bulk setting — if Bulk is later changed, past time keeps its above-target meaning and the printed voltages shift to match. The lowest bands accumulate large event counts from normal regulation ripple crossing band edges — total time is the better severity measure there.
This subtab is the health station for the charging system — the alternator, its rectifier and belt drive, and the control loops driving them. Everything here is results; the detection gates and tuning knobs live in Setup → Alternator → Diag.
Shortcut to the Diag gates & tuning knobs →
Charging System Health grades today's alternator output against the best it's ever done under the same conditions. The engine-hours trend is the plot to watch: a healthy system holds roughly flat in the mid-90s+, and a steady downward slope is an early warning. The "This Session" plot below it shows the same grading data "live" since the page was opened.
Live Oscilloscope & Historical Snapshots shows the alternator's output current sampled at 20khz — fast enough to see individual rectifier pulses. Reference pages are known-good waveforms frozen once per RPM band; anomaly captures are saved automatically when the fault monitor trips. When something looks off, flip between the capture and a close reference for that speed and compare.
Resonance & Ripple Map is a learned table of the strongest ripple tone at every speed and load — used by the commissioning wizard to help optimize signal filters and control response.
Wear Rate & Component Life estimates how fast the alternator is aging at the present speed and temperature, and roughly how much component life remains (based on physics, but not yet calibrated…)
Control Accuracy reports how each loop — current, voltage, thermal — performs during normal running: time-in-band while challenged, and how often it leaves its band and how fast it recovers. Quiet steady running earns nothing, and time spent pinned at a limit is reported separately instead of blamed on the loop.
Is an anomaly alert a confirmed failure? No. The fault class is the monitor's best guess from the ripple pattern. Treat it as a prompt to compare the anomaly capture against the reference page for that RPM band before touching hardware.
Does it need anything from me? No — everything on this page learns on its own during ordinary steady running. A new install shows gaps and "learning" labels until the engine has spent time at more speeds and loads.
Replaced the alternator, regulator, or belt? Reset the learned baselines so old data doesn't grade the new hardware: Start Over (health record book, in Setup → Alternator → Diag), Re-baseline (reference pages), and Clear Map (ripple map).
Oldest row is the baseline. @25°C normalizes for battery temperature so runs are comparable; a run made with no measured battery temperature shows — there and keeps its raw value. Δ base is the temp-corrected change since the baseline (the aging signal). Fit ✓ = the scored steps agreed; ⚠ = scattered, treat that row with care.
| When | DCIR (mΩ) | @25°C (mΩ) | Δ base | Fit | ΔV (mV) | ΔI (A) | Dwell (s) | SoC | Batt V | Batt °F | Step | Steps |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No tests yet | ||||||||||||
Measured capacity needs an independent low state-of-charge anchor from a rested voltage. Edit the rested open-circuit-voltage curve for your bank (a chemistry preset is filled in when you save Vessel Info; the buttons below reload one), scaled to your nominal voltage. On lithium (LiFePO4) only the flat curve's bottom-knee rows map reliably to charge, so the anchor is taken there (≤20%); lead-acid and AGM slope across the whole range, so the anchor can sit at a shallower, non-damaging rest — the anchor window is set per chemistry.
| SoC % | Rested V |
|---|---|
| … | |
This page tracks how the battery bank is aging, from two independent signals: an internal-resistance test you run on demand, and a capacity estimate captured automatically each time the bank reaches full charge. The bank is assumed brand-new when first installed — the first capacity reading becomes the 100% baseline.
Resistance Test (DCIR) steps the charge current up and down with the engine running and measures how far the battery voltage moves for a known change in current. Rising resistance over months is an early aging signal. The absolute number depends on temperature and state of charge, so compare runs taken under similar conditions; the trend matters more than any single value.
Capacity Trend: each time the bank charges from a low point all the way to full, the amp-hours returned are extrapolated to a full 0–100% span and plotted. A falling line is real capacity fade. Only deep charges qualify, so the plot fills in slowly.
Replaced the bank? Press Start Over in the Resistance Test section — the next capacity reading becomes the new 100% baseline.
Note: lots of better functionality is planned for future versions of this page.
Cloud Features is switched off, so registration, leaderboards, fleet stats, config sharing and software update are unavailable. Turn it on under Setup → System → Cloud Features.
The regulator is running as its own access point, so it has no internet connection. Registration, leaderboards, fleet stats, config sharing and software update need one. Join the regulator to a WiFi network under Setup → System to use them.
Loading leaderboards...
Loading fleet statistics...
Loading shared configurations...