# Functional Description

## CAN Communication

{% hint style="info" %}
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.
{% endhint %}

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:&#x20;

–    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**.

<table data-header-hidden><thead><tr><th width="112"></th><th></th></tr></thead><tbody><tr><td>ID</td><td>module_address + 0</td></tr><tr><td>BYTE 1</td><td>shunt voltage in millivolts, high byte</td></tr><tr><td>BYTE 2</td><td>shunt voltage in millivolts, low byte</td></tr></tbody></table>

{% hint style="info" %}
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.
{% endhint %}

### 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.&#x20;

The first being 8 bytes in size, containing the sampled **16-bit voltages 1 to 4, in millivolts -- big endian format.**

<table data-header-hidden><thead><tr><th width="111.5"></th><th></th></tr></thead><tbody><tr><td>ID</td><td>module_address + 1</td></tr><tr><td>BYTE 1</td><td>cell 1 voltage in millivolts, high byte</td></tr><tr><td>BYTE 2</td><td>cell 1 voltage in millivolts, low byte</td></tr><tr><td>BYTE 3</td><td>cell 2 voltage in millivolts, high byte</td></tr><tr><td>BYTE 4</td><td>cell 2 voltage in millivolts, low byte</td></tr><tr><td>BYTE 5</td><td>cell 3 voltage in millivolts, high byte</td></tr><tr><td>BYTE 6</td><td>cell 3 voltage in millivolts, low byte</td></tr><tr><td>BYTE 7</td><td>cell 4 voltage in millivolts, high byte</td></tr><tr><td>BYTE 8</td><td>cell 4 voltage in millivolts, low byte</td></tr></tbody></table>

### 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**.

<table data-header-hidden><thead><tr><th width="111.5"></th><th></th></tr></thead><tbody><tr><td>ID</td><td>module_address + 2</td></tr><tr><td>BYTE 1</td><td>cell 5 voltage in millivolts, high byte</td></tr><tr><td>BYTE 2</td><td>cell 5 voltage in millivolts, low byte</td></tr><tr><td>BYTE 3</td><td>cell 6 voltage in millivolts, high byte</td></tr><tr><td>BYTE 4</td><td>cell 6 voltage in millivolts, low byte</td></tr><tr><td>BYTE 5</td><td>cell 7 voltage in millivolts, high byte</td></tr><tr><td>BYTE 6</td><td>cell 7 voltage in millivolts, low byte</td></tr><tr><td>BYTE 7</td><td>cell 8 voltage in millivolts, high byte</td></tr><tr><td>BYTE 8</td><td>cell 8 voltage in millivolts, low byte</td></tr></tbody></table>

### 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.**

<table data-header-hidden><thead><tr><th width="113.5"></th><th></th></tr></thead><tbody><tr><td>ID</td><td>module_address + 3</td></tr><tr><td>BYTE 1</td><td>cell 9 voltage in millivolts, high byte</td></tr><tr><td>BYTE 2</td><td>cell 9 voltage in millivolts, low byte</td></tr><tr><td>BYTE 3</td><td>cell 10 voltage in millivolts, high byte</td></tr><tr><td>BYTE 4</td><td>cell 10 voltage in millivolts, low byte</td></tr><tr><td>BYTE 5</td><td>cell 11 voltage in millivolts, high byte</td></tr><tr><td>BYTE 6</td><td>cell 11 voltage in millivolts, low byte</td></tr><tr><td>BYTE 7</td><td>cell 12 voltage in millivolts, high byte</td></tr><tr><td>BYTE 8</td><td>cell 12 voltage in millivolts, low byte</td></tr></tbody></table>

### 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.**

<table data-header-hidden><thead><tr><th width="106.5"></th><th></th></tr></thead><tbody><tr><td>ID</td><td>module_address + 4</td></tr><tr><td>BYTE 1</td><td>temperature 1 in degrees celcius (+40)</td></tr><tr><td>BYTE 2</td><td>temperature 2 in degrees celcius (+40)</td></tr></tbody></table>

{% hint style="info" %}
The master/controller logic must subtract 40 from each temperature for actual values.
{% endhint %}

### Variants

The same request/response packet structure is used across all variants.&#x20;

{% hint style="info" %}
For variants <12S, the unused bytes are zeroed.
{% endhint %}

