Transmitted CAN Packets
The following packets are transmitted by the BMU on to the CAN Bus Network.
BMU Heartbeat and Serial Numbers
This packet is transmitted by the BMU and allows it to be located and identified on the CAN bus. It contains an identifying string, and the serial number of the BMU device.
CAN ID: |
0x600 - Interval 1 hz |
---|---|
data_u32[0] |
v5 and later: Device ID: 0x00001000 v4 and earlier: ASCII ID string: 'T', 'O', '6', '7' |
data_u32[1] |
Device serial number as programmed at the factory |
CMU Status, Temperature and Voltage Telemetry
These packets are transmitted by the CMUs and contain the telemetry values from the cells. The BMU will relay these packets through to the CAN bus if configured to do so – this is enabled by default.
Each CMU transmits a group of three packets, with the ID of the first packet being granted by the BMU during the ID request/grant phase at start-up.
CMU 1 will be assigned an ID of 0x601, and will therefore transmit telemetry on 0x601, 0x602, and 0x603. CMU 2 will be assigned an ID of 0x604, CMU 3 will be assigned to 0x607, and so on.
Reported cell voltages also indicate measurement status. Measurements with a high confidence (both redundant measurement channels agree closely) will be reported as a reading in mV. Readings where the redundant channels disagree ('trust' error) will be reported as negative mV, with the reported number coming from the high-accuracy / slow-speed converter channel.
Note that with the current CMU firmware, during very rapid voltage changes (high charge/discharge current pulses), the channels may report as a trust error for a few update cycles due to the sampling timing for the two measurement channels not being simultaneous.
Readings with all cell voltages reported as negative indicate that either the 3.3V power supply voltage or one of the A/D reference voltages is out of specification.
A CMU reporting any of these conditions (-ve mV) will potentially be reporting erroneous readings. A cell reporting a -ve mV reading will not balance that cell, to avoid balancing at a potentially incorrect voltage. Any cell reporting as a -ve mV reading should be flagged in the higher-level system and dealt with appropriately. It should not necessarily trigger an immediate system shutdown but should probably be latched and indicated to the user to seek servicing promptly.
Readings from cells above the number defined by the BMU to each CMU during start-up are sent as -32768mV (maximum negative) to indicate a 'cell not present / not monitored'. A cell that is read by the CMU as having voltage present, when that cell has been configured as 'not present', will report as -32767mV to indicate a possible 'extra cell' fault. These cells should not be included in any min / max / average cell voltage calculations.
CAN ID: |
0x601, 0x604, 0x607 etc. - Interval approx. 1Hz* |
---|---|
data_u32[0] |
CMU serial number (allocated at factory) |
data_16[2] |
PCB temperature (1/10th°C) |
data_16[3] |
Cell temperature (1/10th°C) |
* CMU timebases are not synchronised and will drift relative to each other, and to actual time
CAN ID: |
0x602, 0x605, 0x608 etc. - Interval Approx 1Hz |
---|---|
data_16[0] |
Cell 0 voltage (mV). +ve = OK, -ve = Channel mismatch |
data_16[1] |
Cell 1 voltage (mV). +ve = OK, -ve = Channel mismatch |
data_16[2] |
Cell 2 voltage (mV). +ve = OK, -ve = Channel mismatch |
data_16[3] |
Cell 3 voltage (mV). +ve = OK, -ve = Channel mismatch |
CAN ID: |
CAN ID: 0x603, 0x606, 0x609 etc. - Interval: Approx. 1Hz |
---|---|
data_16[0] |
Cell 4 voltage (mV). +ve = OK, -ve = Channel mismatch |
data_16[1] |
Cell 5 voltage (mV). +ve = OK, -ve = Channel mismatch |
data_16[2] |
Cell 6 voltage (mV). +ve = OK, -ve = Channel mismatch |
data_16[3] |
Cell 7 voltage (mV). +ve = OK, -ve = Channel mismatch |
Pack State of Charge (SOC)
This packet is transmitted by the BMU to show the current state of charge during normal pack operation.
CAN ID: |
0x6F4 - Interval 1Hz |
---|---|
data_fp[0] |
SoC (Amp-Hours (Ah)). Shows Ah consumed from pack. 0 = Full, and counts upwards towards the user-set pack capacity number as Ah are used. Resets to 0 when max cell reaches balance threshold |
data_fp[1] |
Shows the SoCas a Percentage (%). 100% = full, 0% = empty |
Pack Balance State of Charge (SOC)
This packet is transmitted by the BMU to show the current state of cell mismatch during balancing at top of charge.
CAN ID: |
0x6F5 - Interval: 1Hz |
---|---|
data_fp[0] |
Balance SoC (Ah). Shows Ah supplied to the pack since the first cell began balancing. This number will continue to count up until all cells in the pack are balancing, therefore showing the Ah mismatch that has been corrected during this balancing session |
data_fp[1] |
Shows the balancing SoCa s a percentage (%), in other words the percentage mismatch between cells this session. |
Charger Control Information
This packet is transmitted by the BMU to allow an external charger to control itself based in detailed cell information from the BMS, without having to know about the various user-configured cell setup parameters.
CAN ID: |
0x6F6 - Interval: 10Hz |
---|---|
data_16[0] |
Charging cell voltage error (mV). This value is the user-configured “Balance Threshold” voltage minus the maximum cell voltage. The charger should run a charge current control loop to try and bring this value to 0mV. An Integral type control loop is suggested. |
data_16[1] |
Cell temperature margin (1/10th°C). This value is the maximum cell temperature minus the user-configured “Maximum Cell Temperature” limit. The charger should reduce charge current such that this value will never reach 0, as the BMS will disconnect the pack if the maximum cell temperature is exceeded. A Proportional type control loop is suggested. |
data_16[2] |
Discharging cell voltage error (mV). This value is the user-configured “Zero SoC Threshold” voltage minus the minimum cell voltage. This value can be used by devices that are discharging the battery (eg. motor controllers in vehicles) to gradually limit their consumption as the minimum cell approaches being fully discharged. |
data_u16[3] |
Total pack capacity (Ah). This value can be used by the charger / discharger to calculate control loop gain constants for the installation. It is simply the user-set configuration value rounded to the nearest Ah |
Pre-Charge Status
This packet is transmitted by the BMU to indicate the current state of the pre-charge system.
CAN ID: |
0x6F7 - Interval: 1Hz, and on each pre-charge state change |
---|---|
data_u8[0] |
Pre-charge contactor driver status: |
0x01 = Error status of contactor 1 driver (0 = OK, 1 = error ) 0x02 = Error status of contactor 2 driver 0x04 = Output status of contactor 1 driver (0 = Off, 1 = On) 0x08 = Output status of contactor 2 driver 0x10 = 12V contactor supply voltage OK (0 = Fault, 1 = OK) 0x20 = Error status of contactor 3 driver 0x40 = Output status of contactor 3 driver 0x80 = Unused |
|
data_u8[1] |
Pre-charge state (in order of normal appearance when starting): |
0 = Error 1 = Idle 5 = Enable Pack 2 = Measure 3 = Pre-charge 4 = Run |
|
data_u16[1] |
12V contactor supply voltage, mV (only on v4 or earlier BMU) for v5 or later BMU, refer to binary bit 0x10 in data_u8[0] |
data_u16[2] |
Unused, reports as 0x0000 |
data_u8[6] |
0x01 = Pre-charge timer elapsed. (Do not care if timeout disabled) 0x00 = Pre-charge timer not elapsed |
data_u8[7] |
Pre-charge timer counter (10ms per count) |
Minimum / Maximum Cell Voltage
This packet is transmitted by the BMU to show the highest and lowest voltage cells in the pack.
CAN ID: |
0x6F8 - Interval: 10Hz |
---|---|
data_u16[0] |
Minimum cell voltage (mV) |
data_u16[1] |
Maximum cell voltage (mV) |
data_u8[4] |
CMU number that has the minimum cell voltage |
data_u8[5] |
Cell number in CMU that is the minimum cell voltage |
data_u8[6] |
CMU number that has the maximum cell voltage |
data_u8[7] |
Cell number in CMU that is the maximum cell voltage |
Maximum / Minimum Cell Temperature
This packet is transmitted by the BMU to show the highest and lowest temperature cells in the pack.
CAN ID: |
0x6F9 - Interval: 1Hz |
---|---|
data_u16[0] |
Minimum cell temperature (1/10th°C) |
data_u16[1] |
Maximum cell temperature ( 1/10th °C) |
data_u8[4] |
CMU number that has the minimum cell temperature |
data_u8[5] |
Unused, reads as 0x00 |
data_u8[6] |
CMU number that has the maximum cell temperature |
data_u8[7] |
Unused, reads as 0x00 |
Battery Pack Voltage / Current
This packet is transmitted by the BMU to show the total pack voltage and current.
CAN ID: |
0x6FA - Interval: 10Hz |
---|---|
data_u32[0] |
Battery Voltage (mV) |
data_u32[1] |
Battery Current (m) |
Battery Pack Status
This packet is transmitted by the BMU to show the status of the overall pack.
CAN ID: |
0x6FB - Interval: 1Hz |
---|---|
data_u16[0] |
Balance voltage threshold – rising (balance resistor turns on) |
data_u16[1] |
Balance voltage threshold – falling (balance resistor turns off) |
data_u8[4] |
Status Flags |
0x01 = Cell Over Voltage 0x02 = Cell Under Voltage 0x04 = Cell Over Temperature 0x08 = Measurement Untrusted (redundant channel mismatch) 0x10 = CMU Communications Timeout (lost CMU) 0x20 = Vehicle Communications Timeout (lost EVDC) 0x40 = BMU is in Setup mode 0x80 = CMU CAN bus power status |
|
Present for backwards compatibility with older software For newer software, please view the flags in the extended battery pack status ID packet |
|
data_u8[5] |
BMS CMU count |
data_u16[3] |
BMS BMU Firmware Build Number |
Battery Pack Fan Status
This packet is transmitted by the BMU to show fan speeds and 12V power consumption.
CAN ID: |
0x6FC - Interval: 1Hz |
---|---|
data_u16[0] |
Fan speed 0 (rpm) |
data_u16[1] |
Fan Speed 1 (rpm) |
data_u16[2] |
12V current consumption of fans + contactors (mA) |
data_u16[3] |
12V current consumption of CMUs (mA) |
Extended Battery Pack Status
This packet is transmitted by the BMU to show extended pack status data.
CAN ID: |
0x6FD - Interval: 1Hz |
---|---|
data_u32[0] |
Status Flags: |
0x00000001 = Cell Over Voltage 0x00000002 = Cell Under Voltage 0x00000004 = Cell Over Temperature 0x00000008 = Measurement Untrusted (channel mismatch) 0x00000010 = CMU Communications Timeout (lost CMU) 0x00000020 = Vehicle Communications Timeout (lost EVDC) 0x00000040 = BMU is in Setup mode 0x00000080 = CMU CAN bus power status 0x00000100 = Pack Isolation test failure 0x00000200 = SoCmeasurement is not valid 0x00000400 = CAN 12V supply is low - about to shut down 0x00000800 = A contactor is stuck / not engaged 0x00001000 = A CMU has detected an extra cell present |
|
data_u8[4] |
BMU Hardware version |
data_u8[5] |
BMU Model ID |
data_u16[3] |
Unused |
Reserved IDs
Do not transmit data on reserved IDs, as this may trigger configuration or boot load events and mode changes.