|
|
@@ -1703,41 +1703,6 @@ void PLSR_Route_Start(PLSR_RouteConfig_t* route) |
|
|
|
// 启动第一段 |
|
|
|
PLSR_Section_StartNewSection(route); |
|
|
|
|
|
|
|
// 计算第一段需要发送的脉冲数 |
|
|
|
PLSR_SectionConfig_t* first_section = &route->section[route->current_section_num - 1]; |
|
|
|
uint32_t first_pulse_target; |
|
|
|
if (route->mode == PLSR_MODE_RELATIVE) |
|
|
|
{ |
|
|
|
// 相对模式:每段发送指定的脉冲数 |
|
|
|
first_pulse_target = first_section->target_pulse; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
// 绝对模式:发送到绝对位置所需的脉冲数 |
|
|
|
// 第一段从0位置开始,所以脉冲数就是目标位置 |
|
|
|
first_pulse_target = first_section->target_pulse; |
|
|
|
} |
|
|
|
|
|
|
|
// 确保脉冲数有效 |
|
|
|
if (first_pulse_target > 0 && first_pulse_target <= 0xFFFF) |
|
|
|
{ |
|
|
|
__HAL_TIM_SetAutoreload(&htim2, first_pulse_target); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
// 脉冲数无效,设置为1避免除零错误 |
|
|
|
__HAL_TIM_SetAutoreload(&htim2, 1); |
|
|
|
} |
|
|
|
|
|
|
|
// 重置TIM2计数器 |
|
|
|
__HAL_TIM_SET_COUNTER(&htim2, 0); |
|
|
|
|
|
|
|
if(route->start_freq > 0) |
|
|
|
{ |
|
|
|
PLSR_PWM_SetFrequency(route->start_freq); // 设置初始PWM频率 |
|
|
|
PLSR_PWM_Start(); // 立即启动PWM输出 |
|
|
|
} |
|
|
|
|
|
|
|
// 启动定时器 |
|
|
|
PLSR_TIM6_Start(); // 启动TIM6用于频率更新和等待时间计时 |
|
|
|
HAL_TIM_Base_Start_IT(&htim2); // 启动TIM2中断用于段切换 |
|
|
@@ -1843,6 +1808,8 @@ void PLSR_Section_StartNewSection(PLSR_RouteConfig_t* route) |
|
|
|
// 设置本段的目标频率到路径控制结构体中 |
|
|
|
route->target_freq = current_section->target_freq; |
|
|
|
|
|
|
|
if(current_section->section_num != route->section_num) |
|
|
|
{ |
|
|
|
// 根据等待条件决定运行状态和TIM2设置 |
|
|
|
if(current_section->wait_condition.wait_type == PLSR_WAIT_PLUSEEND) |
|
|
|
{ |
|
|
@@ -1888,6 +1855,25 @@ void PLSR_Section_StartNewSection(PLSR_RouteConfig_t* route) |
|
|
|
__HAL_TIM_SetAutoreload(&htim2, route->decel_pulse_count); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
if(route->run_state == PLSR_STATE_ACCEL) |
|
|
|
{ |
|
|
|
// 如果是加速状态,设置TIM2自动重装值为加速脉冲数 |
|
|
|
__HAL_TIM_SetAutoreload(&htim2, route->accel_pulse_count); |
|
|
|
} |
|
|
|
else if(route->run_state == PLSR_STATE_CONST) |
|
|
|
{ |
|
|
|
// 如果是匀速状态,设置TIM2自动重装值为匀速脉冲数 |
|
|
|
__HAL_TIM_SetAutoreload(&htim2, route->const_pulse_count); |
|
|
|
} |
|
|
|
else if(route->run_state == PLSR_STATE_DECEL) |
|
|
|
{ |
|
|
|
// 如果是减速状态,设置TIM2自动重装值为减速脉冲数 |
|
|
|
__HAL_TIM_SetAutoreload(&htim2, route->decel_pulse_count); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 重置TIM2计数器 |
|
|
|
__HAL_TIM_SET_COUNTER(&htim2, 0); |
|
|
|