|
|
@@ -49,7 +49,7 @@ extern TIM_HandleTypeDef htim13; |
|
|
|
extern TIM_HandleTypeDef htim14; |
|
|
|
|
|
|
|
/* 全局变量声明 */ |
|
|
|
extern uint32_t g_last_freq; // 上一次计算的频率,用于PLSR_Calculate_FreqByPosition函数 |
|
|
|
|
|
|
|
|
|
|
|
/* USER CODE BEGIN Private defines */ |
|
|
|
// PLSR系统配置参数 |
|
|
@@ -57,18 +57,11 @@ extern uint32_t g_last_freq; // 上一次计算的频率,用于PLSR_Calculate_ |
|
|
|
#define PLSR_PWM_FREQ_MIN 1 // 最小PWM频率 1Hz |
|
|
|
#define PLSR_PWM_FREQ_MAX 100000 // 最大PWM频率 100kHz |
|
|
|
|
|
|
|
// PWM输出引脚定义 (仅PF6) |
|
|
|
#define PLSR_PWM_PIN GPIO_PIN_6 // PF6 - TIM10_CH1 |
|
|
|
#define PLSR_PWM_PORT GPIOF |
|
|
|
|
|
|
|
// TIM2硬件计数器已删除 - 改用TIM10中断计数 |
|
|
|
|
|
|
|
// 等待条件类型枚举 |
|
|
|
typedef enum { |
|
|
|
PLSR_WAIT_PLUSEEND = 0, // 脉冲发送完成 |
|
|
|
PLSR_WAIT_TIME = 4, // 等待时间 |
|
|
|
PLSR_WAIT_CONDITION = 2, // 等待条件 |
|
|
|
PLSR_WAIT_ACT_TIME = 3, // ACT时间 |
|
|
|
PLSR_WAIT_EXT_EVENT = 1, // 外部事件 |
|
|
|
PLSR_WAIT_EXT_OR_END = 5 // 外部事件或结束 |
|
|
|
} PLSR_WaitType_t; |
|
|
@@ -120,87 +113,74 @@ void MX_TIM14_Init(void); |
|
|
|
|
|
|
|
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); |
|
|
|
|
|
|
|
// PLSR等待条件结构体 |
|
|
|
typedef struct { |
|
|
|
PLSR_WaitType_t wait_type; // 等待条件类型 |
|
|
|
uint32_t wait_time_ms; // 等待时间(ms) |
|
|
|
uint32_t act_time_ms; // ACT时间(ms) |
|
|
|
uint8_t condition_flag; // 等待条件标志 |
|
|
|
uint8_t ext_event_flag; // 外部事件标志 |
|
|
|
typedef struct |
|
|
|
{ |
|
|
|
PLSR_WaitType_t wait_type; ///< 等待条件类型 |
|
|
|
uint8_t ext_event_flag; ///< 外部事件标志 |
|
|
|
} PLSR_WaitCondition_t; |
|
|
|
|
|
|
|
// PLSR加减速配置结构体 |
|
|
|
typedef struct { |
|
|
|
uint32_t accel_time_ms; // 加速时间(ms) |
|
|
|
uint32_t decel_time_ms; // 减速时间(ms) |
|
|
|
PLSR_AccelAlgorithm_t accel_algorithm; // 加减速算法 |
|
|
|
PLSR_AccelAlgorithm_t accel_algorithm; ///< 加减速算法 |
|
|
|
} PLSR_AccelConfig_t; |
|
|
|
|
|
|
|
// PLSR段配置结构体 |
|
|
|
typedef struct { |
|
|
|
uint8_t section_num; // 段号(1-10) |
|
|
|
uint32_t target_freq; // 目标频率(Hz) |
|
|
|
int32_t target_pulse; // 目标脉冲数 |
|
|
|
int32_t actual_pulse; ///< 实际可发脉冲数 |
|
|
|
uint8_t next_section; // 下一段号(0表示结束) |
|
|
|
PLSR_WaitCondition_t wait_condition; // 等待条件 |
|
|
|
|
|
|
|
typedef struct |
|
|
|
{ |
|
|
|
uint32_t target_freq; ///< 目标频率(Hz) |
|
|
|
int32_t target_pulse; ///< 目标脉冲数 |
|
|
|
int32_t actual_pulse; ///< 实际可发脉冲数 |
|
|
|
PLSR_WaitCondition_t wait_condition; ///< 等待条件 |
|
|
|
uint8_t section_num; ///< 段号(1-10) |
|
|
|
uint8_t next_section; ///< 下一段号(0表示结束) |
|
|
|
} PLSR_SectionConfig_t; |
|
|
|
|
|
|
|
// PLSR路径控制结构体 - 添加三部分状态管理 |
|
|
|
typedef struct { |
|
|
|
PLSR_RouteState_t route_state; // 路径状态 |
|
|
|
uint8_t current_section_num; // 当前段号 |
|
|
|
uint32_t current_freq; // 当前频率 |
|
|
|
uint32_t target_freq; // 目标频率 |
|
|
|
uint32_t initial_freq; // 加减速初始频率,专门用于存储加减速开始时的频率 |
|
|
|
int32_t pulse_count; // 当前脉冲计数 |
|
|
|
int32_t prevPulseCount; // 上阶段目标脉冲 |
|
|
|
uint32_t start_freq; // 起始频率 |
|
|
|
uint32_t end_freq; // 结束频率 |
|
|
|
uint8_t output_port; // 输出端口选择 |
|
|
|
uint8_t ext_port; // 外部事件端口选择 |
|
|
|
uint8_t dir_port; ///< 方向端口选择: |
|
|
|
uint16_t dir_delay; //<方向延时时间 |
|
|
|
uint16_t dir_logic; //<脉冲方向逻辑,0-正逻辑(脉冲递增),1-负逻辑(脉冲递减) |
|
|
|
PLSR_Mode_t mode; // 模式(相对/绝对) |
|
|
|
PLSR_Direction_t direction; // 方向 |
|
|
|
PLSR_AccelConfig_t accel_config; // 加减速配置 |
|
|
|
|
|
|
|
// 运行状态参数 |
|
|
|
PLSR_RunState_t run_state; // 当前运行状态 |
|
|
|
|
|
|
|
// 三部分脉冲计数(重新定义用途) |
|
|
|
int32_t accel_pulse_count; // 第一部分脉冲数(可能是加速、减速或匀速) |
|
|
|
int32_t const_pulse_count; // 第二部分脉冲数(匀速) |
|
|
|
int32_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) |
|
|
|
typedef struct |
|
|
|
{ |
|
|
|
uint32_t current_freq; ///< 当前频率 |
|
|
|
uint32_t target_freq; ///< 目标频率 |
|
|
|
uint32_t initial_freq; ///< 加减速初始频率,专门用于存储加减速开始时的频率 |
|
|
|
uint32_t start_freq; ///< 起始频率 |
|
|
|
uint32_t end_freq; ///< 结束频率 |
|
|
|
uint32_t part1_target_freq; ///< 第一部分目标频率 |
|
|
|
uint32_t part2_target_freq; ///< 第二部分目标频率(匀速频率) |
|
|
|
uint32_t part3_target_freq; ///< 第三部分目标频率(通常是0) |
|
|
|
uint32_t freq_step; ///< 频率步长 |
|
|
|
uint32_t default_freq; ///< 脉冲默认速度 |
|
|
|
|
|
|
|
int32_t pulse_count; ///< 当前脉冲计数 |
|
|
|
int32_t prevPulseCount; ///< 上阶段目标脉冲 |
|
|
|
int32_t accel_pulse_count; ///< 第一部分脉冲数(可能是加速、减速或匀速) |
|
|
|
int32_t const_pulse_count; ///< 第二部分脉冲数(匀速) |
|
|
|
int32_t decel_pulse_count; ///< 第三部分脉冲数(减速到0) |
|
|
|
|
|
|
|
// 新增:三部分目标频率 |
|
|
|
uint32_t part1_target_freq; // 第一部分目标频率 |
|
|
|
uint32_t part2_target_freq; // 第二部分目标频率(匀速频率) |
|
|
|
uint32_t part3_target_freq; // 第三部分目标频率(通常是0) |
|
|
|
uint32_t wait_start_tick; ///< 等待开始时间 |
|
|
|
uint32_t act_start_tick; ///< ACT开始时间 |
|
|
|
uint32_t default_accel_time_ms; ///< 默认加速时间(ms) |
|
|
|
uint32_t default_decel_time_ms; ///< 默认减速时间(ms) |
|
|
|
uint32_t accel_rate; ///< 加速度(Hz/ms) = default_freq / default_accel_time_ms |
|
|
|
uint32_t decel_rate; ///< 减速度(Hz/ms) = default_freq / default_decel_time_ms |
|
|
|
|
|
|
|
// 新增:当前执行部分 |
|
|
|
uint8_t current_part; // 当前执行部分:1-第一部分,2-第二部分,3-第三部分 |
|
|
|
PLSR_AccelConfig_t accel_config; ///< 加减速配置 |
|
|
|
PLSR_SectionConfig_t section[PLSR_MAX_SECTIONS]; ///< 段配置数组 |
|
|
|
|
|
|
|
uint32_t freq_step; // 频率步长 |
|
|
|
uint32_t wait_start_tick; // 等待开始时间 |
|
|
|
uint32_t act_start_tick; // ACT开始时间 |
|
|
|
uint16_t section_num; //<脉冲总段数 |
|
|
|
uint16_t start_section; //<起始段数 |
|
|
|
uint32_t default_freq; //<脉冲默认速度 |
|
|
|
uint16_t dir_delay; ///< 方向延时时间 |
|
|
|
uint16_t dir_logic; ///< 脉冲方向逻辑,0-正逻辑(脉冲递增),1-负逻辑(脉冲递减) |
|
|
|
uint16_t section_num; ///< 脉冲总段数 |
|
|
|
uint16_t start_section; ///< 起始段数 |
|
|
|
|
|
|
|
// 默认加减速参数 |
|
|
|
uint32_t default_accel_time_ms; // 默认加速时间(ms) |
|
|
|
uint32_t default_decel_time_ms; // 默认减速时间(ms) |
|
|
|
uint32_t accel_rate; // 加速度(Hz/ms) = default_freq / default_accel_time_ms |
|
|
|
uint32_t decel_rate; // 减速度(Hz/ms) = default_freq / default_decel_time_ms |
|
|
|
PLSR_RouteState_t route_state; ///< 路径状态 |
|
|
|
PLSR_RunState_t run_state; ///< 当前运行状态 |
|
|
|
PLSR_RunState_t part1_state; ///< 第一部分状态(ACCEL/DECEL/CONST) |
|
|
|
PLSR_RunState_t part2_state; ///< 第二部分状态(通常是CONST) |
|
|
|
PLSR_RunState_t part3_state; ///< 第三部分状态(通常是DECEL) |
|
|
|
PLSR_Mode_t mode; ///< 模式(相对/绝对) |
|
|
|
PLSR_Direction_t direction; ///< 方向 |
|
|
|
|
|
|
|
PLSR_SectionConfig_t section[PLSR_MAX_SECTIONS]; // 段配置数组 |
|
|
|
uint8_t current_section_num; ///< 当前段号 |
|
|
|
uint8_t output_port; ///< 输出端口选择 |
|
|
|
uint8_t ext_port; ///< 外部事件端口选择 |
|
|
|
uint8_t dir_port; ///< 方向端口选择 |
|
|
|
uint8_t current_part; ///< 当前执行部分:1-第一部分,2-第二部分,3-第三部分 |
|
|
|
} PLSR_RouteConfig_t; |
|
|
|
|
|
|
|
// 三部分执行状态枚举 |
|
|
@@ -212,11 +192,7 @@ typedef enum { |
|
|
|
} PLSR_PartState_t; |
|
|
|
|
|
|
|
// 默认参数定义 |
|
|
|
#define PLSR_DEFAULT_STEP_FREQ_US 1000 // 默认TIM6更新频率1000微秒(1ms) |
|
|
|
#define PLSR_DEFAULT_ACCEL_TIME_MS 100 // 默认加速时间100ms |
|
|
|
#define PLSR_DEFAULT_DECEL_TIME_MS 100 // 默认减速时间100ms |
|
|
|
#define PLSR_DEFAULT_ACT_TIME_MS 200 // 默认ACT时间200ms |
|
|
|
#define PLSR_DEFAULT_WAIT_TIME_MS 200 // 默认等待时间200ms |
|
|
|
#define PLSR_DEFAULT_STEP_FREQ_US 100 // 默认TIM6更新频率1000微秒(1ms) |
|
|
|
#define SCALE_FACTOR 2000ULL |
|
|
|
|
|
|
|
void Calculate_PluseNum(PLSR_RouteConfig_t *route); //<计算段脉冲数,根据加减速率和目标频率计算每段的加速、匀速、减速脉冲数 |
|
|
|