PID implementation using code
10 次查看(过去 30 天)
显示 更早的评论
I have implemented a PID controller using simulink pid block for a system. I was trying to implement the same thing using a PID code (formula) in a matlab function block and compare the performances. However, I am getting differences in both the cases. Unable to figure out where exactly is the problem.
For simulink block I have implemented antiwindup, similarly I have done it in the code.
PID code as in the matlab function is as below:
function y = fcn(error,kp,ki)
dt = sampletime;
persistent integral newintegral
if isempty(integral)
integral = 0;
end
if isempty(newintegral)
newintegral = 0;
end
newintegral = integral + (error*dt);
output = kp*error + ki * integral;
if output>48000
output=48000;
elseif output<3000
output =3000;
else
integral = newintegral;
end
y = output;
Is there anything that I am implementing wrong in the code? Requesting some help/direction.
Thank you
0 个评论
回答(1 个)
Sam Chak
2022-11-25
Wouldn't it be simpler if you obtain the signal directly from the Integrator block, and then feed it into the MATLAB function block? Something like this
function y = fcn(err, errint, Kp, Ki)
where err is the error signal and errint is the intergral of error signal.
3 个评论
Sam Chak
2022-11-25
Two questions.
Does your Anti-Windup involve some sort of integration but not the Integral action of the PID controller?
Is "integral" as a special variable or the built-in MATLAB integral function?
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!