Special Takeoff Parameter Configuration

I am trying to configure the takeoff parameters for a quadcopter with some unique ESCs and am struggling to improve the results. I’ve read a few other posts and the docs about this, but am still slightly confused and would appreciate some more insight on what I should change.

To provide more background on the ESC behavior:

The ESCs have their own built-in rampup time and a PWM range that begins this rampup period. Basically, as soon as the PWM rises above ~800 usec from a lower value, the ESCs enter a rampup period of around 5 seconds where the motors slowly spin up to some pre-programmed minimum. After this rampup is completed, the ESCs begin listening to the PWM control normally.

So, the problem is that this built-in rampup seems to conflict with Ardupilot’s own takeoff rampup and what the controller expects during takeoff. The drone seems to believe it is already in the air by the time the ESCs have finished rampup, so the copter goes from minimum throttle to maximum almost instantly and shoots into the air (while sometimes also tipping over during the process). I worry the results would be much worse with weight attached to the drone. The goal is to have a safe, gradual takeoff, no matter how high the pilot’s throttle input is and irrespective of takeoff weight.

I have tried increasing TKOFF_SLEW_TIME up to 20 seconds and also set TKOFF_THR_MAX as low as 0.25.

My understanding of TKOFF_THR_MAX at the time of testing was that it is the throttle cap during takeoff, i.e. for the duration of the takeoff slew time, the drone will rampup the throttle until reaching no more than this value, then once the slew time ends it will hand over control to althold. It does not seem to be the case, because on all of my takeoff attempts with different values, the drone consistently ignores this value and overshoots the maximum throttle substantially.
Now that I have re-read the parameter description in Mission Planner, it seems I may have this backwards, and that in reality once the throttle reaches this value the controller thinks the drone is already airborne (and no longer in the “takeoff phase”), despite whatever TKOFF_SLEW_TIME is set to. Please confirm if this is correct.

Should I reset TKOFF_THR_MAX to 0.9 and lower PILOT_ACCEL_Z and or increase MOT_SPOOL_TIME?

Relevant parameters and their current values:
MOT_SPOOL_TIME,0.5
TKOFF_SLEW_TIME,15
TKOFF_THR_MAX,0.25
PILOT_ACCEL_Z,250
MOT_THST_HOVER,0.2
MOT_PWM_MIN,700
MOT_PWM_MAX,2000
MOT_PWM_TYPE,0

Thank you in advance.

On ArduPilot Methodic configurator software when prompted for MOT_SPOOL_TIME and TKOFF_SLEW_TIME parameter values enter 5.1 and 5.1 respectively.

I set those two parameters but the results were the same, except there is now a delay of MOT_SPOOL_TIME before the ESCs begin their rampup phase. So, once armed, the drone sits idle for ~5 seconds and then starts up as before. The drone still jumps into the air if throttle is pushed above hover.

I also lowered PILOT_ACCEL_Z to 200 and restored TKOFF_THR_MAX to the default of 0.9.
I tried MOT_SPOOL_TIME = 10 and TKOFF_SLEW_TIME = 10 also, but this just results in a longer delay with the same behavior.

Anything else I could try?

Without props try setting BRD_OPTIONS bit 8 to 1

If that does not work, increase ardupilot/ArduCopter/motors.cpp at master · ArduPilot/ardupilot · GitHub from 20 to 60, recompile, upload and re-test.

Arm the vehicle, it should start to spool up, count five seconds, and takeoff. The entire process should now work fine.

Setting BRD_OPTIONS bit 8 to 1 did not have a noticeable effect.

I will go with modifying the source as you advised and test that.

Thanks