pidcntrl.m
来自「Matlab学习课件」· M 代码 · 共 37 行
M
37 行
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 + =
减小字号Ctrl + -
显示快捷键?