Automates running tune-param at multiple voltages, saves per-voltage
CSVs compatible with plot-tune, and prints a summary table.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Overlays efficiency curves from multiple CSV files (one per voltage),
finds per-voltage best and overall sweetspot (best average across all
voltages), and generates efficiency overlay, heatmap, and loss plots.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
STM32G474RB firmware for solar buck converter with MPPT, CC control,
Vfly compensation, and adaptive deadtime. Includes Textual TUI debug
console for real-time telemetry, parameter tuning, and SQLite logging.
Added pyproject.toml for uv: `cd code64 && uv run debug-console`
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add offline `plot-sweep` CLI command: generates efficiency overlay,
heatmap, and power loss plots from sweep CSV (no instruments needed)
- Add degauss buttons to CH5/CH6 in GUI (sends :DEMAg SCPI command)
- Gradual load ramp-down at end of 2D sweep to avoid transients
- Live sweep time estimate in GUI based on grid size × settle time
- Update HIOKI submodule to include degauss CLI command
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Wrap get_voltage_range() in try/except since VOLTage:RANGe? is not
supported on IT6537D — skip range check gracefully if unavailable
- Exclude derived EFF* values from auto-range error threshold check
in _wait_meter_ready(), as efficiency overflows at near-zero power
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The worker thread was signaled to stop but never joined, causing bus
collisions when the sweep thread started talking to instruments while
the worker was still mid-query. Now:
- worker.join(timeout=10) before sweep starts
- 0.5s delay + clear supply error queue before first command
- join sweep thread before restarting worker after sweep completes
- Also join worker on disconnect
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CP=500W at V=50V needs 10A on the load side — if the supply I_limit
is only 20A and the MPPT has conversion losses, this can cause the
supply to current-limit and timeout. The check now catches this upfront:
CP check: 500W / 50V = 10.0A (limit 20.0A) OK
Also raises ValueError if the worst-case current exceeds the limit.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Python 3.13 deletes exception variables after the except block.
Capture the error string before passing to the lambda.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 2D sweep now supports CC (constant current) and CP (constant power)
load modes via --load-mode flag (CLI) and combobox (GUI)
- Supply capability check before all sweeps: validates max voltage
against supply range and prints V/I/P summary
- Renamed sweep-vi args from --i-start/stop/step to --l-start/stop/step
to reflect that the load setpoint can be current or power
- GUI labels update dynamically based on selected load mode
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- GUI: voltage/current range selectors for Ch5 and Ch6 with AUTO option
- Worker: queries current V/I ranges each poll cycle, pushes to GUI
- Setting a fixed range automatically disables auto-range for that channel
- Live display shows current range values below each channel's readout
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add comprehensive README with wiring diagram, CLI reference, and examples
- Fix supply VISA timeout during sweeps: read supply/load before meter wait,
add retry wrapper for instrument queries, keepalive ping during auto-range
- Fix load_setpoint not recorded in voltage sweep CSV
- Add load current sweep command (sweep-load)
- Increase HIOKI auto-range wait to 30 retries x 2s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Combines three instrument drivers (as git submodules) into a single
testbench for MPPT tracker efficiency testing. Features:
- Voltage sweep and load current sweep with CSV export
- Auto-range aware meter polling (waits for HIOKI to settle)
- Supply keepalive during long meter waits to prevent USB-TMC timeouts
- Live monitoring with real-time 4-panel matplotlib graphs
- Safe shutdown (load first, then supply)
- Post-sweep returns to 75V idle with supply ON
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>