PWM, PPM, and Serial RX explained

When speaking about radio systems for remote controlled models, multirotor, airplanes, gliders, there are some shortcuts that might be unknown for beginners. Those are: PWM, PPM, Serial RX, S.Bus. Today I will explain basic concepts behind them, and when they are used.


PWM, as Pulse Width Modulation, is something a standard for controlling different devices onboard remote controlled model. Almost all servos, ESC, flight controllers and radio receivers can work with PWM signal. There might be some exceptions, but they are so rare, that we can skip them.

Stick (switch, POT) position in PWM signal is encoded as length of signal. Signal that lasts 1000us encodes minimum stick position, and signal of 2000us encodes maximum stick position.

3 PWM channels connected to FlySky FS-iA6BIn PWM, each channel is available as separate port of 3 pins (Ground, +5V, Signal). So, if receiver has 8 channels in PWM mode, that means that it has at least 8 ports of 3 pins. 24 pins, 24 cables, lots of mess. And this was great for airplanes, where each control surface is controlled by separate servo connected directly to the receiver. But is not so great for quadcopters and event airplanes with flight controller. Not only it requires a lot of cables, but also complicates things on flight controller’s end. It requires an interrupt for each channel, takes a lot of space and to be honest, it’s completely not needed. Why? Because we have something better…
Continue reading PWM, PPM, and Serial RX explained

Quick Review: FPV 1/4 CMOS HD Color Camera Module 600TVL 120 Degree Wide Angle

Usually I have absolutely nothing against buying cheap stuff from China. OK, maybe quality will not always be as expected, but usually it’s not worth paying extra 100% in price for 10% of extra quality. Usually, with some exceptions. Exception number one are mechanical parts like motors. Exception number two are FPV cameras. And the second one is new one. I’ve put it in place after using FPV 1/4 CMOS HD Color Camera Module 600TVL 120 Degree Wide Angle from Banggood for one month.

FPV 1/4 CMOS HD Color Camera Module 600TVL 120 Degree Wide Angle from Banggood Continue reading Quick Review: FPV 1/4 CMOS HD Color Camera Module 600TVL 120 Degree Wide Angle

5.8GHz FPV channel frequency table

For 5.8GHz FPV systems, there are 4 main bands divided into 8 channels each. That gives 32 channels free to use. So, in theory, 32 pilots should be able to fly FPV at the same time. Unfortunately, this is not true.

First of all, there are transmitters, and there are transmitters. Better, properly tuned, will broadcast in narrow frequency range. Cheaper, or just not properly tuned, will broadcast on much wider frequency range. The same goes for receivers. They can listen “only” to their frequency, but also to others. The result is, that a transmitter can pollute other channels. This is why, general rule is then 2 pilots should not fly on adjacent channels. If pilot A is using CH1, pilot B should use CH3 and so on.

Channel frequency for band (MHz)
Channel A (FR1) B (FR2) E (FR3) F (FR4)
1 5865 5733 5705 5740
2 5845 5752 5685 5760
3 5825 5771 5665 5780
4 5805 5790 5645 5800
5 5785 5809 5885 5820
6 5765 5828 5905 5840
7 5745 5847 5925 5860
8 5725 5866 5945 5880

Second of all, frequencies assigned to channels can overlap with channels in different bands. Just look at the chart below.

5.GHz FPV channel frequencies

Not only frequency separation between bands B and F is smaller than expected, there might me overlaps, channel 4 is crowded and band E jumps high and low. Nightmare that concludes: you should not fly CH4 on bands A and F. Also better not to use CH4 in band B. Just to be on safe side. On the other hand, band E (FR3) is not overlapping with other bands. Also band A is quite safe as long as you are not using CH4.

Flash firmare to S.Port FrSky receivers with X9D Taranis

FrSky X9D is an excellent radio. There is a variety of receivers that can work with it. And each of receivers is a small computer itself. With its own firmware that can be changed. Why? For example to enable CPPM mode, or allow receiver to bind with EU or non-EU Taranis (I will write on both topic in different posts). FsSky is selling cables to flash different modules, but Taranis is cool enough to flash S.Port receiver modules by iself. Cool, right? How to do it? Simple:

  1. You will need OpenTX 2.1 Taranis software or never. If you are using older one, upgrade with Companion app,
  2. You will need S.Port cable. Different receivers might have different plugs, so you will need right type. Luckily receivers usually comes with proper cable (checked with X4R and X4RSB), and X8R bundled with Taranis has standard servo pulg for S.Port,FrSky X4R S.Port cable
  3. Taranis has “hidden” connector that allows for flash S.Port modules. It is behind JR module cover.FrSky X9D Plus TaranisTaranis JR connector

Continue reading Flash firmare to S.Port FrSky receivers with X9D Taranis

Quick Review: EMAX GT2218/08 1100KV motors

