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.
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:
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:
BATTX_CAPACITY = 100 must be set to give a sensible readout of a percentage on the GCS.
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.
Fuel Cell Status¶
The fuel cell reports status over the telemetry. The status levels are:
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¶
|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¶
|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 safety 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.