注册 登录
查看: 734|回复: 14

[平衡组] 速度控制不管PI参数怎么调,都没有效果!!怎么破???

[复制链接]
发表于 2014-4-27 11:21:56 | 显示全部楼层 |阅读模式
参考的是官方的速度控制程序,100ms执行一次,分20次平均输出。可是不管PI参数怎么调节都没有明显效果,各位大侠知道这是什么原因吗?为了看看极限在哪,我把PI参数调成几百也没有什么明显效果!!!!郁闷死了。
else if(EventCount==2)
    {
      SpeedControlCount ++;       //速度控制计数
      GetMotorPulse();          //获取电机的脉冲数 //速度采集计算函数
      SpeedControlOutput();         //速度控制输出函数
      if(SpeedControlCount>=20)
      {
         SpeedControlCount=0;      //速度控制计数清零
         SpeedControl();           //速度控制函数
         MotorPulseSigma_L=0;      //左电机脉冲数存储器清零
         MotorPulseSigma_R=0;      //右电机脉冲数存储器清零
         SpeedControlPeriod=0;
      }
void SpeedControl(void) //速度控制函数
{
     CAR_speed=(MotorPulseSigma_L + MotorPulseSigma_R)/2;
    CAR_speed=CAR_speed/20;                      //将脉冲数转成r/s.因为200线的编码器每转产生200个脉冲,这里定时100ms采集脉冲数
    PWM_Value=IncPIDCalc(CAR_speed);            //PID运算根据当前的脉冲数目得到偏差
    SpeedControlOutOld=SpeedControlOutNew;
    SpeedControlOutNew=PWM_Value;

     /********************* PWM限幅 **************************/
    #if 1
    if(SpeedControlOutNew >= MAXDUTY)        SpeedControlOutNew = MAXDUTY;          //限幅
    else if (SpeedControlOutNew <= MINDUTY)  SpeedControlOutNew = MINDUTY;
    else;
    #endif

}

int32 IncPIDCalc(int NextPoint)
{
      int32 iError;
    float fP, fI,iIncpid;
    iError = SETPOINT - NextPoint;            //增量计算
    fP = iError * P_DATA;
    fI = iError * I_DATA;
    SpeedControlIntegral += fI;
    iIncpid = fP + SpeedControlIntegral;
     return(iIncpid);                    //返回增量值
}
回复

使用道具 举报

发表于 2014-4-27 11:23:08 | 显示全部楼层
你现在是100ms才执行一次 速度控制吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 11:24:22 | 显示全部楼层
山外メ雲ジ 发表于 2014-4-27 11:23
你现在是100ms才执行一次 速度控制吧

是的,之前看见别人的程序都是这样的
回复 支持 反对

使用道具 举报

发表于 2014-4-27 13:53:35 | 显示全部楼层
SpeedControlPeriod,这个数你每一毫秒加一了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 13:54:57 | 显示全部楼层
公孙慕容 发表于 2014-4-27 13:53
SpeedControlPeriod,这个数你每一毫秒加一了吗?

加了,一进入中断就加了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 14:00:17 | 显示全部楼层
公孙慕容 发表于 2014-4-27 13:53
SpeedControlPeriod,这个数你每一毫秒加一了吗?

你们做的时候是不是每隔一段时间都得调一下加速度计中值?这个好麻烦的说。有没有自动矫正的方法?
回复 支持 反对

使用道具 举报

发表于 2014-4-27 15:02:26 | 显示全部楼层
草原上的星星 发表于 2014-4-27 14:00
你们做的时候是不是每隔一段时间都得调一下加速度计中值?这个好麻烦的说。有没有自动矫正的方法?

我也正在这么麻烦的调试呢
回复 支持 反对

使用道具 举报

发表于 2014-4-27 15:03:45 | 显示全部楼层
草原上的星星 发表于 2014-4-27 14:00
你们做的时候是不是每隔一段时间都得调一下加速度计中值?这个好麻烦的说。有没有自动矫正的方法?

复位上电的时候测啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 15:05:39 | 显示全部楼层
孟二冬 发表于 2014-4-27 15:03
复位上电的时候测啊

每次上电的时候都得人工调一次,好麻烦。我意思是可不可以用代码实现自动就矫正了
回复 支持 反对

使用道具 举报

发表于 2014-4-27 15:06:57 | 显示全部楼层
草原上的星星 发表于 2014-4-27 15:05
每次上电的时候都得人工调一次,好麻烦。我意思是可不可以用代码实现自动就矫正了

因为温度的原因温飘加上速度环就会好很多
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 15:09:46 | 显示全部楼层
公孙慕容 发表于 2014-4-27 15:06
因为温度的原因温飘加上速度环就会好很多

不好啊,速度环正出现问题呢。不管我怎么调,几乎都没什么效果。不管怎么调 I 参数都没有官方视频中那样往复运动,好郁闷。后天两门考试,现在什么都没有看,感觉整个人都不好了。。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 15:14:13 | 显示全部楼层
公孙慕容 发表于 2014-4-27 15:06
因为温度的原因温飘加上速度环就会好很多

你那速度环的 P I 参数大概在什么数量级的?我怀疑我数量级不对,官方代码中是缩小了8倍的数据,所以 I 参数才那么小,我感觉我的应该好大才对。不知你的看法如何。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-4-27 15:14:52 | 显示全部楼层
草原上的星星 发表于 2014-4-27 15:09
不好啊,速度环正出现问题呢。不管我怎么调,几乎都没什么效果。不管怎么调 I 参数都没有官方视频中那样往 ...

我刚刚加上速度环不过我是用的是官方方案就是用的是pi调节,我要看你的程序这么一部分不够
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 15:16:17 | 显示全部楼层
公孙慕容 发表于 2014-4-27 15:14
我刚刚加上速度环不过我是用的是官方方案就是用的是pi调节,我要看你的程序这么一部分不够

我怎么发给你?可以帮我看看吗?非常感谢!
回复 支持 反对

使用道具 举报

发表于 2014-4-27 16:52:20 | 显示全部楼层
顶一下,这个太难搞了
回复 支持 反对

使用道具 举报

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

本版积分规则

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