Is missing BRD_PWM_COUNT relate to no servo output in MP for VTOL (QuadPlane) vertical motors

Hello!
I am using XUWING VTBIRD 4+1 and cuav x7 plus , cuav neo 3 pro GPS
I installed every arduplane firmware
Only stable 4.1.7 below can detect 4 motors in setup- manditory- servo output
and working well
I flight test in arduplane stable 4.1.7 firmware.
But above stable 4.1.7 firmware can not detect 4 motors vt bird in setup- manditory- servo output
I cannot getting servo output in MP for VTOL (QuadPlane) vertical 4 motors

Above stable 4.1.7 firmware BRD_PWM_COUNT removed
I guess this is the only difference.
How do i solve this problem?

Electronic devices
4PCS Brushless Motor X4112S KV 485
1PCS Brushless MotorSunnysky X3520 III KV 560
4PCS ESC 40A 2-6S, Customized 300mm 16AWG Power wires
1PCS 60A ESC (no BEC)

2023-05-01 μ˜€ν›„ 8:24:06 : EKF3 IMU1 MAG0 initial yaw alignment complete
2023-05-01 μ˜€ν›„ 8:24:06 : EKF3 IMU0 MAG0 initial yaw alignment complete
2023-05-01 μ˜€ν›„ 8:24:06 : EKF3 IMU1 tilt alignment complete
2023-05-01 μ˜€ν›„ 8:24:06 : EKF3 IMU0 tilt alignment complete
2023-05-01 μ˜€ν›„ 8:24:04 : EKF3 IMU1 initialised
2023-05-01 μ˜€ν›„ 8:24:04 : EKF3 IMU0 initialised
2023-05-01 μ˜€ν›„ 8:24:04 : Airspeed 1 calibrated
2023-05-01 μ˜€ν›„ 8:24:02 : GPS 1: specified as UAVCAN1-125
2023-05-01 μ˜€ν›„ 8:24:02 : Quicktune for quadplane loaded
2023-05-01 μ˜€ν›„ 8:24:02 : RCOut: PWM:1-14
2023-05-01 μ˜€ν›„ 8:24:02 : AHRS: DCM active
2023-05-01 μ˜€ν›„ 8:24:02 : ArduPilot Ready
2023-05-01 μ˜€ν›„ 8:24:02 : Airspeed 1 calibration started
2023-05-01 μ˜€ν›„ 8:24:02 : MS4525[0]: Found bus 3 addr 0x28
2023-05-01 μ˜€ν›„ 8:24:02 : Barometer 2 calibration complete
2023-05-01 μ˜€ν›„ 8:24:02 : Barometer 1 calibration complete
2023-05-01 μ˜€ν›„ 8:24:00 : Calibrating barometer
2023-05-01 μ˜€ν›„ 8:22:59 : IMU2: fast sampling enabled 8.0kHz/2.0kHz
2023-05-01 μ˜€ν›„ 8:22:59 : IMU0: fast sampling enabled 2.0kHz
2023-05-01 μ˜€ν›„ 8:22:59 : RCOut: PWM:1-14
2023-05-01 μ˜€ν›„ 8:22:59 : CUAV-X7 001D002F 31305113 32303437
2023-05-01 μ˜€ν›„ 8:22:59 : ChibiOS: 66e5de0d
2023-05-01 μ˜€ν›„ 8:22:59 : ArduPlane V4.3.5 (3bf6d7ac)

Brd pwm count is gone, you just select each chanel now rather than choosing a number of pwm, the information is in the docs

1 Like

And the handy SERVO_GPIO_MASK

Thank you for your reply

RC7_OPTION (28) for relay 1
RELAY_PIN (50) for AUX 1
SERVO9_FUNCTION (-1) for GPIO on Aux 1

GPIO can relay mapping AUX(50-55) and OMCU MAIN (101-108)

For example, the Pixhawk default defines set up AUX OUT 5 (pin 54) and AUX OUT 6 (pin 55) as the β€œFirst” (or #0) and β€œSecond” (or #1) Relays respectively.
IOMCU β€œMAIN” output 1 thru 8 are mapped to GPIO pin numbers 101 to 108, respectively.

SERVO_GPIO_MASK will help

But arduplane 4.17 firmware show correct servo

arduplane 4.17 above show only three

Why this happen when i installed arduplane 4.17 firmware above
SERVO_OUTPU is Only 3
Is this the normal or arduplane firmware problem
how do i solve this problem
Please help me .

Is it because of this? Maybe with the later fw you can re-designate using the servx function param as the doc suggests

Thank you for your detail reply.

I install FMU3V board,It work fine in any arduplane firmware version
In FMU3V board, everything work fine

In CUAV X7+ , Only 3 SERVO_OUTPU is appear (VTOL 4 motors missing)
when i installed arduplane 4.17 firmware above

In FMU3V hwdef.dat also define BOARD_PWM_COUNT_DEFAULT 4 removed in arduplane 4.17 above version

WHy 3 SERVO_OUTPU is appear and VTOL 4 motors missing in CUAV x7+
Could this difference be due to the characterristics of the board ?

I’m not sure what you are asking but that Flight Controller does not have a IOMCU. It’s nothing like a board using fmuv3.

arduplane firmware 4.17
/*
write to an output channel
*/
void AP_Motors::rc_write(uint8_t chan, uint16_t pwm)
{
SRV_Channel::Aux_servo_function_t function = SRV_Channels::get_motor_function(chan);
SRV_Channels::set_output_pwm(function, pwm);


arduplane firmware 4.17 Above
write to an output channel
*/
void AP_Motors::rc_write(uint8_t chan, uint16_t pwm)
{
SRV_Channel::Aux_servo_function_t function = SRV_Channels::get_motor_function(chan);
if ((1U<<chan) & _motor_pwm_range_mask) {
// note that PWM_MIN/MAX has been forced to 1000/2000
SRV_Channels::set_output_scaled(function, pwm - 1000);
} else {
SRV_Channels::set_output_pwm(function, pwm);
}
}

I’m not a programmer
Would differnt source code lead to the same result ?

If there is no solution, Should I return to primitive times downgrade firmware ?