📄 pid_tuning.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>Description of pid_tuning</title>
<meta name="keywords" content="pid_tuning">
<meta name="description" content="PID_TUNING Tune the parameters of a ISA-PID regulator with some">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="m2html © 2003 Guillaume Flandin">
<meta name="robots" content="index, follow">
<link type="text/css" rel="stylesheet" href="m2html.css">
</head>
<body>
<table border=0 width="100%" cellpadding=0 cellspacing=0><tr>
<td valign=baseline bgcolor="#ffe4b0"><b>AutotunerPID Toolkit</b></td>
<td valign=baseline bgcolor="#ffe4b0" align=right><a href="pid_structure.html"><img src="b_prev.gif" alt="Previous page" border=0></a> <a href="stepPIDcompare.html"><img src="b_next.gif" alt="Next Page" border=0></a></td>
</tr>
</table>
<h1>pid_tuning</h1>
<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="up.png"></a></h2>
<div class="box"><strong>PID_TUNING Tune the parameters of a ISA-PID regulator with some well-befined autotuning methods.</strong></div>
<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="up.png"></a></h2>
<div class="box"><strong>function [K,Ti,Td,N,b] = pid_tuning(model,method,param,regStruct,As) </strong></div>
<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="up.png"></a></h2>
<div class="fragment"><pre class="comment">PID_TUNING Tune the parameters of a ISA-PID regulator with some
well-defined autotuning methods
[K,Ti,Td,N,b] = PID_TUNING(MODEL,MEETHOD,PARAM,REGSTRUCT) returns the
parameters of a ISA-PID regulator.
MODEL is a structure describing the plant, with the following fields:
- MODEL.m, MODEL.L, MODEL.T for a model based method (namely the
parameters of a FOPDT model M(s) = m*exp(-sL)/(1+s*T))
- MODEL.A, MODEL.T for a characteristic based method (amplitude and
period of the oscillation generated by a relay in the loop)
METHOD is a flag indicating the desired tuning method while PARAM gives
additional parameters (if required), according to the following table
Tuning method | METHOD | PARAM
------------------------------------------------------------------------
First Ziegler-Nichols | 'ZN (OL)' | none
method (open loop) | |
| |
Kappa-Tau method | 'KT' | Ms : required magnitude margin
| |
Internal Model Control | 'IMC' | lambda : time constant of the
method | | filter F(s)
| |
Second Ziegler-Nichols | 'ZN (CL)' | none
method (closed loop) | |
-----------------------------------------------------------------------
REGSTRUCT is a flag selecting the regulator structure ('PI' or 'PID')
Author: William Spinelli (wspinell@elet.polimi.it)
Copyright 2004 W.Spinelli
$Revision: 1.0 $ $Date: 2004/02/27 12:00:00 $</pre></div>
<!-- crossreference -->
<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="up.png"></a></h2>
This function calls:
<ul style="list-style-image:url(matlabicon.gif)">
</ul>
This function is called by:
<ul style="list-style-image:url(matlabicon.gif)">
<li><a href="bodePIDcompare.html" class="code" title="function bodePIDcompare(num,den,tau)">bodePIDcompare</a> BODEPIDCOMPARE Comparison of Bode Diagrams with different autotuning</li><li><a href="pid_autotuner.html" class="code" title="function [sys,x0,str,ts] = pid_autotuner(t,x,u,flag,Ts,As)">pid_autotuner</a> PID_SUPERV Supervisor of a PID autotuner (implmented as an S-function)</li><li><a href="stepPIDcompare.html" class="code" title="function stepPIDcompare(num,den,tau)">stepPIDcompare</a> STEPPIDCOMPARE Comparison of step response on setpoint and load</li></ul>
<!-- crossreference -->
<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="up.png"></a></h2>
<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [K,Ti,Td,N,b] = pid_tuning(model,method,param,regStruct,As)</a>
0002 <span class="comment">%PID_TUNING Tune the parameters of a ISA-PID regulator with some</span>
0003 <span class="comment">% well-defined autotuning methods</span>
0004 <span class="comment">%</span>
0005 <span class="comment">% [K,Ti,Td,N,b] = PID_TUNING(MODEL,MEETHOD,PARAM,REGSTRUCT) returns the</span>
0006 <span class="comment">% parameters of a ISA-PID regulator.</span>
0007 <span class="comment">% MODEL is a structure describing the plant, with the following fields:</span>
0008 <span class="comment">% - MODEL.m, MODEL.L, MODEL.T for a model based method (namely the</span>
0009 <span class="comment">% parameters of a FOPDT model M(s) = m*exp(-sL)/(1+s*T))</span>
0010 <span class="comment">% - MODEL.A, MODEL.T for a characteristic based method (amplitude and</span>
0011 <span class="comment">% period of the oscillation generated by a relay in the loop)</span>
0012 <span class="comment">% METHOD is a flag indicating the desired tuning method while PARAM gives</span>
0013 <span class="comment">% additional parameters (if required), according to the following table</span>
0014 <span class="comment">%</span>
0015 <span class="comment">% Tuning method | METHOD | PARAM</span>
0016 <span class="comment">% ------------------------------------------------------------------------</span>
0017 <span class="comment">% First Ziegler-Nichols | 'ZN (OL)' | none</span>
0018 <span class="comment">% method (open loop) | |</span>
0019 <span class="comment">% | |</span>
0020 <span class="comment">% Kappa-Tau method | 'KT' | Ms : required magnitude margin</span>
0021 <span class="comment">% | |</span>
0022 <span class="comment">% Internal Model Control | 'IMC' | lambda : time constant of the</span>
0023 <span class="comment">% method | | filter F(s)</span>
0024 <span class="comment">% | |</span>
0025 <span class="comment">% Second Ziegler-Nichols | 'ZN (CL)' | none</span>
0026 <span class="comment">% method (closed loop) | |</span>
0027 <span class="comment">% -----------------------------------------------------------------------</span>
0028 <span class="comment">%</span>
0029 <span class="comment">% REGSTRUCT is a flag selecting the regulator structure ('PI' or 'PID')</span>
0030 <span class="comment">%</span>
0031 <span class="comment">% Author: William Spinelli (wspinell@elet.polimi.it)</span>
0032 <span class="comment">% Copyright 2004 W.Spinelli</span>
0033 <span class="comment">% $Revision: 1.0 $ $Date: 2004/02/27 12:00:00 $</span>
0034
0035 <span class="keyword">if</span> nargin<4
0036 error(<span class="string">'Usage : [K,Ti,Td,N,b] = pid_tuning(model,method,param,regStruct)'</span>)
0037 <span class="keyword">end</span>
0038 <span class="keyword">if</span> nargin<5
0039 As = 1;
0040 <span class="keyword">end</span>
0041
0042 <span class="comment">% synthesis of the PID parameters</span>
0043 <span class="keyword">switch</span> method
0044 <span class="keyword">case</span> {<span class="string">'KT'</span>,<span class="string">'kt'</span>}
0045 <span class="comment">% Kappa-Tau</span>
0046 <span class="comment">% FOPDT model parameters</span>
0047 m = model.m; L = model.L; T = model.T;
0048 <span class="comment">% tuning method parameter</span>
0049 Ms = param; <span class="comment">% required magnitude margin</span>
0050
0051 <span class="keyword">if</span> Ms==1.4
0052 <span class="comment">% conservative tuning</span>
0053 <span class="keyword">if</span> strcmp(regStruct,<span class="string">'PI'</span>)
0054 A0 = 0.29; A1 = -2.7; A2 = 3.7;
0055 B0 = 8.9; B1 = -6.6; B2 = 3.0;
0056 C0 = 0; C1 = 0; C2 = 0;
0057 D0 = 0.81; D1 = 0.73; D2 = 1.9;
0058 <span class="keyword">elseif</span> strcmp(regStruct,<span class="string">'PID'</span>)
0059 A0 = 3.8; A1 = -8.4; A2 = 7.3;
0060 B0 = 5.2; B1 = -2.5; B2 = -1.4;
0061 C0 = 0.89; C1 = -0.37; C2 = -4.1;
0062 D0 = 0.4; D1 = 0.18; D2 = 2.8;
0063 <span class="keyword">end</span>
0064 <span class="keyword">elseif</span> Ms==2
0065 <span class="comment">% more aggressive tuning</span>
0066 <span class="keyword">if</span> strcmp(regStruct,<span class="string">'PI'</span>)
0067 A0 = 0.78; A1 = -4.1; A2 = 5.7;
0068 B0 = 8.9; B1 = -6.6; B2 = 3.0;
0069 C0 = 0; C1 = 0; C2 = 0;
0070 D0 = 0.48; D1 = 0.78; D2 = -0.45;
0071 <span class="keyword">elseif</span> strcmp(regStruct,<span class="string">'PID'</span>)
0072 A0 = 8.4; A1 = -9.6; A2 = 9.8;
0073 B0 = 3.2; B1 = -1.5; B2 = -0.93;
0074 C0 = 0.86; C1 = -1.9; C2 = -0.44;
0075 D0 = 0.22; D1 = 0.65; D2 = 0.051;
0076 <span class="keyword">end</span>
0077 <span class="keyword">end</span>
0078
0079 a = m*L/T; <span class="comment">% normalized gain</span>
0080 tau = L/(L+T); <span class="comment">% normalized delay</span>
0081
0082 K = A0/a*exp(A1*tau+A2*tau^2);
0083 Ti = L*B0*exp(B1*tau+B2*tau^2);
0084 Td = L*C0*exp(C1*tau+C2*tau^2);
0085 b = D0*exp(D1*tau+D2*tau^2);
0086 N = 5;
0087
0088 <span class="keyword">case</span> {<span class="string">'IMC'</span>,<span class="string">'imc'</span>}
0089 <span class="comment">% Internal Model Control</span>
0090 <span class="comment">% FOPDT model parameters</span>
0091 m = model.m; L = model.L; T = model.T;
0092 <span class="comment">% tuning method parameter</span>
0093 lambda = param; <span class="comment">% lambda</span>
0094
0095 Ti = T + L^2/(2*(L+lambda));
0096 K = Ti / (m*(L+lambda));
0097 N = T*(L+lambda) / (lambda*Ti) - 1;
0098 Td = lambda*L*N / (2*(L+lambda));
0099 <span class="keyword">if</span> Td==0
0100 N=5;
0101 <span class="keyword">end</span>
0102 <span class="comment">% b is tuned according to KT rules for PID</span>
0103 b = 0.4*exp(0.18*(L/(L+T))+2.8*(L/(L+T))^2);
0104
0105 <span class="keyword">case</span> {<span class="string">'ZN (OL)'</span>,<span class="string">'zn (ol)'</span>}
0106 <span class="comment">% Ziegler & Nichols (open loop)</span>
0107 <span class="comment">% FOPDT model parameters</span>
0108 m = model.m; L = model.L; T = model.T;
0109 <span class="keyword">if</span> L~=0
0110 <span class="keyword">if</span> strcmp(regStruct,<span class="string">'PI'</span>)
0111 K = (0.9*T) / (m*L);
0112 Ti = 3*L;
0113 Td = 0;
0114 <span class="keyword">elseif</span> strcmp(regStruct,<span class="string">'PID'</span>)
0115 K = (1.2*T) / (m*L);
0116 Ti = 2*L;
0117 Td = 0.5*L;
0118 <span class="keyword">end</span>
0119 b = 1;
0120 N = 5;
0121 <span class="keyword">end</span>
0122
0123 <span class="keyword">case</span> {<span class="string">'ZN (CL)'</span>,<span class="string">'zn (cl)'</span>}
0124 <span class="comment">% Ziegler & Nichols (closed loop)</span>
0125 <span class="comment">% point of the frequency response</span>
0126 A = model.A; T = model.T;
0127
0128 Ku = 4*As/(pi*A);
0129
0130 <span class="keyword">if</span> strcmp(regStruct,<span class="string">'PI'</span>)
0131 K = 0.4*Ku;
0132 Ti = T/1.2;
0133 Td = 0;
0134 <span class="keyword">elseif</span> strcmp(regStruct,<span class="string">'PID'</span>)
0135 K = 0.6*Ku;
0136 Ti = T/2;
0137 Td = T/8;
0138 <span class="keyword">end</span>
0139
0140 b = 1;
0141 N = 5;
0142
0143 <span class="keyword">otherwise</span>
0144 error([<span class="string">'Unknown method: '</span> method]);
0145 <span class="keyword">end</span></pre></div>
<br>
<p><table bgcolor="#ffe4b0" border=0 width="100%" cellpadding=0 cellspacing=0><tr valign=top><td align=left width=20><a href="pid_structure.html"><img src="b_prev.gif" alt="Previous page" border=0 align=bottom></a> </td><td align=left> pid_structure</td><td> </td><td align=right>stepPIDcompare </td><td align=right width=20><a href="stepPIDcompare.html"><img src="b_next.gif" alt="Next page" border=0 align=bottom></a></td></tr></table>
<br>
<address>Generated on Wed 17-Mar-2004 09:29:44 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> © 2003</address>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -