#ifndef __MODE_PWMP_HD_H__ #define __MODE_PWMP_HD_H__ #include "main.h" #include "filter.h" /*********************************** 宏定义 ***********************************/ #define FSM_WAIT(st) BIT_SET(st, BIT7) #define FSM_IS_WAIT(st) (st & BIT7) #define EXECUTE_PLAN EXECUTE_PLAN_1 // 执行方案 #define CON_MAX 4095 // 驱动最大值 #define CON_MIN 0 // 驱动最小值 /************************************ 枚举 ************************************/ // 模式任务 typedef enum { MINOR_PROCESS_CONTROL, // 控制 MINOR_PROCESS_ADJUST, // 整定 MINOR_PROCESS_TEST, // 测试 MINOR_PROCESS_STOP, // 停止 } mode_minor_process_state_e; // 算法方案 typedef enum { EXECUTE_PLAN_1, EXECUTE_PLAN_2, EXECUTE_PLAN_3, EXECUTE_PLAN_4, } execute_plan_minor_e; // 执行标志 typedef enum { EXECUTE_NONE = 0, // 不执行输出 EXECUTE_OUT = 1, // 执行输出 } execute_e; // 整定状态 typedef enum { ADJUST_DISABLE, // 整定禁用 ADJUST_ONGING, // 整定进行中 ADJUST_OK, // 整定成功 } minor_adjust_state_e; // 整定步骤 typedef enum { MINOR_ADJUST_IDEL, MINOR_ADJUST_OVER, } minor_adjust_step_e; /*********************************** 结构体 ***********************************/ // 滤波器 typedef struct { lpf_window_t *handle; uint16_t value; } minor_filter_t; // 执行器 typedef struct { execute_e code; // 执行标志 uint16_t dac; // 输出值 } execute_rsp_t; // 存储数据 typedef struct { } mode_pwmp_hd_storage_data_t; typedef union { uint8_t data[128]; mode_pwmp_hd_storage_data_t storage; } mode_pwmp_hd_params_u; // 测试任务 typedef struct { uint16_t output; uint16_t travel_adc; uint16_t minor_adc; float32 drive_current; } minor_test_t; // 整定任务 typedef struct { BOOL enable; // 整定使能 minor_adjust_step_e step; // 当前整定步骤 minor_adjust_step_e next_step; // 下个整定步骤 minor_adjust_step_e execute_step; // 执行整定步骤 } minor_adjust_t; // 控制任务 typedef struct { __IO uint32_t enter_count; // 用于100ms蓝牙输出计时器 float32 ctrl_target; // 目标值 float32 ctrl_feedback; // 反馈值 float32 real_error; // 实际误差 uint16_t current_adc; // 当前ADC值 } minor_control_t; // 小回路模式句柄 typedef struct { uint8_t process_state; // 当前任务 uint8_t adjust_state; // 整定状态 minor_filter_t target_lpf; // 目标滤波器 minor_filter_t actual_lpf; // 实际滤波器 execute_rsp_t execute; // 执行器 minor_test_t test; // 测试任务 minor_adjust_t adjust; // 整定任务 minor_control_t control; // 控制任务 mode_pwmp_hd_params_u *save; // 存储数据 void (*params_save_cb)(void); // 存储函数 } mode_minor_t; /*********************************** 外部声明 ***********************************/ extern mode_minor_t *mode_minor; void mode_minor_init(uint16_t positioner_model, mode_pwmp_hd_params_u *params, void (*params_save_cb)(void)); void mode_minor_dinit(void); void mode_minor_process(void); void minor_process_state_set(mode_minor_process_state_e state); #endif // __MODE_PWMP_HD_H__