Sting Balance R/P/Y

Electronics, control and data reduction

Two Raspberry Pi 4s - a control station and a rig computer - an Arduino Uno running grbl for the three stepper axes, one 24-bit ADC per balance bridge, and a hard-wired E-stop that removes motor power. This page is the wiring-level design: block diagram, power and safety chain, pin assignments, harness, connectors, cable schedule, power budget, parts list and bring-up checklist.

ArchitectureKey decisionsPower & E-stop Motion wiringBridge wiringPi pin map Balance cableConnectorsCable schedule Power budgetParts listSensors Measurement sequenceData reductionBring-up Open items

Architecture

System block diagram. The station Pi talks to the rig Pi over Ethernet; the rig Pi drives grbl over USB, reads the six bridge ADCs over I2C and the axis encoders through a small sensor node on the moving rig.
System block diagram. The station Pi talks to the rig Pi over Ethernet; the rig Pi drives grbl over USB, reads the six bridge ADCs over I2C and the axis encoders through a small sensor node on the moving rig.

Diagrams are also available as PNG: block, power_safety, steppers, bridge, pinmap, harness_route; generator make_electronics_diagrams.py.

Key decisions

TopicDecisionWhy
Bridge ADC6x NAU7802 (SparkFun Qwiic Scale), one per bridge, behind a TCA9548A mux; 80 SPS, gain 128All six channels convert at the same time (no multiplexer settling or channel-to-channel crosstalk); 24-bit with PGA; ratiometric; plug-in boards and a Python library; ~$15 each. Speed is not needed - every point is a steady average. Upgrade path: 2x ADS1263 on SPI0 (pins reserved).
ExcitationOne shared 3.30 V bus from an LT3042 low-noise LDO, feeding all 6 bridges AND all 6 NAU7802 AVDD pins (internal LDO off, AVDDS = 0)The NAU7802's own LDO is not meant to drive 350 Ω bridges (9.4 mA each). Feeding AVDD from the same bus keeps every conversion ratiometric to the excitation. 3.3 V gives ~3.2 mV full scale at ~1 mV/V and 7.8 mW per gauge.
Remote senseEX+/EX- doubled in the balance cable; SENSE+/SENSE- taken at the bridge pads and read by an ADS1115Lead resistance (~1 Ω loop) costs ~0.3-1.8 % sensitivity; the ratio k = Vbalance / Vbox is logged and applied, so lead temperature cannot drift the calibration.
Roll driverDM542T external driver, 24 V, 2.0 A rms, 1/8 step, common-cathode opto inputs from the shield's Z pinsA NEMA 23 (2.8 A class) is beyond a stepstick; the DM542T is cheap, opto-isolated and 5 V-logic compatible.
Pitch / yaw driversTMC2209 stepsticks in the CNC shield X and Y sockets, standalone STEP/DIR, 1/8 step, 1.2 A rms (Vref per module datasheet), heatsinks + box fanQuiet, cool at 1.2 A, enough torque margin through the worms; no UART needed.
Motion firmwaregrbl 1.1 on the Uno; axes in degrees: X yaw, Y pitch, Z roll. $1 idle delay disables the drivers after every moveProven step generation, homing, hard and soft limits. Drivers off while measuring = no PWM noise near the gauges; the worm gearboxes self-lock.
Axis sensingSensor node: Raspberry Pi Pico on the pitch-sector base reads 3x AS5048A + the SCL3300 over short SPI and reports over USBSPI does not survive a 3-4 m run through cable chains; one USB cable does. Encoders verify every move; homing resolves the pinion turn count (pitch and yaw pinions turn ~3.3 times over the range).
Pod sensorsI2C bus 3 (50 kHz) through the balance cable, LTC4311 active terminator in the rig boxOnly 4 thin wires cross the balance; no tubing in the load path. Read between bridge averages to keep digital edges away from the µV signals.
Power24 V 150 W motor PSU, separate 5 V 35 W logic PSU; star ground in the rig boxPeak motor demand ~2.9 A (2.3x margin); logic ~1.9 A (3.6x margin). Separate supplies keep motor return currents out of the analog ground.
Safe stopTwo-channel E-stops (rig + station) and a Pi watchdog contact in series into a safety relay; its outputs drive K1, which opens the 24 V motor busRemoving power is the stop; the self-locking worms hold every axis. Aux contacts tell the Pi and grbl (A0) what happened.

Power distribution and E-stop chain

24 V and 5 V distribution with fuses, the K1-switched motor bus, the low-noise excitation supply, the star ground and the two-channel E-stop chain.
24 V and 5 V distribution with fuses, the K1-switched motor bus, the low-noise excitation supply, the star ground and the two-channel E-stop chain.

Motion wiring (grbl on Arduino Uno + CNC shield v3)

