智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12851|回复: 13
打印 上一主题 下一主题

[编程类] PID算法在智能车中如何应用

    [复制链接]

2

主题

39

帖子

0

精华

高级会员

Rank: 4

积分
532
威望
340
贡献
94
兑换币
6
注册时间
2012-3-3
在线时间
49 小时
毕业学校
西南石油大学
跳转到指定楼层
1#
发表于 2012-3-4 12:23:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5贡献
最近在看PID算法,虽然原理大致懂了,但是对于PID算法如何在智能车中如何应用,又该如何编程是一片模糊,求高手能解答哈,给个用PID算法指导车子的程序(最好带个说明哈)。不胜感激!

8

主题

17

帖子

0

精华

高级会员

Rank: 4

积分
579
威望
407
贡献
72
兑换币
2
注册时间
2012-2-18
在线时间
50 小时
毕业学校
淮南师范学院
2#
发表于 2012-3-5 17:15:54 | 只看该作者
P 比例控制-----控制器的输出与输入误差信号成比里关系
I  积分控制----控制器的输出与输入误差信号的积分成正比关系,积分积累
D  微分控制----控制器的输出与输入误差信号的微分(即误差的变化率)成正比,预测误差的变化
   void PidWork()
{
  L_u[2] = L_u[1];
  L_u[1] = L_u[0];
  L_u[0] = Goal_speed - Real_Speed;//p_speed是根据传感器的检测情况在软件中给定的理论速度,search_PACN10就是PACN10表实际速度
  Mp = Kp * L_u[0];//偏差的放大倍数,KP值大可以加快调节,但会使稳定性下降
  Mi = Mi + Ki * L_u[0];//积分累加,可以消稳态误差,但是会使稳定下降,动态响应变慢
  Md = Kd * (L_u[0] - 2 * L_u[1] + L_u[2]);//改善动态性能,减少超调,太大会有干扰
  Mp2 = Kp2 * (L_u[0] - L_u[1]);
  
  if(((Ki * L_u[0]) > E)||((Ki * L_u[0]) < -E)) //初始化q=1,E=5 用这个if来决定是否需要用积分来调节,如果刚开始的积分已经很大了,就不需要用积分来调节了
  q = 0;
  else q = 1;                  
  MPWM = MPWM + Mp + q * Mi + Md +Mp2;
// MPWM = MPWM + Mp+ Md +Mp2;
  
  if(MPWM > 1000) MPWM = 1000;//保证不溢出
  if(MPWM < 0) MPWM = 0;
  MPWM=MPWM/30;
  if(MPWM>100) MPWM=100;
  if(MPWM<0) MPWM=0;
  PWMDTY1=(int)MPWM;

  Mp = 0;//调节一次后要把PID值清0
  Mi = 0;
  Md = 0;
  Mp2 = 0;
}
回复

使用道具 举报

8

主题

17

帖子

0

精华

高级会员

Rank: 4

积分
579
威望
407
贡献
72
兑换币
2
注册时间
2012-2-18
在线时间
50 小时
毕业学校
淮南师范学院
3#
发表于 2012-3-5 17:16:27 | 只看该作者
P 比例控制-----控制器的输出与输入误差信号成比里关系
I  积分控制----控制器的输出与输入误差信号的积分成正比关系,积分积累
D  微分控制----控制器的输出与输入误差信号的微分(即误差的变化率)成正比,预测误差的变化
   void PidWork()
{
  L_u[2] = L_u[1];
  L_u[1] = L_u[0];
  L_u[0] = Goal_speed - Real_Speed;//p_speed是根据传感器的检测情况在软件中给定的理论速度,search_PACN10就是PACN10表实际速度
  Mp = Kp * L_u[0];//偏差的放大倍数,KP值大可以加快调节,但会使稳定性下降
  Mi = Mi + Ki * L_u[0];//积分累加,可以消稳态误差,但是会使稳定下降,动态响应变慢
  Md = Kd * (L_u[0] - 2 * L_u[1] + L_u[2]);//改善动态性能,减少超调,太大会有干扰
  Mp2 = Kp2 * (L_u[0] - L_u[1]);
  
  if(((Ki * L_u[0]) > E)||((Ki * L_u[0]) < -E)) //初始化q=1,E=5 用这个if来决定是否需要用积分来调节,如果刚开始的积分已经很大了,就不需要用积分来调节了
  q = 0;
  else q = 1;                  
  MPWM = MPWM + Mp + q * Mi + Md +Mp2;
// MPWM = MPWM + Mp+ Md +Mp2;
  
  if(MPWM > 1000) MPWM = 1000;//保证不溢出
  if(MPWM < 0) MPWM = 0;
  MPWM=MPWM/30;
  if(MPWM>100) MPWM=100;
  if(MPWM<0) MPWM=0;
  PWMDTY1=(int)MPWM;

  Mp = 0;//调节一次后要把PID值清0
  Mi = 0;
  Md = 0;
  Mp2 = 0;
}
回复

使用道具 举报

2

主题

39

帖子

0

精华

高级会员

Rank: 4

积分
532
威望
340
贡献
94
兑换币
6
注册时间
2012-3-3
在线时间
49 小时
毕业学校
西南石油大学
4#
 楼主| 发表于 2012-3-5 19:41:58 | 只看该作者
大象 发表于 2012-3-5 17:16
P 比例控制-----控制器的输出与输入误差信号成比里关系
I  积分控制----控制器的输出与输入误差信号的积分 ...

请问这个是实现PWM给电机加速的嘛?PID算法在智能车中还可以用于哪些方面哦?
回复

使用道具 举报

2

主题

39

帖子

0

精华

高级会员

Rank: 4

积分
532
威望
340
贡献
94
兑换币
6
注册时间
2012-3-3
在线时间
49 小时
毕业学校
西南石油大学
5#
 楼主| 发表于 2012-3-5 21:41:23 | 只看该作者
对了,大师,那个MP2那个等式是怎么回事?我的资料上写的是u(k)=u(k-1)+ao*e(k)+a1*e(k-1)+a2*e(k-2)   a0=kp+ki+kd a1=-kp-2*kd a2=kd.但是你给我的例子是a0=kp+ki+kd+kp2
回复

使用道具 举报

16

主题

243

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3024
威望
1478
贡献
922
兑换币
132
注册时间
2011-3-26
在线时间
312 小时
6#
发表于 2012-4-25 22:37:22 | 只看该作者
受教了
回复

使用道具 举报

4

主题

34

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1175
威望
576
贡献
355
兑换币
276
注册时间
2012-4-15
在线时间
122 小时
7#
发表于 2013-3-26 17:45:25 | 只看该作者
明白了
回复

使用道具 举报

0

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
41
威望
26
贡献
9
兑换币
15
注册时间
2013-10-9
在线时间
3 小时
毕业学校
温州大学
8#
发表于 2013-10-12 20:46:24 | 只看该作者
回复

使用道具 举报

2

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
415
威望
228
贡献
107
兑换币
139
注册时间
2013-9-11
在线时间
40 小时
毕业学校
辽工大
9#
发表于 2013-11-10 09:27:12 | 只看该作者
回复

使用道具 举报

6

主题

673

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2357

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

QQ
威望
1073
贡献
634
兑换币
740
注册时间
2013-7-5
在线时间
325 小时
10#
发表于 2014-1-16 20:43:53 | 只看该作者
先看看 以后用!!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 14:43 , Processed in 0.100801 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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