声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1850|回复: 3

[控制理论] 好心人帮我解释一下这个程序把

[复制链接]
发表于 2009-2-24 14:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
有没有好心的大侠帮我讲讲这个程序,最好每句都讲讲,谢谢了。
function [Kpidi,BsJ]=pid_gaf(Kpidi,BsJ)
global rin yout timef
ts=0.001;
sys=tf(400,[1,50,0]);  
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
rin=1.0;
u_1=0.0;u_2=0.0;
y_1=0.0;y_2=0.0;
x=[0,0,0]';
B=0;
error_1=0;
tu=1;
s=0;
P=100;
for k=1:1:P
   timef(k)=k*ts;
   r(k)=rin;
   
   u(k)=Kpidi(1)*x(1)+Kpidi(2)*x(2)+Kpidi(3)*x(3);
   
   if u(k)>=10
      u(k)=10;
   end
   if u(k)<=-10
      u(k)=-10;
   end   
   
   yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
   error(k)=r(k)-yout(k);
%------------ Return of PID parameters -------------
   u_2=u_1;u_1=u(k);
   y_2=y_1;y_1=yout(k);
   
   x(1)=error(k);                % Calculating P
   x(2)=(error(k)-error_1)/ts;   % Calculating D
   x(3)=x(3)+error(k)*ts;        % Calculating I
   
   error_2=error_1;
   error_1=error(k);
if s==0
   if yout(k)>0.95&yout(k)<1.05
      tu=timef(k);
      s=1;
   end
end
end
for i=1:1:P
   Ji(i)=0.999*abs(error(i))+0.01*u(i)^2*0.1;
   B=B+Ji(i);   
  if i>1   
   erry(i)=yout(i)-yout(i-1);
   if erry(i)<0
      B=B+100*abs(erry(i));
   end   
  end
end
BsJ=B+0.2*tu*10;
回复
分享到:

使用道具 举报

发表于 2009-2-24 23:03 | 显示全部楼层

回复 楼主 fanchunlifcl 的帖子

是Matlab程序吧,到Matlab版问问……
发表于 2009-2-24 23:11 | 显示全部楼层

每句有点离谱吧! 程序不是楼主的吗?
这是控制的东西没错!

逻辑过程不清楚, 较麻烦, 毕竟程序非自己写的!
程序过程不清楚, 可以实机操作, 一行一行试并看Help! 至少我会如此?

[ 本帖最后由 ChaChing 于 2009-2-25 08:15 编辑 ]
发表于 2009-2-25 10:46 | 显示全部楼层
一个pid控制的仿真程序
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-13 10:56 , Processed in 0.104125 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表