Pin assignments on the Uno / CNC shield, the two TMC2209 sockets, the external DM542T for roll, motor coils and the NC limit switches.
Pin assignments on the Uno / CNC shield, the two TMC2209 sockets, the external DM542T for roll, motor coils and the NC limit switches.
Axis (grbl)Gear chainSteps per degreeMax speed (deg/min)Motor rpmStep rate (kHz)Range
Yaw (X)30:1 worm x 39.8 (20T pinion on R 19.6 in rack)5,310.33° /s = 18059715.9±15° (switches ±16°)
Pitch (Y)40:1 worm x 44.7 (20T pinion on R 22 in rack)7,947.42° /s = 12059615.9-6..+20° (switches -7 / +21°)
Roll (Z)50:1 worm (direct)222.218° /s = 1,0801504.0±90° flight, -90..+180° calibration (switches -95 / +185°)

Strain-gauge bridge wiring

Left: bridge M1 (tandem gauges in opposite arms), pads on the aft block, the cable and the rig-box end. Right: all six bridges on the shared excitation bus, and the J0/J1 pinout.
Left: bridge M1 (tandem gauges in opposite arms), pads on the aft block, the cable and the rig-box end. Right: all six bridges on the shared excitation bus, and the J0/J1 pinout.

Raspberry Pi pin map and I2C addresses

Rig Pi 40-pin header assignments, I2C address map and the Pico sensor-node pins. SPI0 is reserved for a future ADS1263 bridge ADC.
Rig Pi 40-pin header assignments, I2C address map and the Pico sensor-node pins. SPI0 is reserved for a future ADS1263 bridge ADC.

Balance cable route and bore fill

From the pod sensor bay and the gauges to J0: 26 conductors of 32 AWG PTFE through the balance, sting and spindle, then a 270° clock-spring loop.
From the pod sensor bay and the gauges to J0: 26 conductors of 32 AWG PTFE through the balance, sting and spindle, then a 270° clock-spring loop.
HoleDiameter (in)Fill with 26 x 32 AWG (0.017 in OD)
Balance entry hole (aft block, vertical)Ø0.18821 %
Balance spigot wire boreØ0.25012 %
Sting wire bore (17.45 in)Ø0.3008 %
Spindle radial wire exit (x = 20.53 in)Ø0.25012 %

Bundle area 0.0059 in²; all holes are below a 40 % pull-through guideline. The vertical Ø0.188 entry hole in the aft block is the bottleneck. Conductors: EX+ x2, EX- x2, SENSE+/-, 12 bridge signals, NTC x2, pod 3V3/GND/SDA/SCL, 2 spares = 26. Calibrate with all wires installed: the thin loops that cross the flexures carry a little load.

Rig box connectors and pinouts

RefConnectorFunctionPinout
J0DC-37 male on a plastic bracket, roll housingbalance breakout (rotating side ends here)see the bridge diagram; pin 37 = braid/shield; shell isolated from the housing
J1DC-37 female, rig box panelbalance trunksame pin numbers as J0
J2GX20-4roll motor (NEMA 23)1 A+, 2 A-, 3 B+, 4 B-; shield to the gland
J3GX16-4pitch motor1 A+, 2 A-, 3 B+, 4 B-
J4GX16-4 (blue band)yaw motor1 A+, 2 A-, 3 B+, 4 B-
J5GX16-8limit / home switches1-2 yaw loop, 3-4 pitch loop, 5-6 roll loop, 7 0 V, 8 shield
J6USB-B panel feed-throughsensor node (Pico)USB 2.0
J7GX16-4station E-stop1-2 channel 1 (NC), 3-4 channel 2 (NC)
J8RJ45 panel feed-throughEthernet to the station Pi-
J92x 1/8 in barbed bulkheadspitot total / static -> ABP2tubing
J10GX12-3air temperature DS18B201 3V3, 2 data, 3 GND
J11GX12-2tunnel drive run contact (wind on)dry contact -> opto -> GPIO23
ACIEC C14 with fuse and switchmains inL, N, PE (PE to chassis stud)

Cable schedule

