更新电机占空比最小值

This commit is contained in:
EN 2024-07-13 15:57:46 +08:00
parent 8602e7bccf
commit f759a1c198
2 changed files with 16 additions and 7 deletions

View File

@ -5,8 +5,6 @@
#include "main.h" #include "main.h"
// duty in [-100, 100]
void MOTOR_Start(void); void MOTOR_Start(void);
void MOTOR_Slip(void); void MOTOR_Slip(void);
void MOTOR_Stop(void); void MOTOR_Stop(void);

View File

@ -17,6 +17,8 @@ void MOTOR_Start(void)
HAL_TIM_PWM_Start(MOTOR_TIM, MOTOR_R_CHAN); HAL_TIM_PWM_Start(MOTOR_TIM, MOTOR_R_CHAN);
} }
/// @brief 自由滑行
/// @param
void MOTOR_Slip(void) void MOTOR_Slip(void)
{ {
HAL_GPIO_WritePin(L_FORWARD_GPIO_Port, L_FORWARD_Pin | L_BACKWARD_Pin | R_FORWARD_Pin | R_BACKWARD_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(L_FORWARD_GPIO_Port, L_FORWARD_Pin | L_BACKWARD_Pin | R_FORWARD_Pin | R_BACKWARD_Pin, GPIO_PIN_RESET);
@ -24,6 +26,8 @@ void MOTOR_Slip(void)
__HAL_TIM_SetCompare(MOTOR_TIM, MOTOR_R_CHAN, MAX_SPEED); __HAL_TIM_SetCompare(MOTOR_TIM, MOTOR_R_CHAN, MAX_SPEED);
} }
/// @brief 刹车
/// @param
void MOTOR_Stop(void) void MOTOR_Stop(void)
{ {
HAL_GPIO_WritePin(L_FORWARD_GPIO_Port, L_FORWARD_Pin | L_BACKWARD_Pin | R_FORWARD_Pin | R_BACKWARD_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(L_FORWARD_GPIO_Port, L_FORWARD_Pin | L_BACKWARD_Pin | R_FORWARD_Pin | R_BACKWARD_Pin, GPIO_PIN_RESET);
@ -31,6 +35,10 @@ void MOTOR_Stop(void)
__HAL_TIM_SetCompare(MOTOR_TIM, MOTOR_R_CHAN, 0); __HAL_TIM_SetCompare(MOTOR_TIM, MOTOR_R_CHAN, 0);
} }
/// @brief 控制电机占空比
/// @param leftDuty 绝对值 20-100, 支持正负
/// @param rightDuty 绝对值 20-100支持正负
void MOTOR_SetDuty(int8_t leftDuty, int8_t rightDuty) void MOTOR_SetDuty(int8_t leftDuty, int8_t rightDuty)
{ {
leftDuty = preProcess(leftDuty, MOTOR_L); leftDuty = preProcess(leftDuty, MOTOR_L);
@ -47,13 +55,12 @@ void MOTOR_SetDuty(int8_t leftDuty, int8_t rightDuty)
int8_t preProcess(int8_t duty, uint8_t motor) int8_t preProcess(int8_t duty, uint8_t motor)
{ {
if (duty > 100)
duty = 100;
else if (duty < -100)
duty = -100;
if (duty >= 0) if (duty >= 0)
{ {
if (duty > 100)
duty = 100;
else if (duty < 20)
duty = 20;
if (motor & MOTOR_L) if (motor & MOTOR_L)
{ {
HAL_GPIO_WritePin(L_FORWARD_GPIO_Port, L_FORWARD_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(L_FORWARD_GPIO_Port, L_FORWARD_Pin, GPIO_PIN_SET);
@ -67,6 +74,10 @@ int8_t preProcess(int8_t duty, uint8_t motor)
} }
else else
{ {
if (duty < -100)
duty = -100;
else if (duty > -20)
duty = -20;
if (motor & MOTOR_L) if (motor & MOTOR_L)
{ {
HAL_GPIO_WritePin(L_FORWARD_GPIO_Port, L_FORWARD_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(L_FORWARD_GPIO_Port, L_FORWARD_Pin, GPIO_PIN_RESET);