RC_SPEED Equivalent in ArduPlane


My elevon servos are buzzing non-stop as soon as I plug in the battery. I’ve read on the forums that it might be because the frequency being sent to the servos is not adequately matched for the servos. Others have solved the problem by reducing/increasing their RC_SPEED advanced parameter. I looked in the parameters and could not find “RC_SPEED” only to realize it’s only available in ArduCopter and not ArduPlane. Is there an equivalent parameter I could try modifying in ArduPlane to get an equivalent result?

I realize that digital servos are known to buzz, especially Savox, but some people have found solutions for this and I wanted to see if I could as well. My guess is the APM is sending signals to the servos which are constantly trying to center, hence making a non-stop buzzing sound. Any help would be appreciated.

My setup:
Aircraft: Delta wing
FC: APM 3.1 mini
Firmware: ArduPlane 3.3
Servos: Savox Digital
RX: Spektrum AR6210

Ah yes, digital servos can sound quite dreadful, especially indoors, on the bench.
It’s amazing how much noise can come from even a micro-servo mounted in a foam wing, all the while, the servo isn’t even doing any “real work”… My first set of digital-micros annoyed me to no end.

Increasing the servo update rate likely won’t reduce the noise from a digital servo because it has it’s own internal control loops that are probably at a much , much higher speed than the servo signal update rate , but since I haven’t tried that , I can’t say for certain that it won’t.

APM plane sends RC servo signals at 50 Hz , and I believe that currently it’s not an adjustable parameter.

The APM servo update rate question has been raised a few times before.
I don’t recall the posts that read (here or at diydrones) about APM servo rates , but there were some good points made as to why it , generally speaking, wasn’t really practical… APM internal control loop times … physical response rate of the aircraft etc…

One solution that was presented was to download the uncompiled code , change the hard-coded value , (which is a single global value and affects all servo outputs) , and then compile the APM program.

It would be nice to have access to individual servo rates, even if it involved having to use the CLI terminal shell interface.

If I come across any useful posts I’ll link them here.

Yes, that’s the same information I’ve read regarding the servo signal rate being set at 50Hz and being a global parameter, and that the only way to change it would be to modify the directly code. Maybe someone can post some information on where the variable is located and what it’s called.

I read a post where someone had incrementally changed the signal rate (from 50Hz) until the servos stopped buzzing. This was with ArduCopter on a tricopter however.

Its a little complicated. ArduPlane.cpp is what you want. Its the magic 20000 number on this line
uint32_t remaining = (timer + 20000) - micros();
that controls the schedule. You can read the comments around it and in that file describing how it works.
Note that parameter controls the timing for ALL control loops within the plane. If you change that its possible your plane will fall out of the sky because its untested.

This line
SCHED_TASK(set_servos, 1, 1600),
controls the task who’s job it is to update the servos. That 1 means update every 20ms (which is the 20000 number above) which if you do the math is 50Hz.

Thanks, Grant.