Table of Contents
Radio Control Developer Guide
This page covers the various radio control interfaces PX4 supports:
- PPM inputs (also referred to as CPPM or PPM sum-signal)
- Futaba S.BUS and S.BUS 2
- Spektrum DSM2 / DSMX
There is a lot of speculation of the actual frame formats on the internet and specifics of the protocol. The PX4 dev team has invested a significant amount of time to validate the different reverse-engineering results and we are confident that the details provided here represent a definite source of information.
PPM Inputs
Each pulse has a length of 1-2 ms which represents full negative to full positive stick travel. Channels are following directly after each other, and a pause of substantially more than 2 ms (we require 3 ms at least, but “standard” are 4 ms) marks the beginning of a packet. This means that a valid packet format is e.g. 8 channels in a 20 ms frame. Some vendors have not understood the concept well, leading to RC input decoding fail if enough channels are set to their maximum value (e.g. a frame length of 18 ms works for 8 channels if all sticks are centered, as the channel sequence adds to 1.5 ms * 8 = 12 ms. However, if all channels are maximized, the frame boundary vanishes completely: 2 * 8 = 16 ms. The receiver then outputs a pulse train of 2 ms pulses without any frame start marking).
Futaba S.BUS
The physical layer of S.BUS is based on a 100'000 baud inverted serial stream with 8 data bit, 1 stop bit and no parity (8N1). S.BUS2 follows the same physical layer but has slightly modified packets.
Spektrum DSM2 / DSM X
The physical layer of Spektrum DSM2/DSMX is based on a 115'200 baud serial stream with 8 data bit, 1 stop bit and no parity (8N1).
- Protocol Analysis: DSM2 and DSMX analysis by CGSY (archived webpage to ensure accessibility)
- Decoding: PPZ Spektrum Decoder
Output Scaling
Spektrum has a weird center pulse of 1520 us (normal would be 1500). The full channel setup for 100% travel set on the transmitter is:
- 0%: 1126 us (digital output at 11 bit: 345)
- 50% / center: 1520 us (digital output at 11 bit: 1024)
- 100% / top: 1919 us (digital output at 11 bit: 1700)
The PX4 stack therefore scales the values by subtracting 1024 and scaling to match the Spektrum 1100 to 1900 us range.