<table><thead><tr><th width="228">PACKET/BYTE</th><th width="130">12S</th><th width="128">10S</th><th width="130">8S</th><th>6S</th></tr></thead><tbody><tr><td>module_address + 1 / 1</td><td>cell 1 H</td><td>cell 1 H</td><td>cell 1 H</td><td>cell 1 H</td></tr><tr><td>module_address + 1 / 2</td><td>cell 1 L</td><td>cell 1 L</td><td>cell 1 L</td><td>cell 1 L</td></tr><tr><td>module_address + 1 / 3</td><td>cell 2 H</td><td>cell 2 H</td><td>cell 2 H</td><td>cell 2 H</td></tr><tr><td>module_address + 1 / 4</td><td>cell 2 L</td><td>cell 2 L</td><td>cell 2 L</td><td>cell 2 L</td></tr><tr><td>module_address + 1 / 5</td><td>cell 3 H</td><td>cell 3 H</td><td>cell 3 H</td><td>cell 3 H</td></tr><tr><td>module_address + 1 / 6</td><td>cell 3 L</td><td>cell 3 L</td><td>cell 3 L</td><td>cell 3 L</td></tr><tr><td>module_address + 1 / 7</td><td>cell 4 H</td><td>cell 4 H</td><td>cell 4 H</td><td>cell 4 H</td></tr><tr><td>module_address + 1 / 8</td><td>cell 4 L</td><td>cell 4 L</td><td>cell 4 L</td><td>cell 4 L</td></tr><tr><td>module_address + 2 / 1</td><td>cell 5 H</td><td>cell 5 H</td><td>cell 5 H</td><td>cell 5 H</td></tr><tr><td>module_address + 2 / 2</td><td>cell 5 L</td><td>cell 5 L</td><td>cell 5 L</td><td>cell 5 L</td></tr><tr><td>module_address + 2 / 3</td><td>cell 6 H</td><td>cell 6 H</td><td>cell 6 H</td><td>cell 6 H</td></tr><tr><td>module_address + 2 / 4</td><td>cell 6 L</td><td>cell 6 L</td><td>cell 6 L</td><td>cell 6 L</td></tr><tr><td>module_address + 2 / 5</td><td>cell 7 H</td><td>cell 7 H</td><td>cell 7 H</td><td>0</td></tr><tr><td>module_address + 2 / 6</td><td>cell 7 L</td><td>cell 7 L</td><td>cell 7 L</td><td>0</td></tr><tr><td>module_address + 2 / 7</td><td>cell 8 H</td><td>cell 8 H</td><td>cell 8 H</td><td>0</td></tr><tr><td>module_address + 2 / 8</td><td>cell 8 L</td><td>cell 8 L</td><td>cell 8 L</td><td>0</td></tr><tr><td>module_address + 3 / 1</td><td>cell 9 H</td><td>cell 9 H</td><td>0</td><td>0</td></tr><tr><td>module_address + 3 / 2</td><td>cell 9 L</td><td>cell 9 L</td><td>0</td><td>0</td></tr><tr><td>module_address + 3 / 3</td><td>cell 10 H</td><td>cell 10 H</td><td>0</td><td>0</td></tr><tr><td>module_address + 3 / 4</td><td>cell 10 L</td><td>cell 10 L</td><td>0</td><td>0</td></tr><tr><td>module_address + 3 / 5</td><td>cell 11 H</td><td>0</td><td>0</td><td>0</td></tr><tr><td>module_address + 3 / 6</td><td>cell 11 L</td><td>0</td><td>0</td><td>0</td></tr><tr><td>module_address + 3 / 7</td><td>cell 12 H</td><td>0</td><td>0</td><td>0</td></tr><tr><td>module_address + 3 / 8</td><td>cell 12 L</td><td>0</td><td>0</td><td>0</td></tr></tbody></table>

## Cell Balancing

The module will enable shunts across cells that exceed the requested **shunt voltage** received from the master/controller.&#x20;

This will continue until the internal 1s timer elapses between CAN messages **or** until the cell voltage is below the requested **shunt voltage**.

{% hint style="info" %}
A master/controller request rate of 2 Hz is recommended for reliable continuous balancing.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.caetron.io/product-documentation/helot-bms100-series-manual/functional-description.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
