This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/application/mode/mode.h

80 lines
2.6 KiB
C

/**
* @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_CONSTANT_CONTROL_ALGORITHM, ///< 恒定控制算法 gaopengjie
MODE_SPEED_CONTROL_ALGORITHM, ///< 速度控制算法 zhangxiaoming
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;
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;
typedef struct
{
BOOL state; // TRUE:算法控制器可以运行 FALSE:算法控制器不可以运行
uint8_t *mode; // 模式
} mode_ctrl_t;
typedef struct
{
mode_interface_req_t interface_req; ///< 模式接口请求
// 内部变量
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; ///< 环路电流卡尔曼滤波器
lpf_t pressure_cross_point_lpf; ///< 压力交叉点滤波器
lpf_window_t show_target_window; ///< 显示目标滤波
lpf_window_t pressure_s_window; ///< 压力S滤波
lpf_window_t pressure_a_window; ///< 压力A滤波
lpf_window_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 void mode_ctrl_process(void); ///< 算法控制模块
extern void mode_ctrl_gather(void); ///< 算法控制模块数据采集
extern void mode_ctrl_output(void); ///< 控制输出模式函数
extern void mode_pressure_statistics(void); ///< 压力统计
#endif