.. include:: ./../macros.txt
.. include:: ./../units.txt

.. _THE_FOXBMS_2_PLATFORM:

#####################
The foxBMS 2 Platform
#####################

The |foxbms| platform consists of two main elements:

- the |master| and
- the |slave|.

The |master| consists of 3 boards:

- the |bms-master|,
- the |bms-interface| and
- the |bms-extension|.

An ARM-based microcontroller (`Cortex-R5`_) is used on the |bms-master|.

The |bms-master| communicates with the outside world via a CAN bus. The current
flowing through the battery system is measured via a current sensor
connected to a CAN bus. The current sensor is controlled via CAN by the
|bms-master| and sends the resulting measurement via CAN.

The |slaves| (based on |bms-slaves|) are used to measure cell voltages and
cell temperatures in the battery modules. The |slaves| can be linked in series.

In order for the |master| to communicate with the |slaves|, an interface board
(|bms-interface|) is needed. It implements the physical layer of the
communication between the |bms-master| and the |slaves|.

Control requests to the |master| are made via CAN messages. They control the
externally facing behavior of the system such as opening and closing the
contactors based on the internal implementation. The |master| measures
the state of the battery system and decides based on the implemented
algorithms the state of the contactors. The measured system state is
additionally communicated through CAN messages to a superior control unit.

The |bms-master| also implements an interlock line. This is a fast acting
interface that has to be connected through crucial system components such as
the |master|, emergency stop switch, master service disconnect switches and
similar devices. The interlock line can be opened by any connected device.
It is possible to define a system behavior in the case that the interlock line
has been opened such as the transition to an application-specific safe-state,
which could be the opening of all contactors.

See :numref:`start-high-level`.

.. figure:: img/high-level-overview.png
   :name: start-high-level
   :align: center
   :alt: High level overview of |foxbms|

   High level overview of |foxbms|

In the case that an application requires more inputs, outputs or specific
hardware functions, these can be implemented through a |bms-extension|.
This is a specialized board that connects through a set of connectors to
the |bms-master| and can implement application-specific hardware for the
|master|.

This description reflects the current state of |foxbms|. Due to the open nature
of the system, many other possibilities can be implemented, like for example:

- Use of other types of current sensors (e.g., shunt-based or Hall-effect
  based)
- No |slave| needs to be used: a direct measurement of the cell voltages and
  cell temperatures can be performed by the |master|
- A higher number of contactors can be controlled (e.g., up to 9)
- etc...

.. _Cortex-R5:
   https://developer.arm.com/ip-products/processors/cortex-r/cortex-r5