Example of iPID controller in Matlab M.file by Michel Fliess?

조회 수: 3 (최근 30일)
Nitish Mulye
Nitish Mulye 2018년 3월 1일
댓글: Reurison 2022년 4월 13일
Hi everyone, I am a masters student at the university of Disburg-Essen. I want to program an iPID controller as proposed by Michel Fliess in his research paper https://arxiv.org/pdf/1305.7085.pdf. As I am still new to Matlab I need a little help to get started. Can anyone who has done the iPID agorithm in a matlab mfile please send it to me? It would help me a lot. Thank you.
  댓글 수: 2
John Masse
John Masse 2018년 4월 5일
Hi, you can see https://www.researchgate.net/publication/321918636_RelaxC_Controller_The_Ultimate_controller_The_origin It is another point of view which can help you to understand all this stuff.
islam dib
islam dib 2020년 3월 27일
Did you find eny solution ?

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

답변 (2개)

Vibhav Gaur
Vibhav Gaur 2020년 3월 10일
편집: Vibhav Gaur 2020년 3월 10일
I am using the iPID algorithm for my thesis project. To get more familiar with it I practiced with a DC motor model. I've done everything in Simulink, but it should still be helpful in understanding how the implementation works.
I have attached my Simulink model and the initialization script so it should run directly out of the box. The initialization script is pre-computing the trapezoidal integration coefficients from the polynomial. Hope this helps!
  댓글 수: 12
David
David 2022년 2월 26일
편집: David 2022년 2월 26일
Joaquin and Vibhav, I understand how you get the blue box, but I don't understand how you get the green box to be this integral. What I see is u(t-1) multiplied by a constant.
Reurison
Reurison 2022년 4월 13일
David,
I downloaded the same file and from what I saw in this simulation they are using the ultra-local model of order v = 2, which can be described as y^(2)(t) = Phi(t) + alpha*u(t), so the estimation of Phi(t) is : Phi(t) = y^(2)(t) - alpha*u(t).
As my objective right now it is not to explain the theory behind it, I'll simply put that are "two ways" to estimate Phi(t) (please read the already mentioned work for more details). The first one is to use the expression inside the red box (Eq. 4.13) to directly estimate Phi(t). The other way is only estimate y^(2) using the equations (2.24, 2.39 or 2.49), and doing Phi(t) = estimate_of_y^(2) - alpha*u(t-1) .
Back to the file AlgDerEst.m one can see:
%Phat(i) = alphak *( (120/T^6) * (4*T^3 - 45*T^2*tau_k(i) + 108*T*tau_k(i)^2 - 70*tau_k(i)^3) );
Phat(i) = alphak *( (60/T^5) * (T^2 - 6*T*tau_k(i) + 6*tau_k(i)^2) );
Which means that the equation inside the blue box is the equation (2.39) (usind the second way explained above) and the green box as you already mentioned (correctly) is alpha*u(t-1), and not the term mentioned by Joaquín Lopez. It would be necessary to modify the simulink file in order implement what is being shown in the figures above.

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


John Masse
John Masse 2020년 3월 10일
Hi,
I don't have the solution for you. But if you want to create an algebraic filter, try making one outside of the loop control. and apply it on a signal (sinusoid) to check your algorithm. ( use a reverse integrator scheme)
in a control loop you can use a simple numerical derivative to compute y' (Euler is your friend)
after it is complicated because there is no rule, but you have to filter something: the estimation of F or the new U* = (y'* -F(est))/alpha , it is necessary for stabilize the closed loop with a small time constant but not too large ( it is the problem of free model).
But you have to know that ipid works "well" on a process without dead time or gap time. if you want to create a drone it is "ok" but the tuning is empirical, for the rest change of method.
the last advice dont use ki and kd because it is in "redondance"( french word) with the recurence equation of your control ( it is my point of view) .
Good luck and think Relaxc ( the last generation control loop process)

카테고리

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

Community Treasure Hunt

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

Start Hunting!

Translated by