From c50c09a148899a3e5328437440bbd75dcea40514 Mon Sep 17 00:00:00 2001 From: grabowski Date: Wed, 11 Mar 2026 13:21:09 +0700 Subject: [PATCH] Add README and fix sweep reliability - 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 --- README.md | 200 +++++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 1 + 2 files changed, 201 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..d74e4f9 --- /dev/null +++ b/README.md @@ -0,0 +1,200 @@ +# MPPT Testbench + +Unified CLI tool for testing MPPT (Maximum Power Point Tracking) converters using three coordinated instruments: + +| Instrument | Role | Interface | +|---|---|---| +| **ITECH IT6500D** | DC power supply (solar panel simulator) | USB-TMC / SCPI via PyVISA | +| **Prodigit 3366G** | DC electronic load (600V/420A/6kW) | RS-232 (115200 8N1 RTS/CTS) | +| **HIOKI 3193-10** | Power analyzer (efficiency measurement) | GPIB via UsbGpib / PyVISA | + +## Wiring + +``` + ┌──────────────────┐ + IT6500D ──(+/-)──> │ MPPT Tracker │ ──(+/-)──> Prodigit 3366G + │ (DUT) │ + HIOKI Ch5 ──(sense)── │ Input Output │ ──(sense)── HIOKI Ch6 + └──────────────────┘ + + HIOKI EFF1 = P6 / P5 x 100% (output power / input power) +``` + +## Installation + +Requires Python 3.12+, NI-VISA runtime, and `uv`. + +```bash +git clone --recurse-submodules https://git.b4l.co.th/B4L/mppt-testbench.git +cd mppt-testbench +uv venv +uv pip install -e . +``` + +## Quick Start + +```bash +# 1. Check all instruments are connected +mppt identify + +# 2. Configure everything for MPPT testing +# (sets wiring, coupling, auto-range, efficiency formula, display) +mppt setup + +# 3. Take a single reading from all instruments +mppt measure + +# 4. Continuous monitoring with CSV export +mppt monitor --interval 1.0 --output data.csv + +# 5. Live real-time graph (Power, Efficiency, Voltage, Current) +mppt live --interval 0.5 +``` + +## Sweep Commands + +### Voltage Sweep + +Sweep supply voltage across a range while the load is held constant. Records efficiency at each point. + +```bash +mppt sweep \ + --v-start 30 --v-stop 100 --v-step 5 \ + --current-limit 10 \ + --load-mode CC --load-value 3.0 \ + --settle 2.0 \ + -o voltage_sweep.csv +``` + +After the sweep, the supply returns to 75V and stays ON. + +### Load Current Sweep + +Sweep load current (CC mode) at a fixed supply voltage. + +```bash +mppt sweep-load \ + --voltage 75 --current-limit 10 \ + --i-start 0.5 --i-stop 8 --i-step 0.5 \ + --settle 2.0 \ + -o load_sweep.csv +``` + +After the sweep, the load turns OFF and the supply returns to 75V (stays ON). + +### Auto-Range Handling + +The HIOKI 3193-10 returns special error values (`+9999.9E+99`) while auto-ranging. The testbench automatically waits for all measurement channels to settle before recording each sweep point. The supply is kept alive with periodic queries during the wait to prevent USB-TMC timeouts. + +## Direct Instrument Control + +```bash +# Supply +mppt supply set --voltage 48 --current 10 +mppt supply on +mppt supply off + +# Load +mppt load set --mode CC --value 5.0 +mppt load set --mode CR --value 10.0 +mppt load on +mppt load off + +# Emergency shutdown (load first, then supply) +mppt safe-off +``` + +## Efficiency Measurement + +Measure averaged efficiency at a fixed operating point: + +```bash +mppt efficiency \ + --voltage 75 --current-limit 10 \ + --load-mode CC --load-value 3.0 \ + --samples 10 --settle 3.0 +``` + +## CLI Reference + +``` +mppt [-h] [--supply-address ADDR] [--load-port PORT] [--load-baud BAUD] + [--meter-address ADDR] [--timeout MS] + {identify,setup,measure,monitor,live,sweep,sweep-load,efficiency, + supply,load,safe-off} +``` + +| Command | Description | +|---|---| +| `identify` | Show identity and status of all instruments | +| `setup` | Configure all instruments for MPPT testing | +| `measure` | Single measurement from all three instruments | +| `monitor` | Continuous text monitoring with optional CSV | +| `live` | Real-time 4-panel matplotlib graph | +| `sweep` | Voltage sweep with efficiency recording | +| `sweep-load` | Load current sweep at fixed voltage | +| `efficiency` | Averaged efficiency at a fixed operating point | +| `supply` | Direct IT6500D control (on/off/set) | +| `load` | Direct Prodigit 3366G control (on/off/set) | +| `safe-off` | Emergency shutdown (load first, then supply) | + +### Global Options + +| Option | Default | Description | +|---|---|---| +| `--supply-address` | auto-detect | IT6500D VISA address | +| `--load-port` | `COM1` | Prodigit 3366G serial port | +| `--load-baud` | `115200` | Prodigit 3366G baud rate | +| `--meter-address` | auto-detect | HIOKI 3193-10 VISA address | +| `--timeout` | `5000` | VISA timeout in milliseconds | + +## CSV Output Format + +Sweep CSV files contain the following columns: + +| Column | Description | +|---|---| +| `voltage_set` | Supply voltage setpoint (V) | +| `current_limit` | Supply current limit (A) | +| `load_setpoint` | Load setpoint value (A for CC mode) | +| `supply_V/I/P` | Supply measured voltage, current, power | +| `load_V/I/P` | Load measured voltage, current, power | +| `input_power` | HIOKI P5 -- power into MPPT tracker (W) | +| `output_power` | HIOKI P6 -- power out of MPPT tracker (W) | +| `efficiency` | HIOKI EFF1 -- P6/P5 x 100 (%) | + +## Setup Details + +`mppt setup` configures the instruments as follows: + +- **Supply**: Remote control mode +- **Load**: Remote control mode +- **Meter**: + - Wiring: 1P2W + - Ch5 (solar input): DC coupling, voltage and current auto-range + - Ch6 (MPPT output): DC coupling, voltage and current auto-range + - Response speed: SLOW (best accuracy) + - EFF1 = P6 / P5 (output / input) + - Display: 16-item SELECT view -- U5, I5, P5, EFF1 (left) | U6, I6, P6 (right) + +## Project Structure + +``` +mppt-testbench/ +├── IT6500D/ git submodule - DC power supply driver +├── PRODIGIT-3366G/ git submodule - electronic load driver +├── HIOKI-3193-10/ git submodule - power analyzer driver +├── testbench/ +│ ├── __init__.py exports MPPTTestbench +│ ├── bench.py orchestrator (sweeps, measurement, auto-range wait) +│ └── cli.py unified CLI entry point +└── pyproject.toml package config, entry point: mppt +``` + +## Dependencies + +- Python >= 3.12 +- [PyVISA](https://pyvisa.readthedocs.io/) + [pyvisa-py](https://pyvisa.readthedocs.io/projects/pyvisa-py/) +- [pyserial](https://pyserial.readthedocs.io/) +- [matplotlib](https://matplotlib.org/) +- NI-VISA runtime (for GPIB/USB-TMC communication) diff --git a/pyproject.toml b/pyproject.toml index c7d410a..45c605a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,6 +2,7 @@ name = "mppt-testbench" version = "0.1.0" description = "MPPT tracker testbench: IT6500D (solar sim) + Prodigit 3366G (load) + HIOKI 3193-10 (power analyzer)" +readme = "README.md" requires-python = ">=3.12" dependencies = [ "matplotlib>=3.10.8",