改变电机控制方式使用滑行模式控制电机,并使用滑行方式停止电机,经测试单个电机有效,双电机待测试
This commit is contained in:
@@ -186,6 +186,7 @@ void MX_FREERTOS_Init(void) {
|
|||||||
/* USER CODE END Header_StartDefaultTask */
|
/* USER CODE END Header_StartDefaultTask */
|
||||||
void StartDefaultTask(void *argument) {
|
void StartDefaultTask(void *argument) {
|
||||||
/* USER CODE BEGIN StartDefaultTask */
|
/* USER CODE BEGIN StartDefaultTask */
|
||||||
|
Screen_Init();
|
||||||
// 初始化命令
|
// 初始化命令
|
||||||
uint8_t init_cmd1[] = {0x7E, 0xFF, 0x06, 0x06, 0x00,
|
uint8_t init_cmd1[] = {0x7E, 0xFF, 0x06, 0x06, 0x00,
|
||||||
0x00, 0x1E, 0xFE, 0xD7, 0xEF}; // 开启声音
|
0x00, 0x1E, 0xFE, 0xD7, 0xEF}; // 开启声音
|
||||||
@@ -376,12 +377,11 @@ void Motor(void *argument) {
|
|||||||
/* USER CODE END Header_Screen */
|
/* USER CODE END Header_Screen */
|
||||||
void Screen(void *argument) {
|
void Screen(void *argument) {
|
||||||
/* USER CODE BEGIN Screen */
|
/* USER CODE BEGIN Screen */
|
||||||
Screen_Init();
|
|
||||||
// HAL_UART_Transmit(&huart1, (uint8_t *)buf, strlen(buf), HAL_MAX_DELAY);
|
// HAL_UART_Transmit(&huart1, (uint8_t *)buf, strlen(buf), HAL_MAX_DELAY);
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
||||||
osDelay(2000);
|
|
||||||
}
|
}
|
||||||
/* USER CODE END Screen */
|
/* USER CODE END Screen */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
#define PWM_STEPS (PWM_ARR + 1)
|
#define PWM_STEPS (PWM_ARR + 1)
|
||||||
|
|
||||||
/* 三档占空比(百分比),索引为 0..2 对应 档位 1..3(档位0为停止) */
|
/* 三档占空比(百分比),索引为 0..2 对应 档位 1..3(档位0为停止) */
|
||||||
static const uint8_t gears_percent[3] = {75, 80, 85};
|
static const uint8_t gears_percent[3] = {55, 65, 75};
|
||||||
/* current_gear: 0 = 停止, 1 = 低, 2 = 中, 3 = 高 */
|
/* current_gear: 0 = 停止, 1 = 低, 2 = 中, 3 = 高 */
|
||||||
static uint8_t current_gear = 0; /* 0..3 */
|
static uint8_t current_gear = 0; /* 0..3 */
|
||||||
|
|
||||||
@@ -39,17 +39,18 @@ static void set_both_motors_percent(uint8_t percent) {
|
|||||||
uint32_t cmp = percent_to_compare(percent);
|
uint32_t cmp = percent_to_compare(percent);
|
||||||
|
|
||||||
/* 停止并关闭 CH1、使用 CH2 输出 */
|
/* 停止并关闭 CH1、使用 CH2 输出 */
|
||||||
HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1);
|
//HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1);
|
||||||
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2, (uint16_t)cmp);
|
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, (uint16_t)cmp);
|
||||||
|
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2, 100);
|
||||||
|
|
||||||
/* 停止并关闭 CH3、使用 CH4 输出 */
|
/* 停止并关闭 CH3、使用 CH4 输出 */
|
||||||
HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_3);
|
//HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_3);
|
||||||
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, (uint16_t)cmp);
|
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, (uint16_t)cmp);
|
||||||
|
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 100);
|
||||||
}
|
}
|
||||||
|
/* 启动时短暂提升到 75% 并保持 500ms,然后降到一档(档位1) */
|
||||||
/* 启动时短暂提升到 90% 并保持 500ms,然后降到一档(档位1) */
|
|
||||||
void Motor_StartupBoost(void) {
|
void Motor_StartupBoost(void) {
|
||||||
set_both_motors_percent(90);
|
set_both_motors_percent(80); /* 启动提升到 80% */
|
||||||
osDelay(1500);
|
osDelay(1500);
|
||||||
current_gear = 1; /* 启动后回到档位1(最低速) */
|
current_gear = 1; /* 启动后回到档位1(最低速) */
|
||||||
set_both_motors_percent(gears_percent[current_gear - 1]);
|
set_both_motors_percent(gears_percent[current_gear - 1]);
|
||||||
@@ -60,7 +61,8 @@ void Motor_SetGear(uint8_t gear) {
|
|||||||
if (gear > 3) gear = 3;
|
if (gear > 3) gear = 3;
|
||||||
current_gear = gear;
|
current_gear = gear;
|
||||||
if (current_gear == 0) {
|
if (current_gear == 0) {
|
||||||
set_both_motors_percent(0);
|
// set_both_motors_percent(0);
|
||||||
|
Motor_Stop();
|
||||||
} else {
|
} else {
|
||||||
set_both_motors_percent(gears_percent[current_gear - 1]);
|
set_both_motors_percent(gears_percent[current_gear - 1]);
|
||||||
}
|
}
|
||||||
@@ -71,7 +73,8 @@ void Motor_NextGear(void) {
|
|||||||
current_gear++;
|
current_gear++;
|
||||||
if (current_gear > 3) current_gear = 0;
|
if (current_gear > 3) current_gear = 0;
|
||||||
if (current_gear == 0) {
|
if (current_gear == 0) {
|
||||||
set_both_motors_percent(0);
|
// set_both_motors_percent(0);
|
||||||
|
Motor_Stop();
|
||||||
} else {
|
} else {
|
||||||
set_both_motors_percent(gears_percent[current_gear - 1]);
|
set_both_motors_percent(gears_percent[current_gear - 1]);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user