CableTypeFrom -> toLengthNotes
W126 x 32 AWG PTFE, twisted pairs, braid sleevebalance pads -> sting bore -> spindle exit -> J0~1.0 m270° clock-spring loop at the spindle exit; PTFE grommet in the exit hole
W212-pair individually shielded, 24 AWG, high-flexJ0 -> pitch loop -> yaw chain -> J1~4 mpair 1 EX+/EX-, 2 SENSE, 3-8 bridge signals, 9 NTC, 10 pod 3V3/GND, 11 pod SDA/SCL, 12 spare
W34 x 0.75 mm², shielded, high-flexroll motor -> J2~4 mseparate from W2 by ≥ 100 mm where possible; cross at 90°
W44 x 0.5 mm², shielded, high-flexpitch motor -> J3~4 m
W54 x 0.5 mm², shielded, high-flexyaw motor -> J4~3.5 m
W68 x 0.25 mm², shieldedcarriage junction box -> J5~4 mshort 2-core leads from each switch to the junction box
W7USB 2.0 A-B, high-flexsensor node -> J6~4 min the cable chain with W2
W84-pair 26 AWG shieldedsensor node -> 3 encoders + inclinometer≤ 1 m eachSCK, MOSI, MISO, CS + 3V3/GND; 100 Ω series at drivers
W94 x 0.5 mm², shieldedstation E-stop -> J7~6 m
W10Cat6 S/FTPstation Pi -> J8~6 m
W112x silicone tube 1/8 in IDpitot-static probe -> J9~3 mequal lengths, no kinks
W123-coreDS18B20 probe -> J10~3 m
W132-coretunnel drive aux contact -> J11~5 m

Power budget

24 V loads (PSU1, 6.5 A)Peak A
DM542T + NEMA 23 (2.0 A phase, 150 rpm)1.50
TMC2209 + NEMA 17, yaw (1.2 A rms)0.50
TMC2209 + NEMA 17, pitch (1.2 A rms)0.50
Safety relay + K1 coil0.15
Box fan + stack light0.20
Total2.85
5 V loads (PSU2, 7 A)Peak A
Rig Pi 4 (busy, no USB power hogs)1.60
Uno + CNC shield logic (USB)0.06
Pico node + 3 AS5048A + SCL3300 (USB)0.08
LT3042 -> 6 bridges + 6 NAU7802 AVDD0.07
NAU7802 DVDD, mux, 2 ADS1115, ABP2, BMP390 x3, LSM6DSOX0.03
Opto inputs, watchdog relay coil0.09
Total1.93

Only one axis normally moves at a time, so the real 24 V peak is lower. The excitation bus draws ~65 mA from the LT3042 (rated 200 mA).

Parts list (electronics)

GroupItemQtyEach (USD)Total (USD)
Compute / motionRaspberry Pi 4 Model B, 4 GB (station + rig)255110
Compute / motionmicroSD 32 GB, Pi cases with heatsinks21530
Compute / motionArduino Uno R3 (genuine)12727
Compute / motionCNC shield v3188
Compute / motionTMC2209 stepstick (1 spare)3824
Compute / motionDM542T stepper driver (roll)13535
Compute / motionRaspberry Pi Pico + small enclosure (sensor node)11212
DAQ / sensorsSparkFun Qwiic Scale NAU7802 (1 spare)715105
DAQ / sensorsTCA9548A I2C multiplexer177
DAQ / sensorsADS1115 16-bit ADC breakout21530
DAQ / sensorsLT3042 low-noise LDO module (excitation)11515
DAQ / sensorsLTC4311 I2C active terminator (pod bus)188
DAQ / sensorsAS5048A encoder board + diametric magnet31545
DAQ / sensorsSCL3300 inclinometer breakout14545
DAQ / sensorsHoneywell ABP2 0-10 inH2O differential, I2C15555
DAQ / sensorsPitot-static probe + silicone tubing14545
DAQ / sensorsBMP390 barometer (2 pod, 1 ambient)31133
DAQ / sensorsLSM6DSOX accelerometer (pod)11212
DAQ / sensorsDS18B20 probe (air) + 10k NTC (balance)11111
Power / safetyMean Well LRS-150-24 (24 V, 6.5 A)13030
Power / safetyMean Well LRS-35-5 (5 V, 7 A)11515
Power / safetyIEC inlet with fuse + switch, DIN fuse holders, fuses, terminal blocks14545
Power / safetyE-stop, 2 NC channels, with enclosure (rig + station)23060
Power / safetySafety relay, Omron G9SE-201 class, manual reset1130130
Power / safetyK1 relay 2-pole 16 A, 24 VDC coil (Finder 62.82 class) + socket13535
Power / safetyRetriggerable watchdog relay module11212
Power / safety4-ch optocoupler input board188
Power / safetyRoller-lever limit switches (NC) + carriage junction box6742
Cables / connectors32 AWG PTFE hook-up wire, 10 colours x 10 m16060
Cables / connectorsExpandable braid sleeve 1/8 in, PTFE grommets11212
Cables / connectorsDC-37 connector pair + backshells (J0, J1) + plastic bracket13030
Cables / connectors12-pair individually shielded high-flex cable, 5 m19090
Cables / connectorsMotor cable 4-core shielded high-flex, 12 m14545
Cables / connectors8-core and 4-core shielded cable (switches, station E-stop)13535
Cables / connectorsGX16 / GX20 / GX12 panel connectors13030
Cables / connectorsCable chain for the yaw and pitch loops14040
Cables / connectorsPanel USB-B / RJ45, high-flex USB 5 m, Cat6 6 m13535
Enclosure / miscSteel enclosure ~16 x 12 x 6 in, DIN rail, glands, filtered fan1120120
Enclosure / miscFerrites, heat-shrink, standoffs, labels14040
Total (excluding motors and gearboxes, which are in the motion budget)~1,570

