mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 16:25:31 +03:00
Improve ESC compatibility by enabling PWM output as soon as possible.
A user reported a problem where if the board was powered up before connecting the main battery the ESCs would work, however when the board and ESCs were powered at the same time the ESCs would not initialise correctly.
This commit is contained in:
parent
d12d1952eb
commit
9a7de3cf3c
1 changed files with 36 additions and 36 deletions
|
@ -178,6 +178,42 @@ void init(void)
|
||||||
|
|
||||||
timerInit(); // timer must be initialized before any channel is allocated
|
timerInit(); // timer must be initialized before any channel is allocated
|
||||||
|
|
||||||
|
memset(&pwm_params, 0, sizeof(pwm_params));
|
||||||
|
// when using airplane/wing mixer, servo/motor outputs are remapped
|
||||||
|
if (masterConfig.mixerMode == MIXER_AIRPLANE || masterConfig.mixerMode == MIXER_FLYING_WING)
|
||||||
|
pwm_params.airplane = true;
|
||||||
|
else
|
||||||
|
pwm_params.airplane = false;
|
||||||
|
#if defined(USE_USART2) && defined(STM32F10X)
|
||||||
|
pwm_params.useUART2 = doesConfigurationUsePort(SERIAL_PORT_USART2);
|
||||||
|
#endif
|
||||||
|
pwm_params.useVbat = feature(FEATURE_VBAT);
|
||||||
|
pwm_params.useSoftSerial = feature(FEATURE_SOFTSERIAL);
|
||||||
|
pwm_params.useParallelPWM = feature(FEATURE_RX_PARALLEL_PWM);
|
||||||
|
pwm_params.useRSSIADC = feature(FEATURE_RSSI_ADC);
|
||||||
|
pwm_params.useCurrentMeterADC = feature(FEATURE_CURRENT_METER)
|
||||||
|
&& masterConfig.batteryConfig.currentMeterType == CURRENT_SENSOR_ADC;
|
||||||
|
pwm_params.useLEDStrip = feature(FEATURE_LED_STRIP);
|
||||||
|
pwm_params.usePPM = feature(FEATURE_RX_PPM);
|
||||||
|
pwm_params.useOneshot = feature(FEATURE_ONESHOT125);
|
||||||
|
pwm_params.useSerialRx = feature(FEATURE_RX_SERIAL);
|
||||||
|
pwm_params.useServos = isMixerUsingServos();
|
||||||
|
pwm_params.extraServos = currentProfile->gimbalConfig.gimbal_flags & GIMBAL_FORWARDAUX;
|
||||||
|
pwm_params.motorPwmRate = masterConfig.motor_pwm_rate;
|
||||||
|
pwm_params.servoPwmRate = masterConfig.servo_pwm_rate;
|
||||||
|
pwm_params.idlePulse = PULSE_1MS; // standard PWM for brushless ESC (default, overridden below)
|
||||||
|
if (feature(FEATURE_3D))
|
||||||
|
pwm_params.idlePulse = masterConfig.flight3DConfig.neutral3d;
|
||||||
|
if (pwm_params.motorPwmRate > 500)
|
||||||
|
pwm_params.idlePulse = 0; // brushed motors
|
||||||
|
pwm_params.servoCenterPulse = masterConfig.escAndServoConfig.servoCenterPulse;
|
||||||
|
|
||||||
|
pwmRxInit(masterConfig.inputFilteringMode);
|
||||||
|
|
||||||
|
pwmOutputConfiguration_t *pwmOutputConfiguration = pwmInit(&pwm_params);
|
||||||
|
|
||||||
|
mixerUsePWMOutputConfiguration(pwmOutputConfiguration);
|
||||||
|
|
||||||
#ifdef BEEPER
|
#ifdef BEEPER
|
||||||
beeperConfig_t beeperConfig = {
|
beeperConfig_t beeperConfig = {
|
||||||
.gpioPin = BEEP_PIN,
|
.gpioPin = BEEP_PIN,
|
||||||
|
@ -289,42 +325,6 @@ void init(void)
|
||||||
|
|
||||||
serialInit(&masterConfig.serialConfig);
|
serialInit(&masterConfig.serialConfig);
|
||||||
|
|
||||||
memset(&pwm_params, 0, sizeof(pwm_params));
|
|
||||||
// when using airplane/wing mixer, servo/motor outputs are remapped
|
|
||||||
if (masterConfig.mixerMode == MIXER_AIRPLANE || masterConfig.mixerMode == MIXER_FLYING_WING)
|
|
||||||
pwm_params.airplane = true;
|
|
||||||
else
|
|
||||||
pwm_params.airplane = false;
|
|
||||||
#if defined(USE_USART2) && defined(STM32F10X)
|
|
||||||
pwm_params.useUART2 = doesConfigurationUsePort(SERIAL_PORT_USART2);
|
|
||||||
#endif
|
|
||||||
pwm_params.useVbat = feature(FEATURE_VBAT);
|
|
||||||
pwm_params.useSoftSerial = feature(FEATURE_SOFTSERIAL);
|
|
||||||
pwm_params.useParallelPWM = feature(FEATURE_RX_PARALLEL_PWM);
|
|
||||||
pwm_params.useRSSIADC = feature(FEATURE_RSSI_ADC);
|
|
||||||
pwm_params.useCurrentMeterADC = feature(FEATURE_CURRENT_METER)
|
|
||||||
&& masterConfig.batteryConfig.currentMeterType == CURRENT_SENSOR_ADC;
|
|
||||||
pwm_params.useLEDStrip = feature(FEATURE_LED_STRIP);
|
|
||||||
pwm_params.usePPM = feature(FEATURE_RX_PPM);
|
|
||||||
pwm_params.useOneshot = feature(FEATURE_ONESHOT125);
|
|
||||||
pwm_params.useSerialRx = feature(FEATURE_RX_SERIAL);
|
|
||||||
pwm_params.useServos = isMixerUsingServos();
|
|
||||||
pwm_params.extraServos = currentProfile->gimbalConfig.gimbal_flags & GIMBAL_FORWARDAUX;
|
|
||||||
pwm_params.motorPwmRate = masterConfig.motor_pwm_rate;
|
|
||||||
pwm_params.servoPwmRate = masterConfig.servo_pwm_rate;
|
|
||||||
pwm_params.idlePulse = PULSE_1MS; // standard PWM for brushless ESC (default, overridden below)
|
|
||||||
if (feature(FEATURE_3D))
|
|
||||||
pwm_params.idlePulse = masterConfig.flight3DConfig.neutral3d;
|
|
||||||
if (pwm_params.motorPwmRate > 500)
|
|
||||||
pwm_params.idlePulse = 0; // brushed motors
|
|
||||||
pwm_params.servoCenterPulse = masterConfig.escAndServoConfig.servoCenterPulse;
|
|
||||||
|
|
||||||
pwmRxInit(masterConfig.inputFilteringMode);
|
|
||||||
|
|
||||||
pwmOutputConfiguration_t *pwmOutputConfiguration = pwmInit(&pwm_params);
|
|
||||||
|
|
||||||
mixerUsePWMOutputConfiguration(pwmOutputConfiguration);
|
|
||||||
|
|
||||||
failsafe = failsafeInit(&masterConfig.rxConfig);
|
failsafe = failsafeInit(&masterConfig.rxConfig);
|
||||||
beepcodeInit(failsafe);
|
beepcodeInit(failsafe);
|
||||||
rxInit(&masterConfig.rxConfig, failsafe);
|
rxInit(&masterConfig.rxConfig, failsafe);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue