智能车制作

标题: 光电车速度控制时出问题 [打印本页]

作者: 残爱冰    时间: 2013-5-2 22:05
标题: 光电车速度控制时出问题
本帖最后由 残爱冰 于 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;
}

作者: 前行者cross    时间: 2013-5-2 22:05
残爱冰 发表于 2013-5-3 18:14
直立还是有一点点抖动,我是想加上速度控制再看看直立会不会好点,我看官方的出现什么速度PD控制(指反馈 ...

先把直立调稳,直立是速度和方向的基础。调直立除了看PD参数外,还要看看卡尔曼。清华的方案看个人理解吧,我觉得PI更合适些
作者: 攻城尸    时间: 2013-5-2 22:59
是啊,很纠结啊,各种方法都试了,找不到问题的关键在哪,大家有经验的交流一下嘛
作者: 前行者cross    时间: 2013-5-3 10:23
程序应该没问题,想知道你车的直立情况如何?如果直立稳定,调节PI参数,车子会稳定下来的(其他地方没有问题的话),调节方法参考清华方案
作者: 颠覆理论    时间: 2013-5-3 12:23
官网是先加P吗 ?
作者: silence2455    时间: 2013-5-3 15:30
官网先加的I
作者: 残爱冰    时间: 2013-5-3 18:14
前行者cross 发表于 2013-5-3 10:23
程序应该没问题,想知道你车的直立情况如何?如果直立稳定,调节PI参数,车子会稳定下来的(其他地方没有问 ...

直立还是有一点点抖动,我是想加上速度控制再看看直立会不会好点,我看官方的出现什么速度PD控制(指反馈速度而言),这个怎么理解啊?是不是我的改成 motor_r.speed_pwm_new = car.SpeedError*sp_p + car.Acceleration *sp_i;啊?请教~~~
作者: 残爱冰    时间: 2013-5-3 18:18
颠覆理论 发表于 2013-5-3 12:23
官网是先加P吗 ?

官网说相对于反馈随度而言是PD控制?不是PI吗?相对于位移而言是PI控制,说前面的PD分别对应IP参数,可能我搞反了,先调I的??
作者: 残爱冰    时间: 2013-5-4 12:57
攻城尸 发表于 2013-5-2 22:59
是啊,很纠结啊,各种方法都试了,找不到问题的关键在哪,大家有经验的交流一下嘛

你是用的PI吗?先调节I参数
作者: 攻城尸    时间: 2013-5-4 22:13
是按照清华方案的过程处理的,先处理I值,只是始终调不出理想的效果,不知道哪里有问题呢




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2