108 lines
1.9 KiB
C
108 lines
1.9 KiB
C
#ifndef _PROVALCTRL_H_
|
|
#define _PROVALCTRL_H_
|
|
|
|
extern float ao_dwq; //AO输出电流值(定位器)
|
|
extern float ao_blf1; //AO输出电流值(比例阀)
|
|
extern float ao_blf2; //AO输出电流值(比例阀)
|
|
|
|
typedef enum
|
|
{
|
|
PROV_RUNNING = 0,
|
|
PROV_ADJUSTING = 1,
|
|
PROV_HOLDING = 2
|
|
}prov_status;
|
|
|
|
typedef enum
|
|
{
|
|
ADJ_START = 0,
|
|
ADJ_MOVE2MIDDLE = 1,
|
|
ADJ_OSCILLATE = 2,
|
|
ADJ_CALCULATE = 3,
|
|
ADJ_END = 4,
|
|
ADJ_WAIT = 5
|
|
}adj_steps;
|
|
|
|
typedef struct
|
|
{
|
|
prov_status status;
|
|
|
|
float current_pressure;
|
|
float current_percent;
|
|
float target_pressure;
|
|
float target_percent;
|
|
float current_input;
|
|
float input_max;
|
|
float input_min;
|
|
float bias;
|
|
float bias_previous;
|
|
float bias_area; //bias permitted [-a, a]%
|
|
|
|
float Kp; //used for pid control
|
|
float Ti;
|
|
float Ing;
|
|
float Ing_sum;
|
|
float Ing_max;
|
|
float Ing_min;
|
|
float Td;
|
|
float Ts;
|
|
float Div;
|
|
float pidout;
|
|
float pidout_max;
|
|
float pidout_min;
|
|
|
|
float cstep_gasin; // tinny step adjust
|
|
float cstep_gasout;
|
|
float cstep_max;
|
|
float cstep_min;
|
|
unsigned char cstep_wait;
|
|
|
|
void (*pvout)(float pout); //dac out
|
|
}propotion_valve; //propotion valve
|
|
|
|
#define OSCILL_TIMES 10
|
|
typedef struct
|
|
{
|
|
unsigned char adj_flag;
|
|
float relay_d;
|
|
float relay_a[OSCILL_TIMES];
|
|
float relay_A;
|
|
float relay_tc[OSCILL_TIMES];
|
|
float relay_Tc;
|
|
float air_source;
|
|
float middle_current;
|
|
unsigned char oscil_times;
|
|
|
|
}prov_adjust;
|
|
|
|
extern propotion_valve pv_one;
|
|
extern propotion_valve pv_two;
|
|
|
|
void prov_init(void);
|
|
void prov_adj_init(void);
|
|
void prov_set(float target_p, propotion_valve *pvx);
|
|
void prov_ctrl(propotion_valve *pvx, prov_adjust *adj_pvx);
|
|
void prov_calibrate_pid(propotion_valve *pvx);
|
|
void prov_calibrate_step(propotion_valve *pvx);
|
|
void analog_ctrl(void);
|
|
float abs_bias(float bias);
|
|
void prov_adj(propotion_valve *pvx, prov_adjust *adj_pvx);
|
|
|
|
#define CSTEP_WAIT_MAX 0
|
|
#define BIAS_MAX 10
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************************/
|
|
#endif
|
|
|
|
|