172 lines
4.0 KiB
C
172 lines
4.0 KiB
C
|
||
#ifndef __MODE_PWMP_H__
|
||
#define __MODE_PWMP_H__
|
||
|
||
#include "filter.h"
|
||
#include "mode_def.h"
|
||
#include "pid_zh1.h"
|
||
#include "mode_pwmp_adjust.h"
|
||
|
||
#define SYS_TICK 10
|
||
#define TASK_DUTY 25
|
||
#define TRAVEL_VELOCITY_MIN 0.05f
|
||
|
||
typedef enum
|
||
{
|
||
MODEL_L_12_1,
|
||
MODEL_L_23_1,
|
||
MODEL_L_34_1,
|
||
MODEL_L_45_1,
|
||
} model_type_e;
|
||
|
||
typedef enum
|
||
{
|
||
PWMP_ADJUST_IDEL,
|
||
PWMP_ADJUST_VALVE, // 整定阀门 位置0 位置100 上行时间、速度、加速度 下行时间、速度、加速度
|
||
PWMP_ADJUST_IP, // 整定ip
|
||
PWMP_ADJUST_PID, // PID
|
||
PWMP_ADJUST_CALCULATE, // 换算
|
||
PWMP_ADJUST_SAVE, // 存储变量
|
||
PWMP_ADJUST_STOP, // 停止
|
||
PWMP_ADJUST_FAIL, // 整定失败
|
||
|
||
} mode_pwmp_adjust_state_e; // 整定状态
|
||
|
||
#define PWMP_ADJUST_STEP LCD_ADJUST_STOP // 整定步骤
|
||
|
||
typedef enum
|
||
{
|
||
PWMP_PROCESS_CONTROL,
|
||
PWMP_PROCESS_CONTROL_STOP,
|
||
PWMP_PROCESS_ADJUST,
|
||
PWMP_PROCESS_ADJUST_STOP,
|
||
PWMP_PROCESS_TEST,
|
||
} mode_pwmp_process_state_e; // 处理状态
|
||
|
||
typedef struct
|
||
{
|
||
lpf_window_t target_lpf_window;
|
||
lpf_window_t actual_lpf_window;
|
||
|
||
lpf_t target_lpf;
|
||
lpf_t actual_lpf;
|
||
|
||
kalman_t target_kalman;
|
||
kalman_t actual_kalman;
|
||
} mode_pwmp_filter_t;
|
||
|
||
// 蓝牙控制参数类型
|
||
typedef struct
|
||
{
|
||
uint32_t t;
|
||
} ble_ctrl_t;
|
||
|
||
// 速度整定控制参数类型
|
||
typedef struct
|
||
{
|
||
float s;
|
||
float t;
|
||
float v1;
|
||
float v2;
|
||
float a;
|
||
} velocity_ctrl_t;
|
||
|
||
// 阀门整定控制参数类型
|
||
typedef struct
|
||
{
|
||
uint8_t step;
|
||
uint32_t t;
|
||
uint32_t count;
|
||
} valve_tune_t;
|
||
|
||
typedef enum
|
||
{
|
||
IP_POSITIVE_ACTION,
|
||
IP_NEGATIVE_NATION,
|
||
} IP_ACTION_TYPE_t;
|
||
|
||
// ip整定控制参数类型
|
||
typedef struct
|
||
{
|
||
uint8_t step;
|
||
uint16_t out, out_min, out_max, out_step;
|
||
uint32_t t;
|
||
} ip_tune_t;
|
||
|
||
// pid整定控制参数类型
|
||
typedef struct
|
||
{
|
||
uint8_t step, pre_step;
|
||
uint32_t t;
|
||
} pid_tune_t;
|
||
|
||
// 所有整定控制参数类型
|
||
typedef struct
|
||
{
|
||
uint8_t step;
|
||
TUNE_ID_t tune_id;
|
||
velocity_ctrl_t velocity;
|
||
valve_tune_t valve;
|
||
ip_tune_t ip;
|
||
pid_tune_t pid;
|
||
} tune_ctrl_t;
|
||
|
||
// 过程控制参数类型
|
||
typedef struct
|
||
{
|
||
uint32_t t;
|
||
float32 output;
|
||
velocity_ctrl_t velocity;
|
||
ble_ctrl_t ble;
|
||
} process_ctrl_t;
|
||
|
||
typedef struct
|
||
{
|
||
float Kc, Tc;
|
||
float kp, ki, kd;
|
||
} pid_storage_t;
|
||
|
||
// 整定结果保存参数类型
|
||
typedef struct
|
||
{
|
||
uint8_t tuned_flag;
|
||
uint8_t process_change_flag; // 磁条接收的反馈电压由大变小 0 由小变大 1
|
||
uint8_t magnetic_dir;
|
||
uint16_t ad_0;
|
||
uint16_t ad_100;
|
||
model_type_e model_type;
|
||
float v_l2h, v_h2l;
|
||
float t_l2h, t_h2l;
|
||
float s;
|
||
float ip_ctrl_min;
|
||
float ip_ctrl_max;
|
||
pid_storage_t inner; // 内环整定参数
|
||
pid_storage_t outer; // 外环整定参数
|
||
} pwmp_storage_pars_t;
|
||
|
||
// pwmp 对象类型
|
||
typedef struct
|
||
{
|
||
uint8_t lcd_adjust_step; ///< LCD自整定流程状态
|
||
uint8_t auto_tune_state; ///< 自整定状态 0:未整定 1:整定中 2:整定完成 3:整定失败
|
||
uint16_t current_adc; ///< 当前位置反馈的AD值
|
||
uint8_t process_state; ///< 处理状态
|
||
uint8_t adjust_state; ///< 整定状态
|
||
pwmp_storage_pars_t *data; ///< 存储参数
|
||
void (*params_save_cb)(void); ///< 参数保存回调函数
|
||
mode_pwmp_filter_t filter; ///< 滤波
|
||
process_ctrl_t process_ctrl; ///< 过程控制对象
|
||
} mode_pwmp_t;
|
||
|
||
void mode_pwmp_init(mode_interface_req_t *req, uint16_t positioner_model, pwmp_storage_pars_t *params, void (*params_save_cb)(void));
|
||
void mode_pwmp_dinit(void);
|
||
void mode_pwmp_process(void);
|
||
void pwmp_process_state_set(mode_pwmp_process_state_e state);
|
||
uint8_t pwmp_process_adjust_state_get(void); ///< 获取整定过程
|
||
uint8_t pwmp_process_adjust_result_get(void); ///< 获取整定结果
|
||
BOOL pwmp_process_idle(void); // 是否空闲(在进入PID控制区域不要绘图)
|
||
BOOL pwmp_process_is_adjust(void); ///< 是否正在整定
|
||
BOOL pwmp_algorithm_calibrated_status(void);
|
||
|
||
#endif
|