智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 7373|回复: 14
打印 上一主题 下一主题

PID算法详解

[复制链接]

1

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
73
威望
41
贡献
24
兑换币
22
注册时间
2015-10-7
在线时间
4 小时
毕业学校
传说
跳转到指定楼层
1#
发表于 2016-3-23 10:07:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       几乎没有一种控制算法比​ID​调节规律更有效、更方便的了。现在一些时髦点的调节器基本源自​PID​。甚至可以这样说:​PID​调节器是其它控制调节算法的MOM。

       PID解决了自动控制理论所要解决的最基本问题,既系统的稳定性、快速性和准确性。调节PID的参数,可实现在系统稳定的前提下,兼顾系统的带载能力和抗扰能力,同时,在PID调节器中引入积分项,系统增加了一个零积点,使之成为一阶或一阶以上的系统,这样系统阶跃响应的稳态误差就为零。由于自动控制系统被控对象的千差万别,PID的参数也必须随之变化,以满足系统的性能要求。这就给使用者带来相当的麻烦,特别是对初学者。下面简单介绍一下调试PID参数的一般步骤:

1.负反馈

       自动控制理论也被称为负反馈控制理论。首先检查系统接线,确定系统的反馈为负反馈。例如电机调速系统,输入信号为正,要求电机正转时,反馈信号也为正(PID算法时,误差=输入-反馈),同时电机转速越高,反馈信号越大。其余系统同此方法。

2.PID调试一般原则

a.在输出不振荡时,增大比例增益P。

b.在输出不振荡时,减小积分时间常数Ti。

c.在输出不振荡时,增大微分时间常数Td。

3.一般步骤

a.确定比例增益P

确定比例增益P 时,首先去掉PID的积分项和微分项,一般是令Ti=0、Td=0(具体见PID的参数设定说明),使PID为纯比例调节。输入设定为系统允许的最大值的60%~70%,由0逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益P为当前值的60%~70%。比例增益P调试完成。

b.确定积分时间常数Ti

比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。积分时间常数Ti调试完成。

c.确定积分时间常数Td

积分时间常数Td一般不用设定,为0即可。若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。

d.系统空载、带载联调,再对PID参数进行微调,直至满足要求。

PID调节经验总结

PID控制器参数选择的方法很多,例如试凑法、临界比例度法、扩充临界比例度法等。但是,对于PID控制而言,参数的选择始终是一件非常烦杂的工作,需要经过不断的调整才能得到较为满意的控制效果。依据经验,一般PID参数确定的步骤如下[42]:

(1)确定比例系数Kp

确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为

纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。

(2)确定积分时间常数Ti

比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。

(3)确定微分时间常数Td

微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%。

(4)系统空载、带载联调

对PID参数进行微调,直到满足性能要求。



PID代码



//定义变量

float Kp;                       //PI调节的比例常数

float Ti;                       //PI调节的积分常数

float T;                        //采样周期

float Ki;

float ek;                       //偏差e[k]

float ek1;                      //偏差e[k-1]

float ek2;                      //偏差e[k-2]

float uk;                       //u[k]

signed int uk1;                 //对u[k]四舍五入取整

signed int adjust;              //调节器输出调整量



//变量初始化

    Kp=4;

    Ti=0。005;

    T=0.001;

// Ki=KpT/Ti=0.8,微分系数Kd=KpTd/T=0.8,Td=0.0002,根据实验调得的结果确定这些参数

    ek=0;

    ek1=0;

    ek2=0;

    uk=0;

    uk1=0;

    adjust=0;



int piadjust(float ek)  //PI调节算法

{

    if( gabs(ek)<0.1 )

    {

       adjust=0;

    }

    else

    {     

       uk=Kp*(ek-ek1)+Ki*ek;  //计算控制增量

       ek1=ek;

       uk1=(signed int)uk;

       if(uk>0)

       {

          if(uk-uk1>=0.5)

          {

             uk1=uk1+1;

          }

       }

       if(uk<0)

       {

          if(uk1-uk>=0.5)

          {

             uk1=uk1-1;

          }

       }

       adjust=uk1;   

    }        

    return adjust;

}



