I can't change the maximum pwm for swahplate servos

Hello,

I am using Pixhawk orange cube plus as a flight controller and my swashplate type is H-3 120.

I want to limit the Maximum servo output to limit the maximum blade pitch. I changed the SERVOX_MAX parameters but when i rebooted the pixhawk it came back to the default.

Are there any limitations to changing these parameters?

Yes, the code mandates that these limits never change. You can modify the limit of the collective pitch range using the H_COL_MIN and H_COL_MAX. You limit the range of cyclic pitch using H_CYC_MAX.

Please refer to the wiki for proper setup procedures

1 Like

But in my setup my blades are in 12 degree when the collective is maxed. Then when I max the pitch from my remote the blade goes around 17 degrees. I want to set a max limit for my servos so that they will never go over 12 degree.

Why the limitation of 12 deg for the blade pitch angle? in most heli’s it is good to have at least 8-10 deg of max collective blade pitch. Depends on your setup.

So what will your collective pitch range be? the cyclic blade pitch is meant to be added to what ever your collective pitch is at the time. So if your collective is at 12 deg and you have a maximum of 6 deg cyclic pitch, then the blade pitch will be at 18 deg at some point in the rotor arc if you apply max cyclic.

I thought 17 degrees would be too high and it could cause propellers to stall. That was the reason why I wanted to limit the servo pwm.

Most likely you would never have full cyclic in with full collective. Pretty unlikely unless you are autorotating and over control on the final pull but then you got bigger problems.

4 Likes

On the last heli I make I set all the min and all the max of swash servos to 1000-2000 range with the linearise function.

Is this can work or not? I’m thinking that maybe this badly affect the linearise function…and the tune of the pids…

Please let me know…

I found in the code that:

AP_MotorsHeli_Swash.cpp:
// set_linear_servo_out - sets swashplate servo output to be linear
float AP_MotorsHeli_Swash::get_linear_servo_output(float input) const
{

input = constrain_float(input, -1.0f, 1.0f);

//servo output is calculated by normalizing input to 50 deg arm rotation as full input for a linear throw
return safe_asin(0.766044f * input) * 1.145916;

so for good linearise we need to check that servo min max of swash conducts -50° to + 50° servo leg deflection?

if we have more than -50° to +50+ deflection we must recuce servo min max to have -50° to +50+ deflection?