I recently bought a Naze 32 (link) for my new quad copter project. I was busy trying to find 6 servo leads to connect the 6 channels from my FlySky iA6B receiver when I remembered reading about one wire alternatives to multi-wire PWM. I’m pretty new to the RC hobby but I did some digging and found that there are indeed a multitude of alternatives to PWM. The ones supported by the iA6B, which is a pretty cheap but seemingly decent receiver, are PPM and IBUS. Both PPM and IBUS can send all 6 channels output from the receiver over one wire (plus power and ground). If you don’t care about the differences between PWM, PPM and IBUS just jump here for instructions on using IBUS or PPM with the FlySky iA6B and Naze 32.
What’s the difference?
PWM signals consist of a variable length pulse sent at a regular interval. Hobby RC kit doesn’t seem to be overly fussy about the frequency of the pulses. What matters is the length of the pulse, the longer the pulse the higher the value it represents. In the case of the RC receiver, when you push one of the sticks up on the transmitter the length of the pulses of the corresponding channel from the receiver increases.
PPM, also known as CPPM, can send multiple channels of information using one piece of wire. Here the pulses are the same length but the time between them varies to represent the channel value. The first pulse marks the start of the channel 1 value, the second pulse marks the end of the channel 1 value and the start of the channel two value. By timing the gaps between pulses, the data for multiple channels can be obtained. This whole process repeats, typically every 20 ms, giving a max update rate of 50 Hz. There is also usually a limit of around 8 channels that can be transmitted using PPM on one wire.
IBUS is a serial protocol, I’ve not found out many details (I keep meaning to stick a scope on the tx line) but essentially multiple channels are transmitted serially down one wire. I *think* the baud rate is 115200. We can do some simple maths to figure out how fast we could send data, assuming each channel outputs a value from 0-1024:
- 115200 bits per second
- 1024 can be represented in 10 bits. (2^10).
- Lets assume we could have up to 20 channels.
- 115200 / 10/ 20 = 576 updates per second
This assumes that there are no start/stop bits or delays between channels etc but it should be clear that several hundred updates a second is feasible. A second benefit is that the information is digital, the values received are not based on timing the length of pulses. As such you can see a lot less jitter when using IBUS vs PPM or PWM.
Using IBUS or PPM with FlySky iA6B and Naze 32
I’m using Baseflight because that’s what came on the Naze board I bought and my Nighthawk 280 Pro. The process is similar for Cleanflight, here’s a link to a good video explaining how to setup IBUS in Cleanflight.
- Connect a servo lead from the IBUS SERVO pins on the receiver and connect it to VCC (power) and ground on the Naze 32 board.
- Connect the signal pin to pin 4 (see picture).
- Connect power to the Naze board (I used a UBEC I had laying around)
- Connect your Naze to your computer with a USB cable.
- Open baseflight, connect and go to the “Configuration” tab.
- Select “IBUS” in the “Serial Receiver” drop down box (see image).
- In the “Features” section, select “Enable Serial-based receiver”
- In the “Features” section, deselect select “Enable PPM input”
- Save the settings and reboot.
- Turn on your transmitter and in Baseflight go to the “receiver” tab.
- Waggle the sticks and the receiver values should change.