Servers by jDrones

Four-Servo Swashplate Support

(Chris Olson) #1

Bill and I have written four-servo swashplate support for TradHeli. Along with this comes new pre-defined swashplate types so you don’t have to use the settable servo positions any longer.

Test firmware, built on Copter 3.6.5 is available here for popular controllers

Instructions for setup:
The ground stations are not yet aware of the new swashplate type selections. They are:
0 - the old settable servo position configuration which everyone except for H3-140 users are currently using
1 - H1 swashplate
2 - H3-140
3 - H3-120
4 - H4-90
5 - H4-45

For all the pre-defined swashplate types the settable servo position parameters will no longer appear in your full parameter list. While in ArduPilot any SERVOx_FUNCTION can be assigned to any motor, we now have specified motor positions for the servos like multicopters have for setup:

  1. For three-servo 120/135/140 swashplates with elevator servo in the rear the left side servo is Motor1, right side servo Motor2, elevator servo is Motor3
  2. For all reverse configuration three-servo 120/135/140 with elevator servo in the front, this is reversed. Right servo is Motor1, left is Motor2, elevator is in front. Use the appropriate H3-120 or H3-140 and simply reverse the servo directions and collective direction for front elevator swashplate
  3. H1, as it’s always been, has no CCPM mixing and is used with downstream FBL units
  4. For H3-90 swashplates, this is the same as H4-90 with one servo missing, so you simply use the H4-90 plate type and don’t use one servo output for which ever servo is missing
  5. H4-90 left side servo is Motor1, right side Motor2, rear elevator Motor3, front elevator Motor5
  6. for H4-45 (sometimes called HX-90 or H4X-90) LF servo is Motor1, RF servo is Motor2, LR servo is Motor3, RR servo is Motor5

There is a couple new parameters you have not seen before. One is H_H3_ENABLE. Do not set this manually. It will set itself depending on which swashplate type you select. The other is H_LIN_SW_SERVO. These new params are shown here in Mission Planner for reference, along with the Swash Type set to 4, for H4-90 four-servo swash.

The H_LIN_SW_SERVO is set to 0 by default. What this setting does is linearize the output of your servos, primarily to prevent binding of opposite servos for four-servo swashplates. If you get binding with your four-servo swash, set this param to 1 and will fix it. This setting also has other uses and perhaps @bnsgeyer will want to expand on that, as he wrote the code for this part.

For all three-servo helicopters, after selecting your swashplate type the rest of the setup is identical to what it always has been.

Setup for four-servo swashplates:
The setup for four-servo swashplates is probably well-understood by people that have flown them. But I’ll go over it here anyway.

With four-servo always disconnect one of the elevator servo swash links before firing the system up the first time. This will prevent broken links or binding until you get the servo directions properly set, swashplate leveled, and linkage geometry adjusted.

  1. The geometry of the linkage is very important with four-servo. Your servos should be at center trim, horns at 90 degrees to the servo case, links at 90 degrees to the horns, and the lengths of the links adjusted to get hover collective pitch with the servos and linkages in this configuration. You can set the H_COL_MID later to whatever it takes for zero pitch, but this configuration will provide the best geometry for flight with no servo binding.
  2. After the mechanical setup of the linkages and swashplate, pitch limit and cyclic limit set in the software, now you must test for binding.
  3. Place the swashplate at H_COL_MID and see if the link on the disconnected servo will easily go on. If it does, operate the cyclic thru it’s full range at H_COL_MID to see if it binds or not.
  4. Place the pitch at minimum and do the same test as step three.
  5. Place the pitch at maximum and do the same test as step three.

If the geometry is all correct it should be fine. If you get binding, set H_LIN_SW_SERVO to 1 and it should fix the linkage/servo binding issue. You can choose to use linear servo outputs before you even begin setup if you want. Some servos are not splined the same, there may be manufacturing anomaly where the default geometry is incorrect, etc. If you’ve set your four-servo heli up before with a FBL unit, you’ll know about this, and know whether or not you need to use the linear servo outputs.

This firmware is mainly for people that have four-servo heli’s to bench test it and see how it works for your heli, and provide us with feedback for any changes we may need to make. Anybody can use the firmware and fly it - it has been tested and flown by me. And it’s built on Copter 3.6.5 so you don’t have worry about other undocumented “features” that may be in Copter master. The only difference between this firmware and the current stable is the swashplate code.

Also note that your ground station will seem to take a long time to download params with this firmware after you select a swashplate type because it’s looking for some params that no longer exist after you reboot the controller. And a reboot is necessary after selecting your swash type. If it gets to the end of downloading params and seems to “hang” just hit cancel and proceed with setup. It will not make a difference.

Final note is that the old adjustable servo position setup is only being preserved in this firmware for backwards compatibility for upgraders. It will eventually disappear from the setup unless somebody can demonstrate some weird reason it must be retained. And some strange swash type is not a valid reason - if it exists we can write a mixer for it and add it as a swashplate type because this is all in a new swashplate library.

Any questions or comments, feel free. I’m sure maybe Bill will have more to add that I may have forgotten.

(Bill Geyer) #2

@ChrisOlson thanks for writing this up. Good explanation however I want to clarify exactly how the linear swashplate servo feature works. It is very important to understand how this differs from the way the wiki currently explains the servo setup. Currently the wiki has you using the servoX_trim parameter for the swashplate servos to level the swashplate. You can not use that set up procedure when using the linear swashplate servo feature. this feature assumes that the servo is centered on its physical throw. You’ll use the servoX_trim parameter to adjust the center position of the servo arm for the physical throw. If you can’t get the servoX_trim parameter to be 1500 then try to get it as close as possible with the servo arm centered in it physical throw.
Once you get that set up, then like Chris says set your linkages so that the swashplate is in its mid position which will give you hover collective. Also adjust the linkage (not servoX_trim) to get the swashplate level.

Hopefully everyone understands this. Let me know if you have any questions.

(Chris Olson) #3

Thanks for the clarification on the linear servo output, Bill. Would also like to mention that although it’s not usually a problem with three-servo swashplates, this can also be used with three-servo if folks prefer to use it.

The documentation for all this still needs to be written for the wiki, we need swashplate diagrams etc, similar to the motor layouts for multicopter. Although most of it is pretty self-explanatory.

(Chris Olson) #4

The binaries in the test firmware link in the first post have been rebuilt with a fix for the servo linearization for four-servo swashplates.

Many thanks to Aris at Velos Rotors for testing this for us in a Velos UAV helicopter.

(Chris Khosravi) #5

I appreciate the effort that went in to this as well! My Airstar International helis were origionally designed for a 4 servo swash setup. Luckily I have the option to run 3 servos as well in the meantime.

(Lucien Hollins) #6

Hi. Your firmware URL is broken.

(Chris Olson) #7

Thanks for pointing that out. There was some changes made to the servo linearization for four-servo and forgot to update the link when I uploaded the testing binaries. It is now updated.

(Patrick K) #8

Good job.

I did a test flight today, updated from 3.6.0 rc12
and switched to

no other changes. Everything as expeced!

(Chris Olson) #9

Thanks for the report! There will be a few changes in the code yet for the PR to Copter 3.7, but related to parameter handling, not in the actual mixers.

(Loren DS) #10

Your firmware URL is broken.

(Chris Olson) #11

That original post was not editable anymore. This is the link ->

The new swash library is also in master now (3.7-Dev)

(Loren DS) #12

Thanks Cris, i will test soon.