Repository navigation
Release 109
Spectral Micro BLDC firmware V109 — application image for flashing via the Spectral bootloader. From 109 the Spectral Micro and the STEPFOC share their version numbers, so there is no 108: 109 follows 107. Everything below is described in the manual: Spectral Micro docs; what a driver keeps and what to run after the update: Upgrading from older firmware.
Phase B (the main fix)
- In every release up to 107 the gate driver's phase-B enable input was fed by the microcontroller's 8 MHz clock output instead of a steady level, so phase B could drop out: weaker or uneven torque, a calibration that failed with a wrong pole-pair count, or a motor that took a current command and did not move, with no error. 109 drives the pin properly. On the bench: 5 of 5 calibrations and full torque on every test, also over 10 restarts.
- The calibration now reports the true phase resistance and inductance (on the reference gimbal motor about 7.0-7.2 Ω and 1.75-1.9 mH, where 107 reported about 6.4 Ω and 1.25 mH); the old × 1.25 correction is gone.
- After the update: a calibration made with 107 keeps working. Calibrate again (
#Cal) where the motor can turn freely, so the current gains follow the true values. An assembled SSG-48 gripper keeps its calibration: apply Motor GUI's SSG-48 preset instead, with the gripper's CAN ID set first.
New features
- Parameters: any setting or read-out by number over CAN (commands 36-38) or
#Par(parameters 1-89). Identity (39) and telemetry (40) frames. - Capture, histogram and buffers (41-43).
- Watchdog actions: idle, brake, coast, hold the position, or descend at a capped speed, with a fallback time.
- Current loop from R, L and one bandwidth (parameter 49, default 160 Hz; the SSG-48 preset uses 300 Hz). Measured on the bench and on by default: the direct PLL speed estimate at 100 Hz and commutation delay compensation of 234 µs (a speed step overshoots about 18 % instead of 63 %).
- Encoder table and anti-cogging measured on the driver:
#Calruns the calibration, then both, and saves;#Calonlyis the calibration alone. - Sound through the motor: tones, a queue of notes and samples (CAN 44 and 45,
#Tone). - Identification:
#Infoand parameters 84-87 report the build (git commit), the board ID and a calibration ID. Parameters 88 and 89 are an experimental current-sampling diagnostic, off by default. - Settings in blocks with their own checksums; a reset keeps the CAN ID; a product lock refuses a STEPFOC image on a Spectral board.
Calibration
- Both current sensors are averaged; pole pairs 1-49; a rotor that does not follow the open-loop field ends with
Open loop: Failedand two hint lines; an inductance that gives no gains fails the calibration instead of hanging. - Kt and KV are measured in four spins alternating direction; a warning only when two same-direction spins differ by more than 5 %.
- The gate driver stays awake for the whole calibration. A failed calibration switches the bridge off at once and enables all three phases again. An E-stop ends a calibration, and
#Calis refused while one is latched. Calibrating many times without a power cycle no longer uses up memory.
Safety
- The control loop keeps the gate driver awake in every driving mode: a command arriving at the wrong moment could leave it asleep, with no torque and no error, until the next idle.
- Limits: a negative or not-a-number value is ignored by the legacy CAN frames (limits, gains, Kt, voltage limit 0-60000 mV);
#Ilimand#Vlimittake the magnitude; the current of a gripper move stays within 0-2800 mA;#PPand parameter 78 take 1-49 pole pairs, only while idle (50 and more would read as a STEPFOC calibration at the next start). PWM duties stay between 0 and 100 %. - The current-sense zero waits for the motor supply: started on USB before the supply, the driver used a zero about 100 mA off. It now says so in
#Infoand measures the zero by itself once the supply is there. #ErrorsaysFAULT pin is LOW: the gate driver reports a fault(the text said HIGH). No undervoltage error while the supply ramps up at power-up.
CAN bus
- A gripper poll right after a new move command no longer cancels it as new: object detection reports contact again (it read "at position" while pressing on an object). The same in every release before 109.
- The current and PD frames set their setpoint and mode together. Length codes above 8 are read as 8; extended (29-bit) frames are ignored.
- Watchdog: setting its time or a save starts a fresh window; a negative time means off; hold and descend no longer use the last moving loop's delay compensation.
Bug fixes
- After
#Cal, a host that takes the driver within 3 s drops the encoder-table and anti-cogging runs.#Encaland#Cogcalstart only on their own words. While such a run turns the motor, a capture is not armed and the histogram is not changed. - A storage block whose check fails is read up to three times before its defaults are used.
#Infosays the anti-cogging is saved only while what is in RAM equals what is stored. - The sound queue and sample buffer no longer replay old content after a stop; a pitch the driver cannot play answers
Tone: not played.
Compatibility
- Python library 1.21 or newer (
pip install --upgrade Spectral-BLDC), Motor GUI 0.5.0. - Bench-tested for this release: calibration, current mode, restarts, the E-stop, the encoder table and anti-cogging, and the SSG-48 gripper on its 107 calibration. Not tested on the bench: an upgrade from V103 with the ST-Link, a downgrade, and on the Spectral Micro the watchdog actions, the capture and the sound (the same code passed on the STEPFOC).
Assets
spectral-bldc-firmware-V109.bin— application firmware image (flash at0x08003000, target STM32F103CB).firmware.json— manifest with version, size, and SHA-256 for download verification by the web flasher.
Integrity
- SHA-256:
96945eec70be12f0e74c6add5fd9fafd4054677e4ebf29d0380062c77a4f6d87 - Size: 112420 bytes
Built from commit b5cedd5 on Bootloader_main (#Info shows it as Build: B5CEDD5). Includes bootloader entry support (CAN/UART reset-into-bootloader).