These are the CAN messages that are sent or may be sent by the BMS, and the ones that the BMS may listens to.
The BMS controller operates on these fixed parameters:
- CAN communication standard
- 125, 250, 500 kHz (default) or 1MHz {Rev 1.05+}
- Standard addressing (CAN 2.0 A) (11 bits, not extended), except J1939 messages
- Selectable bus termination: included or not
This BMS controller places the following messages on the CAN bus:
- A subset of the Standard Traction Pack Messages
- A control message for a Brusa charger
- Messages for the Elithion display
- Data dump of all cell data (optional)
This BMS controller places on the CAN bus the applicable subset of the Standard Traction Pack Messages.
Notes:
- Period: 1 s
- Multi-byte values are big-endian: the MSB (Most Significant Byte) is in the lower numbered data byte (the left most byte in the following tables)
- The ID of the 1st message is programmable; the other messages use IDs following the 1st ID
| ID
| Bytes
| Byte 0
| Byte 1
| Byte 2
| Byte 3
| Byte 4
| Byte 5
| Byte 6
| Byte 7
|
| Progr.
| Default
|
| ID0+0
| 620h
| 8
| "Elithion" (0)
|
| ID0+1
| 621h
| 8
| "2CN " + Rev level (0)
|
| ID0+2
| 622h
| 7(20)
| State (1)
| Timer (2)
| Flags (3)
| Fault code (4)
| Level faults (5)
| Warnings (21)
|
|
| ID0+3
| 623h
| 6
| Pack voltage (6)
| Min Vtg (7)
| Min Vtg # (8)
| Max vtg (7)
| Max Vtg # (8)
|
|
| ID0+4
| 624h
| 6
| Current (9)
| Charge limit (10)
| Discharge limit (10)
|
|
| ID0+5
| 625h
| 8
| Batt. energy in (11)
| Batt. energy out (11)
|
| ID0+6
| 626h
| 7(15)
| SOC (12)
| DOD (13)
| Capacity (14)
| 00h
| SOH (15)
|
|
| ID0+7
| 627h
| 6
| Temperature (16)
| -
| Min tmp (17)
| Min tmp # (8)
| Max tmp (17)
| Max tmp # (8)
|
|
| ID0+8
| 628h
| 6
| Pack resistance (19)
| Min res (20)
| Min res# (8)
| Max res (20)
| Max res# (8)
|
|
- ASCII, starting from rev 0.97. Rev level: F1.04 = Harware rev F, Software rev 1.04
- State of system
- Bit 4: Relay fault
- Bit 3: Contactor K3 is on
- Bit 2: Contactor K2 is on
- Bit 1: Contactor K1 is on
- Bit 0: Fault state
- Power up time [s]; after 65535 s, it overflows back to 0
- Byte of flags:
- Bit 7: The Fan is on
- Bit 6: The LLIM is set
- Bit 5: The HLIM is set
- Bit 4: There is a CAN contactor request
- Bit 3: There is a hard wire contactor request
- Bit 2: The interlock is tripped
- Bit 1: There is power from the load
- Bit 0: There is power from the source
- Fault code, stored:
- Driving off while plugged in
- Interlock is tripped
- Communication fault with a bank or cell
- Charge overcurrent
- Discharge overcurrent
- Over-temperature
- Under voltage
- Over voltage
- No battery voltage
- High voltage B- leak to chassis
- High voltage B+ leak to chassis
- Relay K1 is shorted
- Contactor K2 is shorted
- Contactor K3 is shorted
- Open K1 or K3, or shorted K2
- Open K2
- Excessive precharge time
- EEPROM stack overflow
- Level fault flags:
- Bit 7: Over voltage
- Bit 6: Under voltage
- Bit 5: Over-temperature
- Bit 4: Discharge overcurrent
- Bit 3: Charge overcurrent
- Bit 2: Communication fault with a bank or cell
- Bit 1: Interlock is tripped
- Bit 0: Driving off while plugged in
- Total voltage of pack [V], unsigned, 0 to 65 kV, as the sum of all cell voltages; {in rev 1.05 and above, if available, measured directly by the HVFE}
- Voltages [100 mV] of least charged cell and most charged cell, 0 to 25.5 V {30 s average voltage in revs 1.04 and below}
- ID of the cell that has the lowest / highest voltage / temperature / resistance. 1 to 254
- Pack current [A], signed, positive out of pack, -32kA to + 32kA, averaged over 1 s
- Maximum current acceptable (charge) or available (discharge), unsigned, 0 to + 65kA [A]
- Total energy in or out of battery, since manufacture. Unsigned, overflows back to 0 [kWH]
- State Of Charge [%], unsigned, 0 to 100. When deeply discharged, its value does not go below 0
- Depth Of Discharge [AH], unsigned, 0 to 65 kAH. When deeply discharged, its value may exceed the actual capacity's value
- Actual capacity of pack [AH], unsigned, 0 to 65 kAH
- State Of Health [%], unsigned, 0 to 100. 100 % = all OK {Starting from rev 0.97; in older revs only 6 bytes are sent in this message}
- Average pack temperature [°C], signed, -127 °C to +127 °C
- Temperatures [°C] of coldest and hottest sensors, signed, -127 °C to +127 °C
- -
- Resistance [100 micro-ohm] of entire pack, unsigned, 0 to 6553.5 milliohm
- Resistances [100 micro-ohm] of lowest and highest resistance cells, unsigned, 0 to 25.5 milliohm
- Warning flags: {starting from rev 0.97; in rev < 0.97 the number of bytes was 6}
- Bit 7: -
- Bit 6: -
- Bit 5 (20h): hot temperature
- Bit 4 (10h): cold temperature
- Bit 3 (08h): discharge overcurrent
- Bit 2 (04h): charge overcurrent
- Bit 1 (02h): high voltage
- Bit 0 (01h): low voltage
If enabled, the BMS controller places on the CAN bus a control message for a NLG5 charger.
Notes:
- Period: 100 ms
- Multi-byte values are big-endian: the MSB (Most Significant Byte) is in the lower numbered data byte (the left most byte in the following tables)
| ID
| Bytes
| Byte 0
| Byte 1
| Byte 2
| Byte 3
| Byte 4
| Byte 5
| Byte 6
| Byte 7
|
| 618h
| 7
| Flags (1)
| Max IAC (2)
| Max VDC (3)
| Max IDC (4)
|
|
- Control flags. Only 1 bit is used, all others are 0:
- Bit 7: 1 to enable charging; 0 to disable charging
- Maximum current from the AC inlet [100 mA]
- Maximum DC output voltage [100 mV]
- Set to the pack voltage when all the cells are full and balanced (Max cell voltage x number of cells in series)
- Maximum DC output current [100 mA]
This BMS controller places on the CAN bus a message for Elithion hardware:
Notes:
- Period: 2 messages every 100 ms, separated by 10 ms
- Length: 3 bytes
| ID
| Item
| Byte 0: Address
| Byte 1: Mask
| Byte 2: Data
|
| Bit 7
| Bit 6
| Bit 5
| Bit 4
| Bit 3
| Bit 2
| Bit 1
| Bit 0
|
| 680h
| Display LEDs
| 1Eh
| FFh
| -
| -
| Fault
| Current limited
| Powered by load
| -
| Contactors on
| Powered by source
|
| Display SOC bar
| 25h
| FFh
| 00h to 64h - 0 to 100%
|
| HVFE
| 48h
| FFh
| -
| 1 = Drive Precharge switch
| 1 = Drive SW- switch
| 1 = Drive SW+ switch
| 1 = Drive relay K3
| 1 = Drive relay K2
| 1 = Drive relay K1
| 1 = Fault
|
The BMS can be programmed to dump the data from all the cells onto the CAN bus.
Tha data consists of a set of messages, once a second.
- The first message gives all the readings of a particular cell, and rotates through each cell sued, one cell per second
- The other messages give the voltage readings of all the cells actually used
- The number of messages ranges from 1 (if 1 to 8 cells are used) all the way to 32 (if 249 to 256 cells are used)
The format of the data dump is:.
- Rate: a burst every 1 second, with individual messages generated every 10 ms
- Length: 8 data bytes
- Units:
- Voltages are in 10 mV, offset by 2 V (So, 00h = 2 V, 10h = 2.16 V...)
- Temperatures are in °C, offset by 80h (So, 80h = 0 °C, 81h = 1 °C, 7Fh = -1 °C)
- Resistances are in 100 µΩ (So, 01h = 100 µΩ)
- Status; each bit is a flag:
- 1 = the voltage reading from this cell board is OK
- 1 = the temperature reading from this cell board is OK
- 1 = the resistance reading from this cell board is OK
- 1 = the cell board reports its load is on
- 1 = the cell board reports a voltage sensor fault
- 1 = the cell board reports a temperature sensor fault
- 1 = the cell board reports a resistance calculation fault
- 1 = the cell board reports a load fault
| ID
| Data 0
| Data 1
| Data 2
| Data 3
| Data 4
| Data 5
| Data 6
| Data 7
| Notes
|
| ID+0
| Cell number
| Voltage
| Temperature, all the time
| Resistance
| Status
| 5
| 5
| 5
| Up to Rev 0.96
|
Temperature when balancing load is off
| Resistance
| 5
| 5
| 5
| Rev 0.97 to 1.06
|
| Status
| 0
| 0
| Rev 1.07+
|
| ID+1
| Cell 0 vtg
| Cell 1 vtg
| Cell 2 vtg
| Cell 3 vtg
| Cell 4 vtg
| Cell 5 vtg
| Cell 6 vtg
| Cell 7 vtg
|
|
| ID+2
| Cell 8 vtg
| Cell 9 vtg
| Cell 10 vtg
| Cell 11 vtg
| Cell 12 vtg
| Cell 13 vtg
| Cell 14 vtg
| Cell 15 vtg
|
| ID+3
| Cell 16 vtg
| Cell 17 vtg
| Cell 18 vtg
| Cell 19 vtg
| Cell 20 vtg
| Cell 21 vtg
| Cell 22 vtg
| Cell 23 vtg
|
| ID+4
| Cell 24 vtg
| Cell 25 vtg
| Cell 26 vtg
| Cell 27 vtg
| Cell 28 vtg
| Cell 29 vtg
| Cell 30 vtg
| Cell 31 vtg
|
| ID+5
| Cell 32 vtg
| Cell 33 vtg
| Cell 34 vtg
| Cell 35 vtg
| Cell 36 vtg
| Cell 37 vtg
| Cell 38 vtg
| Cell 39 vtg
|
| ID+6
| Cell 40 vtg
| Cell 41 vtg
| Cell 42 vtg
| Cell 43 vtg
| Cell 44 vtg
| Cell 45 vtg
| Cell 46 vtg
| Cell 47 vtg
|
| ID+7
| Cell 48 vtg
| Cell 49 vtg
| Cell 50 vtg
| Cell 51 vtg
| Cell 52 vtg
| Cell 53 vtg
| Cell 54 vtg
| Cell 55 vtg
|
| ID+8
| Cell 56 vtg
| Cell 57 vtg
| Cell 58 vtg
| Cell 59 vtg
| Cell 60 vtg
| Cell 61 vtg
| Cell 62 vtg
| Cell 63 vtg
|
| ID+9
| Cell 64 vtg
| Cell 65 vtg
| Cell 66 vtg
| Cell 67 vtg
| Cell 68 vtg
| Cell 69 vtg
| Cell 70 vtg
| Cell 71 vtg
|
| ID+10
| Cell 72 vtg
| Cell 73 vtg
| Cell 74 vtg
| Cell 75 vtg
| Cell 76 vtg
| Cell 77 vtg
| Cell 78 vtg
| Cell 79 vtg
|
| ID+11
| Cell 80 vtg
| Cell 81 vtg
| Cell 82 vtg
| Cell 83 vtg
| Cell 84 vtg
| Cell 85 vtg
| Cell 86 vtg
| Cell 87 vtg
|
| ID+12
| Cell 88 vtg
| Cell 89 vtg
| Cell 90 vtg
| Cell 91 vtg
| Cell 92 vtg
| Cell 93 vtg
| Cell 94 vtg
| Cell 95 vtg
|
| ID+13
| Cell 96 vtg
| Cell 97 vtg
| Cell 98 vtg
| Cell 99 vtg
| Cell 100 vtg
| Cell 101 vtg
| Cell 102 vtg
| Cell 103 vtg
|
| ID+14
| Cell 104 vtg
| Cell 105 vtg
| Cell 106 vtg
| Cell 107 vtg
| Cell 108 vtg
| Cell 109 vtg
| Cell 110 vtg
| Cell 111 vtg
|
| ID+15
| Cell 112 vtg
| Cell 113 vtg
| Cell 114 vtg
| Cell 115 vtg
| Cell 116 vtg
| Cell 117 vtg
| Cell 118 vtg
| Cell 119 vtg
|
| ID+16
| Cell 120 vtg
| Cell 121 vtg
| Cell 122 vtg
| Cell 123 vtg
| Cell 124 vtg
| Cell 125 vtg
| Cell 126 vtg
| Cell 127 vtg
|
| ID+17
| Cell 128 vtg
| Cell 129 vtg
| Cell 130 vtg
| Cell 131 vtg
| Cell 132 vtg
| Cell 133 vtg
| Cell 134 vtg
| Cell 135 vtg
|
| ID+18
| Cell 136 vtg
| Cell 137 vtg
| Cell 138 vtg
| Cell 139 vtg
| Cell 140 vtg
| Cell 141 vtg
| Cell 142 vtg
| Cell 143 vtg
|
| ID+19
| Cell 144 vtg
| Cell 145 vtg
| Cell 146 vtg
| Cell 147 vtg
| Cell 148 vtg
| Cell 149 vtg
| Cell 150 vtg
| Cell 151 vtg
|
| ID+20
| Cell 152 vtg
| Cell 153 vtg
| Cell 154 vtg
| Cell 155 vtg
| Cell 156 vtg
| Cell 157 vtg
| Cell 158 vtg
| Cell 159 vtg
|
| ID+21
| Cell 160 vtg
| Cell 161 vtg
| Cell 162 vtg
| Cell 163 vtg
| Cell 164 vtg
| Cell 165 vtg
| Cell 166 vtg
| Cell 167 vtg
|
| ID+22
| Cell 168 vtg
| Cell 169 vtg
| Cell 170 vtg
| Cell 171 vtg
| Cell 172 vtg
| Cell 173 vtg
| Cell 174 vtg
| Cell 175 vtg
|
| ID+23
| Cell 176 vtg
| Cell 177 vtg
| Cell 178 vtg
| Cell 179 vtg
| Cell 180 vtg
| Cell 181 vtg
| Cell 182 vtg
| Cell 183 vtg
|
| ID+24
| Cell 184 vtg
| Cell 185 vtg
| Cell 186 vtg
| Cell 187 vtg
| Cell 188 vtg
| Cell 189 vtg
| Cell 190 vtg
| Cell 191 vtg
|
| ID+25
| Cell 192 vtg
| Cell 193 vtg
| Cell 194 vtg
| Cell 195 vtg
| Cell 196 vtg
| Cell 197 vtg
| Cell 198 vtg
| Cell 199 vtg
|
| ID+26
| Cell 200 vtg
| Cell 201 vtg
| Cell 202 vtg
| Cell 203 vtg
| Cell 204 vtg
| Cell 205 vtg
| Cell 206 vtg
| Cell 207 vtg
|
| ID+27
| Cell 208 vtg
| Cell 209 vtg
| Cell 210 vtg
| Cell 211 vtg
| Cell 212 vtg
| Cell 213 vtg
| Cell 214 vtg
| Cell 215 vtg
|
| ID+28
| Cell 216 vtg
| Cell 217 vtg
| Cell 218 vtg
| Cell 219 vtg
| Cell 220 vtg
| Cell 221 vtg
| Cell 222 vtg
| Cell 223 vtg
|
| ID+29
| Cell 224 vtg
| Cell 225 vtg
| Cell 226 vtg
| Cell 227 vtg
| Cell 228 vtg
| Cell 229 vtg
| Cell 230 vtg
| Cell 231 vtg
|
| ID+30
| Cell 232 vtg
| Cell 233 vtg
| Cell 234 vtg
| Cell 235 vtg
| Cell 236 vtg
| Cell 237 vtg
| Cell 238 vtg
| Cell 239 vtg
|
| ID+31
| Cell 240 vtg
| Cell 241 vtg
| Cell 242 vtg
| Cell 243 vtg
| Cell 244 vtg
| Cell 245 vtg
| Cell 246 vtg
| Cell 247 vtg
|
| ID+32
| Cell 248 vtg
| Cell 249 vtg
| Cell 250 vtg
| Cell 251 vtg
| Cell 252 vtg
| Cell 253 vtg
| Cell 254 vtg
| Cell 255 vtg
|
In revisions 0.96 and below, the first 64 cells are shown, and the 1st message scrolls through 256 cells, regardless of the number of cells actually used, for a total of 9 messages.
This BMS controller looks on the CAN bus for messages to request that the contactors be turned on.
The format is programmable.
Notes:
- Maximum period: 300 ms (after which it assumes there is no such message on the CAN bus)
Default message:
| ID
| Bytes
| Byte 0
| Byte 1
| Byte 2
| Byte 3
| Byte 4
| Byte 5
| Byte 6
| Byte 7
|
| 632h
| 8
| Requests (1)
|
|
- 00h = request contactors be off; 01h = request contactors be on
This BMS controller looks on the CAN bus for messages with the battery current from/to the load and the source.
The format is programmable.
Notes:
- Maximum period: 300 ms (after which it assumes there is no such message on the CAN bus)
Default messages:
| ID
| Bytes
| Byte 0
| Byte 1
| Byte 2
| Byte 3
| Byte 4
| Byte 5
| Byte 6
| Byte 7
|
| 611h
| 8
|
| Source current (1)
|
| 633h
| 8
| Load current (2)
|
|
- [10 mA], + = into battery, big-endian. Preset for compatibility with Brusa NLG5 charger
- [100 mA], + = out of battery, big-endian
This BMS controller looks on the CAN bus for messages from the Elithion Remote HV front end.
Notes:
- Maximum period: 300 ms (after which it assumes there is no such message on the CAN bus)
| ID
| Bytes
| Byte 0
| Byte 1
| Byte 2
| Byte 3
| Byte 4
|
| 681h
| 5
| Load current (1)
| Source current (1)
| Data (2)
|
| ID
| Bytes
| Byte 0
| Byte 1
| Byte 2
| Byte 3
| Byte 4
| Byte 5
| Byte 6
|
| 681h
| 7
| Load current (1)
| Source current (1)
| Data (2)
| Pack voltage (3)
|
- [10 mA], + = into battery, big-endian
- Bit 0: 1 = no voltage seen by the HVFE during contactor tests
- 24 to 1250 V, [100 mV], big-endian
PID (Parameter ID) are codes that used to request data and send commands through the CAN bus.
The Lithiumate implements a set of some 1500 codes, that enable you to:
- Get the value of individual parameters
- Clear faults
- You send a PID request to the BMS controller through the CAN bus (by default at ID 0745h)
- The BMS controller responds with the data with a different PID message (by default at ID 074Dh)
- The request ID is programmable.
- The response ID is 08h more than the request ID
- Data length is 8 data bytes regardless of whether sme or all bytes are actually used (unused bytes are set at 0)
This table lists all the PIDs.
Through PIDs, you can change the settings in EEPROM.
This spreadsheet has a list of the EEPROM data.
The Lithiumate may be programmed to generate the following messages for the Morey Telematic Trax MT-30 Automotive X-Prize data acquisition system.
Please contact us for instructions on how to turn on this feature. 3Bh 20h
| PGN
| Repetition rate
| Data length
| Data page
| PDU format
| PDU specific
| Default priority
| Source Address
| ID
| Byte 0
| Byte 1
| Byte 2
| Byte 3
| Byte 4
| Byte 5
| Byte 6
| Byte 7
|
| 65284
| 10 ms
| 8
| 0
| 255
| 04
| 6
| xx
| 18FF04F4h
| (n.a.) 0xFFFF
| (n.a.) 0xFFFF
| LSB
| MSB
| LSB
| 0h
| MSB
|
HV Traction Battery Voltage (1)
| HV Traction Battery Current (2)
|
| 65285
| 10 ms
| 8
| 0
| 255
| 05
| 6
| xx
| 18FF05F4h
| HV Traction Battery state of charge (3)
| 0x00
| LSB
| 0h
| MSB
| (n.a.) 0xFFFF
| (n.a.) 0xFFFF
|
HV Traction Battery temperature (max) (4)
|
- 24 to 4095 [V]; unsigned; 2 bytes; Little-Endian;
- -2047 to 0 to +2047 [A]; signed; 2 bytes, Little-Endian; 12 bits; 4 Most Significant Bits are 0, even for negative current
- 0 to 100 [%]; unsigned; 1 byte;
- -127 to 0 to + 127 [°C]; signed; 2 bytes, Little-Endian; 12 bits; 4 Most Significant Bits are 0, even for negative temperature. Note that without cell boards the temperature is not known, and a default temperature of 25 °C is reported
Where input values are 12-bit values from 0x000 - 0xFFF.
A value of 0xFFxx(3) can also be specified indicating that this parameter us not provided in this packet at this time.
This is to allow multiple controllers to send these packets.
(3)Per SAE J1393-71 (Jan 2009) section 5.1.5 Table 1.
The Lithiumate may be programmed to generate and listed to the following messages for the Elcon Charger and conforming to SAE J1939 standards.
These messages are off by default and may be turned on by programming.
Note that the ElCon CAN rate is 250 kHz, so you will have to program the BMS to also work at 250 kHz.
Message generated by Lithiumate BMS
| PGN
| Repetition rate
| Data length
| Data page
| PDU format
| PDU specific
| Default priority
| Source Address
| ID
| Byte 0
| Byte 1
| Byte 2
| Byte 3
| Byte 4
| Byte 5
| Byte 6
| Byte 7
|
| 58868
| 1 s
| 8
| 0
| 1 (01h)
| 229 (E5h)
| 6
| 244 (F4h)
| 1806E5F4h
| Voltage [100 mV]
| Current [100 mA]
| Control (1)
| (n.a.) 00h
| (n.a.) 00h
| (n.a.) 00h
|
| MSB
| LSB
| MSB
| LSB
|
(1) Control byte:
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| -
| -
| -
| -
| -
| -
| -
| 0 = On; 1 = Off
|
Message generated by ElCon charger
| PGN
| Repetition rate
| Data length
| Data page
| PDU format
| PDU specific
| Default priority
| Source Address
| ID
| Byte 0
| Byte 1
| Byte 2
| Byte 3
| Byte 4
| Byte 5
| Byte 6
| Byte 7
|
| 20709
| 1 s
| 8
| 0
| 63 (3Fh)
| 80 (50h)
| 6
| 229 (E5h)
| 18FF50E5h
| Voltage [100 mV]
| Current [100 mA]
| Status (1)
| (n.a.) 00h
| (n.a.) 00h
| (n.a.) 00h
|
| MSB
| LSB
| MSB
| LSB
|
(1) Status byte *:
| 7
| 6
| 5
| 4
| 3
| 2
| 1
| 0
|
| -
| -
| -
| Communication: 1 = CAN reception time-out (> 10 s since last message)
| DC voltage: 1 = reverse battery polarity detected
| AC voltage: 1 = not within acceptable range
| Charger temperature: 1 = over temperature
| Hardware: 1 = hardware failure
|
(*) If any status flag is set, the charger will not charge