📄 pid_reg3.m
字号:
function [pid_out_reg3,Y,h_out] = pid_reg3(pid_ref_reg3,pid_fdb_reg3,h_in,p)
% This function implement the PID controller with anti-windup
% Inputs:
% pid_ref_reg3 = Reference signal
% pid_fdb_reg3 = Feedback signal
% h_in = [up_reg3; ui_reg3; ud_reg3]
% p = [T; Kp; Ti; Td; Kc; Umax; Umin]
% 1 2 3 4 5 6 7
% Outputs:
% pid_out_reg3 = Output signal
% h_out = [up_reg3; ui_reg3; ud_reg3]
% Y = e_reg3; uprsat_reg3; saterr_reg3; up_reg3; ui_reg3; ud_reg3]
% where
% T = Sampling period (sec)
% Kp = Proportional gain
% Ti = Integral (reset) time (sec)
% Td = Derivative time (sec)
% Kc = Integral correction gain
% Umax = Maximum limit of output
% Umin = Minimum limit of output
% e_reg3 = Error
% uprsat_reg3 = Pre-saturated output
% saterr_reg3 = Saturated difference
% up_reg3 = Proportional output
% ui_reg3 = Integral output
% ud_reg3 = Derivative output
% Defining PID constants
Kp_reg3 = p(2);
Ki_reg3 = p(1)/p(3);
Kd_reg3 = p(4)/p(1);
Kc_reg3 = p(5);
% Name the variables
pid_out_max = p(6);pid_out_min = p(7);
up1_reg3 = h_in(1);
ui_reg3 = h_in(2);
ud_reg3 = h_in(3);
e_reg3 = pid_ref_reg3 - pid_fdb_reg3;
up_reg3 = Kp_reg3*e_reg3;
uprsat_reg3 = up_reg3 + ui_reg3 + ud_reg3;
if (uprsat_reg3 > pid_out_max)
pid_out_reg3 = pid_out_max;
elseif (uprsat_reg3 < pid_out_min)
pid_out_reg3 = pid_out_min;
else
pid_out_reg3 = uprsat_reg3;
end
saterr_reg3 = pid_out_reg3 - uprsat_reg3;
ui_reg3 = ui_reg3 + Ki_reg3*up_reg3 + Kc_reg3*saterr_reg3;
ud_reg3 = Kd_reg3*(up_reg3 - up1_reg3);
% History
h_out = [up_reg3; ui_reg3; ud_reg3];
% Return the results
Y = [e_reg3; uprsat_reg3; saterr_reg3; up_reg3; ui_reg3; ud_reg3];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -