智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3920|回复: 11
打印 上一主题 下一主题

[咨询] 求助 我们的车跑起来有时候走走停停 有时候却是速度很快会冲出去

[复制链接]

24

主题

448

帖子

1

精华

跨届大侠

I AM IRON MAN’S FAN

Rank: 10Rank: 10Rank: 10

积分
7066
威望
3447
贡献
1949
兑换币
1903
注册时间
2011-7-23
在线时间
835 小时
跳转到指定楼层
1#
发表于 2012-9-12 17:47:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是新手 用的官方方案 我们的车跑起来有时候就是走走停停 ,有时候甚至停止跑道上,一动不动,但是有时候却是速度很快会冲出去,不知道是怎么回事,求指导啊,还有就是刚发车的时候会冲好一段才会减速,我用液晶显示了一下 速度输出的变量 在跑道上放车时先是g_fSpeedControlOut逐渐增大 放手后g_fSpeedControlOut又逐渐减小 然后停下来g_fSpeedControlOut又逐渐增大 又开始走了 求指导

200

主题

2621

帖子

1

精华

杰出人士

蜗牛

Rank: 12Rank: 12Rank: 12

积分
12488

优秀会员奖章活跃会员奖章论坛骨干奖章论坛元老奖章在线王奖章资源大师奖章

QQ
威望
5973
贡献
3101
兑换币
1999
注册时间
2011-10-21
在线时间
1707 小时
2#
发表于 2012-9-12 17:58:47 | 只看该作者
亲减小速度控制积分项
回复 支持 反对

使用道具 举报

38

主题

1651

帖子

0

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
8770
威望
4444
贡献
2638
兑换币
1818
注册时间
2010-12-29
在线时间
844 小时
3#
发表于 2012-9-12 18:39:00 | 只看该作者
交流分量加上直流分量,就是走走停停的效果。
说明原地站立得还不稳。
回复 支持 反对

使用道具 举报

2

主题

73

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2521
威望
1217
贡献
674
兑换币
315
注册时间
2012-3-11
在线时间
315 小时
4#
发表于 2012-9-12 19:38:59 | 只看该作者
同意楼上,直立参数还没调好,先把直立的P和D调好吧
回复 支持 反对

使用道具 举报

2

主题

73

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2521
威望
1217
贡献
674
兑换币
315
注册时间
2012-3-11
在线时间
315 小时
5#
发表于 2012-9-12 20:03:49 | 只看该作者
“刚发车的时候会冲好一段才会减速”,这个很正常的,因为刚开机时速度为零,速度控制就要将速度从零调节到你的设定速度,g_fSpeedControlOut一直增大,所以‘刚发车的时候会冲好一段’,对于这个问题可以按一楼的方法做,也可以刚开始时设定一个比较小的速度,后面再逐渐把速度设定值加上去。至于车跑起来有走走停停等不稳定的现象,是行进过程中车身前后摆动(可能不是特明显),重心移动带来的加速度导致的,因为你的直立参数没调好
回复 支持 反对

使用道具 举报

2

主题

101

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1356
威望
688
贡献
410
兑换币
253
注册时间
2012-9-2
在线时间
129 小时
毕业学校
bh
6#
发表于 2012-9-12 20:24:25 | 只看该作者
你在 调一下陀螺仪的水平吧 这个真的很重要 好多奇怪的现象都是陀螺仪
回复 支持 反对

使用道具 举报

24

主题

448

帖子

1

精华

跨届大侠

I AM IRON MAN’S FAN

Rank: 10Rank: 10Rank: 10

积分
7066
威望
3447
贡献
1949
兑换币
1903
注册时间
2011-7-23
在线时间
835 小时
7#
 楼主| 发表于 2012-9-13 13:53:25 | 只看该作者
yukunlinykl 发表于 2012-9-12 18:39
交流分量加上直流分量,就是走走停停的效果。
说明原地站立得还不稳。

站的很稳了啊 就是解决不了问题 楼下的几个方法也试了 是不是PI控制那里不对啊下面是速度控制的一块 我用K10做的

void GetMotorPulse(void)
{

        LeftPulse=DMAGetCtr(DMA_CH0);
    RightPulse=DMAGetCtr(DMA_CH1);

        g_nLeftMotorPulse = (int)LeftPulse;
        g_nRightMotorPulse = (int)RightPulse;
        if(!MOTOR_LEFT_SPEED_POSITIVE)                g_nLeftMotorPulse = -g_nLeftMotorPulse;
        if(!MOTOR_RIGHT_SPEED_POSITIVE)                g_nRightMotorPulse = -g_nRightMotorPulse;
               
        g_nLeftMotorPulseSigma += g_nLeftMotorPulse;
        g_nRightMotorPulseSigma += g_nRightMotorPulse;
}
//==============================================================================
//                    速度控制
//------------------------------------------------------------------------------
void SpeedControl(void) {
       
        float fP,fI,fDelta;

        g_fCarSpeed = (g_nLeftMotorPulseSigma + g_nRightMotorPulseSigma) / 2;
        g_nLeftMotorPulseSigma = g_nRightMotorPulseSigma = 0;
        fDelta = CAR_SPEED_SET - g_fCarSpeed;

        fP = fDelta * SPEED_CONTROL_P;
        fI = fDelta * SPEED_CONTROL_I;

        g_fSpeedControlIntegral += fI;
        if(g_fSpeedControlIntegral > MOTOR_OUT_MAX)        g_fSpeedControlIntegral = MOTOR_OUT_MAX;
        if(g_fSpeedControlIntegral < MOTOR_OUT_MIN)        g_fSpeedControlIntegral = MOTOR_OUT_MIN;

        g_fSpeedControlOutOld = g_fSpeedControlOutNew;
       
        g_fSpeedControlOutNew = fP + g_fSpeedControlIntegral;
        if(g_fSpeedControlOutNew > MOTOR_OUT_MAX)        g_fSpeedControlOutNew = MOTOR_OUT_MAX;
        if(g_fSpeedControlOutNew < MOTOR_OUT_MIN)        g_fSpeedControlOutNew = MOTOR_OUT_MIN;

}

