智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 20519|回复: 63
打印 上一主题 下一主题

[其他] PID调节经验总结

  [复制链接]

0

主题

294

帖子

1

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
4137

特殊贡献奖章

QQ
威望
2664
贡献
1409
兑换币
35
注册时间
2007-11-22
在线时间
32 小时
跳转到指定楼层
1#
发表于 2008-4-21 02:44:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<>PID控制器参数选择的方法很多,例如试凑法、临界比例度法、扩充临界比例度法等。但是,对于PID控制而言,参数的选择始终是一件非常烦杂的工作,需要经过不断的调整才能得到较为满意的控制效果。依据经验,一般PID参数确定的步骤如下[42]:<BR>(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 确定比例系数Kp<BR>确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为<BR>纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。<BR>(2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 确定积分时间常数Ti<BR>比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。<BR>(3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 确定微分时间常数Td<BR>微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%。<BR>(4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统空载、带载联调<BR>对PID参数进行微调,直到满足性能要求。<BR>本文来自: DSP交流网(<A target=_blank href="http://www.hellodsp.com">www.hellodsp.com</A>) 详细出处参考:<A target=_blank href="http://www.hellodsp.com/bbs/viewthread.php?tid=688">http://www.hellodsp.com/bbs/viewthread.php?tid=688</A></P><P>&nbsp;</P><P>&nbsp;</P><P>PID代码</P><P>//定义变量<BR>float Kp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //PI调节的比例常数<BR>float Ti;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //PI调节的积分常数<BR>float T;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //采样周期<BR>float Ki;<BR>float ek;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //偏差e[k]<BR>float ek1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //偏差e[k-1]<BR>float ek2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //偏差e[k-2]<BR>float uk;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //u[k]<BR>signed int uk1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对u[k]四舍五入取整<BR>signed int adjust;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调节器输出调整量</P><P>//变量初始化<BR>&nbsp;&nbsp;&nbsp; Kp=4;<BR>&nbsp;&nbsp;&nbsp; Ti=0。005;<BR>&nbsp;&nbsp;&nbsp; T=0.001;<BR>// Ki=KpT/Ti=0.8,微分系数Kd=KpTd/T=0.8,Td=0.0002,根据实验调得的结果确定这些参数<BR>&nbsp;&nbsp;&nbsp; ek=0;<BR>&nbsp;&nbsp;&nbsp; ek1=0;<BR>&nbsp;&nbsp;&nbsp; ek2=0;<BR>&nbsp;&nbsp;&nbsp; uk=0;<BR>&nbsp;&nbsp;&nbsp; uk1=0;<BR>&nbsp;&nbsp;&nbsp; adjust=0;</P><P>int piadjust(float ek)&nbsp; //PI调节算法<BR>{<BR>&nbsp;&nbsp;&nbsp; if( gabs(ek)&lt;0.1 )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adjust=0;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; else <BR>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uk=Kp*(ek-ek1)+Ki*ek;&nbsp; //计算控制增量<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ek1=ek; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uk1=(signed int)uk;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(uk&gt;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(uk-uk1&gt;=0.5)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uk1=uk1+1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(uk&lt;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(uk1-uk&gt;=0.5)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uk1=uk1-1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adjust=uk1;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; return adjust;<BR>}</P><P>下面是在AD中断程序中调用的代码。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 。。。。。。。。。。。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else //退出软启动后,PID调节,20ms调节一次<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EvaRegs.CMPR3=EvaRegs.CMPR3+piadjust(ek);//误差较小PID调节稳住<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(EvaRegs.CMPR3&gt;=890)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EvaRegs.CMPR3=890; //限制PWM占空比<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P><P>本文来自: DSP交流网(<A target=_blank href="http://www.hellodsp.com">www.hellodsp.com</A>) 详细出处参考:<A target=_blank href="http://www.hellodsp.com/bbs/viewthread.php?tid=688">http://www.hellodsp.com/bbs/viewthread.php?tid=688</A></P>

0

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
威望
211
贡献
22
兑换币
0
注册时间
2008-1-19
在线时间
0 小时
2#
发表于 2008-4-24 02:37:03 | 只看该作者

Re:PID调节经验总结

怎么能判断出振荡呢??也不知道电机的模型????
回复 支持 反对

使用道具 举报

0

主题

294

帖子

1

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
4137

特殊贡献奖章

QQ
威望
2664
贡献
1409
兑换币
35
注册时间
2007-11-22
在线时间
32 小时
3#
 楼主| 发表于 2008-4-27 01:41:17 | 只看该作者

Re:PID调节经验总结

车在跑的时候如果左右摆动不稳定,应该就是不稳定了。
回复 支持 反对

使用道具 举报

489

主题

1691

帖子

1

精华

管理员

网站创始人&站长

Rank: 11Rank: 11Rank: 11Rank: 11

积分
85927

特殊贡献奖章资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

QQ
威望
56985
贡献
17372
兑换币
13142
注册时间
2007-6-8
在线时间
5785 小时
4#
发表于 2008-4-21 07:43:48 | 只看该作者

Re:PID调节经验总结

好帖&nbsp; 顶
回复 支持 反对

使用道具 举报

0

主题

50

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2684
威望
2242
贡献
442
兑换币
0
注册时间
2007-8-31
在线时间
0 小时
5#
发表于 2008-5-3 06:52:54 | 只看该作者

Re:PID调节经验总结

<>不错,顶下</P>
回复 支持 反对

使用道具 举报

0

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
306
威望
254
贡献
44
兑换币
20
注册时间
2007-12-18
在线时间
4 小时
6#
发表于 2008-5-7 04:49:00 | 只看该作者

Re:PID调节经验总结

好贴,顶!!<br>
回复 支持 反对

使用道具 举报

14

主题

929

帖子

1

精华

功勋会员

WJ

Rank: 10Rank: 10Rank: 10

积分
6304

特殊贡献奖章

威望
1456
贡献
4674
兑换币
17
注册时间
2008-4-6
在线时间
87 小时
7#
发表于 2008-5-18 02:55:26 | 只看该作者

Re:PID调节经验总结

不错啊
回复 支持 反对

使用道具 举报

5

主题

95

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1037
QQ
威望
916
贡献
93
兑换币
48
注册时间
2007-12-18
在线时间
14 小时
8#
发表于 2008-6-13 23:15:20 | 只看该作者

Re:PID调节经验总结

顶!
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
威望
194
贡献
22
兑换币
0
注册时间
2008-7-9
在线时间
0 小时
9#
发表于 2008-7-15 00:06:33 | 只看该作者

Re:PID调节经验总结

<>不错啊 !!</P>
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
126
QQ
威望
174
贡献
22
兑换币
0
注册时间
2008-7-15
在线时间
0 小时
10#
发表于 2008-7-15 06:27:31 | 只看该作者

Re:PID调节经验总结

好帖 !!!顶
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 01:53 , Processed in 2.277002 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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