A battery management system (BMS) keeps watch over the cells that make up a rechargeable battery pack to ensure that it never operates outside of its safe operating area. Monitoring parameters like voltage, current, and temperature optimize performance and longevity of the cells, and also prevent dangerous occurrences like fires. Identification of an overheating pack is one mechanism that a BMS uses to detect faulty cells. Unfortunately, temperature sensing is done at the pack level, not at the individual cell level, which means there is no easy way of telling which cell is faulty so that it can be replaced. Considering that a BMS may consist of over a hundred cells, this is a significant issue with current designs.
So, just add more temperature sensors to fix this issue, right? Problem solved. Well, maybe not — adding a temperature sensor for each cell of a large pack, plus the associated hardware that would be needed, would drive the price of a battery pack up by hundreds of dollars, which would price it out of the market. Prolific hardware hacker Manivannan Sivan took a completely different approach to monitoring the temperature of battery pack cells that does not require additional sensors for each cell, but is capable of detecting individual faulty cells at the same time. He did this with a low-resolution thermal camera and some added intelligence from Edge Impulse.
The simple prototype hardware design consists of an off-the-shelf MLX90640 thermal camera with 24 x 32 pixel resolution and a Wio Terminal. The Wio Terminal provides a 2.4-inch LCD screen and an integrated Arm Cortex-M4F MCU running at 120MHz. These were wired together, then positioned on a stand facing downwards. A battery pack with six lithium-ion cells was placed below the thermal camera to prove out the concept. Sivan connected the battery to a rheostat to serve as the load, then set about collecting thermal images.
Collecting data of normal battery cells during operation was easy, but getting images of faulty cells is a bit more challenging. Sivan happened to have some faulty cells around for testing, but if you do not, he suggests approximating the thermal appearance of a faulty cell by placing the tip of a heated soldering iron between a cell (but not too close!) and the sensor. By moving a faulty cell into different positions, he collected a series of thermal images representing each of the six cells in a faulty state. This data was then uploaded to Edge Impulse Studio for further analysis.
Features were generated for the raw thermal data to pick out the most important factors in the data, and also to reduce the computational resources needed for the rest of the analysis. The next step in the impulse is a convolutional neural network classifier that can predict if the battery pack is operating normally, or if one of the particular cells (1 through 6) have gone bad. The model was trained, then tested against a dataset that was not included in the training process. This test showed that the model is able to classify the battery pack state correctly 87.5% of the time. That is quite a good result, and with a bit larger dataset, this accuracy would be expected to improve further.
The Wio Terminal can be programmed with the Arduino IDE, so Sivan deployed the machine learning pipeline from Edge Impulse as an Arduino library. With a few clicks the full classification pipeline could be deployed to the Wio Terminal with no external dependencies.
Sivan’s work showed just how easy it can be to go from idea to prototype when using Edge Impulse Studio to simplify the process of building a machine learning data analysis pipeline. And by taking a different approach, it was found to be possible to increase the safety and longevity of battery packs, while simultaneously reducing their cost — not a bad combination at all! This project page documents the full build process for the curious.
Want to see Edge Impulse in action? Schedule a demo today.