We’ve been working on a governor for ArduPilot and I now have it working pretty good:
I have test binaries built for various controllers. All the builds are ChibiOS:
The governor measures headspeed, not engine speed. It requires a hall effect sensor with a magnet on the main or autorotation gear. The sensor is plugged into the Aux5 pins on your controller. The settings to get RPM to work are the PWM count - set to 4 so aux5 or 6 can be used for other things.
The relay pins disabled:
Make the rpm settings for rpm1 as shown:
The new governor settings all start with H_RSC_GOV. They are:
- The disengage point: recommended setting 2% above your flight idle power setting (first point on the throttle curve). As shown in the below example, the governor disengages at 20% throttle.
- Droop Response setting: 0-100%. This sets how aggressive the governor is. A droop response setting too high in relation to how your prime mover reacts to throttle can cause the governor to surge or over-react to load change. Around 85% should work good for most piston engines. A little higher for turbines. A lot lower for electrics.
- RPM setpoint - set to desired headspeed
- Throttle Curve Gain - set to provide feedforward from the throttle curve for sudden change in load. If it over-runs on a sudden punchout, reduce the TC gain, etc… Can be set from 50-100%
- H_RSC_MODE - 4 is governor control.
Note in this design I’m trying to get away from settings that are not friendly to users. IMO most users understand stuff that’s 0-100% or whatever. Settings like 0.25 for 25%, or 250 pwm for 25% don’t make much sense to end users. So I did the scaling in the code, not with the settings, to make it simple to understand and set.
The type of governor used here is a proportional droop speed control. It is not a PID governor, as PID governors are notoriously unstable with combustion engines. If you’re interested in exactly what is a droop speed control, you can read about it from the oldest manufacturer of aircraft piston engine, turbine and propeller governors in the world.
You must first set your throttle curve and properly tune it. If the sensor fails the throttle control fails over to the throttle curve. Without a properly tuned curve, your helicopter will crash. For UAV operation it is recommended to set your throttle curve with a flight idle position (the throttle curve 0 point). This allows you to idle your engine down by pulling the collective to the bottom. Engaging the throttle hold (motor interlock in ArduPilot) will disengage the clutch and set the engine to ground idle power.
When tuning your throttle curve, tune it aggressive so it runs higher rpm than you normally fly at. This ensures adequate power available if the sensor fails. With the governor you don’t have to have a perfectly tuned throttle curve, but it should be “close enough” to fly the heli with no surprises. You can tune your curve with H_RSC_MODE 3 if you want. Or tune it with MODE 4 with the TC gain set to 100 and Droop Response set to 0. Either way works.
You can refer to the ArduPilot Helicopter Ground School videos if you want to take a refresher on setting throttle curves. Video 4 covers throttle curves, piston and turbine engines:
This governor was designed primarily for piston and turbine helicopters, as the engines don’t come with a governor (except for JetCat turbines) and buying one is quite expensive.But it does also work with electric helicopters - I tested it in my Synergy 626. The only difference with electric is the droop response setting. Electric motors have a quite flat torque curve so they don’t require as much droop response as combustion engines. However, unlike combustion engines, the speed of an electric motor droops as the battery voltage falls. This is where the governor will come in handy for an electric (if your ESC don’t have one).
Since most people use ESC’s with governor already built-in, I suspect the governor feature will be primarily used by people who fly pistons or Wren turbines.
There is a couple new logging items added with the governor feature - we now log helicopter throttle output and the governor output. This is an example log graph of the governor in operation. On the left side of the graph I was flying it, did a punchout (the sudden spike in throttle). I landed and disengaged the governor by pulling the collective/throttle down to flight idle power. You can see the governor output went to zero. I then re-engaged the governor by gradually increasing the throttle (via the collective throttle curve). The governor came on (the sudden spike in governor output and throttle), then went to steady state control back to governed headspeed as I continued increasing throttle to pull pitch for liftoff.
It is totally automatic. You don’t have to switch it on and off.
The governor “bites” pretty good when it engages, very similar to the governor in the Guimbal Cabri G2. I decided to not do a ramp-in of the governor for three reasons: if throttle hold is accidentally hit in flight, nothing makes a pilot madder than an engine that don’t come back right away. The second reason is autorotation practice with power-on recovery. The third reason is that the “bite” to get it up to speed at governor engage will not affect people who like to use auto takeoffs.
With auto landings, the system can be set to pull the throttle down to flight idle power and disengage the governor before auto-disarm and engine shutdown. This reduces the chances of a dynamic rollover vs governors that hold full headspeed while the system is trying to decide if it should disarm or not on the ground. And in the event the system screws up and pulls pitch again (I’ve seen this happen with auto landings), the engine power will come back immediately with no delay.
If you desire the governor to never disengage once it grabs, set the governor disengage to zero and it won’t let go of the throttle no matter what you do, short of hitting throttle hold.
In my experience with full-size helicopters - pilots, students and instructors love the governor in the G2. Where a Bell 206 Jet Ranger takes more training to fly because the governor is more “sloppy” and it takes time to schedule the N1 section of the engine so the N2 produces 100% torque. So while hard-edged controllers like this typically aren’t used in ArduPilot, this is not a place for a soft-edged one. It “bites” but it’s not so radical that it twists the heli on the ground as you can see from my vid - even in the snow. Let’s just say it comes on with authority and you know beyond a doubt the governor is working. It has been cold and snowy here, but in the couple autorotations I tried with it it actually comes back on power smoother than the Aerospire governor in flight. There’s not much out there for gasser helicopter governors. The old GV-1, which is not all that great. The Aerospire MultiGov Pro, which is designed primarily for 3D. And FBL units that have built-in governors. IMO this one beats the Aerospire for stability. And that was one of my primary goals was a governor that exhibits rock stable operation with no surging, and no over-runs on sudden unloading of the collective. Some speed droop on sudden loading is completely normal with any governor due to the way engines react to throttle and torque rise. But it should come back on speed after recovery without over-running. The Aerospire won’t - it over-runs every time and then slams the throttle shut because it went into over-speed, which causes the tail on the helicopter to jerk. This one won’t do that.
This has been a long requested feature in ArduPilot and was supposed to make it in clear back in 3.4. Except it never did.
Hope heli pilots find it useful.