Since I was lacking some power in my Reptile 500 quadcopter, I was considering switching my Turnigy MT2213 935KV motors to something more powerful. Last previous weekend kind of forced me to make that switch: I destroyed one motor while trying to replace bearings. Being forced with lack of motors I’ve decided to stay with 3S LiPo, AfroESC and 10″ APC propellers and buy motors that would deliver more power while being compatible with rest of my setup. So I have chosen EMAX GT2218/09 1100KV.

EMAX GT2218/08 1100KV

Why them? Mainly because they were meeting my requirements and being actually available and within reasonable price.


  • Weight: 80g,
  • KV: 1100,
  • Max power: 312W,
  • Max thrust:
    • 1380g on APC 11×3.8,
    • 1290 on APC 10×4.7
  • With long shaft at the bottom, so can be mounted in front and behind an firewall,
  • GT series (Grand Turbo, woot woot) for “hi-tec” and “pro” models (such a nice name…),
  • Black (!),
  • Mounting holes: 16x19mm.

Continue reading Quick Review: EMAX GT2218/08 1100KV motors

PID values for Reptile 500 frame

I know, I know… posting PID values for one multirotor is not very useful after all. The same frame with different motors, props and battery might require totally different PID values. But.. At least they can be used as starting point for customized tuning. So, here is my configuration for Reptile 500 and frame and following configuration:

  • Battery: 5000mAh Turnigy 3S,
  • FC: Flip32 running Cleanflight 1.10,
  • Motors: Turnigy Multistar MT2213 935KV
  • Props: APC 10×4.5 MR
  • ESC: AfroESC 20A running OneShot125 and BLHeli 14
  • Weight: 1300g with battery

So, if you have somehow similar configuration, you might try my values. And they are:

  • PID Controller: LuxFloat (BTW, as far as I can read C code (last time I was programming with C about 20 years ago) and know smth about PIDs, this is the only controller implemented into Cleanflight that actually is written in a proper way. The way I see it, all the other works only by mistake, specially on D part. Who thought that substracting D term is actually a good idea?)
  • Roll (P / I / D): 2.5 / 0.06 / 70
  • Pitch (P / I / D): 2.5 / 0.06 / 70
  • Yaw (P / I / D): 2.5 / 0.1 / 0
  • Other controllers on default values
  • Custom mixer from this post
  • PID and gyro filtering enabled via CLI with following commands (BTW again, those filters are he best thing that came in Cleanflight 1.10. Everything is much smoother with them. Good job on those):
    • set dterm_cut_hz = 16
    • set pterm_cut_hz = 32
    • set gyro_cut_hz = 64

Important note for 2015-11-22

PID values from above has been determined as main source of extensive high frequency vibrations causing jello effect. Specially high D, even with LP filter, was causing jello effect. Read this post for improved PID settings for Reptile 500 frame and Cleanflight.

How to add external compass to Flip32

In my last post I’ve showed how to disable internal MHC5883L compass on Flip32+ (10DOF) flight controller board. Now it’s time to fix what we’ve broken last time, and connect external MHC5883L compass with I2C bus.

u-blox NEO-6M with HMC5883L compass

In my case I used very popular setup: u-blox NEO-6M GPS module with integrated MHC5883L compass. So you have both GPS and magnetometer in one case. Pretty nice. I’ve described how to connect NEO-6M GPS few weeks ago, so that part should be covered. The only new thing is compass itself. And hardware setup for it is very simple. In addition to GND and +5V lines you only have to connect SDA and SCL lines to bottom line of connectors right to USB port on Flip32. SDA to SDA, SCL to SCL. In case of I2C we do not have swap lines or do any other kinds of voodoo. Continue reading How to add external compass to Flip32

How to disable compass on Flip32+

Build in HMC5883L compass/magnetometer is very nice feature of Flip32+ flight controller. Too bad it’s not always working like expected and there is a time, when one have to replace it by external device, positioned as far away from power cables as possible.

I’ve encountered that specific problem two weeks ago when I’ve discovered the reason (or at least I think I discovered) why Position Hold and Return To Home GPS assisted flight modes on my Flip32 and Cleanflight were not working. Or rather were working only sometimes, usually when quadcopter was positioned to the north, north east. On any other case, huge overshoots, going in totally different direction than expected. GPS was more less useless. Finally, during one one flight I kept attention to compass heading displayed on OSD. On the ground, heading was correct. After take off, it was drifting to east. Always east. With that data I’ve concluded: Flip32+ built in compass is too close to power cables and when motors are running magnetic field makes compass readings unreliable. Solution: move compass further away from power cables. But with compass already on PCB it was rather impossible. So the only real solution is: disable internal compass and use external HMC5883L connected over I2C bus.

MMC5883L on Flip32+

Continue reading How to disable compass on Flip32+