#ifndef __MODE_PWMP_H__ #define __MODE_PWMP_H__ #include "main.h" #include "filter.h" //#include "entity.h" #define MODE_DEFAULT_AUTOLOAD 99 // 预分频系数 //-------------------- typedef enum { PWMP_PROCESS_CONTROL, PWMP_PROCESS_ADJUST, PWMP_PROCESS_TEST, PWMP_PROCESS_STOP, } mode_pwmp_process_state_e; // 处理状态 /*需要存储的变量*/ typedef struct { uint16_t bleeding; // 放气值 uint16_t inflation; // 充气值 uint16_t arr_diff; // 控制区间 uint16_t ad_diff; // 磁条区间 uint16_t pwmp_min; // 控制最小值 uint16_t pwmp_max; // 控制最大值 uint16_t trip_0; // 磁条0位置AD uint16_t trip_100; // 词条100位置AD uint16_t trip_min0; // 小回路行程0位置AD uint16_t trip_min100; // 小回路行程100位置AD uint16_t prov_flag; // 磁条安装的正反:倒装:0 正装:1 uint16_t valve_type; // 阀门正反行程:气开:ATO 气关:ATC float32 kp; float32 ki; float32 kd; uint8_t tuned_flag; // 是否整定过 1:整定过 0:未整定过 }mode_pwmp_storage_data_t; typedef struct { __IO uint32_t enter_count; // 用于100ms蓝牙输出计时器 float32 ctrl_target; // 目标值 float32 ctrl_feedback; // 反馈值 float32 real_error; // 实际误差 } mode_pwmp_master_data_t; /*滤波处理*/ typedef struct { lpf_t actual_lpf; lpf_t target_lpf; } mode_pwm_filter_t; typedef union { uint8_t data[128]; // 自定义数据结构 mode_pwmp_storage_data_t storage; } mode_pwmp_params_u; typedef struct { uint8_t auto_tune_state; // 自整定状态 0:未整定 1:整定中 2:整定完成 3:整定失败 uint16_t wait_count_max; // 等待次数最大值 uint16_t arr_default; // 默认值array,推动值 uint8_t process_state; // 处理状态 uint8_t adjust_state; // 整定状态 uint16_t output; // 输出值 uint16_t current_adc; // 当前位置反馈的AD值 uint32_t count; // 计数 mode_pwmp_master_data_t master; mode_pwm_filter_t filter; mode_pwmp_params_u *pwmp_save; void (*params_save_cb)(void); } mode_pwmp_t; void mode_pwmp_init(mode_pwmp_params_u *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); extern float32 get_pwmp_control_kp(void); extern float32 get_pwmp_control_ki(void); extern float32 get_pwmp_control_kd(void); extern mode_pwmp_t* mode_pwmp; #endif // __MODE_PWMP_H__ /* 控制范围 * 实验室大阀(气关): static int16_t mode_pwmp->pwmp_save->storage.pwmp_min = 613; static int16_t mode_pwmp->pwmp_save->storage.pwmp_max = 900; 实验台中型阀(气开): static int16_t mode_pwmp->pwmp_save->storage.pwmp_min = 1100; static int16_t mode_pwmp->pwmp_save->storage.pwmp_max = 2000; */ /*位置传感器区间 实验室大阀(60mm,气关): uDevice.TravelVol100 = 1547; uDevice.TravelVol0 = 2520; 流量实验室中型阀(40mm,气开): uDevice.TravelVol100 = 1583; uDevice.TravelVol0 = 2506; */