@ChadCarlin I just got back in here and catching up a bit.
Ok, so most FBL units are going to have to capture the throttle range so it knows where throttle closed is, and throttle wide open. And it may have to be reversed, depending on the direction the servo is installed, etc…
So, to start out - your FBL unit is going to be looking for the throttle signal on Channel 3, NOT channel 8. The S.Bus and the RC in ArduPilot cannot currently be remapped. So remapping of the S.Bus in the FBL unit will be required to match what ArduPilot uses (Channel 8). Most FBL units will support remapping of the S.Bus. But there are some like the SK540 that do not. Hopefully you have one that does allow it.
Reversing the SERVO8_REVERSED should reverse the signal the FBL unit is seeing, and reverse the direction of the servo so maximum pwm is throttle closed.
You MUST use a H1 swash setup in your radio (straight-thru control with no CCPM mixing) or an airplane setup, and you MUST use a H1 swash type in the Pixhawk params. No CPPM mixing is done in the Pixhawk for a downstream FBL unit.
DO NOT use a transmitter throttle/pitch curve at this point. Set up a switch in your radio for Channel 8, so the switch is on or off. This is the throttle signal to the Pixhawk. If the governor in your FBL unit requires a separate channel to turn the governor on or off, set that up (with the appropriate S.Bus mapping) in your FBL unit on Channel 9 or 10, or whatever is convenient.
Capturing the throttle range:
-
Make sure the RC has been properly calibrated on Channel 8.
-
Make sure SERVO8_FUNCTION is set to 31 (HeliRSC), and set the DISARM_DELAY to zero to disable auto-disarm.
-
Disconnect the linkage from the throttle servo to the carb.
-
Make sure H_RSC_MODE is set to 3 (software throttle curve)
-
Make sure, for now, H_RSC_IDLE is set to 0
-
Set SERVO8_MIN to 1000, SERVO8_MAX to 2000 and SERVO8_TRIM to 1000
-
Power up your Pixhawk and observe where the throttle servo horn comes to rest. If it comes to rest at the wide open throttle position, then set SERVO8_REVERSED to 1. That should instantly move it to the throttle closed position.
-
After setting the servo direction in the above step, set the SERVO8_TRIM to a value that will move the throttle to the throttle plate closed condition, with the throttle actually closed (so the engine will stop), and where the linkage can be installed without binding. But do NOT install the linkage yet. Note the trim value it took to achieve this. Enter that value for either the SERVO8_MIN or MAX, depending on if the throttle servo is reversed or not. If it is reversed, you will enter that value for SERVO8_MAX, as an example, because it is reversed. And vice-versa if the servo is not reversed
-
Do the same thing as in the step above, but for throttle wide open, and enter the trim value it took to achieve it for the other SERVO8_MIN/MAX.
-
You now have your throttle range. But the FBL unit doesn’t know what it is yet
-
Go to the setup for your FBL unit and with the SERVO8_TRIM set to throttle closed, capture that in the FBL unit for 0% throttle.
-
In your FBL setup do the same thing as the above step, except for wide open throttle, and capture it
-
Your FBL unit now knows where 0% and 100% throttle are, and the SERVO8_MIN/MAX values should be set to the range that won’t bind it, set your SERVO8_TRIM to throttle closed.
-
Power up your Pixhawk, with the throttle switch on your transmitter OFF. Arm the flight controller. The throttle servo should not move.
-
Set the H_RSC_IDLE to 100. This should just crack the throttle open and this must be set to a value that will allow the engine to be started and idle without the clutch engaged.
-
Test the above setup. Disarm the Pixhawk - throttle should go completely closed. Arm it, the throttle should barely crack open so the engine will idle, rotors not turning.
Setting up the throttle curve:
The procedure for flying is going to be to power up the system. Arm the flight controller, start the engine and let it idle and warm up. When the cylinder head temp is to a suitable value, throw the Channel 8 throttle switch on.
There is a three-point throttle curve in ArduPilot controlled by H_RSC_POWER_HIGH/LOW/NEGC. These three points correspond to maximum negative collective pitch (NEGC), zero pitch (LOW) and maximum pitch (HIGH). The range for setting these is 0-1000 (percent throttle x 10).
There is also adjustable ramp/runup times set with H_RSC_RAMP_TIME and H_RSC_RUNUP_TIME. The ramp time is how fast the system ramps the throttle servo from idle to whereever you have the collective lever placed when you throw the Channel 8 throttle switch on. The runup time is how many seconds it takes for the engine to actually reach speed. Runup must be at least one second greater than ramp.
Depending on how you set up your pitch range and how you set the throttle curve, will depend on how fast the system will spool up, engage the clutch and spin up the head.
So let’s consider a typical 3D setup where you may run -8 degrees to 12 degrees of pitch. Your throttle curve may look like:
H_RSC_POWER_NEGC: 350
H_RSC_POWER_LOW: 280
H_RSC_POWER_HIGH: 850
corresponding to 35% throttle at max neg, 28% throttle at zero pitch, 85% throttle at max pitch.
This has to be set to correspond to your engine’s torque curve as close as possible so the governor can fall back to the throttle curve if the governor’s speed sensor fails. Some governors will use a “stick switch” where the governor may become automatically active when the throttle percentage exceeds whatever you set it to. Some may use a separate channel for governor on/off, and not use the “stick switch”.
I would recommend using at LEAST 19 seconds for the H_RSC_RAMP_TIME to start with. And you’ll have to guess at the POWER HIGH/LOW/NEGC for now.
So arm the FC and without starting the engine, place your collective at zero pitch, throw on the throttle switch on the transmitter and watch the throttle servo. It should smoothly ramp up to the throttle setting that corresponds to your collective lever position. After it ramps up, you can move the collective back and forth and it should open and close the throttle accordingly. The governor will NOT be active, even with a stick switch, because there is no signal from the speed sensor without the engine running. So it should use the throttle curve.
After you get it to where you think it’s close, actually start it and fine tune the H_RSC_IDLE without blades on the heli to get the engine idle set properly. And spool it up without blades to see if your governor “stick switch” or governor on/off switch works properly. If something goes awry with the governor during that ground test, just flipping off the throttle switch will return it to idle before it overspeeds with no load on the engine.
This should get you a basically functioning throttle control for a piston heli. We’re looking at making a better throttle curve than with just three points because that three-point curve does not fit the torque curve on piston engines very well. It works ok with a governor “stick switch”, but even then the feedforward from the throttle curve will cause some governors to over-react to rapid collective change. @bnsgeyer was going to try to code something up for an improved throttle curve. I’ll initially test it, but if you’re interested in testing that as well, just contact one of us when he gets it done and you can partake in the testing fun as well We’ll have some special builds to test that when he gets a working system with more points in the throttle curve.
And actually, a throttle curve with more points will make it pretty feasible to fly electrics without a governor too. So it kinda kills two birds with one stone, so to speak.