Copter 4.0 Governor - How To Set It

I have gotten PM’s or email asking how to configure the switch to turn the governor on in Copter 4.0. So I will do a brief writeup on it here.

The governor is not switched in ArduPilot, as you would be familiar with using external governors like the Aerospire. It is designed to be automatic if you select RSC_MODE = 4 (Governor).

It is also designed as a rotor speed governor, not an engine governor. But it will work as an engine governor, measuring engine rpm if you wish.

If you are using a rotor speed sensor the range will determine where the governor will become active. The range is the amount of rpm that must be reached via throttle curve before it comes on. For 800 class helicopters at 1500 rpm rotor speed, 100-120 range works good. You will note this is ~7% of the desired rpm

If you have a helicopter with 1,000 rpm rotor speed, then a setting of 70-80 rpm will work good. If you have a helicopter with a rotor speed of 2,000 rpm, then a setting of around 140-160 rpm will work good.

If you are measuring engine rpm instead of rotor rpm, then conversion of your gear ratio is necessary, or use the “7% rule”. So in the example of the 1,500 rpm rotor, 7.5:1 gear ratio, the engine runs at 11,250 rpm. So a range of around 780-900 rpm would be appropriate.

The governor is not a “true” governor from the standpoint that it uses the throttle curve directly for its baseline. So it requires a properly tuned throttle curve before using it. What the governor will do is compensate for differences in density altitude to provide an automatic adjustment to the throttle curve so you don’t have re-tune the throttle curve all the time from a cool dry day to a hot humid day. Those that have run piston power long enough know that on a dry cool day the engine produces more power than it does on a hot humid day, so the rpm will be higher on the dry cool day unless you re-tune the throttle curve. The governor will take care of this automatically.

The governor will also auto-disenage if you set the disengage setting to the throttle curve point (percentage throttle) where you like the governor to become inactive and return to the throttle curve. This is optional. If you set that to zero the governor, once it becomes active, will never auto-disengage. It will automatically provide a “flight idle” if you have a throttle curve with say maybe 22% throttle at feather pitch, due to the throttle curve baseline pulling the rpm down by about 2.5% as you reduce pitch.

It will also use the throttle curve for a type of feed forward for sudden loading of the collective or tail rotor. This can be adjusted with the TCGAIN setting as to how aggressive you want it to follow the throttle curve in the background.

It also has a droop setting as to how aggressive the governor reacts to measured rotor speed droop, or overspeed, from the rpm setting. It requires some rotor speed droop for it to work. Usually about 8 rpm of measured rotor speed. So if you set 1,500 rpm, as in the example, you will likely see a governed speed of 1,492. If you require exactly 1,500 rpm then set the speed to 1508-1510. This was done this way on purpose, without an integrator, to provide stability to the governor so it doesn’t surge. It is purely a proportional throttle control. While it will still start to surge or “hunt” if you set the droop response too high, unlike most of the aftermarket PID governors it will not exhibit such a severe surge that it causes loss of control of the machine. So it is quite “safe” for tuning if you accidentally mis-tune the droop response and get it too high - unlike an Aerospire which will literally jerk the helicopter back and forth 360 degrees very rapidly and cause loss of control if you over-tune the gains.

Hope this helps folks to better understand how it works, and how to set it.

1 Like

EDIT: just found “governor usage issues” and posted there.

I’m setting up an electric 700 class heli with a Pixhawk 1 (2.4.8), running Arducopter Heli v 4.07 (tried also beta 4.10) and a Hall sensor for governor control. I’ve set the RSC_MODE = 4 and I have ported out (board def) Aux 5 and 6 for GPIO sensor input.

BUT I’m utterly unable to find the parameter RPM_PIN to set up for “55” (aux input 6).

Am I using a wrong version, do I need several reboots, or did I miss something? thx!

Hello Chris,

I did setup a hall effect sensor running on aux 5 pin 54 and I am able to read the rpm data after I followed the instructions you gave.

My magnet is on the autorotation gear and my ratio is 6.82:1. I am running a zenoah g320rc engine.

When it is idle I am reading 3600 RPM on the screen which is what the engine is running at. But this must be the RPM if the RPM sensor was reading the motor shaft. So on the rotor I should be reading lot less. actually my ma rpm should read 2000.

Is there something I am missing?

Well the most important thing is the RPM should start reading when the rotor starts spinning but I am seeing RPM data on the mission planner when the engine is running idle and rotor not spinning at all. and weird part is that idle RPM is almost accurate. How is this possible?