Motor won’t reach 100% throttle under offboard MAVLink control on SpeedyBee F405 V4


Hello everyone!

I’m using a Raspberry Pi 5 to send offboard MAVLink commands (via pymavlink/MAVProxy) to a SpeedyBee F405 V4 running ArduCopter. There is no RC transmitter connected—everything should be controlled via MAVLink.

Hardware & setup:

  • Flight Controller: SpeedyBee F405 V4 (ArduCopter AC 3.3+) with microSD slot
  • Companion Computer: Raspberry Pi 5 → TELEM2 (R2/T2/GND) → UART (/dev/ttyAMA0 @ 115200)
  • GCS: MissionPlanner for parameter configuration

The Problem:

Despite sending a sustained 2000 µs throttle override (or using MAV_CMD_DO_MOTOR_TEST in PWM mode), motor 1 never reaches full RPM. It spins, but remains at a significantly reduced speed. I’ve also tried to send 100% in percentage mode. I have confirmed RC and throttle failsafes are disabled.

What I suspect:

  • A hidden failsafe or flight-mode throttle cap is still active
  • DShot600 vs PWM configuration on the FC might be remapping 2000 µs to a lower effective throttle
  • An internal ESC deadzone or timing issue under MAVLink test commands,

Has anyone successfully driven an ESC to true 100% throttle via offboard MAVLink on ArduCopter? Any pointers or configuration tips would be greatly appreciated!

Python test code snippet:

import time
from pymavlink import mavutil

master = mavutil.mavlink_connection('/dev/ttyAMA0', baud=115200)  

master.arducopter_arm()
print('arm')

cmd = mavutil.mavlink.MAV_CMD_DO_MOTOR_TEST
print("before")

master.mav.command_long_send(
    1, 0,
    mavutil.mavlink.MAV_CMD_DO_MOTOR_TEST, 0,
    1, 0, 100, 5, 0, 0, 0
)

print('after')

time.sleep(5)

master.arducopter_disarm()

master.close()

Not an expert here, but from MP motor test is performed in disarmed state.