
How do I set the saturation output for PID objects in MATLAB?
7 views (last 30 days)
Show older comments
MathWorks Support Team
on 12 Oct 2020
Edited: MathWorks Support Team
on 9 Nov 2020
I want to set the saturation output of a PID object in MATLAB to enable the implementation of an anti-windup PID control scheme.
Accepted Answer
MathWorks Support Team
on 9 Nov 2020
Edited: MathWorks Support Team
on 9 Nov 2020
PID objects in the Control System Toolbox are LTI (linear time-invariant) systems of a special type. Because of that, there is no property for output saturation in PID objects. To simulate "anti-windup" in MATLAB, you can setup a custom state-space system and call the "lsim" function to simulate the time response of that system with nonlinear properties such as saturation. Below is a simple script that performs closed-loop PI control with back calculation that can be used as a starting point.
UseBackCalculation = true; % enable/disable anti-windup (back calculation)
G = ss(tf(1,[1 2 1])); % plant
Kp = 2; Ki = 2; % PI controller gains (parallel)
Ts = 0.1; % controller sample time
tau = 1; % reset time constant
UB = 1.2; LB = -1.2; % saturation limits
% initial condition
r = 1;
y = 0;
x = zeros(2,1);
actionI = 0;
% closed-loop simulation (200 steps)
N = 200;
for ct=1:N
% error
e = r - y;
% control action
actionP = Kp*e;
u = actionP + actionI;
% saturation control action
u_sat = max(min(u,UB),LB);
% anti windup
if UseBackCalculation
actionI = actionI + (Ki*e + (u_sat-u)/tau)*Ts;
else
actionI = actionI + Ki*e*Ts;
end
% plant output
[Y,T,X] = lsim(G,[u_sat;u_sat],[0;Ts],x);
% for next iteration
x = X(end,:)';
y = Y(end);
y_vec(ct) = y;
u_vec(ct) = u_sat;
end
clf;
figure(1);
plot(1:N,y_vec,'*r',1:N,u_vec,'+b');
xlabel('Time'); ylabel('Signal');
legend('Model Response','Control Signal')
if UseBackCalculation
title('With Anti-Windup (Back Calculation)');
else
title('Without Anti-Windup');
end

0 Comments
More Answers (0)
See Also
Categories
Find more on PID Controller Tuning in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!