104 lines
3.3 KiB
C
104 lines
3.3 KiB
C
#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;
|
||
*/
|