/** * @file mode.h * @author xxx * @date 2023-09-18 10:37:29 * @brief * @copyright Copyright (c) 2023 by xxx, All Rights Reserved. */ #ifndef __MODE_H__ #define __MODE_H__ #include "lib.h" #include "filter.h" #include "mode_def.h" #include "mode_dac.h" #include "mode_pwmp.h" #include "mode_pwmp_hd.h" #include "mode_control.h" typedef enum { MODE_VARIABLE_FREQUENCY_CONTROL_ALGORITHM, ///< 变频控制算法 xushenghao MODE_SPEED_CONTROL_ALGORITHM, ///< 速度控制算法 zhangxiaoming MODE_CONSTANT_CONTROL_ALGORITHM, ///< 恒定控制算法 gaopengjie MODE_FREQUENCY_DOMAIN_CONTROL_ALGORITHM, ///< 频域控制算法 hangdian } mode_algorithm_e; /// 测试项目 typedef enum { TEST_ITEM_NONE, // 无测试项目 TEST_ITEM_DIAGNOSIS, // 性能诊断 TEST_ITEM_MANUAL, // 手动按键测试 TEST_ITEM_MAX, } test_item_e; #pragma pack(1) typedef union { mode_dac_storage_data_t dac; pwmp_storage_pars_t pwmp; mode_pwmp_hd_storage_data_t pwmp_hd; mode_control_storage_t control; } mode_params_u; #pragma pack() typedef struct { BOOL state; // TRUE:算法控制器可以运行 FALSE:算法控制器不可以运行 uint8_t *mode; // 模式 } mode_ctrl_t; typedef struct { mode_interface_req_t interface_req; ///< 模式接口请求 // 是否稳定 BOOL is_stable; ///< 是否稳定 // 内部变量 test_item_e test_item; ///< 测试项目 mode_adjust_initiate_e adjust_initiate; ///< 自整定发起方式,用于上位机整定流程 uint16_t positioner_model; ///< 定位器型号 __IO mode_ctrl_t ctrl; ///< 控制器 kalman_t loop_current_km; ///< 环路电流卡尔曼滤波器 kalman_t target_travel_km; ///< 目标行程滤波器 lpf_t pressure_cross_point_lpf; ///< 压力交叉点滤波器 lpf_window_t show_target_window; ///< 显示目标滤波 lpf_t pressure_s_window; ///< 压力S滤波 lpf_t pressure_a_window; ///< 压力A滤波 lpf_t pressure_b_window; ///< 压力B滤波 } mode_t; extern void mode_init(void); ///< 工作模式初始化 extern void mode_enter_test(test_item_e item); ///< 模式测试 extern mode_t *mode_get(void); ///< 获取工作模式 extern void mode_master_detection(void); ///< 工作模式处理 extern void mode_travel_statistics(void); ///< 行程统计 extern BOOL mode_ctrl_process_allow_run(void); ///< 算法控制模块是否允许运行 extern void mode_ctrl_process(void); ///< 算法控制模块 extern void mode_ctrl_gather(void); ///< 算法控制模块数据采集 extern void mode_ctrl_output(void); ///< 控制输出模式函数 extern void mode_pressure_statistics(void); ///< 压力统计 #endif