📄 pidcntrl.m
字号:
function [mc,intv] = pidcntrl(tsamp,set,setprev,value,valueprev,intvv,...
kp,ki,kd,minmc,maxmc,dflag,bias)
%PID control with wind-up protection
%Using the sliding wind-up algorithm. Can use either error
%difference (dflag=0) or value difference (dflag=1). Error
%difference is the default.
if(nargin < 12),dflag = 0;, end
if(nargin < 13),bias = 0;,end
error = set - value;
if(dflag == 0)
dif = error - (setprev - valueprev);
else
dif = -(value - valueprev);
end
intv = intvv;
mc = kp * error + kd * dif / tsamp + bias; %Partial results
intv = intv + ki * error * tsamp;
mctrial = mc + intv;
if((mctrial <= maxmc) & (mctrial >= minmc))
mc = mctrial; %Controller output is not saturated
elseif(mc > maxmc)
mc = maxmc;
intv = 0; %PD part alone saturates output
elseif(mc < minmc)
mc = minmc;
intv = 0;
elseif((mc+intv) > maxmc)
intv = maxmc - mc; %Limit integrator to amount that will
%just saturate output
mc = maxmc;
elseif((mc+intv) < minmc)
intv = minmc - mc;
mc = minmc;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -