智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 8514|回复: 27
打印 上一主题 下一主题

求指导如何调节速度PID保持相对静止的直立。。。。。

  [复制链接]

6

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
673
威望
385
贡献
198
兑换币
252
注册时间
2013-9-12
在线时间
45 小时
毕业学校
武汉长江工商学院
跳转到指定楼层
1#
发表于 2014-3-24 12:13:20 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
参考官方资料将代码加进去,没有出现错误,可是在调节速度PID的时候,基本没有反应,,,,这个是什么原因?下面是我的代码void SpeedControl(int bmq_l,int bmq_r) {
        float fDelta;
        float fDelta_cha;
        float fDelta_old,fD;
        float fP, fI;

        g_fCarSpeed = (bmq_l + bmq_r) / 2;
        g_fCarSpeed *= CAR_SPEED_CONSTANT;             //计算出电机转速
       
        fDelta = CAR_SPEED_SETfDelta - g_fCarSpeed;         //给定速-电机实际转
       
        fP = fDelta * SPEED_CONTROL_P;               //计算p
        fI = fDelta * SPEED_CONTROL_I;              //计算I
        g_fSpeedControlIntegral += fI;               
        /* if(g_fSpeedControlIntegral>=10)
        {g_fSpeedControlIntegral=10;}
        if(g_fSpeedControlIntegral<=-10)
        {g_fSpeedControlIntegral=-10;}
        if(fP>=1000)
        {fP=100;}
        if(fP<=-1000)
        {fP=-1000;} */
        fDelta_cha = fDelta - fDelta_old;       
        fD = fDelta_cha * SPEED_CONTROL_D;
       // if(fD>=220)
        //{fD=220;}
      //  if(fD<=-220)
        //{fD=-220;}
        g_fSpeedControlOutOld = g_fSpeedControlOutNew;
        g_fSpeedControlOutNew = fP +fD+ g_fSpeedControlIntegral;
        fDelta_old=fDelta;
        }
/************速度输出函数(编码器)**********/
void SpeedControlOutput(void)
{
  float fValue;
  fValue=g_fSpeedControlOutNew - g_fSpeedControlOutOld;
  g_fSpeedControlOut=fValue*(g_nSpeedControlPeriod)/100+g_fSpeedControlOutOld;
  g_nSpeedControlPeriod++;
}



/***********************************************************************/
/*
*  功能说明:直立速度计算
*  参数说明:angle                融合后最终角度
*            angle_dot            陀螺仪角速度
*
*  函数返回:无符号结果值
*  修改时间:2013-2-10
* 备注:参考清华源码
*/


/**************************速度闭环程序****************************************/

void MotorOutput(void)
{
  g_fLeftMotorOut = speed_Start - g_fSpeedControlOut;
  g_fRightMotorOut = speed_Start - g_fSpeedControlOut;

}


/******************************************************************************/
void Speed_Calculate(float angle,float angle_dot)
{
    /***********************************速度计算************************************/
    speed_Start = angle * P_ANGLE  + angle_dot * D_ANGLE ;  //直立时所要的速度
   // printf("\n转速:%d",speed_Start);
    MotorOutput();
    //P_ANGLE  P_GYRO  宏定义 直立所需要的PD参数

    Speed_L =g_fLeftMotorOut;//speed_Start;//左轮总速度
   // printf("\n左轮R:%d",Speed_L);
    Speed_R =g_fRightMotorOut;//speed_Start;//右轮总速度
   // printf("\n右轮R:%d",Speed_R);
    /***********************将最大速度限制在985个PWM内******************************/
    if(Speed_L > 985)  Speed_L = 985;
    if(Speed_L < -985) Speed_L = -985;
    if(Speed_R > 985)  Speed_R = 985;
    if(Speed_R < -985) Speed_R = -985;

    /***************因为驱动部分加了反相器,所以需对速度进行一个最终的处理******************/
    if(Speed_L > 0)     //因为加了反相器,所以PWM要反过来添加
        Speed_L_Last =  Speed_L;
    else
        Speed_L_Last = Speed_L;

    if(Speed_R > 0)     //因为加了反相器,所以PWM要反过来添加
        Speed_R_Last =  Speed_R;
    else
        Speed_R_Last =   Speed_R;

    /*************用所得到的对应角度的速度进行PWM控制********************/
    if(Speed_L >= 0)    //angle大于0,向前,小于0,向后
    {
        FTM_PWM_Duty(FTM0,FTM_CH3,(uint32)(Speed_L_Last-MOTOR_DEAD_VAL_L));    //加入死区电压
        FTM_PWM_Duty(FTM0,FTM_CH4,0);

    }
    else
    {
        FTM_PWM_Duty(FTM0,FTM_CH3,0);
        FTM_PWM_Duty(FTM0,FTM_CH4,(uint32)(-Speed_L_Last-MOTOR_DEAD_VAL_L));  //加入死区电压
    }

    if(Speed_R >= 0)    //angle大于0,向前,小于0,向后
    {
        FTM_PWM_Duty(FTM0,FTM_CH6,0);
        FTM_PWM_Duty(FTM0,FTM_CH5,(uint32)(Speed_R_Last-MOTOR_DEAD_VAL_R));    //加入死区电压
    }
    else
    {
        FTM_PWM_Duty(FTM0,FTM_CH5,0);
        FTM_PWM_Duty(FTM0,FTM_CH6,(uint32)(-Speed_R_Last-MOTOR_DEAD_VAL_R));   //加入死区电压
    }
}


