Skip to content

Calibration constants

The empirical constants that map drive register values to physical quantities. Both control codebases (code/adcl_winsoft/, code/wind_tunnel_control/) use these; keep them in sync when refreshing.

REF1 ↔ drive RPM

$$ \mathrm{REF1} = \mathrm{drive_RPM} \times 22.42 $$

  • Source: WT_MS_2/captures/ref1_sweep_20260513_143847.csv from code/wind_tunnel_control/ref1_sweep.ps1.
  • Date measured: 2026-05-13.
  • Residual error: ±1 % across the range tested (0–800 RPM).
  • Operating range: 0–880 RPM (motor nameplate).
  • In code:
    • code/adcl_winsoft/src/adcl_winsoft/vfd/controller.pyREF1_PER_RPM = 22.42
    • code/wind_tunnel_control/WindTunnelControl.ps1 — the equivalent constant
  • Theoretical reference: ABB nominal scaling is REF1_max = 20000 at drive_RPM = nominal_speed. With nominal_speed = 880 RPM we expect 20000 / 880 ≈ 22.73. Our empirical 22.42 is within 1.4 % — consistent with the motor running slightly above its nameplate slip estimate.

drive RPM ↔ wind speed

For drive_RPM > 300 (below this, the static-ring pressure transducer is in noise):

$$ \mathrm{wind_speed_{MPH}} \approx 0.0822 \times \mathrm{drive_RPM} - 13.14 $$

  • Source: WT_MS_2/captures/rpm_velocity_20260513_144742.csv from code/wind_tunnel_control/rpm_velocity_sweep.ps1.
  • Date measured: 2026-05-13.
  • Residual error: ±1.1 MPH across the fitted range (400–800 RPM).
  • Behaviour below 300 RPM: wind speed reads 0 because the differential pressure across the static ring falls below the transducer's sensitivity.

Conversion to m/s: m/s = MPH × 0.4470.

Per-channel DAQ calibration (slopes and offsets)

These live in code/adcl_winsoft/src/adcl_winsoft/daq/channel_map.py. Each cDAQ channel has a slope and offset that convert raw electrical units (mA, V, mV/V) to engineering units. They are not documented in this page because they change per-channel and per-transducer; the channel map is the source of truth.

PGB sting matrix calibration

The PGB sting force balance uses a 3×3 inverse matrix (N_C1_inv.csv) plus an optional secondary correction (N_C1_inv_C2.csv) to convert three bridge readings (mV/V) to three forces and a moment.

  • Files (read-only, inherited from AeroWare): E:\Wind_tunnel\AeroWare\Configs\N_C1_inv.csv, E:\Wind_tunnel\AeroWare\Configs\N_C1_inv_C2.csv.
  • Applied by: code/adcl_winsoft/src/adcl_winsoft/daq/calibration.py.

These matrices are calibrated against known applied loads. Sanity-check by applying a calibration weight to each axis and verifying the calculated force matches.

Sutherland viscosity (for Reynolds number)

For air at lab temperatures (~20 °C), the dynamic viscosity is approximately 1.82 × 10⁻⁵ Pa·s and density is approximately 1.20 kg/m³. The code uses Sutherland's law for slightly better accuracy across the room temperature range; the implementation is in daq/calibration.py.

Reynolds number computation uses the operator-entered model characteristic length (asked for at first launch).

Refresh procedure

See Maintenance → Calibration refresh for the per-step procedure. The summary:

  1. Re-run ref1_sweep.ps1 and rpm_velocity_sweep.ps1.
  2. Re-fit. Compare to existing constants.
  3. If different by more than thresholds (1 % for REF1 scaling, 5 % for velocity), update the constants in both code locations and on this page.
  4. Commit the change with a reference to the sweep CSVs.
  5. File the new sweep CSVs in a WT_MS_<n>/captures/ folder.

Change history

Date What Value
2026-05-13 Initial calibration after Win11 migration REF1 = RPM × 22.42 · MPH ≈ 0.0822·RPM − 13.14