You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Launch time follows imported curve: The launch reference duration is now a configurable setting (launch_time_ms, 60–300 ms, default 150 ms). Previously, the reference trajectory was stretched over a fixed 150 ms regardless of curve duration. Importing an optimized curve now transmits its simulated spin-up time alongside the 16 knots (launch_curve set <16 knots> <ms>).
Launch Acceleration Feed-Forward (accel_ff, 0–250 %, default 100 %): Adds torque/voltage compensation proportional to flywheel acceleration along the reference curve trajectory, eliminating the ~11 ms PID lag during spin-up. Launches reach target RPM faster and track the reference much more closely. Set accel_ff 0 to revert to previous behavior.
5S Optimized Launch Curves: Added precomputed curves (145, 140, 130, 125, 120, and 115 ms) in Optimized Ramp/, along with a complete bench-testing procedure in docs/LAUNCH_TIME_LADDER.md.
2. Thermal Calculator Calibrated with Measured Values
Motor Resistance Correction: Phase-to-phase motor resistance updated from 0.20 Ω to 24.7 mΩ based on 4-wire Kelvin bench measurements. The previous value included probe and contact resistance, artificially capping 4S spin-up model performance and overstating per-launch heat dissipation ~8×.
Calibrated System Defaults: Updated model defaults to ESC $R_{ds(on)}$ 6 mΩ (Vortex F65 / VSP003N04MS-G), 5S 21.0 V pack, 30 mΩ pack ESR estimate, and a 60 A post-BEMF current ceiling.
Dual-Motor Shared Pack Sag: Voltage sag modeling now accounts for both motors drawing from a single battery pack simultaneously.
Firmware Resistance Model: Model launch resistance MODEL_LAUNCH_R_LL_OHMS adjusted from 29.4 → 31 mΩ (motor + FETs + PCB traces) for accurate launch current telemetry.
3. Autotune & Tuning Workflow Enhancements
Hold FIRE (≥100 ms) to Cancel Tune: Autotuning can now be safely cancelled directly from the blaster at any time by holding the FIRE trigger for 100 ms. The motors glide down smoothly without hard active braking. The cancel only arms after the trigger is released, safety faults take precedence, and the solenoid pusher cannot actuate.
OLED Live Tuning Diagnostics: The blaster display now shows real-time autotune progress: stage name, step progress bar, target RPM, pass number, individual motor RPMs, and "Hold FIRE to stop". Aborted or stopped runs display the exact failure reason and measured value against limits (e.g. M2 rise 320>300ms).
Cross-Target PID Selection (TUNING_SELECT_PID): Autotune now evaluates distinct per-target best PID gains across preset RPM targets with normalized scoring weighted by mapped presets, rather than picking raw score minimums across disparate RPMs.
Single-Motor Coast & Glide Protections: In single-motor autotune, the motor not being tuned now coasts via the decel glide law (hold throttle for RPM - slip) instead of being ramped into DShot 0 at speed. Stale telemetry glides decay smoothly from the loss point, and the autotune result screen keeps the production loop alive at target 0 until active glides complete.
PID Integral Bleed: Replaced the abrupt zero-on-overshoot integral wipe with a gradual 50 ms bleed acting only beyond $\max(150\text{ RPM}, 1%)$, preventing eRPM quantization jitter (~110 RPM at 31k) from wiping trim.
Configurator UI Improvements:
Stage markers are plotted using actual firmware timestamps (fixing a bug where all drew at $t=0$).
Clear messaging for feed-forward reuse, measurement, or recalibration.
Aborted runs show specific measured metrics and failure limits.
Results table includes Start column, Kp, Ki, and launch limiter attribution.
Per-Tick Launch-Limit Logging: launchtrace now logs ref, lim1, lim2, bind1, and bind2. Telemetry streams output LIM1/LIM2, and tuning result packets track the percentage of launch time each limit was active.
4. Safety & System Fixes
Deferred Flash Commits: Flash EEPROM writes (~50+ ms with interrupts disabled) now go through eepromCommitOrDefer() and are flushed from loop() once motors are idle (DSHOT_CMD_STOP), no pulses are active, and no decel glide is underway.
Hardware-Timed Solenoid Cutoff: Solenoid ON pulses are backed by a hardware alarm timer with generation tracking, ensuring that a stalled loop cannot stretch the coil pulse and overheat the solenoid.
Stall Lockout Protection: Stall lockout now latches for ≥ 1 second and only clears upon trigger release, preventing idle hold and Always On spin from repeatedly driving into a jammed dart.
Global Flywheel RPM Limit (max_rpm): Configurable RPM ceiling (default 40,000 RPM, range 10k–60k) that caps all presets, Always On, and tuning runs. Exceeding 105% of the limit commands a gentle coast rather than slamming to minimum throttle. Configurator slider added.
Menu Glide Servicing: Resolved an issue where control-tick timers were inactive during menu mode, ensuring that decel glides initiated on menu entry always finish smoothly.
Full DShot Range: DSHOT_MAX_THROTTLE updated to 2047 for full DShot protocol range.
EEPROM Settings Schema v45 → v46: Existing settings are preserved across the upgrade. Default launch time is initialized to 150 ms and acceleration feed-forward to 100 %.
PID Validation Invalidation: Because launch settings are included in the configuration fingerprint, existing validation badges will show "changed since validation". Running a quick Tune Blaster session is recommended.
Web Configurator Compatibility: Use the matching v1.1.20 web configurator to support the new launch duration and feed-forward parameters.
6. Automated Releases
Added GitHub Actions workflow (.github/workflows/release.yml) for automated builds and testing on GitHub runners.
Added tools/tag_release.sh for one-command tagging, verification, and status monitoring.
Assets
Byte_Blaster_RP2040_v1.1.20.uf2: Drag-and-drop firmware binary for RP2040 bootloader.
Byte_Blaster_RP2040_v1.1.20.bin: Raw flash binary.