mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-19 14:25:20 +03:00
CJMCU - Update PPM/PWM mappings.
Bench tested for PPM & 4 Motor outputs only.
This commit is contained in:
parent
871f3024af
commit
acc285be4a
1 changed files with 127 additions and 122 deletions
|
@ -63,161 +63,166 @@
|
|||
*/
|
||||
|
||||
enum {
|
||||
TYPE_IP = 1,
|
||||
TYPE_IW,
|
||||
TYPE_M,
|
||||
TYPE_S,
|
||||
MAP_TO_PPM_INPUT = 1,
|
||||
MAP_TO_PWM_INPUT,
|
||||
MAP_TO_MOTOR_OUTPUT,
|
||||
MAP_TO_SERVO_OUTPUT,
|
||||
};
|
||||
|
||||
#if defined(NAZE) || defined(OLIMEXINO) || defined(NAZE32PRO) || defined(STM32F3DISCOVERY)
|
||||
static const uint16_t multiPPM[] = {
|
||||
PWM1 | (TYPE_IP << 8), // PPM input
|
||||
PWM9 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM10 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM11 | (TYPE_M << 8),
|
||||
PWM12 | (TYPE_M << 8),
|
||||
PWM13 | (TYPE_M << 8),
|
||||
PWM14 | (TYPE_M << 8),
|
||||
PWM5 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM6 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM7 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM8 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input
|
||||
PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
PWM11 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM12 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM13 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM14 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM5 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
PWM6 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const uint16_t multiPWM[] = {
|
||||
PWM1 | (TYPE_IW << 8), // input #1
|
||||
PWM2 | (TYPE_IW << 8),
|
||||
PWM3 | (TYPE_IW << 8),
|
||||
PWM4 | (TYPE_IW << 8),
|
||||
PWM5 | (TYPE_IW << 8),
|
||||
PWM6 | (TYPE_IW << 8),
|
||||
PWM7 | (TYPE_IW << 8),
|
||||
PWM8 | (TYPE_IW << 8), // input #8
|
||||
PWM9 | (TYPE_M << 8), // motor #1 or servo #1 (swap to servo if needed)
|
||||
PWM10 | (TYPE_M << 8), // motor #2 or servo #2 (swap to servo if needed)
|
||||
PWM11 | (TYPE_M << 8), // motor #1 or #3
|
||||
PWM12 | (TYPE_M << 8),
|
||||
PWM13 | (TYPE_M << 8),
|
||||
PWM14 | (TYPE_M << 8), // motor #4 or #6
|
||||
PWM1 | (MAP_TO_PWM_INPUT << 8), // input #1
|
||||
PWM2 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM3 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM4 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM5 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM6 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM7 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM8 | (MAP_TO_PWM_INPUT << 8), // input #8
|
||||
PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 or servo #1 (swap to servo if needed)
|
||||
PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2 or servo #2 (swap to servo if needed)
|
||||
PWM11 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 or #3
|
||||
PWM12 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM13 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM14 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #4 or #6
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const uint16_t airPPM[] = {
|
||||
PWM1 | (TYPE_IP << 8), // PPM input
|
||||
PWM9 | (TYPE_M << 8), // motor #1
|
||||
PWM10 | (TYPE_M << 8), // motor #2
|
||||
PWM11 | (TYPE_S << 8), // servo #1
|
||||
PWM12 | (TYPE_S << 8),
|
||||
PWM13 | (TYPE_S << 8),
|
||||
PWM14 | (TYPE_S << 8), // servo #4
|
||||
PWM5 | (TYPE_S << 8), // servo #5
|
||||
PWM6 | (TYPE_S << 8),
|
||||
PWM7 | (TYPE_S << 8),
|
||||
PWM8 | (TYPE_S << 8), // servo #8
|
||||
PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input
|
||||
PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1
|
||||
PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2
|
||||
PWM11 | (MAP_TO_SERVO_OUTPUT << 8), // servo #1
|
||||
PWM12 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM13 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM14 | (MAP_TO_SERVO_OUTPUT << 8), // servo #4
|
||||
PWM5 | (MAP_TO_SERVO_OUTPUT << 8), // servo #5
|
||||
PWM6 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM7 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM8 | (MAP_TO_SERVO_OUTPUT << 8), // servo #8
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const uint16_t airPWM[] = {
|
||||
PWM1 | (TYPE_IW << 8), // input #1
|
||||
PWM2 | (TYPE_IW << 8),
|
||||
PWM3 | (TYPE_IW << 8),
|
||||
PWM4 | (TYPE_IW << 8),
|
||||
PWM5 | (TYPE_IW << 8),
|
||||
PWM6 | (TYPE_IW << 8),
|
||||
PWM7 | (TYPE_IW << 8),
|
||||
PWM8 | (TYPE_IW << 8), // input #8
|
||||
PWM9 | (TYPE_M << 8), // motor #1
|
||||
PWM10 | (TYPE_M << 8), // motor #2
|
||||
PWM11 | (TYPE_S << 8), // servo #1
|
||||
PWM12 | (TYPE_S << 8),
|
||||
PWM13 | (TYPE_S << 8),
|
||||
PWM14 | (TYPE_S << 8), // servo #4
|
||||
PWM1 | (MAP_TO_PWM_INPUT << 8), // input #1
|
||||
PWM2 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM3 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM4 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM5 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM6 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM7 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM8 | (MAP_TO_PWM_INPUT << 8), // input #8
|
||||
PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1
|
||||
PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2
|
||||
PWM11 | (MAP_TO_SERVO_OUTPUT << 8), // servo #1
|
||||
PWM12 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM13 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM14 | (MAP_TO_SERVO_OUTPUT << 8), // servo #4
|
||||
0xFFFF
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CC3D
|
||||
static const uint16_t multiPPM[] = {
|
||||
PWM1 | (TYPE_IP << 8), // PPM input
|
||||
PWM7 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM8 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM9 | (TYPE_M << 8),
|
||||
PWM10 | (TYPE_M << 8),
|
||||
PWM11 | (TYPE_M << 8),
|
||||
PWM12 | (TYPE_M << 8),
|
||||
PWM2 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM3 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM4 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM5 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM6 | (TYPE_M << 8), // Swap to servo if needed
|
||||
PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input
|
||||
PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
PWM9 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM10 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM11 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM12 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM2 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
PWM3 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
PWM4 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
PWM5 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
PWM6 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed
|
||||
0xFFFF
|
||||
};
|
||||
static const uint16_t multiPWM[] = {
|
||||
PWM1 | (TYPE_IW << 8), // input #1
|
||||
PWM2 | (TYPE_IW << 8),
|
||||
PWM3 | (TYPE_IW << 8),
|
||||
PWM4 | (TYPE_IW << 8),
|
||||
PWM5 | (TYPE_IW << 8),
|
||||
PWM6 | (TYPE_IW << 8), // input #6
|
||||
PWM7 | (TYPE_M << 8), // motor #1 or servo #1 (swap to servo if needed)
|
||||
PWM8 | (TYPE_M << 8), // motor #2 or servo #2 (swap to servo if needed)
|
||||
PWM9 | (TYPE_M << 8), // motor #1 or #3
|
||||
PWM10 | (TYPE_M << 8),
|
||||
PWM11 | (TYPE_M << 8),
|
||||
PWM12 | (TYPE_M << 8), // motor #4 or #6
|
||||
PWM1 | (MAP_TO_PWM_INPUT << 8), // input #1
|
||||
PWM2 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM3 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM4 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM5 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM6 | (MAP_TO_PWM_INPUT << 8), // input #6
|
||||
PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 or servo #1 (swap to servo if needed)
|
||||
PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2 or servo #2 (swap to servo if needed)
|
||||
PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 or #3
|
||||
PWM10 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM11 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM12 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #4 or #6
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const uint16_t airPPM[] = {
|
||||
PWM1 | (TYPE_IP << 8), // PPM input
|
||||
PWM7 | (TYPE_M << 8),
|
||||
PWM8 | (TYPE_M << 8),
|
||||
PWM9 | (TYPE_S << 8),
|
||||
PWM10 | (TYPE_S << 8),
|
||||
PWM11 | (TYPE_S << 8),
|
||||
PWM12 | (TYPE_S << 8),
|
||||
PWM2 | (TYPE_S << 8),
|
||||
PWM3 | (TYPE_S << 8),
|
||||
PWM4 | (TYPE_S << 8),
|
||||
PWM5 | (TYPE_S << 8),
|
||||
PWM6 | (TYPE_S << 8),
|
||||
PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input
|
||||
PWM7 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM8 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM9 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM10 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM11 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM12 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM2 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM3 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM4 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM5 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
PWM6 | (MAP_TO_SERVO_OUTPUT << 8),
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const uint16_t airPWM[] = {
|
||||
PWM1 | (TYPE_IW << 8), // input #1
|
||||
PWM2 | (TYPE_IW << 8),
|
||||
PWM3 | (TYPE_IW << 8),
|
||||
PWM4 | (TYPE_IW << 8),
|
||||
PWM5 | (TYPE_IW << 8),
|
||||
PWM6 | (TYPE_IW << 8), // input #6
|
||||
PWM7 | (TYPE_M << 8), // motor #1
|
||||
PWM8 | (TYPE_M << 8), // motor #2
|
||||
PWM9 | (TYPE_S << 8), // servo #1
|
||||
PWM10 | (TYPE_S << 8), // servo #2
|
||||
PWM11 | (TYPE_S << 8), // servo #3
|
||||
PWM12 | (TYPE_S << 8), // servo #4
|
||||
PWM1 | (MAP_TO_PWM_INPUT << 8), // input #1
|
||||
PWM2 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM3 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM4 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM5 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM6 | (MAP_TO_PWM_INPUT << 8), // input #6
|
||||
PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1
|
||||
PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2
|
||||
PWM9 | (MAP_TO_SERVO_OUTPUT << 8), // servo #1
|
||||
PWM10 | (MAP_TO_SERVO_OUTPUT << 8), // servo #2
|
||||
PWM11 | (MAP_TO_SERVO_OUTPUT << 8), // servo #3
|
||||
PWM12 | (MAP_TO_SERVO_OUTPUT << 8), // servo #4
|
||||
0xFFFF
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CJMCU
|
||||
static const uint16_t multiPPM[] = {
|
||||
PWM1 | (TYPE_IP << 8), // PPM input
|
||||
PWM2 | (TYPE_M << 8),
|
||||
PWM3 | (TYPE_M << 8),
|
||||
PWM4 | (TYPE_M << 8),
|
||||
PWM5 | (TYPE_M << 8),
|
||||
PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input
|
||||
PWM7 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM14 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM8 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM13 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
0xFF
|
||||
};
|
||||
|
||||
static const uint16_t multiPWM[] = {
|
||||
PWM1 | (TYPE_IP << 8), // PPM input
|
||||
PWM2 | (TYPE_M << 8),
|
||||
PWM3 | (TYPE_M << 8),
|
||||
PWM4 | (TYPE_M << 8),
|
||||
PWM5 | (TYPE_M << 8),
|
||||
PWM1 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM2 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM3 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM4 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM9 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM10 | (MAP_TO_PWM_INPUT << 8),
|
||||
PWM7 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM14 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM8 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
PWM13 | (MAP_TO_MOTOR_OUTPUT << 8),
|
||||
0xFF
|
||||
};
|
||||
|
||||
|
@ -322,27 +327,27 @@ pwmOutputConfiguration_t *pwmInit(drv_pwm_config_t *init)
|
|||
#endif
|
||||
|
||||
// hacks to allow current functionality
|
||||
if (type == TYPE_IW && !init->useParallelPWM)
|
||||
if (type == MAP_TO_PWM_INPUT && !init->useParallelPWM)
|
||||
type = 0;
|
||||
|
||||
if (type == TYPE_IP && !init->usePPM)
|
||||
if (type == MAP_TO_PPM_INPUT && !init->usePPM)
|
||||
type = 0;
|
||||
|
||||
if (init->useServos && !init->airplane) {
|
||||
#if defined(STM32F10X_MD) || defined(CHEBUZZF3)
|
||||
// remap PWM9+10 as servos
|
||||
if (timerIndex == PWM9 || timerIndex == PWM10)
|
||||
type = TYPE_S;
|
||||
type = MAP_TO_SERVO_OUTPUT;
|
||||
#endif
|
||||
|
||||
#if (defined(STM32F303xC) || defined(STM32F3DISCOVERY)) && !defined(CHEBUZZF3)
|
||||
// remap PWM 5+6 or 9+10 as servos - softserial pin pairs require timer ports that use the same timer
|
||||
if (init->useSoftSerial) {
|
||||
if (timerIndex == PWM5 || timerIndex == PWM6)
|
||||
type = TYPE_S;
|
||||
type = MAP_TO_SERVO_OUTPUT;
|
||||
} else {
|
||||
if (timerIndex == PWM9 || timerIndex == PWM10)
|
||||
type = TYPE_S;
|
||||
type = MAP_TO_SERVO_OUTPUT;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -350,22 +355,22 @@ pwmOutputConfiguration_t *pwmInit(drv_pwm_config_t *init)
|
|||
if (init->extraServos && !init->airplane) {
|
||||
// remap PWM5..8 as servos when used in extended servo mode
|
||||
if (timerIndex >= PWM5 && timerIndex <= PWM8)
|
||||
type = TYPE_S;
|
||||
type = MAP_TO_SERVO_OUTPUT;
|
||||
}
|
||||
|
||||
if (type == TYPE_IP) {
|
||||
if (type == MAP_TO_PPM_INPUT) {
|
||||
ppmInConfig(timerHardwarePtr);
|
||||
} else if (type == TYPE_IW) {
|
||||
} else if (type == MAP_TO_PWM_INPUT) {
|
||||
pwmInConfig(timerHardwarePtr, channelIndex);
|
||||
channelIndex++;
|
||||
} else if (type == TYPE_M) {
|
||||
} else if (type == MAP_TO_MOTOR_OUTPUT) {
|
||||
if (init->motorPwmRate > 500) {
|
||||
pwmBrushedMotorConfig(timerHardwarePtr, pwmOutputConfiguration.motorCount, init->motorPwmRate, init->idlePulse);
|
||||
} else {
|
||||
pwmBrushlessMotorConfig(timerHardwarePtr, pwmOutputConfiguration.motorCount, init->motorPwmRate, init->idlePulse);
|
||||
}
|
||||
pwmOutputConfiguration.motorCount++;
|
||||
} else if (type == TYPE_S) {
|
||||
} else if (type == MAP_TO_SERVO_OUTPUT) {
|
||||
pwmServoConfig(timerHardwarePtr, pwmOutputConfiguration.servoCount, init->servoPwmRate, init->servoCenterPulse);
|
||||
pwmOutputConfiguration.servoCount++;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue