| @@ -144,7 +144,7 @@ typedef struct { | |||||
| PLSR_WaitCondition_t wait_condition; // 等待条件 | PLSR_WaitCondition_t wait_condition; // 等待条件 | ||||
| } PLSR_SectionConfig_t; | } PLSR_SectionConfig_t; | ||||
| // PLSR路径控制结构体 | |||||
| // PLSR路径控制结构体 - 添加三部分状态管理 | |||||
| typedef struct { | typedef struct { | ||||
| PLSR_RouteState_t route_state; // 路径状态 | PLSR_RouteState_t route_state; // 路径状态 | ||||
| uint8_t current_section_num; // 当前段号 | uint8_t current_section_num; // 当前段号 | ||||
| @@ -161,10 +161,26 @@ typedef struct { | |||||
| PLSR_AccelConfig_t accel_config; // 加减速配置 | PLSR_AccelConfig_t accel_config; // 加减速配置 | ||||
| // 运行状态参数 | // 运行状态参数 | ||||
| PLSR_RunState_t run_state; // 运行状态 | |||||
| uint32_t accel_pulse_count; // 加速脉冲数 | |||||
| uint32_t decel_pulse_count; // 减速脉冲数 | |||||
| uint32_t const_pulse_count; // 匀速脉冲计数 | |||||
| PLSR_RunState_t run_state; // 当前运行状态 | |||||
| // 三部分脉冲计数(重新定义用途) | |||||
| uint32_t accel_pulse_count; // 第一部分脉冲数(可能是加速、减速或匀速) | |||||
| uint32_t const_pulse_count; // 第二部分脉冲数(匀速) | |||||
| uint32_t decel_pulse_count; // 第三部分脉冲数(减速到0) | |||||
| // 新增:三部分状态标识 | |||||
| PLSR_RunState_t part1_state; // 第一部分状态(ACCEL/DECEL/CONST) | |||||
| PLSR_RunState_t part2_state; // 第二部分状态(通常是CONST) | |||||
| PLSR_RunState_t part3_state; // 第三部分状态(通常是DECEL) | |||||
| // 新增:三部分目标频率 | |||||
| uint32_t part1_target_freq; // 第一部分目标频率 | |||||
| uint32_t part2_target_freq; // 第二部分目标频率(匀速频率) | |||||
| uint32_t part3_target_freq; // 第三部分目标频率(通常是0) | |||||
| // 新增:当前执行部分 | |||||
| uint8_t current_part; // 当前执行部分:1-第一部分,2-第二部分,3-第三部分 | |||||
| uint32_t freq_step; // 频率步长 | uint32_t freq_step; // 频率步长 | ||||
| uint32_t wait_start_tick; // 等待开始时间 | uint32_t wait_start_tick; // 等待开始时间 | ||||
| uint32_t act_start_tick; // ACT开始时间 | uint32_t act_start_tick; // ACT开始时间 | ||||
| @@ -174,7 +190,7 @@ typedef struct { | |||||
| uint16_t start_section; //<起始段数 | uint16_t start_section; //<起始段数 | ||||
| uint32_t default_freq; //<脉冲默认速度 | uint32_t default_freq; //<脉冲默认速度 | ||||
| // 新增:默认加减速参数 | |||||
| // 默认加减速参数 | |||||
| uint32_t default_accel_time_ms; // 默认加速时间(ms) | uint32_t default_accel_time_ms; // 默认加速时间(ms) | ||||
| uint32_t default_decel_time_ms; // 默认减速时间(ms) | uint32_t default_decel_time_ms; // 默认减速时间(ms) | ||||
| uint32_t accel_rate; // 加速度(Hz/ms) = default_freq / default_accel_time_ms | uint32_t accel_rate; // 加速度(Hz/ms) = default_freq / default_accel_time_ms | ||||
| @@ -183,6 +199,14 @@ typedef struct { | |||||
| PLSR_SectionConfig_t section[PLSR_MAX_SECTIONS]; // 段配置数组 | PLSR_SectionConfig_t section[PLSR_MAX_SECTIONS]; // 段配置数组 | ||||
| } PLSR_RouteConfig_t; | } PLSR_RouteConfig_t; | ||||
| // 三部分执行状态枚举 | |||||
| typedef enum { | |||||
| PLSR_PART_1 = 1, // 执行第一部分 | |||||
| PLSR_PART_2 = 2, // 执行第二部分 | |||||
| PLSR_PART_3 = 3, // 执行第三部分 | |||||
| PLSR_PART_COMPLETE = 4 // 三部分全部完成 | |||||
| } PLSR_PartState_t; | |||||
| // 默认参数定义 | // 默认参数定义 | ||||
| #define PLSR_DEFAULT_STEP_FREQ_US 1000 // 默认TIM6更新频率1000微秒(1ms) | #define PLSR_DEFAULT_STEP_FREQ_US 1000 // 默认TIM6更新频率1000微秒(1ms) | ||||
| #define PLSR_DEFAULT_ACCEL_TIME_MS 100 // 默认加速时间100ms | #define PLSR_DEFAULT_ACCEL_TIME_MS 100 // 默认加速时间100ms | ||||
| @@ -212,6 +236,7 @@ uint8_t PLSR_Section_CheckWaitCondition(PLSR_RouteConfig_t* route); //<检查等 | |||||
| void PLSR_Section_StartNewSection(PLSR_RouteConfig_t* route); //<启动新段,段更新后调用 | void PLSR_Section_StartNewSection(PLSR_RouteConfig_t* route); //<启动新段,段更新后调用 | ||||
| void Calculate_PluseNum(PLSR_RouteConfig_t *route); //<计算段脉冲数,根据加减速率和目标频率计算每段的加速、匀速、减速脉冲数 | void Calculate_PluseNum(PLSR_RouteConfig_t *route); //<计算段脉冲数,根据加减速率和目标频率计算每段的加速、匀速、减速脉冲数 | ||||
| void Calculate_PluseNum_Simplified(PLSR_RouteConfig_t *route); //<简化的脉冲数计算,用于快速计算每段的脉冲数,不考虑加减速 | void Calculate_PluseNum_Simplified(PLSR_RouteConfig_t *route); //<简化的脉冲数计算,用于快速计算每段的脉冲数,不考虑加减速 | ||||
| void PLSR_SetupThreePartExecution(PLSR_RouteConfig_t* route); //<设置三部分执行状态和目标频率 | |||||
| // ==================== PLSR加减速算法函数 ==================== | // ==================== PLSR加减速算法函数 ==================== | ||||
| void PLSR_Accel_Process(PLSR_RouteConfig_t* route); //<加减速执行函数(新的直线加减速) | void PLSR_Accel_Process(PLSR_RouteConfig_t* route); //<加减速执行函数(新的直线加减速) | ||||