Skip to content

Releases: Pr0metheus2/V10_Dyson_BMS

v2.3

Choose a tag to compare

@Pr0metheus2 Pr0metheus2 released this 14 Oct 16:43
a90e248

SoC Checkpoint And Reliability Improvements

  • Added 200 mAh charge-state EEPROM checkpoints during charging and discharging.
  • Sleep-time charge checkpoint is now skipped when SoC changed by less than 100 mAh.
  • Fixed EEPROM page writes to preserve the sleep-wake flag.
  • Added EEPROM read/write/commit error handling.
  • Hardened BQ76930 initialization against I2C failures and invalid ADC calibration data.
  • Added serial-debug messages for saved, skipped, and failed EEPROM checkpoints.

v2.2

Choose a tag to compare

@Pr0metheus2 Pr0metheus2 released this 07 Sep 12:15
bbb706f

Improved coulomb-counter state-of-charge precision

  • Reduces accumulated rounding error during charging and discharging.
  • Keeps fractional charge measurements between BQ76930 samples.
  • Maintains protection against small zero-current measurement noise.
  • Reduces interrupt processing overhead by removing floating-point calculations from the coulomb-counter path.

v2.1

Choose a tag to compare

@Pr0metheus2 Pr0metheus2 released this 02 Sep 15:40
  • Full-charge pauses now use a true 30-second timer.
  • Already-full packs enter the full-display state directly when a charger is connected, preventing the idle/charger state loop.
  • Capacity and version displays remain available during full-charge pauses.
  • Charge safety checks now continue during capacity and version LED displays.

Files:
V10_BMS_2.1.elf - ELF file for use with Microchip studio or OpenOCD (WCH-Link CMSIS-DAP programmer set to ARM mode) - however, initial battery unlock must be done by RaspberryPi or Microchip studio)
Ver_2.1_img.zip - unzip and write to an SD card >2GB in size using BalenaEtcher. Insert into a RaspberryPi and use the GPIOs to unlock and flash the pack's MCU!

v1.9

Choose a tag to compare

@Pr0metheus2 Pr0metheus2 released this 31 Aug 16:21
  • Fixed BQ76930 I2C failures potentially being treated as valid measurements.
    • Failed BQ76930 register-address writes no longer proceed to the register read.
    • Cell-voltage, temperature, and coulomb-counter reads now report success or failure.
    • Charge and discharge safety checks fail closed: failed BQ76930 reads reject operation and set BMS_ERR_I2C_FAIL.

Files:
Ver_1.9_img.zip - unzip and write to an SD card >2GB in size using BalenaEtcher. Insert into a RaspberryPi and use the GPIOs to unlock and flash the pack's MCU!
V10_BMS_1.9.elf - ELF file for use with Microchip studio or OpenOCD (WCH-Link CMSIS-DAP programmer set to ARM mode) - however, initial battery unlock must be done by RaspberryPi or Microchip studio)

v1.8

Choose a tag to compare

@Pr0metheus2 Pr0metheus2 released this 13 Aug 20:40

✨ What's New in v1.8

LED Gestures: Capacity & Firmware Version Display

You can now check the learned battery capacity and installed firmware version directly using LED flash sequences.

Note

Trigger gestures are available only during active charging. Trigger input is ignored during display and until released to prevent retriggering.


🔋 Learned Total Battery Capacity Display

  • Gesture: Hold trigger for ~5 seconds.
  • Format: Shows (total_pack_capacity / 10) as 3 zero-padded digits using the LEDs:
    • Blue LED 1: Thousands digit
    • Blue LED 2: Hundreds digit
    • Blue LED 3: Tens digit
  • Timing: Each digit uses 250 ms flashes with 1-second pauses between digits.
    • Example (1850 mAh): Blue LED 1 = 1 flash | Blue LED 2 = 8 flashes | Blue LED 3 = 5 flashes
    • Example (2100 mAh): Blue LED 1 = 2 flashes | Blue LED 2 = 1 flash | Blue LED 3 = 0 flashes

🏷️ Firmware Version Display

  • Gesture: Press trigger 5 times within 5 seconds.
  • Format:
    • Blue LED 2: Remains steady on as a version indicator.
    • Blue LED 1: Flashes the major version number.
    • Blue LED 3: Flashes the minor version number.
  • Completion: Ends with all LEDs off for 1 second before resuming normal charging breathing.
    • Example (v1.8): Blue LED 1 = 1 flash | Blue LED 2 = Steady | Blue LED 3 = 8 flashes

📦 Attached Binary Files

  • Ver_1.8_img.zip
    Unzip and write this image to an SD card (>2GB) using BalenaEtcher. Insert it into a Raspberry Pi and connect via GPIOs to automatically unlock and flash the pack's MCU.

  • V10_BMS_1.8.elf
    ELF binary for flashing via Microchip Studio or OpenOCD using a WCH-Link CMSIS-DAP programmer (set to ARM mode).

