Engine Management System (aka Engine Information System)
The idea behind this project is to create a hardware platform for continuous development and improvement of the Engine Management System through software. So, you might notice that many components in the schematic and PCB are optional and different components might be used depending of the purpose of a sensor.
The hardware designed to monitor 27 different engine parameters, including 16 temperature sensors at very high precision (24 bits), 8 resistive sensors at 10 bits precision, two pulse-based parameters (RPM and Fuel Flow) and one discrete input.
Not all inputs are configured in the software at this stage, but the hardware provides a very flexible platform to meet large variety of requirements for engine monitoring in experimental aviation. The unit can be used for automotive engines as well.
Parameters configured to monitor and display:
- Engine timer (Tacho timer)
- Oil Temperature
- Oil Pressure
- Fuel level
- Fuel Pressure
- Fuel Flow
- EGT X 6 (Type K sensors)
- CHT X 6 (Type J sensors)
- Endurance based on current fuel flow
- Endurance based on planned fuel flow
The EMS board communicates with LCD display via CAN bus. All the information sent to the display is also recorded by the Flight Data Recorder unit at the rate of 1 record per second.
The EMS built as a fully software driven and very flexible platform. The hardware has a lot of provision for lots of extra features. These will come later.
I plan to use it with 6 cylinder Jabiru 3300 engine. However, practically any 1 – 8 cylinder engines can be monitored by this EMS. Some software modification might be required.
Basically the EMS consists of two physically separate modules connected together via CAN bus:
- Sensor Unit
- Display Unit
Board size 100mm X 100mm.
- 16 Mhz ATmega328 processor (Arduino Nano),
- LTC2983 thermocouple management chip from Linear with 24-bit ADC.
- MCP2515 CAN chip (NeRen CAN breakout board)
The new version (2.2) of the EMS board has no SMD components. I have created a separate breakout board for the LTC2983 thermocouple chip. It makes the assembly so much easier.
All thermocouples connected via screw terminals. Other sensors connected via 15-pin D-Sub connector.
CAN controller is a breakout board from eBay based on MCP2515 chip. I had to cut it a bit to save some space on the main board. In the next version of the main board I’m going to mount the CAN board up side down.
Testing of the board is going fine. I’m getting very close to the point when I need an engine to test it on 🙂
Software is not ready to be published yet. I keep changing it. Hopefully will get to some stable release very soon.
Schematics in PDF format: Arduino_EMS_Sensor_Board_v22
Display Unit is the same as the one I use EFIS 19264 except it has CAN board connected to the main board instead of sensor board. The Display Unit is interchangeable with EFIS Display Unit. In other words they are the same from hardware point of view. They just have different software in them. In the future I plan to combine the software for EMS and EFIS so they could serve as a backup for each-other.
EMS Sensors Input reference table
|Description||Board Input||Controller input||Voltage divider||Pull-Up resistor||Low Pass filter (10K/0.1uF)|
|EGT Type -K Thermocouple||EGT1||LTC2983 Ch1||None||None||No marking|
|EGT Type -K Thermocouple||EGT2||LTC2983 Ch2||None||None||No marking|
|EGT Type -K Thermocouple||EGT3||LTC2983 Ch3||None||None||No marking|
|EGT Type -K Thermocouple||EGT4||LTC2983 Ch4||None||None||No marking|
|EGT Type -K Thermocouple||EGT5||LTC2983 Ch5||None||None||No marking|
|EGT Type -K Thermocouple||EGT6||LTC2983 Ch6||None||None||No marking|
|Additional thermocouple.||TC1||LTC2983 Ch7||None||None||R26/C9|
|Additional thermocouple.||TC2||LTC2983 Ch8||None||None||R27/C10|
|CHT Type-J Thermocouple||CHT1||LTC2983 Ch14||None||None||No marking|
|CHT Type-J Thermocouple||CHT2||LTC2983 Ch15||None||None||No marking|
|CHT Type-J Thermocouple||CHT3||LTC2983 Ch16||None||None||No marking|
|CHT Type-J Thermocouple||CHT4||LTC2983 Ch17||None||None||No marking|
|CHT Type-J Thermocouple||CHT5||LTC2983 Ch18||None||None||No marking|
|CHT Type-J Thermocouple||CHT6||LTC2983 Ch19||None||None||No marking|
|Ground||DSUB Pin 1|
|Fuel Level. Single wire. Pulled-up||DSUB Pin 2||Arduino A2||None||R1 = ???Ohm||R19/C3|
|+5v Output. Reference Voltage. Do not load.||DSUB Pin 3|
|Fuel Pressure. Single wire. Pulled up||DSUB Pin 4||Arduino A3||None||R2 = ???Ohm||R20/C1|
|Fuel Flow meter. Pulse signal. Conditioned via comparator (2/2). Adjust hysteresis through R11||DSUB Pin 5||Arduino INT1||None||None||C13 = 100pF. Optional|
|RPM Hall sensor pulses via comparator (1/2)||DSUB Pin 6||Arduino INT0||None||None||C12 = 100pF. Optional|
|Analog input via divider/trim pot||DSUB Pin 7||Arduino A0||R10 = 100K||None||R8/C2|
|Analog input via divider/trim pot||DSUB Pin 8||Arduino A1||R9 = 100K||None||R2/C4|
|Optional temperature sensor (termistor, diode) or analog input <2.5v||DSUB Pin 9||LTC2983 Ch9||None||None||None|
|Analog input via divider/trim pot||DSUB Pin 10||Arduino A5||R4 = 100K||Optional||R22/C6|
|Optional temperature sensor (termistor, diode) or analog input <2.5v||DSUB Pin 11||LTC2983 Ch10||None||None||None|
|Analog input via divider/trim pot||DSUB Pin 12||Arduino A6||R3 = 100K||Optional||R23/C7|
|Analog input via divider/trim pot||DSUB Pin 13||Arduino A7||R24 = 100K||Optional||R25/C8|
|Analog input via divider/trim pot||DSUB Pin 14||Arduino A4||R7 = 100K||Optional||R28/C11|
|Optional logical input/output control. Internally pulled up pinMode(Pin, INPUT_PULLUP); . Do not apply power. Either leave hanging or grounded.||DSUB Pin 15||Arduino D7||None||Internal||None|