Battery Management System

There are no identifying markings on the BMS as to its manufacturer. It appears to be much better constructed than a typical Chinese product. The Kokam cells are Korean, so maybe the BMS came directly from Kokam or a Korean subcontractor?

All the BMS's connectors use a 2mm pin pitch. I've documented the connections below via observations and some speculation. All of the connectors (with the exception of CN1 and CN2) use a different number of pins. That's smart as it helps prevent wiring mistakes. The unit is smaller than I had imagined prior to seeing it firsthand. It measures approximately 135 x 80 x 15 millimeters.

CN1, 14 positions, Bottom Link (not used). Possibly to connect other BMSs together?

CN2, 14 positions, Top Link (not used). Possibly to connect other BMSs together?

CN3, 10 positions, DCIN. Full battery voltage to power BMS is applied here. These connections appear to have been soldered.

CN4, 6 positions, S/W Loading. Presumably, to load software (firmware) into the BMS. Possibly a JTAG port?

CN5, 32 position, Relay Contacts/GPIO. GPIO stands for general-purpose input/output. The wiring connects to the charge and discharge relay's coils.

CN6, 8 positions, Current Sensing. The Hall-effect current sensor connects here. There's probably also a provision for a resistive current shunt.

CN7, 12 positions, RS232/RS422. RS-422 in a multi-drop network interface in which 2 wires can connect multiple slave devices to a single master. The RS-232 interface connects a single BMS to a computer.

PH1, 30 positions, Cell Monitoring. One wire goes to each cell so individual voltages can be determined. Any cell balancing would also be accomplished using these wires.

PH2, 16 positions, Temp Monitoring. Apparently, there are 7 temperature sensors embedded in the battery pack.

Photo Credit: Inch Perfect Trials

RS-232 Retrofit

As mentioned previously, I saw a DB-9 connector in the Canadian EM importer's presentation on the battery. He also said that EM could remotely diagnose battery issues.

Here are the connections I made:

  • CN7 pin 1 connects to DB-9, pin 2

  • CN7 pin 2 connects to DB-9, pin 3

  • CN7 pin 3 and/or pin 4 connects to DB-9, pin 5

CN7 is for RS-232 and RS-422 communications

Detective Work

It may be illustrative to describe how I determined the proper wiring for the RS-232 retrofit as an aid to your future projects. I started by finding an appropriate female header to plug into CN7.

I had something with about 26 pins made by Hirose reclaimed from a photocopier. I cut it roughly in half to fit CN7 and all of its remaining 14 positions were populated with wires. That made life easy because it's no fun to hand-crimp these small terminals.

I started by testing for continuity between battery negative and the pins on CN7. I found two that measured under 1 ohm (pins 3 and 4). This I assumed was the RS-232 port's ground/common connection. Then I measured the resistance between Common and the other CN7 pins. I found one that exhibited about 4.4k ohms to ground. This I assumed to be the receive pin. Then I turned on the battery and looked for voltage. One pin was at about negative 4 volts with respect to ground. This I assumed would be the transmit pin. I assumed no hardware handshaking would be used, so only TX and RX were needed. The battery's DB-9 needed to be female to plug directly into an extension cable.

Due to the nature of how I discovered the proper wiring, I connected both CN7 pins 3 and 4 to pin 5 of my DB-9. I removed all the remaining wires (pins 5 – 14) from my mating connector for neatness and safety. It's easy to remove a wired pin with a sewing needle – a bit of prying and tugging is all that's required.

The hole for the DB-9 was made by hand using a bracket from an old ISA PC card as a template. The first mounting hole was located, drilled, and tapped for a #4-40 screw. This screw held the bracket in place while the second mounting hole was drilled and tapped. With the bracket secured, the D-shape cutout was scribed, drilled, and filed for a nice fit. Tape on the inside of the enclosure caught any shavings.

DB-9 Connector for BMS communications retrofitted to battery box.

5.7 BMS Serial Communications

The following is a brief subset of the information that I observed using a PC terminal emulator program via a “straight-through” RS-232 serial cable. Serial communication parameters are 115,200 baud, 8 data bits, no parity, and 1 stop bit. Eventually, I'll generate a comprehensive document that will be available for download.

The text shown in purple is exactly as received from the battery. It is human-readable ASCII characters.

An initialization screen (not shown) is sent automatically each time the battery is switched on.

I got very lucky when I typed a “?” at the command prompt and was rewarded with the following:

Available commands:

b - BMS status, b +/-/1 ~ n

d - debug command, d +/-/0 ~ 7

e - Cell Balancing, e +/-

f - Fault Release, f +/-

i - BMS ID set, i /1 ~ n

l - Log display, l /1 ~ 59

m - Monitoring, m +/-/1 ~ n/99

? - show this text, ?


I don't doubt there are also some undocumented commands. (And possibly a few booby traps for the unwary.)

The prompt is: BMSB1.23d2>

Sending a lowercase "m1" followed by a carriage return produces the following (repeating) result:

Module- 1:

Cell Voltage: 3892 3892 3892 3894 3892 3889 3892 3891 3891 3891 3891 3891 3891 50589 3894 3889 5

Cell Temperature: 200 205 205 205 205 200 205 205 200 5

It's pretty easy to make some assumptions here. All these values have an implied decimal point. For voltages, it's and for temperatures it's xx.x. Temperatures are measured in degrees C.

Individual cell voltages are reported in order, starting with cell 1. There are 13 such values. Then there's a much bigger number that represents the pack voltage (50.589 volts, in this case).

Following that are the two values for the maximum and minimum cell voltages (3.894 and 3.889, respectively).

The final number is the difference between the maximum and minimum cell voltages (5) which is 5 millivolts or 0.005 volts.

The temperature report follows the same format: seven individual sensors, maximum and minimum values, and finally a difference value. Elsewhere I was able to determine that these temperatures are resolved to the nearest 0.5 degrees C. Not surprisingly, the thermistors exhibit a tolerance. In fact, all the cell temperatures should have been identical as the battery had a long time to come to thermal equilibrium and was not being charged or discharged at the time of the reading. The accuracy/precision certainly seems adequate for the task.