Voltage Monitor for MPX M-Link

This describes an Arduino Pro Mini based voltage monitor for use with the Multiplex M-Link R/C systems. That includes Profi, Royal, Cockpit SX and Smart transmitters with any M-Link receiver. This design was created for and is flown using a Cockpit SX transmitter with an M-Link 7 channel dual antenna receiver in any electrical powered model aircraft. The onboard voltage is visible on the display screen on the transmitter. This is only accurate within 0.1V or 0.2V. This should be sufficient for most people.

As this based on the Arduino pro mini onboard AtoD function the battery voltage has to reduced before inputting to the Arduino. This is achieved using off the shelf resistors.

The AtoD is based on a values between -5V and +5V; in this case we want values between 0 and +5V. The result of the AtoD reading is between 0 and 1023 but any value above 1000 is unacceptable to the MPX M-Link protocol. Assuming an acceptable reading must be less than 1000 then the 5V range drops to 5 X 1000 / 1023 which gives 4.88. The resistor dividing circuit must reduce 16.8V (maximum 4S value) to 4.88V. i.e. 16.8 : 4.88 or 3.44:1. Hence 27k and 10k which gives 3.7:1. This gives some leeway. As a result there is a 'correction' factor of around 5.45 which also has to compensate for the fact that 5% resistors were used. This correction factor needs to be 'adjusted' once the device has been built to give a correct result at the Transmitter.

This device is based on and tested on an 'SX' receiver with only 8 channels of sensor data available. It may, or may not, work with an M-Link system using more data channels.

Before you start it is important to have access to the following document:

mlinksensorbus.pdf

Multiplex Sensor Bus mpxaltimeter.html

The first part of the document is in German, however the second part is in English. This explains what the Arduino needs to do to get the information from the analog voltage into the M-Link system and correctly displayed on the transmitter. There are 2 critical parts: firstly, transmitting the data in the correct position of the data frame; secondly, packaging the data in the format required by the M-Link protocol. There is also the need to use compatible hardware and allow the data channel to be selected. The desired channel can be set and there are options to select

Due to a variety of things this write up has been delayed a bit. Suffice it to say that the Monitor works well and I even built two with different addresses so I can get it twice. (Why: well it seemed a good way to test things like repeatability and sensor addresses.) So far no-one else at my club has tried it out as MPX is gradually being replaced by FrSky.

The wiring diagram between the battery balancing connector and Arduino is reproduced below. There are a sequence of connectors which step down from the 5 pin 4S balancing connector to a 3 pin equivalent. The thought here is that when swapping between 3S and 4S all you need to change is the connector harness. The same Arduino unit will still work.

Separate page with Circuit Diagram

The 'trick' I discovered was a method of creating a wiring harness for the Arduino Pro Mini which is polarised (it is impossible to connect it incorrectly without making an obvious visual mistake.) The harness allows the sensor to be 'daisy-chained' with other M-Link sensors as was originally intended by Multiplex. In effect all the sensors connect in parallel, their respective addresses controlling how they respond and insert the data onto the datastream. The harness has two 120 Ohm resistors and a 1N4148 connected to a male and a female JR plug and socket.

The parts list is a follows:

1 27kOhm resistor

2 10kOhm resistor

3 Arduino Pro Mini (5V) HCARDU0059

4 120 Ohm resistor (2 off)

5 1N4148 silicon diode

6 FTDI USB Serial Port Adapter (Optional) HCARDU0011
And a whole bunch of appropriate connectors to allow everything to connect together. Too long to list here, although I probably should at some point.

/>

The circuit diagram shows an address selector which offers 3 sensor addresses: 2, 3, 4. If you omit that part then the address defaults to 2. You can easily change that address in the programming environment but the selector allows a jumper system which removes the need for a pc to modify at the flying field.

The current software is written to the Pro Mini using the standard Arduino programming environment, connecting through one of the many available interfaces. I used the Hobby Components FTDI USB Serial Port Adapter with a carefully modified 6 wire ribbon cable. This is shown in the following document:-

The hardware interface is described in the Multiplex document and is based on the sensor recognising its own digital address and responding by using open collector output to pull down the data input to the multiplex receiver.

<

Arduino Code

Separate page with code listing

Home Page
(Latest update 13:July:2025)