Discrete PID controller simulation

조회 수: 9 (최근 30일)
Stepan Podhorsky
Stepan Podhorsky 2019년 9월 11일
댓글: mustafa sgaban 2022년 5월 13일
Hello,
I have implemented a discrete PID controller in C language via the Simulink
S-function. Here is my C code which I have inserted into the text field in the
Outputs tab in the S-function Builder
double tmp; // temporary control value
double satU;
double dup; // increment of proportional part
double dui; // increment of integral part
double dud; // increment of derivative part
double du; // increment of control value
dup = Kp[0]*(xD[0] - xD[1]); // dup(k) = Kp*[e(k) - e(k-1)]
dui = (Kp[0]*T[0])/(2*Ti[0])*(xD[0] + xD[1]); // dui(k) = (Kp*T)/(2*Ti)*[e(k) + e(k-1)]
dud = (Kp[0]*Td[0])/T[0]*(xD[0] - 2*xD[1] + xD[2]); // dud(k) = (Kp*Td)/T*[e(k) - 2*e(k-1) + e(k-2)]
du = dup + dui + dud; // du(k)
tmp = xD[3] + du; // u(k) = u(k-1) + du(k)
// antiwind-up
if(tmp > Umax[0]){
satU = Umax[0];
}else if(tmp < Umin[0]){
satU = Umin[0];
}else{
satU = tmp;
}
y0[0] = satU;
Here is the C code which I have inserted into the text field in the
Discret Update tab in the S-function Builder
xD[0] = u0[0] - u1[0]; // e(k) = sp - cv
xD[2] = xD[1]; // e(k-2) = e(k-1)
xD[1] = xD[0]; // e(k-1) = e(k)
xD[3] = u2[0]; // bumpless transition: u(k-1) = tr
I have prepared following simulation for the testing purposes
Control_loop.JPG
i.e. controller controls FOPDT system with transfer function
and transport delay . Parameters of the
PID controller are set in following manner: .
It is worthwile to say that the control value of the PID controller
is saturated in range . I have chosen sampling period
in respect to the system time constant (the sampling period
is used by the PID algorithm and also by the ZOH blocks).
Simulation output (without switching between controller output and manually set
control value) is given below
Simulation_output.JPG
The controlled variable oscillates and I don't understand why. The same setting of
the controller behaves correctly in analog case with PID controller block from Simulink library.
I have tried smaler sampling period values but results are same. Can anybody give me an advice
what I am doing wrong?
  댓글 수: 1
mustafa sgaban
mustafa sgaban 2022년 5월 13일
where you put the values of Kp, Ti,Td?
deosnt include in the code

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 General Applications에 대해 자세히 알아보기

제품


릴리스

R2015a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by