智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2921|回复: 9
打印 上一主题 下一主题

[光电] 光电车速度控制时出问题

[复制链接]

10

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
653
威望
409
贡献
118
兑换币
143
注册时间
2011-10-31
在线时间
63 小时
跳转到指定楼层
1#
发表于 2013-5-2 22:05:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
30贡献
本帖最后由 残爱冰 于 2013-5-2 22:06 编辑

我按照官网的方法先加速度p控制,会出现小车来回运动的现象,可是我开始加i参数的时候,车子不但不会停留在平衡点,反而来回震荡更严重,这是怎么回事啊?速度是比例积分控制吧,我方向也没错啊,求大家帮我看看!!问一下我的程序有问题吗???
void speed_control(void)
{
  float   SpeedAverage;
  static float   SpeedErrorLast;
  SpeedAverage = (motor_l.pulse + motor_r.pulse)/2.0;  //平均脉冲数
  
  car.SpeedAverage = SpeedAverage/4.98/0.1/5;//4.98为轮子滚动1mm产生4.98个脉冲,时间为0.1s,(单位:mm/s)
  car.SpeedError = car.SpeedAverage - car.SpeedBase; //实际值 - 给定值
  car.Distance = car.Distance + car.SpeedError*0.1;//Distance不是距离,而是速度误差的积分。
  car.Acceleration = car.SpeedError - SpeedErrorLast;//Acceleration不是加速度,而是速度误差的微分。
  SpeedErrorLast = car.SpeedError;

  if(car.Distance>=100)  //积分饱和消除
  {
    car.Distance=100;
  }
  else if(car.Distance<=-100)
  {
    car.Distance=-100;
  }  

  motor_l.speed_pwm_old = motor_l.speed_pwm_new;
  motor_r.speed_pwm_old = motor_r.speed_pwm_new;

  motor_l.speed_pwm_new = car.SpeedError*1.2*sp_p + car.Distance*3.93*sp_i;  //要用正反馈,因为速度误差计算时是用实际值 - 给定值
  motor_r.speed_pwm_new = car.SpeedError*sp_p + car.Distance*sp_i;    //在电机控制中将此pwm分20次平均输出
   
  motor_l.pulse = 0;//脉冲清零,重新计算
  motor_r.pulse = 0;
}

最佳答案

查看完整内容

先把直立调稳,直立是速度和方向的基础。调直立除了看PD参数外,还要看看卡尔曼。清华的方案看个人理解吧,我觉得PI更合适些

25

主题

761

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5905

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

威望
1946
贡献
3251
兑换币
809
注册时间
2012-2-7
在线时间
354 小时
2#
发表于 2013-5-2 22:05:28 | 只看该作者
残爱冰 发表于 2013-5-3 18:14
直立还是有一点点抖动,我是想加上速度控制再看看直立会不会好点,我看官方的出现什么速度PD控制(指反馈 ...

先把直立调稳,直立是速度和方向的基础。调直立除了看PD参数外,还要看看卡尔曼。清华的方案看个人理解吧,我觉得PI更合适些
回复

使用道具 举报

0

主题

36

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1628
威望
799
贡献
525
兑换币
479
注册时间
2012-11-21
在线时间
152 小时
3#
发表于 2013-5-2 22:59:37 | 只看该作者
是啊,很纠结啊,各种方法都试了,找不到问题的关键在哪,大家有经验的交流一下嘛
回复

使用道具 举报

25

主题

761

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5905

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

威望
1946
贡献
3251
兑换币
809
注册时间
2012-2-7
在线时间
354 小时
4#
发表于 2013-5-3 10:23:05 | 只看该作者
程序应该没问题,想知道你车的直立情况如何?如果直立稳定,调节PI参数,车子会稳定下来的(其他地方没有问题的话),调节方法参考清华方案
回复

使用道具 举报

13

主题

197

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3560
威望
1655
贡献
937
兑换币
410
注册时间
2011-12-30
在线时间
484 小时
5#
发表于 2013-5-3 12:23:30 | 只看该作者
官网是先加P吗 ?
回复

使用道具 举报

2

主题

194

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1751
威望
884
贡献
499
兑换币
441
注册时间
2012-10-14
在线时间
184 小时
6#
发表于 2013-5-3 15:30:37 | 只看该作者
官网先加的I
回复

使用道具 举报

10

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
653
威望
409
贡献
118
兑换币
143
注册时间
2011-10-31
在线时间
63 小时
7#
 楼主| 发表于 2013-5-3 18:14:52 | 只看该作者
前行者cross 发表于 2013-5-3 10:23
程序应该没问题,想知道你车的直立情况如何?如果直立稳定,调节PI参数,车子会稳定下来的(其他地方没有问 ...

直立还是有一点点抖动,我是想加上速度控制再看看直立会不会好点,我看官方的出现什么速度PD控制(指反馈速度而言),这个怎么理解啊?是不是我的改成 motor_r.speed_pwm_new = car.SpeedError*sp_p + car.Acceleration *sp_i;啊?请教~~~
回复

使用道具 举报

10

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
653
威望
409
贡献
118
兑换币
143
注册时间
2011-10-31
在线时间
63 小时
8#
 楼主| 发表于 2013-5-3 18:18:30 | 只看该作者
颠覆理论 发表于 2013-5-3 12:23
官网是先加P吗 ?

官网说相对于反馈随度而言是PD控制?不是PI吗?相对于位移而言是PI控制,说前面的PD分别对应IP参数,可能我搞反了,先调I的??
回复

使用道具 举报

10

主题

99

帖子

0

精华

高级会员

Rank: 4

积分
653
威望
409
贡献
118
兑换币
143
注册时间
2011-10-31
在线时间
63 小时
9#
 楼主| 发表于 2013-5-4 12:57:56 | 只看该作者
攻城尸 发表于 2013-5-2 22:59
是啊,很纠结啊,各种方法都试了,找不到问题的关键在哪,大家有经验的交流一下嘛

你是用的PI吗?先调节I参数
回复

使用道具 举报

0

主题

36

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1628
威望
799
贡献
525
兑换币
479
注册时间
2012-11-21
在线时间
152 小时
10#
发表于 2013-5-4 22:13:54 | 只看该作者
是按照清华方案的过程处理的,先处理I值,只是始终调不出理想的效果,不知道哪里有问题呢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 16:41 , Processed in 0.057092 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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