Prices are approximate 2026 hobby/industrial-supplier prices. A cheaper safety relay or a force-guided relay module can cut ~$100, but keep two channels and manual reset.

Sensors

QuantitySensorLocationInterface
6 balance bridges6x NAU7802, 24-bit, 80 SPS, gain 128rig boxI2C-1 via TCA9548A ch0-5
Excitation at the balanceADS1115 #1 (remote sense)rig boxI2C-1 ch6, 0x48
Balance temperature10k NTC on the aft block + ADS1115 #2balance / rig boxI2C-1 ch6, 0x49
Roll angleAS5048A 14-bit absolute encoderspindle endSPI on the sensor node
Pitch, yaw angleAS5048A on the pinion shafts (+ homing for turn count)drive bracketsSPI on the sensor node
Sting attitudeSCL3300 dual-axis inclinometerroll housingSPI on the sensor node
Model attitudeLSM6DSOX accelerometerpod sensor bayI2C-3, 0x6A
Base / cavity pressure2x BMP390pod sensor bayI2C-3, 0x76 / 0x77
Dynamic pressurepitot-static probe + ABP2 0-10 inH₂O differential (100 mph = 4.9 inH₂O)upstream / rig boxI2C-1 ch6, 0x28
Ambient pressure, air temperatureBMP390 + DS18B20rig box / flowI2C-1 ch6 0x77; 1-Wire GPIO26
Wind ontunnel drive run contacttunnel driveopto -> GPIO23

Software services and measurement sequence

  1. Check the target attitude against the envelope interlock (model size, wall clearance; calibration mode allows roll -90..+180°).
  2. Read E-stop and motor-power inputs; send the move to grbl; wait for Idle.
  3. Verify with the encoders and inclinometer (stop and re-home if the error exceeds 0.1°).
  4. Drivers disable after $1 = 25 ms; the worm gearboxes hold position.
  5. Settle ~1 s, then average the six bridges, sense voltage, NTC, pressures and attitude for 2 s (160 samples at 80 SPS). Read the pod bus between averages.
  6. Next point. Wind-off zeros at the start and end of each run and weight tares at every attitude.

Data reduction pipeline

  1. Correct each bridge reading by the remote-sense ratio k; subtract the wind-off zero and the weight tare at the same attitude.
  2. Invert the calibration (Newton iteration on the fitted model) -> N, A, m, Y, n, l at the BMC.
  3. Base-pressure correction of the axial force.
  4. Transform body axes -> wind axes with the measured α, β, φ; normalise by q and the reference area and length.
  5. Wind-tunnel wall corrections (blockage, streamline curvature) per Barlow, Rae & Pope.

Safety summary

Bring-up and test checklist

  1. Rig box powered from a current-limited bench supply first: check every rail, fuse and the star-ground continuity (SP to chassis < 0.1 Ω; analog ground not tied to chassis anywhere else).
  2. E-stop chain: each of S1, S2 and the watchdog must drop K1 and be reported on GPIO17/GPIO27; K1 must not re-close without S3.
  3. grbl: flash with STEP_PULSE_DELAY; enter the $ settings; with the motors disconnected, check step rates on a scope (≤ 16 kHz at max speed).
  4. Motors on the bench: set TMC2209 Vref and DM542T switches, jog each axis, check direction and steps per degree against a protractor / the encoders.
  5. Limit switches: open each one by hand and confirm the alarm; then home every axis; then test hard limits at slow speed.
  6. Sensor node: read all three encoders and the inclinometer at 100 Hz; check the encoder against grbl position over the full range.
  7. Excitation: LT3042 output 3.30 V ± 1 %, noise < 10 µV rms; then connect the bridges and read SENSE at the balance.
  8. Gauges: bridge resistances (350 Ω ± 0.5 %, arms matched), insulation > 10 GΩ at 50 V, zero offsets < 1 mV/V.
  9. DAQ noise with motors disabled: each bridge < 0.05 % FS rms over 2 s averages; repeat with drivers enabled, with the pod bus running and with the tunnel fan on - find and fix any difference.
  10. Warm-up drift: zero drift over 1 h with constant temperature < 0.05 % FS; log the NTC.
  11. Dead-weight sanity check on the bench (1 lb on the calibration sleeve) before the full calibration.
  12. Watchdog: kill the rig service and pull the Ethernet cable - both must stop motion.

Open items and flags

← Motion systemCalibration →