Skip to content

Release 109

Choose a tag to compare

@PCrnjak PCrnjak released this 10 Nov 15:19

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: #Cal runs the calibration, then both, and saves; #Calonly is the calibration alone.
  • Sound through the motor: tones, a queue of notes and samples (CAN 44 and 45, #Tone).
  • Identification: #Info and 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: Failed and 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 #Cal is 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); #Ilim and #Vlimit take the magnitude; the current of a gripper move stays within 0-2800 mA; #PP and 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 #Info and measures the zero by itself once the supply is there.
  • #Error says FAULT 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. #Encal and #Cogcal start 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. #Info says 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 at 0x08003000, 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).