Peter Perkins’ Li Battery Monitoring and Management System (BMMS)
Peter Perkins’ Li Battery Monitoring and Management System (BMMS)
Introduction from Peter Perkins (taken from a thread on the BVS forum)...
“I thought I would start this thread to pull together BMS (Battery Management Systems) ideas for our projects, especially as a lot of us are currently investing in expensive Lithium Cells. Now my ideas below won't be new I'm sure, and I hope everyone will contribute their own freely.
I've been dabbling and experimenting over last few weeks, and I do like the idea of an intelligent expandable BMS. Apologies in advance for my schematic skills, I could also only export the diagrams to a bmp file. For any BMS there are an ever increasing number of desirable features,
but we have to draw the line somewhere for the sake of reproducibility, practicality and cost.
I would like a BMS to monitor individual cells (in my new Li-fepo4 pack) or subpacks (In the case of the Insight). I would like to know the cell V and temp, the pack capacity and voltage etc. I've come up with a digital solution here which has many functions, only limited by the programmers collective ingenuity (Thats all of you)....”
Now my input... I intend to record my efforts at constructing this open source BMS and record here my progress with the aim of helping anyone else who wants the same system to make theirs. MW
General System Description
The system comprises of 2 parts:- the Master Controller (hereafter referred to as ‘the Master’) and the slaves. As you might imagine, the slaves do all the actual work and their efforts are collected, organized, manipulated and regurgitated by the Master in 2 possible ways:- 1/ As a video output in a format usable by any monitor (or TV) with a composite (S-Video) input AND/OR, in the version I’ll be doing, 2/ as a serial data stream capable of being read by a serial to USB adapter connected to a PC so the data from the BMMS can be used in any way you want. I’ll have it providing the data for my own ‘carputer’ (car-based computer) which is always on in my EV for monitoring and control purposes.
Generally, the slaves monitor their cells for temperature and individual cell voltage and will trip an alert if these parameters move outside a pre-defined limit. These limits are set by the operator using the Master programming buttons mounted in somewhere convenient - normally on the dash.
During charging, the Master can limit the charger output (assuming the charger has the facility to allow this) to a level where the 15 ohm load resisters on each slave can by-pass the reduced charging current which allows the cells that have not yet reached the upper voltage limit to continue charging at a very much slower rate. For example on my system, my charger produces around 16A of charge current at full blast and that will be reduced to about 300mA when the first cell hits its upper limit - 3.6V or so for my Thundersky cells. When all the cells have reached their upper limit the Master will switch off the charger completely.
Conversely, when on the road, the slaves monitor the cells for a lower voltage limit. When the first cell reaches this lower voltage limit the Master can cut back the maximum power output of the controller, reducing it progressively in order to prevent any cell from dropping below the pre-defined limit. This prevents the ‘weakest’ cell from being damaged - potentially irreversibly - by being ‘reversed’.
The master also calculates the power being used from measuring the total pack voltage and the pack current and displays this on the dash mounted screen. This also allows the system to give a pack ‘state of charge’ as it measures power out when the motor is running and power in when charging.
The vehicle speed or engine RPM (dependent on the program used) can also be displayed along with an odometer. A future possibility would be to allow the Master to cut the controller back when a predefined RPM limit is reached to avoid the danger of over-revving the motor - possibly to destruction.
The BMMS specifications are as follows:-
Slave Module
One slave module per Lithium Cell.
Supply/Cell Voltage 1.75 - 5.00V DC.
Average Supply Current at 3.35v <1ma.
Voltage Reference (using LM385) 1.235V accuracy 1% Supply/Cell.
Voltage sensing maximum accuracy +/- 20mv.
Maximum balancing/bypass current with 15R resistor 333ma at 5.00V.
Maximum Serial Master Bus data rate 9600 baud.
Maximum cell Capacity 65ah. Can be increased to 650ah.
Maximum 256 Slave Modules per Master Module.
Slave CPU Speed 8mhz with internal resonator (no external resonator required).
Permitted Working Cell Voltage Range 1.75 - 4.30V.
Master Module
One Master module per complete system.
Supply Voltage 8.00-30.00V DC.
CPU Supply Voltage 5.00V.
CPU Speed 8mhz with internal resonator.
Average Board Supply Current at 12.00v <100ma.
Maximum Serial Master Bus data rate 9600 baud.
Maximum Cell Capacity 65ah. Can be increased to 650ah.
Maximum Pack Voltage 650v.
Maximum Charge/Discharge rate depends on current sensor used.
Maximum 256 Slave Modules per Master Module.
Battery Pack Temp Sensor Range (-25 to +100C).
Composite Video Display data rate 9600 baud (SV2000 Video Chip).
Composite RCA Video Monitor Output 1V 75ohm PAL/NTSC.
Charger relay output is board supply voltage max 30v at 500ma.
Opto Isolated Charger/Controller Cutback outputs max 50ma 50v.
The Video display is limited to 16x9 characters in a 0-15 & 0-8 matrix.
Approx Parts Cost inc pcb $5.00 each.
Approx Parts Cost inc pcb $100.00 each.
In my version, I’ll be using the multi-slave printed circuit boards (PCBs) with 16 ‘channels’ on each board ie each 16 channel slave board can monitor 16 cells. As I have 38 cells, I’ll need 3 boards. There are alternative ways to do this eg one slave PCB per cell (single-channel), but the basic slave circuit is no different but generally, in the individual slave PCB scenario, the PCB is mounted on the top of the cell. In the 16 channel PCB scenario, the PCBs are mounted remotely which has advantages - reduced Electro-Magnetic Interference (EMI) for one.
Master PCB Connections
Nominal 12V DC system supply (from vehicle).
There is an ‘interlock’ connection to allow for locking out the BMS if a certain condition applies.
There are 2 PICAXE MCU programming ports for programming the onboard MCU’s with updated programs.
There is an isolated vehicle charger cut-back connection to reduce charger output for cell balancing.
The Charger Relay connection allows for the powering on and off of the charger according to state of charge of the pack.
There is an isolated vehicle controller cut-back connection to reduce controller output when one or more cells are getting low to prevent cell reversal.
There is a remote sensing connection which, when used with the matching transmitter PCB can transmit basic system data to a receiver located remotely from the vehicle (in the lounge, say).
The video output connects to any s-video compatible device eg an LCD monitor (dash mounted), a TV, a video recorder etc. This displays the system data and alerts and is also used for programming the system eg high cell voltage alarm set point.
A small buzzer on the Master PCB is used to alert the user to alarm states.
A Hall effect current sensor can be fitted to measure motive power and charging current.
There are 2 diferent methods of temperature measurement. One uses simple analogue (LM335) sensors (connected via AN1 and 2 connectors) and a digital method where IC2 transducers can be daisy-chained to provide up ?? sensors all on the same cable which ultimately connects to the ‘IC2’ connector.
The Master PCB 'Master Bus', J11 connects to Slave PCB 'Master Data Bus', Conn3. This is the principle route for CONTROL data that is sent to and fro between the Master PCB and the Slave PCBs. To continue the bus connection beyond the first Slave PCB, the other end of the Slave PCB 'Master Data Bus', Conn 4, connects to the Conn3 of the next slave board and so on.
The Master PCB 'Slave Bus', J8 connects to the Slave PCB 'Slave Data Bus In', Conn1. This is the principle route for INFORMATION data that is sent from the Slave PCBs to the Master PCB. To continue this bus connection beyond the first Slave, the Slave PCB 'Slave Data Bus Out', Conn2 daisy chains to the next Slave PCB 'Slave Data Bus In', Conn1 etc.
One simple twisted pair from Cat5 cable is ideal for these connections. The twisting helps reduce the effects of EMI (electrical noise) on the system. All wires should be kept as short as possible. The polarity of the inter-board connections is important, so pin 1 of any connector goes to pin 1 of any other.
J9 connects to the dash mounted control/programming buttons and status LEDs.



Slave to cell connections... As the 16xmulti-Slave PCBs are situated remotely from the cells they are monitoring, you could run 2 wires for each cell to its slave. However as the voltage on two the two wires from an adjacent cell (one -ve for one cell and the other +ve for the other adjacent cell) are at the same voltage, you only need the one wire. Thus adjacent cells share the connection, saving a wired connection per cell. These wires should be at least 0.5mm^2 (20 gauge) with a 1A, suitably rated (for your pack voltage), soldered in-line fuse. Again, keep them as short as practicable as the voltage drop in unnecessarily long leads can cause interference with each other when switching the loads when only one wire is used.

The display showing a nominal state for Peter’s setup.
Next Page...