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

📄 optipid.m

📁 现有的PID参数优化方法往往难以同时兼顾系统对快速性、稳定性与鲁棒性的要求
💻 M
字号:

function [Gm Pm mp tr ts ess]=optipid(x1,x2,x3)
%G(S)=kp+ki/s+kd*s
kp=x1;ki=x2;kd=x3;
%%%%%%%%%%%%%%%%%%%%%%%%%  需要更改  %%%%%%%%%%%%%%%%%%%%%%%%%
T=0.2;
[numz,denz]=pade(T,5);
numd=[0,0,0,0.1,10];dend=[0.0004,0.0454,0.555,1.51,11];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
numpid=[kd,kp,ki];denpid=[0,1,0];
num=conv(conv(numpid,numd),numz);
den1=conv(conv(dend,denpid),denz);
den2=conv(conv(numpid,numd),numz);
den=den1+den2;
G=tf(num,den);     %高阶系统
Gk=tf(num,den1);
%%求在单位阶跃输入下,系统的性能指标. 
%调用格式:[tr,ts,tp,overshoot]=stats(G,err_tol,ref) 
%输入为系统对象: G 
%输出:  上升时间(tr),调整时间(ts),峰值时间(tp),超调量(overshoot) 
%ref 为期望输出,若未给定则默认为系统的稳态值。 
%err_tol为误差限,默认为 2% 
[Gm,Pm,Wg,Wp] = margin(Gk);
%[y,t]=step(G);
t=0:0.005:20;
y=step(G,t);                       %系统单位阶跃响应 
ref = y(end);
ess=abs(ref-1);
[maxy,itp] = max(y);                 %寻找最大值点及其下标 
%tp = t(itp);                         %根据最大值点下标求除峰值时间    
mp = (maxy - ref)/ref;           %求超调量 
if mp < 0 
  mp = 0; 
end  
%********计算上升时间************************* 
erorts=0.02;
i10 = min(find(y>=erorts*ref));         %上升到 10%时的下标 
i90 = min(find(y>=(1-erorts)*ref));         %上升到 90%时的下标 
if i10 > 1 & i90 < length(y)                     
  t10 = t(i10) -(t(i10)-t(i10-1))*(y(i10)-erorts*ref)/(y(i10)-y(i10-1));   %10%时的时间  
  t90 = t(i90) - (t(i90)-t(i90-1))*(y(i90)-(1-erorts)*ref)/(y(i90)-y(i90-1));  %90%时的时间   
  tr  = t90  - t10;                          %从 10%上升到 90%的时间,即上升时间   
else 
  tr = 0; 
end 
%***************计算调整时间*********************** 
err_tol=0.02; 
is = max(find(abs(y - ref*ones(size(y)))/ref>err_tol));    
if is < length(y) 
  ts = t(is + 1); 
else 
  ts = 0; 
end 

⌨️ 快捷键说明

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