BMS - ZEVA BMS16v2 - CAN - Protocol
BMS - ZEVA BMS16v2 - CAN - Protocol
www.zeva.com.au
Introduction
This document is intended to assist people integrating the ZEVA BMS16 V2 with their own
devices over CAN bus. It describes the required specifications for the CAN bus, packet format and
communications protocols.
All packets are the Data frame type, though some require no actual data. Remote frames were not
used for request packets since they are not supported by some CAN devices and protocols which
may be on the same bus.
Physical Layer
The BMS16 has four screw terminals for CAN bus connections, being Ground, CAN L, CAN H and
a 12V supply output for powering CAN devices. The 12V terminal is limited to 200mA max, and
will be powered whenever the BMS is turned on and not in sleep mode.
We recommend using Shielded Twisted Pair (STP) cable, with two pairs of conductor – one pair
for CAN H and CAN L, the other for Ground and +12V supply. Conductors should be around
AWG20-24 for sufficient mechanical strength and current rating. Belden 8723 is a good option.
CAN buses work best as a single chain of devices, without any branching, and with 120Ω
termination resistors at both ends to prevent signal reflection. There is no separate shield terminal
at the BMS but the shield wire can be connected to the Ground terminal.
Packet Summary
For consistency across product lines, the BMS16 uses the same CAN protocol format as the
EVMS3 and BMS12 devices, but some data is not applicable / available. These will be indicated as
“Reserved” bytes in message format descriptions below, and should be read / written as zero.
Note that all IDs given are in decimal (not hex). CAN bus was invented as a realtime, low latency
bus so the standard only supports small data packets up to 8 bytes in length. This sometimes results
in the need for strange bit-packing and numerical scaling schemes in order to fit the required data
within the 8-byte limit.
* These two are different from the EVMS parameters in the same location, only applicable to the
BMS16 and replacing parameters only applicable to the EVMS3. Current shunt enumeration values
are no shunt (0), 100A (1), 200A (2), 500A (3) – all 75mV shunts.
* For Balance Voltage, static thresholds of 2.00–4.50 are achieved with values of 0-250. For
dynamic threshold, use value 251. To disable balancing, set value to 252.
* Bottom 7 bits of Current limit byte are used for current limit, 0-127A range. Top bit in Current
limit byte is used as a 9th bit for Target voltage, to extend range to 0-511V. Generally this extended
range is not applicable to the BMS16, so the only thing to remember is to limit current to 0-127, to
keep the top bit of this byte zero.
The following errors will not reoccur during a single running session after being acknowledged:
BMS Overtemp, BMS Undertemp, Overcurrent Warning, Low SoC. Other errors can be cleared by
sending an acknowledge packet, but may reoccur if the error condition reappears (or may not clear
if the error condition is still present when the Acknowledge message is sent).
ID 38: Reset State of Charge (Rx)
If the BMS’s state of charge appears to have lost synchronisation, you can send a packet ID 38 to
reset the SoC to 100%. Any data in this packet will be ignored.
Cell voltages are sent in the same format that the BMS12 uses, emulating two BMS12s of module
IDs 0 and 1 and having 8 cells each. Each CAN message contains four voltages as 16-bit values, in
millivolts (big endian format).
Value Name
0 Idle
1 Reserved
2 Running
3 Reserved
4 Stopped
5 Reserved
Revision History