|
@@ -1311,14 +1311,19 @@ void Calculate_PluseNum(PLSR_RouteConfig_t *route) |
|
|
if (calculated_total > total_pulses) |
|
|
if (calculated_total > total_pulses) |
|
|
{ |
|
|
{ |
|
|
// 脉冲数超出限制,按比例缩减 |
|
|
// 脉冲数超出限制,按比例缩减 |
|
|
if (part1_pulse_num > 0 && part3_pulse_num > 0) { |
|
|
|
|
|
|
|
|
if (part1_pulse_num > 0 && part3_pulse_num > 0) |
|
|
|
|
|
{ |
|
|
// 两个阶段都有脉冲,按比例分配 |
|
|
// 两个阶段都有脉冲,按比例分配 |
|
|
part1_pulse_num = (part1_pulse_num * total_pulses) / calculated_total; |
|
|
part1_pulse_num = (part1_pulse_num * total_pulses) / calculated_total; |
|
|
part3_pulse_num = total_pulses - part1_pulse_num; |
|
|
part3_pulse_num = total_pulses - part1_pulse_num; |
|
|
} else if (part1_pulse_num > 0) { |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
else if (part1_pulse_num > 0) |
|
|
|
|
|
{ |
|
|
// 只有第一阶段有脉冲 |
|
|
// 只有第一阶段有脉冲 |
|
|
part1_pulse_num = total_pulses; |
|
|
part1_pulse_num = total_pulses; |
|
|
} else if (part3_pulse_num > 0) { |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
else if (part3_pulse_num > 0) |
|
|
|
|
|
{ |
|
|
// 只有第三阶段有脉冲 |
|
|
// 只有第三阶段有脉冲 |
|
|
part3_pulse_num = total_pulses; |
|
|
part3_pulse_num = total_pulses; |
|
|
} |
|
|
} |
|
@@ -1331,27 +1336,10 @@ void Calculate_PluseNum(PLSR_RouteConfig_t *route) |
|
|
// 将剩余脉冲分配给第二阶段(匀速阶段) |
|
|
// 将剩余脉冲分配给第二阶段(匀速阶段) |
|
|
// 这样既不影响加减速的数学精确性,又能充分利用所有脉冲 |
|
|
// 这样既不影响加减速的数学精确性,又能充分利用所有脉冲 |
|
|
part2_pulse_num = remaining_pulses; |
|
|
part2_pulse_num = remaining_pulses; |
|
|
|
|
|
|
|
|
// 计算匀速阶段的时间 |
|
|
|
|
|
if (vt > 0 && part2_pulse_num > 0) { |
|
|
|
|
|
part2_time = (part2_pulse_num * 1000) / vt; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 更新第二阶段状态为匀速 |
|
|
// 更新第二阶段状态为匀速 |
|
|
part2_state = PLSR_STATE_CONST; |
|
|
part2_state = PLSR_STATE_CONST; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 最终验证:确保总数完全匹配 |
|
|
|
|
|
int32_t final_total = part1_pulse_num + part3_pulse_num; |
|
|
|
|
|
if (final_total != total_pulses) { |
|
|
|
|
|
// 如果还有差异,调整第一阶段 |
|
|
|
|
|
int32_t adjustment = total_pulses - final_total; |
|
|
|
|
|
part1_pulse_num += adjustment; |
|
|
|
|
|
if (part1_pulse_num < 0) { |
|
|
|
|
|
part3_pulse_num += part1_pulse_num; // 将负数转移给第三阶段 |
|
|
|
|
|
part1_pulse_num = 0; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
@@ -1691,6 +1679,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) |
|
|
PLSR_PWM_Stop(); |
|
|
PLSR_PWM_Stop(); |
|
|
AllPluse += current_tim2_count; // 累加当前段已发送的脉冲数 |
|
|
AllPluse += current_tim2_count; // 累加当前段已发送的脉冲数 |
|
|
PLSR_Section_StartNewSection(&g_plsr_route); ///<重新启动当前段 |
|
|
PLSR_Section_StartNewSection(&g_plsr_route); ///<重新启动当前段 |
|
|
|
|
|
PLSR_PWM_Start(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 处理加减速过程中的频率更新(使用新的直线加减速算法) |
|
|
// 处理加减速过程中的频率更新(使用新的直线加减速算法) |
|
|