Hexacopter cannot take off - uneven motor outputs

Hello,

I’m working on a hexacopter with the following setup:

  • Matek H743 Mini running 4.3.7
  • 1 x 4-in-1 ESC (BLHeli_32)
  • 2 x separate ESC’s of similar specs (also BLHeli_32)
  • 6 x EMAX 2306 1700Kv with 5" props

The copter weighs 2.4kg and should take off at around 50% throttle based on static thrust tests of the motor/prop combo.

When I attempt to take off, the copter pitches slightly backwards and is unable to take off properly. Judging by the log, there is a significant imbalance in the motor output, i.e., it prioritizes certain sets of diagonal motors (3 and 4 highest, then 1 and 2, then 5 and 6).

Link to log file: 25 01-01-1980 01-00-00.bin

Link to log file of working version of the drone: 2023-07-12 16-36-57.bin

I have tried:

  • Changing FC
  • Changing the two singular ESC’s
  • Different frame types (I normally run a dynamic matrix, tried normal hex)
  • Various motor output protocols (PWM, DSHOT150, 300…)

I should also note that it has previously flown with a very similar setup running Arducopter. However, since it has been under constant development, I have not been able to track back to a working version of the setup.

I hope someone can point me in the right direction.

Did you do a motor order test? Using ABC instead of 123 ordering?
Is the frame type set correctly?

Yes, all motors are mapped correctly. When I test the roll and pitch movement on the ground before take-off, the correct motors spin up. I have tried standard hex frame and my own dynamic matrix, they yield same result.

What @amilcarlucas is asking is if you’ve used the motor test function in mission planner. Motor A should run the right front right motor, then B is the next going clockwise and so on. Good to double check in this situation.

Yes, I am aware, apologies for the unclear answer. I have performed the motor test and they all spin in the correct direction and in the correct sequence as per the ABC motor “numbering” (A = front right, B = mid right, C = rear right, etc…)


I don’t know what a HydroHex is. Do either of the photos represent what you’re trying to set up?

Your motor mapping isn’t straight forward. Not saying it’s wrong, just has me confused without understanding your motor positions:

SERVO1_FUNCTION  34.000000 # Motor2
SERVO2_FUNCTION  33.000000 # Motor1
SERVO3_FUNCTION  35.000000 # Motor3
SERVO4_FUNCTION  37.000000 # Motor5
SERVO5_FUNCTION  38.000000 # Motor6
SERVO6_FUNCTION  36.000000 # Motor4

Typically a split like this (assuming motors are in the right location, spinning the right direction, and the props are on correctly) then it could be a twist in the airframe, or some how the C of G is offset or incorrect.

When you did this test, was the drone outside with the props on? Or was it secured to the ground with no props?

HydroHex is just the name I’ve given the drone. It’s a bit unusual in that it is meant to operate in water as well (hence the “Hydro” in the name)… In any case, I have tested it with the standard Hexacopter X frame with the same result.

I am following the motor mapping as per your first image. The reason for the irregular motor positions is simply due to cable management (4-in-1 ESC’s come with a bundled signal wire). That and due to the physical placement of the ESC’s meant that it was more convenient to run certain motor cables to certain motors.

There is no visible twist in the airframe, nor CG offset; the only notable mechanical “feature” is that the rotors are angled slightly inward (by design).

I tested in a large indoor space with props, not secured to anything.

If it’s any use, I’ve added a link to a log file of the working version of the drone from a month ago to the original post.

I have tried to load the same parameters onto the drone as I was using at the time, with the same result.

check your pitch input. I think it’s backwards.

As the throttle goes up, there is a pitch input requesting a nose down attitude. The FC is responding by speeding up the rear motors to near max, and the front motors to near min value. To me it looks like it’s responding properly, in that it’s doing what is being asked (even if what you’re asking isn’t what you want)

Check the RC inputs in Mission Planner. When you push the pitch stick forward the green bar should move towards a lower value. You can reverse it in the radio or using RC2_REVERSED,1

I did reverse the pitch channel on the radio, and the value does reduce when I push the stick forward. When I test the axis on the ground before taking off (arm, low throttle, pitch/roll to make it tilt), it also pitches forward correctly. In this particular test shown in the log, I actively tried to pitch it forward upon take-off to keep it level.

The issue only seems to start when I provide it with more throttle and try to take off. It starts to take off around 40-45% throttle, then gradually pitches backwards, and any attempt to pitch it forward again or make it hover by providing more throttle is in vain. This can be seen in the graph as well; here’s how I experienced it:

17:00:49: The front started to lift at ~40% thr
17:00:50: I applied forward pitch correction to keep it level while keeping a constant throttle
17:00:53: I increase the throttle in an attempt to spin up the rear motors
17:00:54: The drone almost tumbles backwards, so I cut the throttle soon after

Something is backwards then.

As you run up the throttle, and pitch forward the drone is demanding a forward pitch as seen by ATT.DesPitch going to a negative value. The log also showed motors 4 and 6 going to higher power, indicating the motors at the back are trying to pitch the drone forward. That all checks out. So if you’re saying the drone is going in the other direction (and looking at the log again, I believe you) then something else has to be backwards. Motor spinning in the wrong direction, prop on backwards, motor mapping. The only other thing to double check is the drone moving the correct direction in the HUD on mission planner. When you pitch it up does the horizon go blue?

If you in fact have the motor order right, which is often not the case even when people say they have triple checked it, give it a burst of throttle to get it off the ground.

Thank you for your inputs - I found the culprit, and I am back in the air! TL;DR: temp. protection of ESC 4 and 6 kicked in prematurely.

I performed motor tests at higher throttle ranges (10, 20, 50, 80 and 100%) and noticed that ESC 4 and 6 consistently reduced their output after ~2 seconds when the applied throttle was 50% or higher. This explains why I could test the pitch/roll movement on the ground and not notice any issue - they worked fine at 10-20% throttle.

The only setting I had recently changed on the ESC’s were the temperature protection. I had set this to 160 deg. for both the 4-in-1 ESC and the two individual ESC’s, which were assigned output 4 and 6. When I disabled temp. protection, they worked flawlessly, and the drone could once again take off!

Obviously, the ESC’s do not reach 160 deg. after 2 seconds of 50% throttle, so I assume there is a fault in the ESC firmware or hardware that makes the temp. protection kick in prematurely. In any case, I’m happy to find that, once again, ArduPilot was not to blame for the issue… :blush:

That makes sense. I’m surprised there wasn’t a warning about a thrust loss. Glad you figured it out.