//------------------------------------------------------------------------------
//   
void SpeedControlOutput(void) {

        fValue1 = g_fSpeedControlOutNew - g_fSpeedControlOutOld;
        g_fSpeedControlOut = fValue1 * (g_nSpeedControlPeriod + 1) / SPEED_CONTROL_PERIOD + g_fSpeedControlOutOld;
       
}


回复 支持 反对

使用道具 举报

24

主题

448

帖子

1

精华

跨届大侠

I AM IRON MAN’S FAN

Rank: 10Rank: 10Rank: 10

积分
7066
威望
3447
贡献
1949
兑换币
1903
注册时间
2011-7-23
在线时间
835 小时
8#
 楼主| 发表于 2012-9-13 14:00:32 | 只看该作者
wangkunning 发表于 2012-9-12 20:03
“刚发车的时候会冲好一段才会减速”,这个很正常的,因为刚开机时速度为零,速度控制就要将速度从零调节到 ...

站的很稳了啊 就是解决不了问题 楼下的几个方法也试了 是不是PI控制那里不对啊下面是速度控制的一块 我用K10做的

void GetMotorPulse(void)
{

        LeftPulse=DMAGetCtr(DMA_CH0);
    RightPulse=DMAGetCtr(DMA_CH1);

        g_nLeftMotorPulse = (int)LeftPulse;
        g_nRightMotorPulse = (int)RightPulse;
        if(!MOTOR_LEFT_SPEED_POSITIVE)                g_nLeftMotorPulse = -g_nLeftMotorPulse;
        if(!MOTOR_RIGHT_SPEED_POSITIVE)                g_nRightMotorPulse = -g_nRightMotorPulse;
               
        g_nLeftMotorPulseSigma += g_nLeftMotorPulse;
        g_nRightMotorPulseSigma += g_nRightMotorPulse;
}
//==============================================================================
//                    速度控制
//------------------------------------------------------------------------------
void SpeedControl(void) {
        
        float fP,fI,fDelta;

        g_fCarSpeed = (g_nLeftMotorPulseSigma + g_nRightMotorPulseSigma) / 2;
        g_nLeftMotorPulseSigma = g_nRightMotorPulseSigma = 0;
        fDelta = CAR_SPEED_SET - g_fCarSpeed;

        fP = fDelta * SPEED_CONTROL_P;
        fI = fDelta * SPEED_CONTROL_I;

        g_fSpeedControlIntegral += fI;
        if(g_fSpeedControlIntegral > MOTOR_OUT_MAX)        g_fSpeedControlIntegral = MOTOR_OUT_MAX;
        if(g_fSpeedControlIntegral < MOTOR_OUT_MIN)        g_fSpeedControlIntegral = MOTOR_OUT_MIN;

        g_fSpeedControlOutOld = g_fSpeedControlOutNew;
        
        g_fSpeedControlOutNew = fP + g_fSpeedControlIntegral;
        if(g_fSpeedControlOutNew > MOTOR_OUT_MAX)        g_fSpeedControlOutNew = MOTOR_OUT_MAX;
        if(g_fSpeedControlOutNew < MOTOR_OUT_MIN)        g_fSpeedControlOutNew = MOTOR_OUT_MIN;

}

//------------------------------------------------------------------------------
//   
void SpeedControlOutput(void) {

        fValue1 = g_fSpeedControlOutNew - g_fSpeedControlOutOld;
        g_fSpeedControlOut = fValue1 * (g_nSpeedControlPeriod + 1) / SPEED_CONTROL_PERIOD + g_fSpeedControlOutOld;
        
}

回复 支持 反对

使用道具 举报

38

主题

1651

帖子

0

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
8770
威望
4444
贡献
2638
兑换币
1818
注册时间
2010-12-29
在线时间
844 小时
9#
发表于 2012-9-13 16:35:03 | 只看该作者
跑快了自然就看不出来了。
回复 支持 反对

使用道具 举报

2

主题

73

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2521
威望
1217
贡献
674
兑换币
315
注册时间
2012-3-11
在线时间
315 小时
10#
发表于 2012-9-13 19:07:09 | 只看该作者
不上跑道,放地上只往前走,能实现匀速跑吗
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 21:20 , Processed in 0.045699 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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