How to read RC radio signals with Arduino using PPM signal

(Last Updated On: January 26, 2018)
In drones the RC transmitter is a fundamental part of the system. In this article I show how to used coded PPM RC signal in order to save pins of the main controller. Another advantage is the the number of cables is reduced considerably. In this example I am using the Turnigy 9XBC RC receiver.
Receiver

Differences between reading servo signals or PPM signals:
           Performance and simplicity in code are the reasons for intercept the PPM signals instead servo signals.
The advantage of the PPM (Pulse Position Modulation) is that you can collect all the radio channel in one input. In that way you can read all the channels with only one Arduino’s pin. Less wires = less problems.
The main idea is to read the radio signals within an interrupt routine or even a dedicated microcontroller and send the processed data to the main Arduino board by SPI or i2C.
Besides, if we disassemble the receiver housing and all input pins, we lose almost 70% weight and also save space. Very useful for drones.
radio signals
PPM and PWM are two different protocols for radio information. PPM has the advantage that you can get all the channels information through one port only. Some call it “PPM sum” since it’s the sum of all channels. That helps a lot when you have limited number of connectors to your flightcontroller. So I will use PPM into my flight controller, and then the flight controller will use PWM outputs to the ESCs and the servos for the camera mount of my drone.
By using the PPM input, I can use now 10 PWM outputs from my Open Pilot Copter Control instead of 6 PWM outputs. That is for obvious reasons essential for me, because my camera mount needs two servo outputs plus the 6 ESC outputs for the hexacopter.

RC transmitters often have two operating modes:  PPM (Pulse Position Modulation) and PCM (Pulse Code Modulation). To receive correct signals from the radio, the RC transmitter have to be set to PPM and ACRO mode, without TRIM, without DUAL-RATE and neither EXPONENTIAL. In this way the lectures will not be distorted by the transmitter software and will be transmitted raw.

Turnigy 9X 8C V2 can not get PPM signal on anywhere on the PCB. This receiver works with two microprocessor, one receiver and the other one  decoder, and they talks by SPI. Here you can check a big list with a lot of common receiver and how to get the PPM signal. LIST
Another hardware solution is add one extra chip.

If you don’t know where are your PPM signal, you can upload this Jordi’s code to try to find the right pin in our receiver board. With one wire connected to pin 3, start touching every pins and spots of your receiver until you see random values on the Arduino Serial Monitor between 300 to 9000. That means you found it. Don’t forget connect ground to ground.

 

The programs below were written by Jordi Muñoz and uploaded to Arduino’s Forum 1st de January 2008.
 Basic PPM reader with Arduino

PPM reader with glitch filter:

6 thoughts on “How to read RC radio signals with Arduino using PPM signal

  1. Reply
    Luis - August 5, 2012

    Perdon por la ignorancia, pero tengo el mismo receptor que tenes vos, entiendo que no puedo leer el PPM, pero podre leer el pwm canal por canal?

  2. Reply
    tnap1979 - August 19, 2013

    was wondering how to go about connecting a spektrum 6ch receiver to my arduino, and then have my arduino output the signal like a trainer port would on a dx6i, reason i ask is i have a basic 4ch spektrum remote that has no trainer output

  3. Reply
    Kerem Uyanık - December 17, 2013

    Hi. I have just bought a remote and receiver, I am trying to use 4x DC motor with hacking the receiver. I tried each step except the hacking inside, firstly I tried to read a ppm from a pin (channel 1 ) but it gave me random numbers, it didnt change when I play with remote. I have K-8X receiver, can you help me a bit please? thanks a lot for this very explanatory description

  4. Reply
    Unknown - September 23, 2015

    Can anyone help me? I want to receive a ppm signal and use it like a normal button to start a methode.

  5. Reply
    Roland Schuetzenhofer - September 24, 2015

    Can anyone help me? I want to receive a ppm signal and use it like a normal button to start a methode.

  6. Reply
    Piers Lyman - February 2, 2016

    Decoding is the reverse of encoding. In decoding, it makes the information easier to understand.
    Signals Decoding

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top