下面是在AD中断程序中调用的代码。

       。。。。。。。。。。。

       else //退出软启动后,PID调节,20ms调节一次

           {

              EvaRegs.CMPR3=EvaRegs.CMPR3+piadjust(ek);//误差较小PID调节稳住

              if(EvaRegs.CMPR3>=890)

              {

                 EvaRegs.CMPR3=890; //限制PWM占空比

              }        

           }



后续将会有PID举列程序,请大家敬请期待!
https://shop101661071.taobao.com/  感谢对祥鉴电子工作室的支持!



回复

使用道具 举报

0

主题

6

帖子

0

精华

注册会员

Rank: 2

积分
133
威望
73
贡献
38
兑换币
41
注册时间
2016-2-24
在线时间
11 小时
毕业学校
成都大学
推荐
发表于 2016-4-13 12:54:25 | 只看该作者
额,有道理
回复 支持 1 反对 0

使用道具 举报

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
157
威望
89
贡献
44
兑换币
46
注册时间
2016-3-8
在线时间
12 小时
毕业学校
山东科技大学
2#
发表于 2016-3-23 18:03:24 | 只看该作者
666666
回复 支持 反对

使用道具 举报

9

主题

196

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608

活跃会员奖章优秀会员奖章

威望
779
贡献
413
兑换币
486
注册时间
2015-10-9
在线时间
208 小时
毕业学校
河南科大
3#
发表于 2016-3-23 19:48:02 | 只看该作者
学习了
回复 支持 反对

使用道具 举报

0

主题

25

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1093
威望
560
贡献
337
兑换币
360
注册时间
2015-11-18
在线时间
98 小时
毕业学校
黑龙江科技大学
4#
发表于 2016-3-23 19:49:50 | 只看该作者
学习了、
回复 支持 反对

使用道具 举报

5

主题

833

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6207

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章

威望
3103
贡献
1968
兑换币
1747
注册时间
2014-5-8
在线时间
568 小时
5#
发表于 2016-3-24 14:59:48 | 只看该作者
:D:D
回复 支持 反对

使用道具 举报

6

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
469
威望
261
贡献
134
兑换币
136
注册时间
2016-1-14
在线时间
37 小时
毕业学校
北华航天工业学院
6#
发表于 2016-3-24 15:05:26 | 只看该作者
学习了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
107
威望
57
贡献
36
兑换币
35
注册时间
2015-11-20
在线时间
7 小时
毕业学校
山东理工大学
7#
发表于 2016-3-29 19:33:05 | 只看该作者
顶顶顶
回复 支持 反对

使用道具 举报

10

主题

998

帖子

0

精华

版主

一个只会水的渣渣

Rank: 9Rank: 9Rank: 9

积分
22264

优秀会员奖章活跃会员奖章在线王奖章优秀版主奖章资源大师奖章

QQ
威望
17390
贡献
3076
兑换币
2900
注册时间
2015-1-22
在线时间
899 小时
毕业学校
安一中
8#
发表于 2016-4-12 23:18:44 | 只看该作者
楼主好人啊
回复 支持 反对

使用道具 举报

6

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2140
威望
1052
贡献
608
兑换币
694
注册时间
2015-3-22
在线时间
240 小时
毕业学校
土屋研究所
9#
发表于 2016-4-13 01:13:43 | 只看该作者
其实你仔细比较旧一点和新一点的有关控制的书你会发现在新一点的书里会指出经典pid控制器有哪些地方存在不足,哪里还可以改进,然后根据具体功能具体改进……相信强队的控制算法肯定考虑了更多的东西。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 06:05 , Processed in 0.157685 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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