⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pid_tuning.html

📁 这是一个PID自动调节的程序
💻 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 &copy; 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>&nbsp;&nbsp;&nbsp;<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&lt;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&lt;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 &amp; 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 &amp; 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>&nbsp;</td><td align=left>&nbsp;pid_structure</td><td>&nbsp;</td><td align=right>stepPIDcompare&nbsp;</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> &copy; 2003</address>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -