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/inc/mode_pwmp.h

104 lines
3.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
*/