Hacking the APM2 Part #3: Servos
Here are a few random notes on the APM2 and servos.
As we all know, the servos are controlled by sending a digital pulse on the signal line to the servo. The length (time) of the pulse maps to the position of the servo. A 1500us pulse is roughly the center point. 900us is roughly one extreme and 2100us is roughly the other extreme. Different systems will use slightly different numbers and ranges, but these are good numbers to start with. Historically, RC systems stacked the pulses for multiple channels on a single radio signal — affectionately called the “pulse train.” If you crunch the numbers — given a max pulse width of about 2000us and a bit of inter-pulse spacing, we can send about 8-10 channels of data at 50hz on a single signal line. Standard analog servos are designed to expect 50 pulses per second and can misbehave if we send a faster signal.
With modern 2.4Ghz systems, the servo/channel data is sent digitally and at much faster data rates. Receivers drive each servo pulse concurrently and the concept of a “pulse train” is largely gone — as is the need to space things out at a 50hz rate. If you crunch the numbers again and look at a max pulse width of 2000us with a bit of inter-pulse space, we can actually send servo data at 400hz to a digital servo and it will respond as expected. (8 channels at 50hz, 1 channel at 400hz — makes sense.) 🙂
What does all this mean to an UAS builder?
- It means that if we use digital servos, we can send position updates to the servo and expect some response at up to a 400hz rate. In real life these servos have mass, motors that take time to move, on board electronics that take time to process the signal, and other factors, so we can’t expect instantaneous response, but we can expect an improvement over the old 50hz analog servos.
- It means we have a strong motivation to sample our sensors faster than 50hz, run our attitude filter faster than 50hz, run our guidance, control, and navigation code faster than 50hz, and command our actuators faster than 50hz.
- It means that if we can increase our throughput to 100hz or 200hz, we can have a far more responsive and “tight” system than we could if everything was running at 50hz. Faster response to gusts and disturbances, ability to counter more of the aircraft’s natural dynamics. With proper autopilot tuning, this can lead to a much higher quality system, much more accurate flying, and a much more stable platform to hang our sensors off of.
The APM2 has the ability to set the PWM frequency for the output channels. Channels are grouped and several hang from a single clock generator so we can’t change the PWM rate individually, but we can do it for groups of channels. Question: if our system is running at a full 100hz update rate, does it make sense to set the servo output rate to 100hz or something higher? I argue that we should set the output rate as high as is possible (400hz) because the servo will pick up a change fractionally quicker at a 400hz output rate than at a 100hz output rate. In the end though, most servos are somewhat noisy and crude and subject to physics, so it may not have a huge noticeable effect, but any little thing that makes the system more responsive and increases the end to end throughput from sensing to responding is welcome.