被控对象有时延,采用PID的pid三个参数的作用整定问题?

问题补充&&
猜你感兴趣
服务声明: 信息来源于互联网,不保证内容的可靠性、真实性及准确性,仅供参考,版权归原作者所有!Copyright &
Powered by查看: 1812|回复: 8|关注: 0
BP或者RBF神经网络用于PID参数整定的问题
看了刘金琨老师的先进pid控制matlab仿真一书,对P309页的那个RBF的例子的程序进行了分析,个人的理解和困惑如下,希望能得到帮助
1.受控对象的传递函数y(k)=(-0.1*y(k-1)+u(k-1))/(1+y(k-1)^2);给PID三个参数:kp,ki,kd赋初始值0.01,
2.循环1000次,每一次对应一个控制周期;
3.每次循环中计算y(k)与输入阶跃信号yd(k)=1的误差erro(k);
4.每次循环用RBF逼近y(k)活动RBF的输入ym(k),同时调整RBF的网络权值系数,使得ym(k)与y(k)的误差逐渐变小
5.设偏差E=erro(k)^2/2,利用梯度下降法计算E对PID三个参数:kp,ki,kd的偏分,通过公式变换成为ym(k)对三个参数的偏分,从而获得三个参数值
6循环结束后获得最终的PID三个参数值;
1.为什么要用RBF去逼近y(k)? 不能直接计算y(k)对三个参数的偏分?为什么要转换为ym(k)对三个参数的偏分?
2.神经网络在这个例子中的重要作用体现在哪里?
3.除了梯度下降法,还有没有其他方法?
第4条有笔误:应该是
4.每次循环用RBF的输出ym(k)逼近y(k),同时调整RBF的网络权值系数,使得ym(k)与y(k)的误差逐渐变小
仔细再读了一次程序,好像明白了:
du(k)=kp(k)*xc(1)+kd(k)*xc(2)+ki(k)*xc(3)
这一句将上一步获得的pid三个参数,再一次带入RBF网络,此时ym(k)是经过PID调节后的输出,此时使得ym(k)与y(k)的误差逐渐变小就是pid调节器的三个参数最优的过程。
flyinggdc 发表于
仔细再读了一次程序,好像明白了:
du(k)=kp(k)*xc(1)+kd(k)*xc(2)+ki(k)*xc(3)
这一句将上一步获得的pid ...
我现在也在弄这个东西,我的被控对象比较麻烦,写不成离散表达式的形式,我用的s函数RBF调PID,参数调的头大,效果与理想差很远
我把刘的例程传递函数改成了:
sys1=tf([0.025],[1 3 3 1 0]);
dsys1=c2d(sys1,ts,'tustin');
[num1,den1]=tfdata(dsys1,'v');
结果惨不忍睹,不知道哪里有问题
代码如下:
alfa=0.05;
beta=0.01;
x=[0,0,0,0,0,0]';
ci=zeros(6,12);
bi=10*ones(12,1);
w=0.10*ones(12,1);
h=[0,0,0,0,0,0,0,0,0,0,0,0]';
ci_1=ci_3=ci_1;ci_2=ci_1;ci_4=ci_5=ci_1;ci_6=ci_1;
bi_1=bi_2=bi_1;bi_3=bi_2;bi_4=bi_5=bi_1;bi_6=bi_2;
w_1=w;w_2=w_1;w_3=w_1;w_4=w;w_5=w_1;w_6=w_1;
u_4=0;u_3=0;u_2=0;u_1=0;uk_temp=0;
y_4=0;y_3=0;y_2=0;y_1=0;
xc=[0,0,0,0,0,0]';
error_1=0;error_2=0;
kp0=30;ki0=0.01;kd0=0.01;
xitekp=20;
xitekd=0.15;
xiteki=0.15;
%确定传递函数
sys1=tf([0.025],[1 3 3 1 0]);
dsys1=c2d(sys1,ts,'tustin');
[num1,den1]=tfdata(dsys1,'v');
for k=1:1:1000
& &time(k)=k*
& &yd(k)=1.0;
& &y(k)=den1(2)*y_1-den1(3)*y_2-den1(4)*y_3-den1(5)*y_4+num1(1)*uk_temp...
& && & +num1(2)*u_1+num1(3)*u_2+num1(4)*u_3+num1(5)*u_4;
& &for j=1:1:12
& && &h(j)=exp(-norm(x-ci(:,j))^2/(2*bi(j)*bi(j)));
& &ym(k)=w'*h;
& &d_w=0*w;
& &for j=1:1:12
& && &d_w(j)=xite*(y(k)-ym(k))*h(j);
& &w=w_1+d_w+alfa*(w_1-w_2);
& &d_bi=0*
& &for j=1:1:12
& && &d_bi(j)=xite*(y(k)-ym(k))*w(j)*h(j)*(bi(j)^-3)*norm(x-ci(:,j))^2;
& &bi=bi_1+ d_bi+alfa*(bi_1-bi_2);
& &for j=1:1:12
& &&&for i=1:1:6
& && &d_ci(i,j)=xite*(y(k)-ym(k))*w(j)*h(j)*(x(i)-ci(i,j))*(bi(j)^-2);
& &ci=ci_1+d_ci+alfa*(ci_1-ci_2);
%%%%%%%%%%%%%%%%%%%%%%Jacobian%%%%%%%%%%%%%%%%%%%%%%%
&&for j=1:1:12
& && &yu=yu+w(j)*h(j)*(-x(1)+ci(1,j))/bi(j)^2;
%%%%%%%%%%%%%%%%%%%%%%Start of Control system%%%%%%%%%%%%%%%%%%
& &error(k)=yd(k)-y(k);
& &kp(k)=kp_1+xitekp*error(k)*dyu(k)*xc(1);
& &kd(k)=kd_1+xitekd*error(k)*dyu(k)*xc(2);
& &ki(k)=ki_1+xiteki*error(k)*dyu(k)*xc(3);&&
& &if kp(k)&0
& && &kp(k)=0;
& &if kd(k)&0
& && &kd(k)=0;
& &if ki(k)&0
& && &ki(k)=0;
& &switch M
& &case 2&&%Only PID Control
& & & & & & & & kp(k)=kp0;
& & & & & & & & ki(k)=ki0;& &&&
& & & & & & & & kd(k)=kd0;
& &du(k)=kp(k)*xc(1)+kd(k)*xc(2)+ki(k)*xc(3);
& &u(k)=u_1+du(k);
& &uk_temp=u(k);
%Return of parameters
& &x(1)=du(k);
& &x(2)=y(k);
& &x(3)=y_1;
& &x(4)=y_2;
& &x(5)=y_3;
& &x(6)=y_4;
& &u_4=u_3;u_3=u_2;u_2=u_1; u_1=u(k);
& &y_4=y_3;y_3=y_2;y_2=y_1;y_1=y(k);
& &ci_6=ci_5;
& &ci_5=ci_4;
& &ci_4=ci_3;&&
& &ci_3=ci_2;
& &ci_2=ci_1;
& &bi_6=bi_5;
& &bi_5=bi_4;
& &bi_4=bi_3;& &
& &bi_3=bi_2;
& &bi_2=bi_1;
& &w_6=w_5;
& &w_5=w_4;
& &w_4=w_3;
& &w_3=w_2;
& &w_2=w_1;
& &xc(1)=error(k)-error_1;& && && && & %Calculating P
& &xc(2)=error(k)-2*error_1+error_2;& &%Calculating D
& &xc(3)=error(k);& && && && && && && &%Calculating I
& &error_2=error_1;
& &error_1=error(k);
& &kp_1=kp(k);
& &kd_1=kd(k);
& &ki_1=ki(k);&&
figure(1);
plot(time,yd,'r',time,y,'k:','linewidth',2);
xlabel('time(s)');ylabel('yd,y');
legend('ideal position','position tracking');
figure(2);
plot(time,y,'r',time,ym,'b','linewidth',2);
xlabel('time(s)');ylabel('y,ym');
figure(3);
plot(time,dyu,'r','linewidth',2);
xlabel('time(s)');ylabel('Jacobian value');
figure(4);
subplot(311);
plot(time,kp,'r','linewidth',2);
xlabel('time(s)');ylabel('kp');
subplot(312);
plot(time,ki,'r','linewidth',2);
xlabel('time(s)');ylabel('ki');
subplot(313);
plot(time,kd,'r','linewidth',2);
xlabel('time(s)');ylabel('kd');
elseif M==2
figure(1);
plot(time,yd,'r',time,y,'k:','linewidth',2);
xlabel('time(s)');ylabel('yd,y');
legend('ideal position','position tracking');
的顶顶顶得到的顶顶顶顶顶顶的得顶顶顶顶顶顶顶顶顶顶
看来都有这个过程,我最近也在做这个,都是在源程序的基础上进行改进,但我的问题是:如何把整定合适的PID参数传递到控制方程中????
有没有大神找出原因所在啊?换了一个被控对象后的根本得不到想要的结果啊
flyinggdc 发表于
我把刘的例程传递函数改成了:
sys1=tf([0.025],[1 3 3 1 0]);
dsys1=c2d(sys1,ts,'tustin');
我也遇到了同样的问题,可以讨论一下啊
站长推荐 /2
Powered by扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
PID控制器参数自整定方法的研究与实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口PID控制器的参数整定及其应用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
&&¥3.00
&&¥3.00
PID控制器的参数整定及其应用
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:451.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 pid参数整定 的文章

 

随机推荐