回复

使用道具 举报

0

主题

3

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
333
威望
132
贡献
83
兑换币
85
注册时间
2015-10-16
在线时间
59 小时
毕业学校
江苏大学
28#
发表于 2016-3-19 18:54:35 | 只看该作者
我加了速度控制后,车子仍然直立的很稳???这是什么原因???
回复 支持 反对

使用道具 举报

2

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
468
威望
329
贡献
97
兑换币
57
注册时间
2014-11-18
在线时间
21 小时
毕业学校
石家庄学院
27#
发表于 2014-12-23 10:15:58 | 只看该作者
fske14 发表于 2014-6-6 13:35
我们也在调速度控制,就是在调好角度PD之后很稳定,加了速度PI之后开始抖动,我是先加I的,车子现象跟官网 ...

同求啊,但现在我想问问P,I 参数大概在什么范围之内呢?谢谢
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
威望
141
贡献
70
兑换币
75
注册时间
2014-9-6
在线时间
23 小时
毕业学校
四川师范大学成都学院
26#
发表于 2014-11-25 17:08:29 | 只看该作者
我的车也是静止不了!!!不知哪个大神的车吧官方代码加入后,车静止了吗???
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
386
威望
203
贡献
103
兑换币
117
注册时间
2013-12-15
在线时间
40 小时
25#
发表于 2014-6-6 13:35:48 | 只看该作者
小钟 发表于 2014-3-28 18:02
恩恩,真心感谢啊,,,谢谢

我们也在调速度控制,就是在调好角度PD之后很稳定,加了速度PI之后开始抖动,我是先加I的,车子现象跟官网上一样的,然后我加P,加了P之后车子就开始抖动了,如果想让车子静止在某个点,那P就要加大,加大之后车子就更抖,真心不知道该怎么解决,请问同学你们是怎么解决的?
回复 支持 反对

使用道具 举报

6

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
673
威望
385
贡献
198
兑换币
252
注册时间
2013-9-12
在线时间
45 小时
毕业学校
武汉长江工商学院
24#
 楼主| 发表于 2014-3-28 18:02:51 | 只看该作者
戥家三少 发表于 2014-3-28 17:58
是要累加的

恩恩,真心感谢啊,,,谢谢
回复 支持 反对

使用道具 举报

52

主题

725

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5889
威望
2514
贡献
1289
兑换币
1650
注册时间
2013-2-20
在线时间
1043 小时
毕业学校
韶关学院
23#
发表于 2014-3-28 17:58:24 | 只看该作者
小钟 发表于 2014-3-28 17:53
哦哦,那个你们编码器是是使用欧姆龙的么?关于编码器加入,需要在函数运行周期内讲测得的脉冲数累加起来 ...

是要累加的
回复 支持 反对

使用道具 举报

6

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
673
威望
385
贡献
198
兑换币
252
注册时间
2013-9-12
在线时间
45 小时
毕业学校
武汉长江工商学院
22#
 楼主| 发表于 2014-3-28 17:53:57 | 只看该作者
戥家三少 发表于 2014-3-28 17:37
直立要调很久的,我们也没什么方法

哦哦,那个你们编码器是是使用欧姆龙的么?关于编码器加入,需要在函数运行周期内讲测得的脉冲数累加起来么?
回复 支持 反对

使用道具 举报

52

主题

725

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5889
威望
2514
贡献
1289
兑换币
1650
注册时间
2013-2-20
在线时间
1043 小时
毕业学校
韶关学院
21#
发表于 2014-3-28 17:37:52 | 只看该作者
小钟 发表于 2014-3-28 12:58
恩恩,我是试试,,,谢谢啦,,,,大神你QQ多少?加你QQ,希望得到你的帮助,尽快调好稳定的直立

直立要调很久的,我们也没什么方法
回复 支持 反对

使用道具 举报

6

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
673
威望
385
贡献
198
兑换币
252
注册时间
2013-9-12
在线时间
45 小时
毕业学校
武汉长江工商学院
20#
 楼主| 发表于 2014-3-28 12:58:15 | 只看该作者
戥家三少 发表于 2014-3-28 12:04
加负号

恩恩,我是试试,,,谢谢啦,,,,大神你QQ多少?加你QQ,希望得到你的帮助,尽快调好稳定的直立
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 09:33 , Processed in 0.059689 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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