Repository navigation
Releases: Pr0metheus2/V10_Dyson_BMS
Release list
v2.3
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
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
- 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
- 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
✨ 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
- 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
- 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
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
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
- 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)