Cyclic servo min/max limit


I find that the range of cyclic servo is fixed to 1000-2000. Only the trim value can be changed. What’s the reason for that?

A typical servo may accept signal from 800 to 2200. The servo range limit could probably limit the cyclic range when changing longer servo arm is not an option.

Also the max deflection angle of each servo would be different if they have different trim values.

In my config I can only get about 3° cyclic at 12° collective because the servo do not go above 2000. While it’s not a problem with traditional FBL units.

We don’t have enough information to diagnose the problem, what head configuration and servos do you use?
Please post the parameters of your heli.


Here’s the params:
singleheli002hconfig.param (2.7 KB)
It’s a customized frame with H3-120 swash with 12g micro servos.

But the problem is simple and not specific to a certain config. Just need more PWM range.

Just wondering have you tried fiddling with H_CYC_MAX parameter?

1 Like

I would recommend starting by adjusting H_COL_ANG_MIN/MAX and other collective related parameters.

It would be helpful if you described size and purpose of the helicopter.

Yes, I have of course.

The problem is that if H_CYC_MAX is large enough then the servo will reach the limit.

Let’ say I have made max collective input and keep increasing forward cyclic input. Then the rear servo would go higher until it reach the limit. While the front left and front right servo would go lower, without limitation. So the collective is now affected by cyclic input. And also the cyclic is less than expected.

The size is similar to a typical 450 heli, and the purpose is to test the low RPM capability.

The max and min collective is decided according to thrust stand results, so H_COL_ANG_MIN/MAX cannot be adjusted anymore. Otherwise, the lift target would not be reached.

Yes,I know what you are talking about. What is your maximum measured cyclic deflection when collective at 0 degs?
Currently, I believe the only way you can achieve more cyclic travel towards the full collective position is by offsetting servo arms/pitch links length, adjusting trim position and limiting the lowest collective setting (now at -12) - keeping in mind that you could be facing non linearities in the aerodynamic behavior.
Are you using straight traditional rotor blades or “twisted” design?

H_COL_MIN/MAX describe physical setup of the helicopter, not desired values.

You likely don’t need high negative thrust if you don’t plan to fly inverted.

The cyclic measurements at 0 collective and max collective are close. I can have at most 3° cyclic if the servos do not hit the limit at max collective.

So I probably need to consider redesigning the frame to fit longer servo arms. Or I find a way to modify the firmware. I hope Ardupilot devs will notice this and make some changes.

They’re twisted blades. So I do need that large collective range.

Actually at -12° the negative thrust is very small. The zero thrust collective is about -9 to -10 degree.

The min and max servo positions are fixed in order to perform the transformation for cyclic and collective to the servo positions. Never had a user complain that the range was not enough. Most RC helicopters, even aerobatic heli’s, can set up -12 to 12 with cyclic but I haven’t heard any complaints.

Having twisted rotor blades doesn’t really mean you need a larger collective range. Twist just changes the distribution of the lift over the blade.

So you are measuring the blade pitch at the root? I see that you have it programmed for a max collective of +12 deg and your zero is -9 deg. That means that you are going to +21 deg. What do you anticipate the hover collective to be? I find it hard to believe that you aren’t approaching stall at 21 deg of pitch.

In any case, I think it is possible to change the code to allow a larger servo range but I’m not sure how easy it would be.

I would suggest lowering your max collective pitch until you achieve the desired cyclic. Do some initial tests to see that you actually need 21 deg of collective.

It looks like large multicopter blades are being used in this case. So originally designed for operating at constant pitch but variable speed. Probably trying to mitigate the lack of rotor speed with increased collective setting. Still, I don’t think it’s a safe idea pulling that much of collective+cyclic travel, about half of the blade would be stalled.

The blade grips are customized, so the pitch numbers aren’t really representing true angle of attack. They are set for convenience. I can change them to like min -20° and max +4° and the swash would do the same thing.

We have had thrust stand tests so I have the data indicating where the blades would stall. If I limit the collective range, the heli will not leave the ground or not able to have zero thrust.

The true flight performance is what I’m going to test. After I finish the autopilot config.

By the way, even if I change the blades to straight symmetrical ones and try to do some aerobatics with ±12° collective, I’d have the same problem. Because the current rotor head and servos just need larger PWM range to work.

I think we might all agree that 1000-2000 range is less than many traditional FBL units can provide and most servos would support(800-2200), although in most cases it’s enough. But when it comes to special configurations it may not work.

If the code is not easy to change, I’ll consider other solutions. Redesigning the frame or using an external FBL unit can be options.

It looks pretty easy to change. I can show you where to change it and then you can test it. Do you have the capability to build the firmware?

We can look at this for a future change but it won’t go stable for at least 6 months.

@iampete do you see any issues with adding an option to expand the range of the swashplate servos? I assume our servo library would support this?

Sounds great. Appreciate it.
I currently don’t build firmware myself. But I could ask someone for help, or maybe learn to build the firmware later.

Should work fine, as you say it will need to be a option so we don’t change the behavior of existing setups.

I would like to start using the individual servo endpoints at some point so you can do a three point calibration of level rather than just at trim.

1 Like