# FU-Dyson-BMS
### An (Unofficial) Firmware Upgrade for Dyson V6/V7 Vacuum Battery Management System (BMS)
![Github Header Image](https://user-images.githubusercontent.com/46428760/168486653-8b8b696d-0bcb-4679-95c9-0377f26ec008.jpg)
------
**Dyson vacuum batteries are designed to fail.**
Here's why:
1. Series battery cells in a battery pack inevitably become imbalanced. This is extremely common and why cell balancing was invented.
2. Dyson uses a very nice ISL94208 battery management IC that includes cell balancing. It only requires 6 resistors that cost $0.00371 each, or 2.2 cents in total for six. [^1]
3. Dyson did not install these resistors. (They even designed the V6 board, PCB 61462, to support them. They just left them out.)
4. Rather than letting an unbalanced pack naturally result in lower usable capacity, when the cells go moderately (300mV) out of balance (by design, see step 3) Dyson programmed the battery to stop working...permanently. It will give you the 32 red blinks of death and will not charge or discharge again. It could not be fixed. Until now. [^2]
FU-Dyson-BMS is a replacement firmware for the microcontroller inside Dyson V6/V7 vacuum batteries. By using this firmware, your battery pack will not become unusable if the cells become imbalanced, you will just have reduced battery capacity as usual. It will also allow you to replace the battery cells to repair your battery, rather than be forced to replace it.
Demonstration, disassembly, and programming video:
https://www.youtube.com/watch?v=dwyA5rBjncg
[![FU-Dyson-BMS - (Unofficial) Firmware Upgrade for Dyson V6/V7 Vacuum Battery Management System](https://img.youtube.com/vi/dwyA5rBjncg/0.jpg)](https://www.youtube.com/watch?v=dwyA5rBjncg)
## Revolutionary features:
- Cell balance LED indicator
- State of charge LED indicator
- Robust fault handling and logging
- Total runtime tracking
- Can be run in debug mode for near-real-time diagnostics
- Doesn't brick itself!
- Doesn't generate e-waste and try to take your money when your cells go out of balance!
## Why you would want this:
- You want to vacuum your apartment but your cells became slightly out of balance because you left the vacuum off the charger for too long and now your vacuum doesn’t work (ask me how I know)
- You want to replace a bad cell in your battery pack
- You want to understand what your battery is doing and why.
- You don’t like feeling like a cash cow being squeezed for all you’re worth.
## Compatible vacuums/batteries:
- Dyson V7 - Model SV11 - PCB 279857 - Compatible + Tested
- Dyson V6 - Model SV04/SV09 - PCB 61462 - Compatible + Tested
- Dyson V6 - Model SV04 - PCB 188002 - Compatible + Tested
Note: the model numbers are kind of weird. There are three different ways to identify/categorize your vacuum:
1. The advertised version number (V6, V7, etc)
2. The actual model number printed on the battery (SV04, SV09, SV11)
3. The part number printed on the battery PCB (61462, 279857, 188002).
Some models like SV04 contain different versions of the battery PCB. Many of these PCB versions are extremely similar and I have no idea why Dyson seems to have made at least 5 different versions. I recommend you use the PCB part number for reference if possible, or the model number printed on the battery otherwise. I still use the V6, V7 names in some places since that is what most people are familiar with, and I keep changing my mind as to which identification method is better.
**Probably not compatible:**
(Although it’d be interesting to see PCB photos of them to be sure)
- V10 vacuums
- V11 vacuums
- Anything newer
If you aren’t sure if your battery is compatible, please submit a Github issue with the highest quality photos possible of the battery PCB and provide the advertised model number (V6, V7, etc) and printed model number (SV09, SV11, etc) and I’ll try to tell you if it will work.
## How to install it:
Warning: The firmware flash process is irreversible. It is not possible to restore the factory firmware.
Summary:
0. Be careful. Li-ion batteries are no joke and must be respected. You're working on a live battery pack that can output 100+ Amps if short-circuited.
1. Disassemble battery pack to access PCB
2. Make sure all cells are charged above 3V and that the pack LEDs do *something* when you press the button (with magnet on reed switch if using V7). This confirms the 3.3V rail is regulating and the PIC is awake/working.
3. Remove conformal coating over programming connection points (if applicable)
4. Connect PICkit to computer and, if you using a PICkit 3 or clone, install the [PICkit 3 Programmer App and Scripting Tool v3.10](https://ww1.microchip.com/downloads/en/DeviceDoc/PICkit3%20Programmer%20Application%20v3.10.zip). (https://www.microchip.com/en-us/tools-resources/archives/mplab-ecosystem)
5. Connect PICkit to BMS board as shown below:
6. Wake up battery pack by pressing button and placing magnet on reed switch (if using V7 vacuum)
7. While maintaining tension on wires to BMS board, make sure PICkit can see the PIC16LF1847 microcontroller, then import and write the hex file from the latest GitHub release.
For more details, see video linked at the top (https://www.youtube.com/watch?v=dwyA5rBjncg).
Disclaimer: Lithium-ion batteries can be dangerous and must be respected. Proper cell balancing may reduce this danger which is why only trained professionals who implement cell balancing according to the manufacturer recommended best practices should work on them...wait...well that doesn't include Dyson either so I guess we're on our own. According to the internet, they can spontaneously catch fire, burn your house down, drain your retirement fund, and run away with your wife. Consider yourself warned, and please don't sue me if something goes wrong because I assume no liability and provide no warranty. See section 15 and 16 of the COPYING file for more details.
## Miscellaneous Thoughts on Repairing a Battery Pack
![Battery Cell Connections and Measurement Points](https://user-images.githubusercontent.com/46428760/168488794-7eb77a0e-5629-472b-b02a-e23a85353311.jpg)
If you left your battery in storage for a long time, you may have found it no longer turns on at all and won’t charge either. This is because the battery cells have self-discharged so low that the ISL94208 won’t even turn on, which means the microcontroller won’t turn on either.
If you connect a constant current power supply directly to the terminals of the battery pack bypassing the BMS board, you can slowly recharge the cells until they are back within a normal voltage range (above 3V). I've found the [PCBite probes](https://store-usa.arduino.cc/products/4x-sp10-probes-and-test-wires?selectedStore=us) to work well for easily connecting any cell or pack to a bench power supply. Soldering small wires to the nickel strips or jamming on alligator clips somehow would probably work too. I recommend charging at 50-100mA until all cells are over 3V. For safety, you don’t want to charge a battery that’s been depleted too far at the normal charge current (700mA).
After all cells are above 3V, the BMS should power up as usual. If you aren’t getting the 32 red blinks of death, you might not even need to install this firmware (as much as it pains me to admit it). While you have the battery disassembled, I’d recommend making sure all the battery cells are within 100mV of each other,