1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-19 14:25:16 +03:00

Merge pull request #6106 from IVData/master

Added option to output servos on PWM and SBUS
This commit is contained in:
Paweł Spychalski 2021-01-31 20:03:18 +01:00 committed by GitHub
commit cbad665aee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 20 additions and 5 deletions

View file

@ -268,7 +268,8 @@ static bool motorsUseHardwareTimers(void)
static bool servosUseHardwareTimers(void) static bool servosUseHardwareTimers(void)
{ {
return servoConfig()->servo_protocol == SERVO_TYPE_PWM; return servoConfig()->servo_protocol == SERVO_TYPE_PWM ||
servoConfig()->servo_protocol == SERVO_TYPE_SBUS_PWM;
} }
static void pwmInitMotors(timMotorServoHardware_t * timOutputs) static void pwmInitMotors(timMotorServoHardware_t * timOutputs)

View file

@ -52,7 +52,8 @@ typedef enum {
typedef enum { typedef enum {
SERVO_TYPE_PWM = 0, SERVO_TYPE_PWM = 0,
SERVO_TYPE_SERVO_DRIVER, SERVO_TYPE_SERVO_DRIVER,
SERVO_TYPE_SBUS SERVO_TYPE_SBUS,
SERVO_TYPE_SBUS_PWM
} servoProtocolType_e; } servoProtocolType_e;
typedef enum { typedef enum {

View file

@ -501,6 +501,14 @@ static void pwmServoWriteStandard(uint8_t index, uint16_t value)
} }
} }
#ifdef USE_SERVO_SBUS
static void sbusPwmWriteStandard(uint8_t index, uint16_t value)
{
pwmServoWriteStandard(index, value);
sbusServoUpdate(index, value);
}
#endif
#ifdef USE_PWM_SERVO_DRIVER #ifdef USE_PWM_SERVO_DRIVER
static void pwmServoWriteExternalDriver(uint8_t index, uint16_t value) static void pwmServoWriteExternalDriver(uint8_t index, uint16_t value)
{ {
@ -532,6 +540,11 @@ void pwmServoPreconfigure(void)
sbusServoInitialize(); sbusServoInitialize();
servoWritePtr = sbusServoUpdate; servoWritePtr = sbusServoUpdate;
break; break;
case SERVO_TYPE_SBUS_PWM:
sbusServoInitialize();
servoWritePtr = sbusPwmWriteStandard;
break;
#endif #endif
} }
} }

View file

@ -217,7 +217,7 @@ void validateAndFixConfig(void)
#endif #endif
#ifndef USE_SERVO_SBUS #ifndef USE_SERVO_SBUS
if (servoConfig()->servo_protocol == SERVO_TYPE_SBUS) { if (servoConfig()->servo_protocol == SERVO_TYPE_SBUS || servoConfig()->servo_protocol == SERVO_TYPE_SBUS_PWM) {
servoConfigMutable()->servo_protocol = SERVO_TYPE_PWM; servoConfigMutable()->servo_protocol = SERVO_TYPE_PWM;
} }
#endif #endif

View file

@ -346,7 +346,7 @@ void fcTasksInit(void)
setTaskEnabled(TASK_STACK_CHECK, true); setTaskEnabled(TASK_STACK_CHECK, true);
#endif #endif
#if defined(USE_PWM_SERVO_DRIVER) || defined(USE_SERVO_SBUS) #if defined(USE_PWM_SERVO_DRIVER) || defined(USE_SERVO_SBUS)
setTaskEnabled(TASK_PWMDRIVER, (servoConfig()->servo_protocol == SERVO_TYPE_SERVO_DRIVER) || (servoConfig()->servo_protocol == SERVO_TYPE_SBUS)); setTaskEnabled(TASK_PWMDRIVER, (servoConfig()->servo_protocol == SERVO_TYPE_SERVO_DRIVER) || (servoConfig()->servo_protocol == SERVO_TYPE_SBUS) || (servoConfig()->servo_protocol == SERVO_TYPE_SBUS_PWM));
#endif #endif
#ifdef USE_CMS #ifdef USE_CMS
#ifdef USE_MSP_DISPLAYPORT #ifdef USE_MSP_DISPLAYPORT

View file

@ -34,7 +34,7 @@ tables:
- name: motor_pwm_protocol - name: motor_pwm_protocol
values: ["STANDARD", "ONESHOT125", "ONESHOT42", "MULTISHOT", "BRUSHED", "DSHOT150", "DSHOT300", "DSHOT600", "DSHOT1200", "SERIALSHOT"] values: ["STANDARD", "ONESHOT125", "ONESHOT42", "MULTISHOT", "BRUSHED", "DSHOT150", "DSHOT300", "DSHOT600", "DSHOT1200", "SERIALSHOT"]
- name: servo_protocol - name: servo_protocol
values: ["PWM", "SERVO_DRIVER", "SBUS"] values: ["PWM", "SERVO_DRIVER", "SBUS", "SBUS_PWM"]
- name: failsafe_procedure - name: failsafe_procedure
values: ["SET-THR", "DROP", "RTH", "NONE"] values: ["SET-THR", "DROP", "RTH", "NONE"]
- name: current_sensor - name: current_sensor