PID implementation using code
이전 댓글 표시
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
답변 (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
Sanjeet Kulkarni
2022년 11월 25일
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?
Sanjeet Kulkarni
2022년 11월 28일
카테고리
도움말 센터 및 File Exchange에서 Real-Time PID Autotuning에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!