Functional Description
CAN Communication
The Helot series communication protocol is based upon a predicate protocol initially developed for Zeva's BMS Modules. Hence, Helot modules are designed to be drop-in replacements.
The module's standard bus speed is 250kbps, frame format is CAN 2.0B using 29-bit ID's.
There are a total of five (5) different frame types:
– One (1) request data frame.
– Four (4) response data frames.
Request Data Frame (master/controller to BMS100 series module)
The master/controller sends the BMS100 series module a 2-byte request containing the desired shunt voltage in 16-bit big endian format.
ID | module_address + 0 |
BYTE 1 | shunt voltage in millivolts, high byte |
BYTE 2 | shunt voltage in millivolts, low byte |
The module will inhibit shunting if the internal 1s timer elapses between CAN messages, or if the master/controller sends a requested shunt voltage of 0.
1st Response Data Frame 1 (BMS100 series module to master/controller)
After receiving a request data frame from the master/controller, the BMS100 series module will send four response frames in succession.
The first being 8 bytes in size, containing the sampled 16-bit voltages 1 to 4, in millivolts -- big endian format.
ID | module_address + 1 |
BYTE 1 | cell 1 voltage in millivolts, high byte |
BYTE 2 | cell 1 voltage in millivolts, low byte |
BYTE 3 | cell 2 voltage in millivolts, high byte |
BYTE 4 | cell 2 voltage in millivolts, low byte |
BYTE 5 | cell 3 voltage in millivolts, high byte |
BYTE 6 | cell 3 voltage in millivolts, low byte |
BYTE 7 | cell 4 voltage in millivolts, high byte |
BYTE 8 | cell 4 voltage in millivolts, low byte |
2nd Response Data Frame (BMS100 series module to master/controller)
The second being 8 bytes in size, containing the sampled 16-bit voltages 5 to 8, in millivolts -- big endian format.
ID | module_address + 2 |
BYTE 1 | cell 5 voltage in millivolts, high byte |
BYTE 2 | cell 5 voltage in millivolts, low byte |
BYTE 3 | cell 6 voltage in millivolts, high byte |
BYTE 4 | cell 6 voltage in millivolts, low byte |
BYTE 5 | cell 7 voltage in millivolts, high byte |
BYTE 6 | cell 7 voltage in millivolts, low byte |
BYTE 7 | cell 8 voltage in millivolts, high byte |
BYTE 8 | cell 8 voltage in millivolts, low byte |
3rd Response Data Frame (BMS100 series module to master/controller)
The third being 8 bytes in size, containing the sampled 16-bit voltages 9 to 12, in millivolts -- big endian format.
ID | module_address + 3 |
BYTE 1 | cell 9 voltage in millivolts, high byte |
BYTE 2 | cell 9 voltage in millivolts, low byte |
BYTE 3 | cell 10 voltage in millivolts, high byte |
BYTE 4 | cell 10 voltage in millivolts, low byte |
BYTE 5 | cell 11 voltage in millivolts, high byte |
BYTE 6 | cell 11 voltage in millivolts, low byte |
BYTE 7 | cell 12 voltage in millivolts, high byte |
BYTE 8 | cell 12 voltage in millivolts, low byte |
4th Response Data Frame (BMS100 series module to master/controller)
The fourth being 2 bytes in size, containing the sampled 8-bit temperatures, with a +40C offset.
ID | module_address + 4 |
BYTE 1 | temperature 1 in degrees celcius (+40) |
BYTE 2 | temperature 2 in degrees celcius (+40) |
The master/controller logic must subtract 40 from each temperature for actual values.
Variants
The same request/response packet structure is used across all variants.
For variants <12S, the unused bytes are zeroed.
PACKET/BYTE | 12S | 10S | 8S | 6S |
---|---|---|---|---|
module_address + 1 / 1 | cell 1 H | cell 1 H | cell 1 H | cell 1 H |
module_address + 1 / 2 | cell 1 L | cell 1 L | cell 1 L | cell 1 L |
module_address + 1 / 3 | cell 2 H | cell 2 H | cell 2 H | cell 2 H |
module_address + 1 / 4 | cell 2 L | cell 2 L | cell 2 L | cell 2 L |
module_address + 1 / 5 | cell 3 H | cell 3 H | cell 3 H | cell 3 H |
module_address + 1 / 6 | cell 3 L | cell 3 L | cell 3 L | cell 3 L |
module_address + 1 / 7 | cell 4 H | cell 4 H | cell 4 H | cell 4 H |
module_address + 1 / 8 | cell 4 L | cell 4 L | cell 4 L | cell 4 L |
module_address + 2 / 1 | cell 5 H | cell 5 H | cell 5 H | cell 5 H |
module_address + 2 / 2 | cell 5 L | cell 5 L | cell 5 L | cell 5 L |
module_address + 2 / 3 | cell 6 H | cell 6 H | cell 6 H | cell 6 H |
module_address + 2 / 4 | cell 6 L | cell 6 L | cell 6 L | cell 6 L |
module_address + 2 / 5 | cell 7 H | cell 7 H | cell 7 H | 0 |
module_address + 2 / 6 | cell 7 L | cell 7 L | cell 7 L | 0 |
module_address + 2 / 7 | cell 8 H | cell 8 H | cell 8 H | 0 |
module_address + 2 / 8 | cell 8 L | cell 8 L | cell 8 L | 0 |
module_address + 3 / 1 | cell 9 H | cell 9 H | 0 | 0 |
module_address + 3 / 2 | cell 9 L | cell 9 L | 0 | 0 |
module_address + 3 / 3 | cell 10 H | cell 10 H | 0 | 0 |
module_address + 3 / 4 | cell 10 L | cell 10 L | 0 | 0 |
module_address + 3 / 5 | cell 11 H | 0 | 0 | 0 |
module_address + 3 / 6 | cell 11 L | 0 | 0 | 0 |
module_address + 3 / 7 | cell 12 H | 0 | 0 | 0 |
module_address + 3 / 8 | cell 12 L | 0 | 0 | 0 |
Cell Balancing
The module will enable shunts across cells that exceed the requested shunt voltage received from the master/controller.
This will continue until the internal 1s timer elapses between CAN messages or until the cell voltage is below the requested shunt voltage.
A master/controller request rate of 2 Hz is recommended for reliable continuous balancing.
Last updated