1 Fractional control actions
1.1 Time domain
In the following, we illustrate the effects of the basic fractional-order control actions in the time domain [1]. For this we consider the response of the system
where $K$ is the gain of the differentiator/integrator of order $\alpha$, such that $-1\leqslant \alpha \leqslant 1$.
In the following figure the response of a fractional-order integrator to a square input signal is shown.
In Figure 2 it is possible to observe the response of a fractional-order differentiator to a trapezoidal input signal.
1.2 Frequency domain
For the fractional-order components the following is achieved by varying the value of $\alpha$ in the range $\alpha\in[-1, 0]$ for the fractional-order integrator and in the range $\alpha\in[0, 1]$ for the fractional-order differentiator it is possible to achieve the following:
- A constant increment in the slope of the magnitude curve that is $20\alpha$ dB/dec.
- A constant delay in the phase plot that is $({\pi}/{2})\alpha$.
It can be seen, that in both the time domain and in the frequency domain additional flexibility of the control actions is introduced. Based on this it is possible to design robust fractional-order controllers.
2 Fractional controllers
In this section, we introduce two fractional-order controllers which are derived from classical controllers by means of generalization of the integral and differential components.
2.1 Fractional PID controller
The fractional PID controller was introduced by Podlubny [2]. The controller is called the PI$^{\lambda}$D$^{\mu}$ controller1 since it has an integrator of order $\lambda$ and a differentiator of order $\mu$. It has been confirmed, that this type of controller offers superior performance compared to the classical PID controller [1, 3, 4].
The control action of the parallel form PI$^{\lambda}$D$^{\mu}$ controller can be expressed in the time domain as follows:
where $e(t)$ is the error signal. In the Laplace domain, assuming zero initial conditions, the fractional-order PID controller has the following form:
The case $\lambda=\mu=1$ corresponds to the classical, integer-order PID controller. In Figure 3 a comparison of the frequency domain characteristics of such a controller to those of the fractional PID controller with integrator/differentiator orders of $\lambda=\mu=0.5$ is shown.
2.2 Fractional lead-lag compensator
Lead-lag compensators are a well-known type of feedback controller that is widely used in practice. A fractional-order lead-lag compensator has the following transfer function [1]:
where $\alpha$ is the fractional power, $1/\lambda=\omega_{z}$ and $1/(x\lambda)=\omega_{p}$ are the zero and pole frequencies, respectively, when $\alpha \gt 0$. Two cases are possible:
- $\alpha \gt 0$: the controller in (4) corresponds to a fractional-order lead compensator, whose behavior is similar to that of a PD$^{\mu}$ controller;
- $\alpha \lt 0$: the controller in (4) corresponds to a fractional-order lag compensator, whose behavior is similar to that of a PI$^{\lambda}$ controller.
A survey of tuning methods for both PI$^{\lambda}$D$^{\mu}$ controllers and fractional lead-lag compensators can be found in [1, 5]. Additionally, methods suitable for practical implementations of fractional-order controllers are provided in e.g. [6, 7].
Other fractional-order control techniques are elaborated upon. Once they become relevant to the FOMCON project, a summary will be included on this page.
References
[1] | C. A. Monje, Y. Chen, B. Vinagre, D. Xue, and V. Feliu, Fractional-order Systems and Controls: Fundamentals and Applications, ser. Advances in Industrial Control. Springer Verlag, 2010. |
[2] | I. Podlubny, “Fractional-order systems and PI$^{\lambda}$D$^{\mu}$-controllers,” IEEE Transactions on Automatic Control, vol. 44, no. 1, pp. 208–214, 1999. |
[3] | M. Čech and M. Schlegel, “The fractional-order PID controller outperforms the classical one,” in Process control 2006. Pardubice Technical University, 2006, pp. 1–6. |
[4] | Y. Luo and Y. Chen, “Fractional-order [proportional derivative] controller for robust motion control: Tuning procedure and validation,” in Proc. ACC ’09. American Control Conference, 2009, pp. 1412–1417. |
[5] | C. Monje, B. Vinagre, V. Feliu, and Y. Chen, “Tuning and auto-tuning of fractional order controllers for industry applications,” Control Engineering Practice, vol. 16, no. 7, pp. 798–812, 2008. |
[6] | Y. Q. Chen, I. Petráš, and D. Xue, “Fractional order control – A tutorial,” in Proc. ACC ’09. American Control Conference, 2009, pp. 1397–1411. |
[7] | I. Petráš, “Practical Aspects of Tuning and Implementation of Fractional-Order Controllers,” ASME Conference Proceedings, vol. 2011, no. 54808, pp. 75–84, 2011. |
- 1 Notation PI$^{\lambda}$D$^{\delta}$ is also used
76 Comments
hi
i cant speak english vary well…sorry
i have some question
what is the frequency range?
how define that for my system?
i have a switching system…for example switching frequency is 15kHZ
now my frequency range must be [0.01 20000] ?
please help me
thank you
Can you elaborate at what you are trying to achieve?
Do you know how it able to obtain cfehigh and cfelow?
Can you help me?
I would like to simulate the fractional order systems. Please help clarifying the step by step procedure.
Thank you.
The procedure in FOMCON/MATLAB is the same as for integer order systems. There are lots of examples on how to do this.
Hello,
I want to know if the embedded coder toolbox in MATLAB suuports FOMCON blocksets or not? I want to implement a TID control on a microcontroller, is it feasible using your toolbox?
Dear Mohamed,
It may be possible, but since I do not use Embedded Coder, it is hard for me to comment on it.
Dear Aleksei
Thanks for your excellent Toolbox. it’s very good.
i use with Matlab R2009a and now i want to use Simulink. but i can’t call it. how can i call them?
I’m afraid that the Simulink library for the current release may not work in R2009a. Type
fod
in MATLAB, see if you get any result.i use with Matlab R2009b/R2008b and i want to use Simulink. but i can’t call it. If I use fod in Matlab, I have following error.
Undefined function or variable ‘fod’.
I found it and now i’m working them. it seems they work.
it’s good!
Dear Colleague
This toolbox used only for LTI or it used for non linear control, too?
You can certainly use the toolbox for identification & control of nonlinear systems in particular working points (that is, using linear approximations).
very good.
Thanks a lot.
Dear Colleague
I want to design a self-tuning fractional orde PID controller. following as :
http://www.uplooder.net/cgi-bin/dl.cgi?key=8f07791216d0cf155b3134fae6878664
Assume i ‘m tuning coefficients of FOPID with an Algoritm. (Kp, Ki, Kd, lambda, mu).
now how i can consider lambda and mu in my design?
Best Regards,
Reza
Kindly see the following book: https://fomcon.net/fo/overview-of-literature/
Dear Professor
but my problem is in matlab.
i don’t know how i must allocate the value of mu and lambda to their!
Can you help me please?
Kindly elaborate. What do you mean by “allocate the value of mu and lambda to their”? Why is this a MATLAB problem?
According to the file i have sent you in my last comments,
the parameter of lambda that related to the order of integrator is obtained by an Algorithm.
Now, how should i connect Lambda to the integrator block to be able to change order of s ? it means should be replaced the order of s with the amount of lambda?
I understood how it does work!
Is my sentence correct?
” The enter of integrator blok is Lambda”. As follows:
http://www.uplooder.net/img/image/87/577254f5a2a1500abcd03080674d2cb9/integrator.jpg
Is it right?
Ok, I think I understand.
No, this is not the way things work. The order cannot be set in the manner you describe.
You can, however, set it via MATLAB code by means of
set
command.I don’t want to use Matlab code. so it means that, in simulink, we can not self tuning for Fractional PID controller?
for example can you design a fractional PI controller in matlab simulink with self tuning?
Is it possible?
Excuse me,
the lambda and mu values in the fractional PID should never be the “1” ?
There is not a special way to become Cnventional PID?
this code does not work :
Kp=10 ; Ki=20 ; Kd=30 ; lambda=1 ; mu=1;
Gc=fracpid(Kp, Ki, lambda, Kd, mu)
step(Gc)
You cannot simulate systems with more zeros than poles. This is due to the differential component.
But try this:
t=0:0.01:100; plot(t,step(Gc,t));
You can actually simulate such systems using the GL definition-based solver. The simple command
step
is overloaded in FOMCON in such a way that uses the one in Control System toolbox, which cannot simulate it.Thanks Dear professor,
I understood what you said.
What is GL ??
Can you take an example that how do you design a PI contrller with self-tuning?
it does not matter with simulink or script!
I only want to see your manner that how do you change lambda.
I think it is a bug in simulink!
Best Regards,
Preparing such an example takes time.
If the simulink block work as follows, that was good :
http://www.uplooder.net/img/image/70/f20e15ed37ad10bbb37ca04a73eaae93/PID_Controller.jpg
the lambda and mu of parameters and ki, kp, kd obtained with fuzzy.
Is it possible that i send my simulation for you and comment about it? (by email)
hi, please tell me how to tune FOPID controller , ? and what are K,L and T in zntune,
Dear professor,
does not work fractional functions in Embeded Matlab Function Block??
It seems that these are not support by Embeded Matlab!!!
for example i wrote this code in Embeded Matlab Function :
———————–
function Gc = fracpid(kp, ki, lambda , kd, mu)
fotf(‘s’)
Gc=fracpid(kp, ki, lambda , kd, mu)
———————–
but it doesn’t work!
Is it right?
Dear professor,
If you mind answering my question?
does not work fractional functions in Embeded Matlab Function Block??
It seems that these are not support by Embeded Matlab!!!
for example i wrote this code in Embeded Matlab Function :
———————–
function Gc = fracpid(kp, ki, lambda , kd, mu)
fotf(‘s’)
Gc=fracpid(kp, ki, lambda , kd, mu)
———————–
but it doesn’t work!
Is it right?
Embedded MATLAB relies on a limited set of core language features. FOMCON is not supported.
Dear professor,
Thanks for your Reply.
I want to change parameter of “lambda” in Fractional integrator block by “set_param” command.
but it has a Error as follows :
??? Error using ==>
Fractional integrator block (mask) does not have a parameter named ‘Integration order’.
Where is the problem?
The parameter you are trying to change is named differently.
but it isn’t different!
the name of block diagram is “Fractional integrator” and the name of parameter that i want to change is “Integration order”. the Matlab Code is :
set_param(‘FOPID/Fractional integrator’,’Integration order’,’.5′)
Please see following :
http://www.uplooder.net/cgi-bin/dl.cgi?key=d792c70c6254298fc2cd7266007fab6d
Best Regards,
Reza
If you are using the FOMCON Simulink library, then for the continuous-time FOPID controller, assuming that the model is named “testm.mdl” and the controller inside of it is called “FOPID”, you would use the following command to set the integration order:
set_param('testm/FOPID','Ki','.5')
Thanks for your Help.
Yes I’m using the FOMCON Simulink library.
I think it isn’t right. the parameter that want to change is “Integration order” not ” Ki”.
Fractional integrator block (mask) does not have a parameter named ‘Ki’.
[img] http://www.uplooder.net/img/image/72/39fa5e0c292ffb37c1200a57b1a55eaa/aaa.jpg [/img]
but also, Fractional integrator block (mask) does not know parameter named ‘Integration order’.
Please see following :
http://www.sharefile.ir/uploads/1422561770.rar
Do this:
set_param('FOPID/Fractional integrator','gam','.5')
Very Excellent. My problem solved.
I will never forget your kindness and your gloriousness.
How do we should recognize the name of parameter is “gam” ???
Thank you for your kind words :)
If in Simulink you right-click on the block of interest, you can proceed to view the block mask via “Mask→View Mask…” Then locate the “Parameters” tab and check out the Variable names there.
i see!
Thank you for learning me a new Tip.
Best Regards,
Reza
Sir, we are using your FOMCON toolbox to design fractional order controller for integer order system. We are using MATLAB 7.9.0(R2009b).the transfer function we used is G=tf([0.8 0.5],[2.2 0.9 0])
We copied all m-files and tried optimation using fpid optimisation tool we are getting these errors
??? Reference to non-existent field ‘G’.
Error in ==> fpid_optim>fpid_optim_OpeningFcn at 40
set(handles.txtPlant, ‘String’, toOpt.G);
Error in ==> gui_mainfcn at 221
feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});
Error in ==> fpid_optim at 24
gui_mainfcn(gui_State, varargin{:});
Sir, please tell us how to overcome these errors
Thanks & Regards
I have also received your e-mail, but I did not yet have a chance to reply. So I will provide a possible solution here.
Are you certain that you have added all FOMCON folders and files onto MATLAB path? This basic functionality towards which the error is pointing should definitely be supported in MATLAB R2009b. Otherwise, my suggestion is to update your MATLAB version to at least R2012a.
Thanks for your reply sir. As per your advice i tried in MATLAB R2012a, but still it is showing the same.
though i gave the iteration limit as 20 in FOPID optimization toolbox i am getting the following errors sir.
??? Maximum recursion limit of 100 reached. Use set(0,’RecursionLimit’,N)
to change the limit. Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.
Error in ==> margin
??? Error while evaluating uicontrol Callback
and also with the errors i mentioned in last post
??? Reference to non-existent field ‘G’.
Error in ==> fpid_optim>fpid_optim_OpeningFcn at 40
set(handles.txtPlant, ‘String’, toOpt.G);
Error in ==> gui_mainfcn at 141
feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});
Error in ==> fpid_optim at 24
gui_mainfcn(gui_State, varargin{:});
Sir, pls help me to overcome these errors and suggest ur advice for the same.
Thanks in advance.
The first problem is related to a particular controller design case. I cannot comment further until I see the parameters of the model/controller.
As for the second one, I have already pointed out, that it is not related to any bug in the FOMCON software, rather, there is some problem in the installation thereof.
Thank you sir!
Dear professor,
I apologize that I disturb you again.
I want value of 0.5 in mu block is replaced with the command “set_param” in Fractional Order in FD block . Which block should I use insted of Embedded Matlab Function?
i tried to use different bloks, but i couldn’t successful!
my simulation :
http://www.sharefile.ir/uploads/1424644757.rar
Best Regards,
Reza
Dear Dr. Aleksei
Can you answer my above question?
thanks a lot.
I am sorry, I do not quite understand the problem. Also unfortunately I cannot download the above archive as it is not hosted on a resource I am familiar with.
Can i email it for you?
the solve of this problem is very important for me.
Best Regards,
Reza
As long as it is not an archive, yes.
Dear professor,
I sent my file to your email (aleksei.tepljakov@dcc.ttu.ee).
Did you recieve it?
As I said, no archives please. If you must, send me the model and script files.
I’m sorry!
Where must i attach my file for you?
I actually need your help.
How many files are there?
Excuse me, I do not understand what you mean.
Now What am i doing?
My problem is about the change of order of fractional in my simulink.
There is one file namely “Test3.mdl” in ziped file :
http://www.sharefile.ir/uploads/1424644757.rar
or
http://wikisend.com/download/180290/Test3.rar
Dear professor,
Can you get my file?
Here is the problem.
I do not open zip/rar/etc. archives sent to me via e-mail.
I do not download zip/rar/etc. archives from sources, that are unknown to me.
If you send me the mdl/slx/m files, it is perfectly fine, as long as their number is limited.
Can i send mdl file for you via e-mail?
Yes, I have received the e-mail. The way you call the “set_param” function is correct, but this function is not supported in code generation. So you may want to use S-functions instead.
hai sir my fractional order transfer function is 3.09/11s^0.923+1 with time delay…my question is how to draw bode plot and also to find gain and phase margin….
Dear Professor,
I complete my simulation and used FOPID in it. when I run the system the Matlab/Simulink will give this error :
Derivative input 1 of ‘FuzFOPID/Integrator8’ at time 5.75 is Inf or NaN. Stopping simulation. There may be a singularity in the solution. If not, try reducing the step size (either by reducing the fixed step size or by tightening the error tolerances).
I tried to reduce the step size, changing the solver but only the time that error occurs will change.
How can I solve this problem?
Best Regards,
Reza
Please provide more details. Include as much information as possible, since I do not even know whether this is a FOMCON support question or not.
My problem solved. I think another part of my simulation was wrong and at present i could overcome it.
Thanks a lot.
Hi Dear Professor,
I’m sorry to disturb you again.
In your Library:fod, there are not Fractional Derivative and Fractional Integrator for Discerete Time. only there is Transfer Function for Discerete Time. Is it right?
which block i should use?
Yes, it is somewhat of an oversight. If you wish, you can add a feature request at http://bugs.fomcon.net/
You can still use the Discrete FOTF block, just specify the b=1, a=s^n for an integrator or b=s^m, a=1 for a differentiator.
Thanks.
Can I use “Discrete fractional PID controller” block and for making integrator, put kp=kd=0 ??
Yes.
Thank you Dear Professor. Also I added a feature request at http://bugs.fomcon.net/ for this Problem.
Best Regards,
Reza
sir,
I am using fractional order PI controller for controlling simulated pH process. Through some optimization technique, i am trying to tune the parameters of fractional order PI controller. I need a small suggestion that, what may be the maximum value of “integrator of order λ”?
I am using limit for λ is 0 to 2. pls give me as suggestion on this.
Regards
nathan
Do you have a simple method to calculate the fractional PID controller settings?
I would like to improve the quality of regulation of normal PID.
I have a question for the first time course for the ALPHA range . Do you know the best solution like – how in Simulink toolbox fomcon introduce fractional derivative of a specific range and not for one value?
Thanks a lot.
Sir, I am getting problem while I am trying to use glfdiff(y,t,gam) MATLAB function to detect edges in an image. Can, please Sir help me out with an example of how I can proceed.
Dear Professor,
How can use charachter in fractional block?
for example i try to put “a” in Derivate order for Fractional Derivative and this way i update the parameter wiyh m-file. but it doesn’t accept!
can you help me?
There are several ways to achieve this. But the problem here most likely is that “a” is not defined when you plug it into the block settings. Create a workspace variable and see whether that works for you.
Ok. I get it.
thank you sir.