Solid Rocket Motor Static Test Stand
Build a stand that measures real thrust and exhaust temperature from commercial model rocket motors, then use the measured curves to size a staged vehicle for a defined mission. Published manufacturer thrust curves are the industry reference — we wanted to know how closely a low-cost instrumented stand could reproduce them, and where the error actually comes from.
Role
Why the design changed
Three revisions: a vertical 80/20 frame, a horizontal sled, and the final optical-table mounted stand.
The vertical stand loaded the motor along gravity, which was the physically cleaner arrangement — but once printed and assembled it weighed about 11 oz against a 4 oz target. That dead mass sat directly in the load path and swamped the thrust signal from the smaller motors. Rather than chase weight out of the structure, we rotated the whole design horizontal, which removes stand weight from the measurement entirely. Several 3D-printed parts from the vertical prototype carried straight over.
Arguments for vertical
- Thrust axis aligned with gravity; reduces side loads and bending moments on the mounts
- Black powder combustion behaves more like a real launch; hot gas doesn't pool to one side
- Simpler alignment of the motor to the load path
Arguments against
- Exhaust reflects back up into the wiring and printed parts
- Stand mass sits in the measurement and has to be subtracted out
- Engine install and wiring access are both worse; tipping, vibration and twisting all in play
Structural validation in SOLIDWORKS FEA: the top plate reaches a maximum stress of 1.04 × 10⁷ N/m² at a minimum factor of safety of 5.7, and the back base bracket 1.236 × 10⁷ N/m² at 4.9.
Instrumentation
What I built
- Arduino C++ firmware handling acquisition, display, logging and ignition in a single deterministic loop — load cell and thermocouple sampled, converted to thrust and temperature, written to SD as CSV
- Dual-button arm/launch interlock: the stand cannot fire unless it is armed and the launch button is pressed. Red indicator flashes while armed, goes solid on fire
- Firing circuit electrically isolated from the sensor circuit so ignition current cannot corrupt the thrust trace
- Ignition signal hard-limited to 4 seconds, with logging continuing straight through the burn and a manual abort path from any state
- LCD showing live thrust, temperature, elapsed time and arm/ready status for the operator at the stand
- Soldered and assembled the wiring harnesses; documented the build and the calibration procedure
Firmware states: boot → standby → running/safe → armed → firing → post-launch.
10 Hz was enough to see the burn envelope but blurred the ignition spike, which is where the peak thrust lives. We moved to 80 Hz — enough resolution to catch the transient without outrunning the HX711 or the SD write.
Measured vs. published
Four Estes motor classes fired and logged. Raw CSV was cleaned and plotted through a small Python pipeline, then each measured curve was compared against the published ThrustCurve reference for that motor. Impulse is total impulse; Isp is specific impulse.
| Motor | Max thrust | Impulse | Isp | Peak exhaust | Δ thrust | Δ impulse |
|---|---|---|---|---|---|---|
| Estes B6 | 9.22 N | 5.00 N·s | 62.03 s | 241 °F | 23.8% | 16.3% |
| Estes D12 | 24.66 N | 17.99 N·s | 76.12 s | 1420 °F | 17.0% | 7.1% |
| Estes E12 | 25.28 N | 32.13 N·s | 83.71 s | 1421 °F | 24.1% | 18.1% |
| Estes F15 | 29.74 N | 49.66 N·s | 87.11 s | 1425 °F | 17.5% | 0.1% |
Impulse tracked the reference far better than peak thrust — the F15 came in at 0.1% on total impulse while still showing 17.5% on peak. Integrating over the burn averages out the transient error that a single peak sample carries.
- Load cell hysteresis as thrust rises and falls across the burn — the dominant term, and the reason peak thrust deviates more than total impulse
- Sensor non-linearity and quantization; uncertainty in the calibration weights themselves propagates into every reading
- Sled friction in the horizontal configuration, plus possible heating of the load cell during longer burns
- Component degradation across repeated firings
Mission application
Using the measured impulse rather than published values, the team sized a staged vehicle to reach the Hubble Space Telescope's orbit at 483 km. Vis-viva gives 7.626 km/s for the circular orbit; adding gravity and drag losses of 1.4 and 0.2 km/s puts the requirement at 9.226 km/s. Two staged D12 motors deliver 9.333 km/s across 963.9 g of propellant — enough margin to also cover a Hohmann transfer up to 600 km.
| Stage | Motor | Mass before burn | Mass after burn | Stage Δv |
|---|---|---|---|---|
| Stage 1 | Estes D12 | 1006.1 g | 524.2 g | 1.460 km/s |
| Stage 2 | Estes D12 | 710.3 g | 21.1 g | 7.873 km/s |
| Total | — | — | 963.9 g propellant | 9.333 km/s |
What went wrong, and what it taught me
- Lost a full run. The load cell terminal block didn't make complete contact during the C6 test — no thrust data captured. The fix was mechanical, not electrical: strain relief, and a connection check added to the pre-fire checklist
- Thin, short load cell leads made every reconnection a risk. On a rebuild I'd pigtail them to a proper terminal immediately rather than working the original wire
- Intermittent LCD language changes pointed at a noisy or marginal data line — a reminder that a display glitch on a test stand is a signal integrity symptom, not a cosmetic one