# 1. DroneCAN Internal Combustion Engine node

The ICE node is designed to control an internal combustion engine such as the DLE-20 (opens new window) or DLE-35 (opens new window) using Electronic Ignition Module.

drawing

The node has 2 input sources - commands from an autopilot. It subscribes to:

  • a specific channel of esc.RawCommand (opens new window). This is the main and mandatory command and it controls the gas and air throttles, spark ignition and starter motor.
  • a specific channel of actuator.ArrayCommand (opens new window). This command is optional and it allows tuning the open position of the air throttle in real time (not supported in the main branch of the PX4 autopilot).

# 1.1. Starter motor

The primary function of the starter motor is to rotate the engine's crankshaft at a speed sufficient to initiate the combustion process. The ICE node has 3 states:

  1. By default, it has STATE_STOPPED, that simply means that the engine is not running. A node will imidiatelly go to this state from any other states if it receives a negatie setpoint (< 0).
  2. If the node receives a setpoint to start (> 0) and the engine is not rotating yet, the node goes to a STATE_STARTING state. This is a transient state. The duration is configured with a parameter (1500 ms by default). In this state teh starter motor is enabled.
  3. After that the node goes into STATE_RUNNING state. During this state the starter is disabled. After some period of time configured with another parameter (500 ms by default), the node consistently performs the following check: if the engine is not rotation, then go back to the STATE_STARTING.

It is extected to use EME35 starter motor.

# 1.2. Spark Ignition

Spark Ignition control is automatically done by ECU. A node can only forcly turn off the spark engine.

If setpoint >= 0, then the spark engine is enabled, the the ECU can control it. If the setpoint is negative, then the spark ignition is disabled.

# 1.3. Gas throttle

Gas throttle is linearly controller by the RawCommand.

A user during the node configuration should specify throttle.gas.min_def and throttle.gas.max values of PWM related to closed and open state of the gas throttle.

If a configured channel in RawCommand is less or equal than 0, the gas throttle will be closed and the engine turn off. If a setpoint is 8191, the gas throttle will be fully opened and the engine have the maximum thrust.

If there is no setpoint for 500 ms, for the safety reasons the gas throttle will be closed.

# 1.4. Air throttle

When starting an internal combustion engine, the control of the air servo is crucial for achieving an optimal air-fuel mixture for ignition.

The node automatically controls the air servo based on a setpoint (esc.RawCommand) and an engine state estimation.

  1. Default Position (Engine is disabled)

    When engine is disabled, the air throttle position remains open. If PX4 supports, a user can ajust the open position in real time with ArrayCommand. Typically, it can be done with a remote controller.

  2. Cranking Phase

    During cranking (when the starter motor is turning the engine), the air throttle rapidly goes to the closed position and then slowly opens to a user specified position withing a configred in the parameters time interval.

    For most engines, especially in cold start conditions, the throttle (and thus the air servo) should be in a nearly closed position to ensure a rich air-fuel mixture. A richer mixture (more fuel relative to air) is easier to ignite, which is crucial for starting the engine.

  3. Post-Start (Engine Fires Up)

    Once the engine fires and begins to run, the throttle goes to a open position (configured in the parameters and optionally tuned in real time by a user) to stabilize the engine's idle speed.

Throttle Closed (or Nearly Closed): For most engines, especially in cold start conditions, the throttle (and thus the air servo) should be in a nearly closed position to ensure a rich air-fuel mixture. A richer mixture (more fuel relative to air) is easier to ignite, which is crucial for starting the engine.

When the started is enabled, the air throttle rapidly goes to the closed state, so we have less air, more fuel and the engine starts easier.

Within a given time interval, the air servo will move to the open position. If supported by PX4, the open position can be configured by a user in real time using ArrayCommand.

If engine starts sucessfully, the air servo remains open.

# 1.5. Feedback

The node sends 2 messages back to the the autopilot with various of data including:

  • engine state (stopped, starting or running)
  • spark engine state (either enabled or disabled)
  • engine speed RPM
  • gas throttle load percent
  • air throttle load percent
  • starter current and voltage
  • voltage: 5v and vin
  • stm32 temperature
  • (if supported) external temperature

# 1.6. Firmware

DroneCAN firmware

in process