mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-17 21:35:44 +03:00
Improvements and order by ascending as requested
This commit is contained in:
parent
81da3040a2
commit
9c9a3fe909
6 changed files with 29 additions and 74 deletions
|
@ -286,6 +286,25 @@ pwmOutputPort_t *pwmGetMotors(void)
|
||||||
return motors;
|
return motors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_DSHOT
|
||||||
|
uint32_t getDshotHz(motorPwmProtocolTypes_e pwmProtocolType)
|
||||||
|
{
|
||||||
|
switch (pwmProtocolType) {
|
||||||
|
case(PWM_TYPE_DSHOT1200):
|
||||||
|
return MOTOR_DSHOT1200_MHZ * 1000000;
|
||||||
|
case(PWM_TYPE_DSHOT900):
|
||||||
|
return MOTOR_DSHOT900_MHZ * 1000000;
|
||||||
|
case(PWM_TYPE_DSHOT600):
|
||||||
|
return MOTOR_DSHOT600_MHZ * 1000000;
|
||||||
|
case(PWM_TYPE_DSHOT300):
|
||||||
|
return MOTOR_DSHOT300_MHZ * 1000000;
|
||||||
|
default:
|
||||||
|
case(PWM_TYPE_DSHOT150):
|
||||||
|
return MOTOR_DSHOT150_MHZ * 1000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_SERVOS
|
#ifdef USE_SERVOS
|
||||||
void pwmWriteServo(uint8_t index, uint16_t value)
|
void pwmWriteServo(uint8_t index, uint16_t value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,11 +27,11 @@ typedef enum {
|
||||||
PWM_TYPE_ONESHOT42,
|
PWM_TYPE_ONESHOT42,
|
||||||
PWM_TYPE_MULTISHOT,
|
PWM_TYPE_MULTISHOT,
|
||||||
PWM_TYPE_BRUSHED,
|
PWM_TYPE_BRUSHED,
|
||||||
PWM_TYPE_DSHOT1200,
|
|
||||||
PWM_TYPE_DSHOT900,
|
|
||||||
PWM_TYPE_DSHOT600,
|
|
||||||
PWM_TYPE_DSHOT300,
|
|
||||||
PWM_TYPE_DSHOT150,
|
PWM_TYPE_DSHOT150,
|
||||||
|
PWM_TYPE_DSHOT300,
|
||||||
|
PWM_TYPE_DSHOT600,
|
||||||
|
PWM_TYPE_DSHOT900,
|
||||||
|
PWM_TYPE_DSHOT1200,
|
||||||
PWM_TYPE_MAX
|
PWM_TYPE_MAX
|
||||||
} motorPwmProtocolTypes_e;
|
} motorPwmProtocolTypes_e;
|
||||||
|
|
||||||
|
@ -114,6 +114,7 @@ void servoInit(const servoConfig_t *servoConfig);
|
||||||
void pwmServoConfig(const struct timerHardware_s *timerHardware, uint8_t servoIndex, uint16_t servoPwmRate, uint16_t servoCenterPulse);
|
void pwmServoConfig(const struct timerHardware_s *timerHardware, uint8_t servoIndex, uint16_t servoPwmRate, uint16_t servoCenterPulse);
|
||||||
|
|
||||||
#ifdef USE_DSHOT
|
#ifdef USE_DSHOT
|
||||||
|
uint32_t getDshotHz(motorPwmProtocolTypes_e pwmProtocolType);
|
||||||
void pwmWriteDigital(uint8_t index, uint16_t value);
|
void pwmWriteDigital(uint8_t index, uint16_t value);
|
||||||
void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t motorIndex, motorPwmProtocolTypes_e pwmProtocolType);
|
void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t motorIndex, motorPwmProtocolTypes_e pwmProtocolType);
|
||||||
void pwmCompleteDigitalMotorUpdate(uint8_t motorCount);
|
void pwmCompleteDigitalMotorUpdate(uint8_t motorCount);
|
||||||
|
|
|
@ -136,26 +136,7 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t
|
||||||
RCC_ClockCmd(timerRCC(timer), ENABLE);
|
RCC_ClockCmd(timerRCC(timer), ENABLE);
|
||||||
TIM_Cmd(timer, DISABLE);
|
TIM_Cmd(timer, DISABLE);
|
||||||
|
|
||||||
uint32_t hz;
|
TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t)((SystemCoreClock / timerClockDivisor(timer) / getDshotHz(pwmProtocolType)) - 1);
|
||||||
switch (pwmProtocolType) {
|
|
||||||
case(PWM_TYPE_DSHOT1200):
|
|
||||||
hz = MOTOR_DSHOT1200_MHZ * 1000000;
|
|
||||||
break;
|
|
||||||
case(PWM_TYPE_DSHOT900):
|
|
||||||
hz = MOTOR_DSHOT900_MHZ * 1000000;
|
|
||||||
break;
|
|
||||||
case(PWM_TYPE_DSHOT600):
|
|
||||||
hz = MOTOR_DSHOT600_MHZ * 1000000;
|
|
||||||
break;
|
|
||||||
case(PWM_TYPE_DSHOT300):
|
|
||||||
hz = MOTOR_DSHOT300_MHZ * 1000000;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
case(PWM_TYPE_DSHOT150):
|
|
||||||
hz = MOTOR_DSHOT150_MHZ * 1000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t)((SystemCoreClock / timerClockDivisor(timer) / hz) - 1);
|
|
||||||
TIM_TimeBaseStructure.TIM_Period = MOTOR_BITLENGTH;
|
TIM_TimeBaseStructure.TIM_Period = MOTOR_BITLENGTH;
|
||||||
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
||||||
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
|
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
|
||||||
|
|
|
@ -134,26 +134,7 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t
|
||||||
RCC_ClockCmd(timerRCC(timer), ENABLE);
|
RCC_ClockCmd(timerRCC(timer), ENABLE);
|
||||||
TIM_Cmd(timer, DISABLE);
|
TIM_Cmd(timer, DISABLE);
|
||||||
|
|
||||||
uint32_t hz;
|
TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock / timerClockDivisor(timer) / getDshotHz(pwmProtocolType)) - 1;
|
||||||
switch (pwmProtocolType) {
|
|
||||||
case(PWM_TYPE_DSHOT1200):
|
|
||||||
hz = MOTOR_DSHOT1200_MHZ * 1000000;
|
|
||||||
break;
|
|
||||||
case(PWM_TYPE_DSHOT900):
|
|
||||||
hz = MOTOR_DSHOT900_MHZ * 1000000;
|
|
||||||
break;
|
|
||||||
case(PWM_TYPE_DSHOT600):
|
|
||||||
hz = MOTOR_DSHOT600_MHZ * 1000000;
|
|
||||||
break;
|
|
||||||
case(PWM_TYPE_DSHOT300):
|
|
||||||
hz = MOTOR_DSHOT300_MHZ * 1000000;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
case(PWM_TYPE_DSHOT150):
|
|
||||||
hz = MOTOR_DSHOT150_MHZ * 1000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock / timerClockDivisor(timer) / hz) - 1;
|
|
||||||
TIM_TimeBaseStructure.TIM_Period = MOTOR_BITLENGTH;
|
TIM_TimeBaseStructure.TIM_Period = MOTOR_BITLENGTH;
|
||||||
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
||||||
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
|
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
|
||||||
|
|
|
@ -139,21 +139,8 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t
|
||||||
if (configureTimer) {
|
if (configureTimer) {
|
||||||
RCC_ClockCmd(timerRCC(timer), ENABLE);
|
RCC_ClockCmd(timerRCC(timer), ENABLE);
|
||||||
|
|
||||||
uint32_t hz;
|
|
||||||
switch (pwmProtocolType) {
|
|
||||||
case(PWM_TYPE_DSHOT600):
|
|
||||||
hz = MOTOR_DSHOT600_MHZ * 1000000;
|
|
||||||
break;
|
|
||||||
case(PWM_TYPE_DSHOT300):
|
|
||||||
hz = MOTOR_DSHOT300_MHZ * 1000000;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
case(PWM_TYPE_DSHOT150):
|
|
||||||
hz = MOTOR_DSHOT150_MHZ * 1000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
motor->TimHandle.Instance = timerHardware->tim;
|
motor->TimHandle.Instance = timerHardware->tim;
|
||||||
motor->TimHandle.Init.Prescaler = (SystemCoreClock / timerClockDivisor(timer) / hz) - 1;;
|
motor->TimHandle.Init.Prescaler = (SystemCoreClock / timerClockDivisor(timer) / getDshotHz(pwmProtocolType)) - 1;;
|
||||||
motor->TimHandle.Init.Period = MOTOR_BITLENGTH;
|
motor->TimHandle.Init.Period = MOTOR_BITLENGTH;
|
||||||
motor->TimHandle.Init.RepetitionCounter = 0;
|
motor->TimHandle.Init.RepetitionCounter = 0;
|
||||||
motor->TimHandle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
motor->TimHandle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
@ -170,21 +157,7 @@ void pwmDigitalMotorHardwareConfig(const timerHardware_t *timerHardware, uint8_t
|
||||||
motor->TimHandle = dmaMotors[timerIndex].TimHandle;
|
motor->TimHandle = dmaMotors[timerIndex].TimHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (timerHardware->channel) {
|
motor->timerDmaSource = timerDmaSource(timerHardware->channel);
|
||||||
case TIM_CHANNEL_1:
|
|
||||||
motor->timerDmaSource = TIM_DMA_ID_CC1;
|
|
||||||
break;
|
|
||||||
case TIM_CHANNEL_2:
|
|
||||||
motor->timerDmaSource = TIM_DMA_ID_CC2;
|
|
||||||
break;
|
|
||||||
case TIM_CHANNEL_3:
|
|
||||||
motor->timerDmaSource = TIM_DMA_ID_CC3;
|
|
||||||
break;
|
|
||||||
case TIM_CHANNEL_4:
|
|
||||||
motor->timerDmaSource = TIM_DMA_ID_CC4;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
dmaMotorTimers[timerIndex].timerDmaSources |= motor->timerDmaSource;
|
dmaMotorTimers[timerIndex].timerDmaSources |= motor->timerDmaSource;
|
||||||
|
|
||||||
/* Set the parameters to be configured */
|
/* Set the parameters to be configured */
|
||||||
|
|
|
@ -334,7 +334,7 @@ static const char * const lookupTableSuperExpoYaw[] = {
|
||||||
static const char * const lookupTablePwmProtocol[] = {
|
static const char * const lookupTablePwmProtocol[] = {
|
||||||
"OFF", "ONESHOT125", "ONESHOT42", "MULTISHOT", "BRUSHED",
|
"OFF", "ONESHOT125", "ONESHOT42", "MULTISHOT", "BRUSHED",
|
||||||
#ifdef USE_DSHOT
|
#ifdef USE_DSHOT
|
||||||
"DSHOT1200", "DSHOT900", "DSHOT600", "DSHOT300", "DSHOT150",
|
"DSHOT150", "DSHOT300", "DSHOT600", "DSHOT900", "DSHOT1200",
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue