DAB学习心得(G474_PID_control.c)

发布时间:2026/7/27 7:16:12
DAB学习心得(G474_PID_control.c) /** PID_control.c** Created on: 2024420* Author: ChuHao*/#include PID_control.hPID_IncrementType PID_Voltage,PID_Current,PID_PLL;void PID_Init(void){ //P,I,D,误差上下限累计上下限PID_Struct_Init(PID_Voltage, 0.00300 , 0.000009 , 0 , 0.1,-0.1, 0.3,-0.83); //电压环PID_Struct_Init(PID_Current, 5.99999975e-07 , 8.50999997e-07 , 0 , 0.03,-0.03, 1,-1); //电压环PID_Struct_Init(PID_PLL, 20 , 0.6 , 0.01 , 20,-20, 300,-300); //锁相环}void PID_Struct_Init(PID_IncrementType* PID,float kp,float ki,float kd,float errILim,float errILimNeg,float OutLim_Max, float OutLim_Min){PID-kp kp;PID-ki ki;PID-kd kd;PID-errILim errILim;PID-errILimNeg errILimNeg;PID-OutLim_Max OutLim_Max;PID-OutLim_Min OutLim_Min;PID-ctrOut 0;}void PID_IncrementMode(PID_IncrementType* PID){float dErrP, dErrI;dErrP PID-errNow - PID-errOld1;dErrI PID-errNow;// dErrD PID-errNow -2*PID-errOld1 PID-errOld2;PID-errOld2 PID-errOld1;PID-errOld1 PID-errNow;PID-dCtrOut PID-kp * dErrP PID-ki * dErrI;// PID-kd * dErrD;if(PID-dCtrOut PID-errILim) PID-dCtrOut PID-errILim;if(PID-dCtrOut PID-errILimNeg) PID-dCtrOut PID-errILimNeg;PID-ctrOut PID-ctrOut PID-dCtrOut;if(PID-ctrOut PID-OutLim_Max) PID-ctrOut PID-OutLim_Max;if(PID-ctrOut PID-OutLim_Min) PID-ctrOut PID-OutLim_Min;}void PID_PositionMode(PID_IncrementType* PID){//float dErrP, dErrI, dErrD;float dErrP, dErrI;dErrP PID-errNow - PID-errOld1;dErrI PID-errNow;PID-errOld1 PID-errNow;PID-dCtrOut PID-kp * dErrP PID-ki * dErrI;if(PID-dCtrOut PID-errILim) PID-dCtrOut PID-errILim;if(PID-dCtrOut PID-errILimNeg) PID-dCtrOut PID-errILimNeg;PID-ctrOut PID-ctrOut PID-dCtrOut;if(PID-ctrOut PID-OutLim_Max) PID-ctrOut PID-OutLim_Max;if(PID-ctrOut PID-OutLim_Min) PID-ctrOut PID-OutLim_Min;}float PID_Control_Caculate(PID_IncrementType* PID, float target,float ture_value){// float w_increment 0;PID-errNow target-ture_value;PID_IncrementMode(PID);return PID-ctrOut;}/*------------------------------------------------------------------------------* PID_control.h** Created on: 2024420* Author: ChuHao*/#ifndef VIENNA_OPEN_LOOP_PID_H_#define VIENNA_OPEN_LOOP_PID_H_typedef struct{float kp;float ki;float kd;float errNow;float errILim;float errILimNeg;float dCtrOut;float ctrOut;float OutLim_Max;float OutLim_Min;float errOld1;float errOld2;}PID_IncrementType;extern PID_IncrementType PID_Voltage,PID_Current,PID_PLL;void PID_IncrementMode(PID_IncrementType* PID);void PID_PositionMode(PID_IncrementType* PID);extern float PID_Control_Caculate(PID_IncrementType* PID, float target,float ture_value);void PID_Struct_Init(PID_IncrementType* PID,float kp,float ki,float kd,float errILim,float errILimNeg,float OutLim_Max, float OutLim_Min);extern void PID_Init(void);#endif /* VIENNA_OPEN_LOOP_PID_H_ */