Important

The initial battery unlock (when switching from original firmware) must be performed using a Raspberry Pi or Microchip Studio before using OpenOCD.

v1.7

Choose a tag to compare

@Pr0metheus2 Pr0metheus2 released this 10 Aug 12:19
  • Added cell-balance indication when charger is unplugged during charging:
    • No red flash when cell imbalance is <= 50 mV.
    • One 250 ms red flash per additional 50 mV of spread.
    • 250 ms delay before the first flash and between subsequent flashes.
    • Runs after the welcome sequence when charger is removed
  • Final full-battery display after full charge done extended to 60 seconds
  • Reworked standby behaviour - disables watchdog before sleep to prevent unintended resets (bugfix)
  • Increased welcome LED sequence timing from 10 ms to 20 ms per step.
  • Now, after the success firmware flash, all LEDs show welcome light (before, only last 4 were working) (bugfix)

Files:

  • Ver_1.7_img.zip - unzip and write to an SD card >2GB in size using BalenaEtcher. Insert into a RaspberryPi and use the GPIOs to unlock and flash the pack's MCU!

  • V10_BMS_1.7.elf - ELF file for use with Microchip studio or OpenOCD (WCH-Link CMSIS-DAP programmer set to ARM mode) - however, initial battery unlock must be done by RaspberryPi or Microchip studio)

v1.6

Choose a tag to compare

@Pr0metheus2 Pr0metheus2 released this 09 Aug 14:49
d1504d9
  • Coulomb counting implemented
  • Initial battery capacity for Coulomb counting set to 2300mAh
  • After firmware flash, please perform battery Discharge/Charge in order to calibrate Coulomb counting

Files:

  • Ver_1.6_img.zip - unzip and write to an SD card >2GB in size using BalenaEtcher. Insert into a RaspberryPi and use the GPIOs to unlock and flash the pack's MCU!

  • V10_BMS_1.6.elf - ELF file for use with Microchip studio or a WCH-Link CMSIS-DAP programmer (set to ARM mode - however, initial battery unlock must be done by RaspberryPi or Microchip studio)

v1.5

Choose a tag to compare

@Pr0metheus2 Pr0metheus2 released this 05 Aug 08:10
4a6574d

Feature/Implemented faster wake startup

  • EEPROM wake flag is read before BQ initialization.
  • delay_ms(100) now runs only for a true power-up.
  • Sleep wake keeps BQ protection initialization and the existing 420 ms post-output validation grace period.

Files:
Ver_1.5_img.zip - unzip and write to an SD card >2GB in size using BalenaEtcher. Insert into a RaspberryPi and use the GPIOs to unlock and flash the pack's MCU!
V10_BMS_1.5.elf - ELF file for use with Microchip studio or a WCH-Link CMSIS-DAP programmer (set to ARM mode - Initial battery unlock must be done by RaspberryPi or Microchip studio)

v1.4

Choose a tag to compare

@Pr0metheus2 Pr0metheus2 released this 30 Jul 15:03
60de496

Changes from https://github.com/davidmpye/V10_Dyson_BMS v1.2

  • Added one-time EEPROM boot marker so the startup LED sequence is skipped after waking from sleep, but still shown on true power-up/reset.
  • Added startup LED sequence on charger disconnect and when full charge completes.
  • Replaced charging LED flash with a hardware PWM breathing effect. The active charge segment now breathes while lower segments remain steady.
  • Max charge voltage set to 4.15 V per cell to prolong battery life (Changed overvoltage trip to 4.20 V per cell)
  • Battery voltage is saved before battery goes to sleep; voltage is shown immediately after wake up from sleep
    decreased time when output is enabled after trigger pressed (faster battery start)

v1.3

Choose a tag to compare

@Pr0metheus2 Pr0metheus2 released this 09 Aug 14:18
  • removed small extra latency when "Trigger pressed" by removing duplicated bms_is_safe_to_discharge() when trigger pressed, which was called twice
  • removed extra latency when "Trigger pressed" by disabling serial debug mode
    • Debug mode is useful for development, logging, and diagnosing faults
    • Not required for normal pack operation to speed up running process
    • Debug mode can be still enabled in config.h; just uncomment line:52 -> // #define SERIAL_DEBUG 1
  • sleep timeout changed to 60 seconds in src/config.h
  • removed the boot LED animation when battery enters sleep mode and wake up from the sleep
  • watchdog service fixed
  • bugfix - charger insertion disables discharge immediately, even if trigger is still held
  • Added startup LED sequence on charger disconnect
  • Added charging LED breathing effect. The active charge segment now breathes while lower segments remain steady.
  • Changed max charge voltage to 4.15 V per cell.
  • Changed overvoltage trip to 4.20 V per cell.
  • Coulomb counting deactivated (temporarily)