Intelligent Energy Fuel Cell 650W/800W


This page explains how to connect Intelligent Energy’s 650W and 800W fuel cells to ArduPilot. Telemetry from the fuel cell is transmitted via serial to ArduPilot. This gives the following feedback:

  • Hydrogen tank level as a percentage.
  • Battery remaining as a percentage.
  • Fuel cell state.
  • Error codes.


Connecting the Device

Connect the UART from the ‘Customer Interface’ port on the fuel cell to any serial port on your flight controller. See device user manual for details on where to find the ‘Customer Interface’. Only the GND, UART TX, and UART RX connections are required. See the diagram below:


Parameter Configuration

Enable the fuel cell driver by setting GEN_TYPE to 1.

Fuel cell telemetry is transmitted over serial. The appropriate serial port needs to be configured to receive fuel cell data. Set the SERIALX_PROTOCOL parameter to 30 for generator.

The generator library utilises the battery monitor mavlink message to display fuel cell telemetry on the ground station. Two battery monitor instances are required for one fuel cell. One for the fuel tank and another for the battery. Set BATTX_MONITOR parameter to 17 for the fuel cells electrical data. Set another BATTX_MONITOR parameter to 18 for the hydrogen tank telemetry.

This fuel cell unit only reports battery percentage remaining and tank percentage remaining. As such, the following parameters must be set for both tank and battery:

Reboot the flight controller after setting the parameters for the settings to take effect.


In this instance, ignore the units of these parameters. The capacities are only reported as a percentage. As such values should be entered in the range from 1 to 100.


No voltage data is available for these units and a fixed voltage of 1 V is always reported. To avoid low voltage pre-arm warnings and failsafes BATTX_ARM_VOLT = 0, BATTX_LOW_VOLT = 0, and BATTX_CRT_VOLT = 0 must be set to disable voltage related failsafes on this model.

Fuel Cell Status

The fuel cell reports status over the telemetry. The status levels are:

  • Starting
  • Ready
  • Running
  • Fault
  • Battery Only

A message will be displayed on the GCS and in the flight log whenever the fuel cell status changes. The vehicle can only be armed when the fuel cell is reporting a status of ‘Running’.

Failsafes and Pre-Arm Checks

Failsafes and pre-arm checks are hard-coded and based on the error codes sent by the fuel cell. Failsafes have been separated into two groups: Low and Critical. The error code groups are listed below. If an error code is received from the fuel cell, the resulting failsafe action will be set by the BATTX_FS_LOW_ACT and BATTX_FS_CRT_ACT respectively.


Monitoring of the fuel cell’s internal error codes for pre-arm checks and failsafes are only done on the battery monitor instance allocated for the electrical telemetry. The electrical battery monitor instance must therefore be set to trigger failsafes based on error codes.

Failsafe Low Action Error Code Group

Error Code Definition
0x4000000 Fan over current (> 0.25 A)
0x100000 Fuel cell's internal State is set 'stop' for > 15 s
0x20000 Tank pressure < 15 barg
0x2000 Stack 1 under temperature (< 5 degC)
0x1000 Stack 2 under temperature (< 5 degC)
0x800 Battery under voltage warning (21.6 V)
0x200 Fan pulse aborted
0x100 Stack under voltage (650 W < 17.4V, 800 W < 21.13 V)
0x80 Stack under voltage and battery power below threshold (< -200 W)
0x10 Battery charger fault
0x8 Battery undertemperature (< -15 degC)

Failsafe Critical Action Error Code Group

Error Code Definition
0x80000000 Stack 1 over temperature alert (>58 degC)
0x40000000 Stack 2 over temperature alert (>58 degC)
0x20000000 Battery under volt alert (<19 V)
0x10000000 Battery over temperature alert (>65 degC)
0x8000000 No fan current detected (<0.01 A)
0x2000000 Stack 1 over temperature critical (>57 degC)
0x1000000 Stack 2 over temperature critical (>57 degC)
0x800000 Battery under volt warning (<19.6 V)
0x400000 Battery over temperature warning (>60 degC)
0x200000 Fuel cell's internal State == start for > 30 s
0x80000 Tank pressure < 6 barg
0x40000 Tank pressure < 5 barg
0x10000 Fuel cell's internal saftey flags not set true
0x8000 Stack 1 denied start
0x4000 Stack 2 denied start
0x400 Battery under voltage (21.6 V) and master denied
0x40 Over voltage and over current protection
0x20 Invalid serial number


This example has been provided to make it clear how the failsafe actions are set.

The battery monitors have been configured so that electrical telemetry data is on battery monitor 1 and hydrogen tank telemetry is on battery monitor 2:

The failsafe actions that correspond to the error code groups listed above are then set on battery monitor 1 as that is the one associated with the electrical telemetry data.

A tank level failsafe has been set on battery monitor 2 so that the vehicle will return to land when the fuel level gets below 25%. This is done by setting:

As previously mentioned, battery capacity failsafes can be used on this model. Hence, as a final belt-and-braces approach a critical voltage failsafe has been set on the electrical generator monitor instance to initiate an immediate landing if battery remaining gets to 40%:

Driver Not Healthy

If you see the Generator: Not Healthy message in the GCS then ArduPilot has not received any data packets from the fuel cell for at least 5 seconds. Check the following for common causes to this issue:

  • Fuel cell is powered on
  • Telemetry is connected to a flight controller serial port.
  • The serial connection is wired correctly (TX->RX, RX->TX).
  • The SERIALX_PROTOCOL parameter is set to generator for the correct telemetry port.

Flight Log Data

The fuel and battery levels are logged as percentage used. They are logged under the ‘BAT’ data group. Battery used will be displayed under ‘CurrTot’ for the electrical instance. Fuel used will be displayed under ‘CurrTot’ for the fuel instance.

Fuel cell state and error messages are stored under the ‘MSG’ data group.