Today was not really nice outside. I stayed in, worked on my commercial project and done a few things to the BMS. Yesterday after quite a few hours of work on the commercial project I could not resist to start that new resistor network for the BMS cell voltages. Since the trim pots had arrived I wanted to do a prototype. Not on the extender shield in case I still need changes but on a separate little board.


I adjusted the values to maximise the voltage range from measurement through the Arduino. This will be done again with the real battery since the simulation with resistors is only a means to test the basic functionality and not the right way to get some precision into that measurement. I will use a reference voltage of 4.19V with a zener diode. The expected cell voltages should not exceed 4.2 or so. I will calibrate the measurement circuit to 4.5 V which is almost 1:1 with the input range when using my voltage reference. This is enough precision for this application.

This is where I left off last night and then today I added a few pages to the display and combined my software routines for the display and the measurements. I am still working on extensions but it is coming along well.

Here are some screen shots from the display pages.


With more pages I now need a menu page otherwise I have too much clutter on the individual pages. With a menu page I can easily add more display options if needed, and one I still not on there and that is the meter page for charge in and out.


The options page is used to set the operating parameters for the BMS and the values are stored in the EEPROM of the Arduino.



I have added a page for testing. This will help me now to check the functionality but I will leave it in because later in the field I can use these functions to check individual components easily. I don’t like devices which don’t allow diagnostics or testing without some special equipment, which unfortunately is pretty much any smaller device. Developers have not learned or just don’t get the budget to do it properly, and it does not mean that these test options need to be visible all the time. Like my large poster printer which offers an extensive test menu and functions which one can enter with a special key combination. I will secure these buttons with a key code using the cell number buttons, that one cannot accidentally execute one of the test functions. The pages has also a message field where I can display debug codes for easier diagnostics if something goes wrong. I mean this is the beauty of a pixel display with a bit or resolution and capabilities. It also allows easy remote display connection. I will use a box for all the components but a separate display enclosure for easier installation, unlike my levelling system. I might actually change that, but not now.


The page with the cell voltages has received a message field at the bottom for some additional text display explaining the status.


The bank display is the same except the menu button, but the others are removed.

bms_form_balanceThis is the display when balancing a cell. The cell number will show in the title and one can check the progress. I will add a timer, that one can see the progress over time. I will also log these events in the log. One can set a sampling rate for readings. This will depend on real world conditions, mainly on the capacity of the cell and the charge current. I expect to have a maximum of 2 Amps for the balancing current.

All the display pages are working and I am now fine tuning the logic and testing the various cases.


Above is a movie showing how the measurements jump when one uses the data straight from the Arduino pins without any processing. I added an average routine and minimum change threshold and now the readings are smooth and stable. A video about that is just like a still picture, nothing happens so I did not bother.

Will keep working on this today until late.