智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

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

    [复制链接]

8

主题

17

帖子

0

精华

高级会员

Rank: 4

积分
579
威望
407
贡献
72
兑换币
2
注册时间
2012-2-18
在线时间
50 小时
毕业学校
淮南师范学院
1#
发表于 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 小时
毕业学校
淮南师范学院
2#
发表于 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;
}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-27 19:35 , Processed in 0.043562 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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