智能车制作

标题: 速度控制的问题 [打印本页]

作者: 林夕22    时间: 2012-5-11 17:05
标题: 速度控制的问题
眼看着大家的车都在逐渐完善。咱心里着急啊。可着急有啥用个,还是要一步一步来。
这几天看了很多帖子,决定重新完善参数。
可是现在直立加上速度控制时,始终达不到视频中那么好啊。
每次用手推一下车能稳定,可是每次都要回来跑一段距离才能稳定啊。
大家有遇到相同的问题吗?
请各位高手指点一下。谢谢

作者: dright_chao    时间: 2012-5-11 18:51
同感,也在纠结中。加油~
作者: 涛涛    时间: 2012-5-11 19:31
纠结ing!!!!

作者: juliaレ葛    时间: 2012-5-11 20:19
电磁组官网的资料里g_nCarMotionCount,和CAR_MOTION_PERIOD是什么意思?????新手求教
作者: 林夕22    时间: 2012-5-11 20:25
juliaレ葛 发表于 2012-5-11 20:19
电磁组官网的资料里g_nCarMotionCount,和CAR_MOTION_PERIOD是什么意思?????新手求教

由于速度是每 100 毫秒进行一次计算。为了使得速度控制更加平滑,该函数将速度输出变化量平均分配到 20 步 5 毫秒的控制周期中。这个参考方案里有讲到的。
作者: 林夕22    时间: 2012-5-11 20:25
dright_chao 发表于 2012-5-11 18:51
同感,也在纠结中。加油~


作者: 林夕22    时间: 2012-5-11 20:26
涛涛 发表于 2012-5-11 19:31
纠结ing!!!!

{:soso_e100:}
作者: juliaレ葛    时间: 2012-5-11 20:27
3Q
作者: Goolloo    时间: 2012-5-12 00:15
林夕22 发表于 2012-5-11 20:25
由于速度是每 100 毫秒进行一次计算。为了使得速度控制更加平滑,该函数将速度输出变化量平均分配到 20 步 ...

是每5ms增加一次修正量,100ms的时候达到一开始计算的修正值是吗?

作者: 来电5566    时间: 2012-5-12 00:21
那真的积分不足吧,慢慢的网上加i试试啊,我是这个搞的,和中心值一起改
作者: 林夕22    时间: 2012-5-12 11:24
来电5566 发表于 2012-5-12 00:21
那真的积分不足吧,慢慢的网上加i试试啊,我是这个搞的,和中心值一起改

什么中心值啊?
作者: 林夕22    时间: 2012-5-13 16:10
Goolloo 发表于 2012-5-12 00:15
是每5ms增加一次修正量,100ms的时候达到一开始计算的修正值是吗?

不是,是每毫秒速度值都在改变,只是不断逼近计算出来的值。、
g_fSpeedControlOut = fValue * (float)(g_nSpeedControlPeriod + 1.0) / (float)100.0 + g_fSpeedControlOutOld;
这个语句没毫秒都在调用,nSpeedControlPeriod 从1加到99,等于99时, g_fSpeedControlOut就等于g_fSpeedControlOutNew了。

作者: 来电5566    时间: 2012-5-13 22:13
林夕22 发表于 2012-5-12 11:24
什么中心值啊?

就是陀螺仪垂直时候的零偏,我是这个搞的,不知道你的行不行啊

作者: xhuan1    时间: 2012-5-13 22:44
我加了速度控制,往一边走能回,往另一边就回补了了,搞的我都开始怀疑直立控制调好了没
作者: 林夕22    时间: 2012-5-14 16:23
来电5566 发表于 2012-5-13 22:13
就是陀螺仪垂直时候的零偏,我是这个搞的,不知道你的行不行啊

这个值不是确定的吗?要改吗?
作者: 风少    时间: 2012-5-14 23:09
本帖最后由 风少 于 2012-5-14 23:18 编辑
林夕22 发表于 2012-5-11 20:25
由于速度是每 100 毫秒进行一次计算。为了使得速度控制更加平滑,该函数将速度输出变化量平均分配到 20 步 ...


fValue = g_fSpeedControlOutNew - g_fSpeedControlOutOld;
g_fSpeedControlOut = fValue * (g_nSpeedControlPeriod + 1) / SPEED_CONTROL_PERIOD + g_fSpeedControlOutOld;
首先,这个在100ms内 g_fSpeedControlOutNew 和 g_fSpeedControlOutOld应该是不变的吧,还有 g_nSpeedControlPeriod  这个量是干什么的啊?到底具体如何平滑啊?请教……谢谢

作者: 林夕22    时间: 2012-5-15 11:28
风少 发表于 2012-5-14 23:09
fValue = g_fSpeedControlOutNew - g_fSpeedControlOutOld;
g_fSpeedControlOut = fValue * (g_nSpee ...

这个在100ms内 g_fSpeedControlOutNew 和 g_fSpeedControlOutOld是不变的

g_fSpeedControlOut = fValue * (float)(g_nSpeedControlPeriod + 1.0) / (float)100.0 + g_fSpeedControlOutOld;

这个语句每毫秒都在调用,nSpeedControlPeriod 从1加到99,等于99时, g_fSpeedControlOut就等于g_fSpeedControlOutNew了。()


作者: 风少    时间: 2012-5-15 21:06
林夕22 发表于 2012-5-15 11:28
这个在100ms内 g_fSpeedControlOutNew 和 g_fSpeedControlOutOld是不变的

g_fSpeedControlOut = fValu ...

你是定义的1ms中断是吧,我有个问题就是当100ms的时候,那么1ms中断里面的几乎所有的程序都要被执行(因为不同函数调用的时间都可以被100ms整除),那么这样有可能中断里面的程序还没执行完下一个中断就又开始了,也就是说我不太懂官网上说的定义一个1ms中断,那么5ms,10ms,100ms之类的函数怎么调用啊?请高手指点一下,谢谢!

作者: lixin815866    时间: 2012-5-15 22:02
林夕22 发表于 2012-5-15 11:28
这个在100ms内 g_fSpeedControlOutNew 和 g_fSpeedControlOutOld是不变的

g_fSpeedControlOut = fValu ...

nSpeedControlPeriod 从1加到99,等于99时, g_fSpeedControlOut就等于g_fSpeedControlOutNew了。()

那到了99 再让它从1开始循环。还是怎么找?为什么我的加上速度之后总是抖呢?

作者: 林夕22    时间: 2012-5-16 09:19
风少 发表于 2012-5-15 21:06
你是定义的1ms中断是吧,我有个问题就是当100ms的时候,那么1ms中断里面的几乎所有的程序都要被执行(因为 ...

我的理解是:每个1ms中断里不是所有程序都会执行,只有满足IF条件的时候才会执行。里面的g_n1MSEventCount在累加,定于1执行一个,等于2执行一个,一直大于等于5后然后清零。加起来就是5ms中断。100ms的话就是在每个5ms内计数,没进去一次就加1,等于20的时候就是100ms了。不知道这样有没有说清楚。

作者: 范德萨    时间: 2012-5-16 13:13
风少 发表于 2012-5-15 21:06
你是定义的1ms中断是吧,我有个问题就是当100ms的时候,那么1ms中断里面的几乎所有的程序都要被执行(因为 ...

1ms中断中设置变量i,不同的i对应不同的子程序,i累加,i清零。

作者: 风少    时间: 2012-5-16 15:03
林夕22 发表于 2012-5-16 09:19
我的理解是:每个1ms中断里不是所有程序都会执行,只有满足IF条件的时候才会执行。里面的g_n1MSEventCoun ...

恩,我也是这样认为的,但是要保证中断程序执行时间不能超过1ms,AD转换那块容易超出,感谢!

作者: 风少    时间: 2012-5-16 15:04
范德萨 发表于 2012-5-16 13:13
1ms中断中设置变量i,不同的i对应不同的子程序,i累加,i清零。

谢谢!

作者: 林夕22    时间: 2012-5-16 16:18
风少 发表于 2012-5-16 15:03
恩,我也是这样认为的,但是要保证中断程序执行时间不能超过1ms,AD转换那块容易超出,感谢!

这个时间似乎可以计算出来。
作者: 风少    时间: 2012-5-16 19:58
林夕22 发表于 2012-5-16 16:18
这个时间似乎可以计算出来。

还有哥们,最后那个PWM输出设置函数到底应该怎么做啊?不是最后加一个比例值就行了吗?关键是这个比例值要怎么调啊?我是新手,望指教,谢谢!
作者: 林夕22    时间: 2012-5-16 21:28
风少 发表于 2012-5-16 19:58
还有哥们,最后那个PWM输出设置函数到底应该怎么做啊?不是最后加一个比例值就行了吗?关键是这个比例值要 ...

如果是速度输出的话,应该是比例加积分的,  g_fSpeedControlOut = fValue * (g_nSpeedControlPeriod + 1) /
SPEED_CONTROL_PERIOD +g_fSpeedControlOutOld;;如果是最终输出,则是 fLeft = g_fAngleControlOut - g_fSpeedControlOut - g_fDirectionControlOut;
    fRight = g_fAngleControlOut -  g_fSpeedControlOut +  g_fDirectionControlOut;


作者: 风少    时间: 2012-5-17 00:46
林夕22 发表于 2012-5-16 21:28
如果是速度输出的话,应该是比例加积分的,  g_fSpeedControlOut = fValue * (g_nSpeedControlPeriod + 1 ...

我说的是最后加到电机上的占空比,你说的fLeft和fRight应该还要乘以一个比例值转化为占空比吧?这个占空比怎么确定?
作者: 林夕22    时间: 2012-5-18 09:48
风少 发表于 2012-5-17 00:46
我说的是最后加到电机上的占空比,你说的fLeft和fRight应该还要乘以一个比例值转化为占空比吧?这个占空比 ...

看你给PWM初始化的时候PWMPER的值是什么!
作者: 风少    时间: 2012-5-18 13:16
林夕22 发表于 2012-5-18 09:48
看你给PWM初始化的时候PWMPER的值是什么!

就比如说我周期给100,那么你最后控制占空比的时候也应该有个比例吧,这个比例怎么确定啊?就是你控制量怎么转化为占空比?

作者: 林夕22    时间: 2012-5-18 14:37
风少 发表于 2012-5-18 13:16
就比如说我周期给100,那么你最后控制占空比的时候也应该有个比例吧,这个比例怎么确定啊?就是你控制量怎 ...

你最后算出来的直立,方向,速度的值加减过后乘以你的PWMPER,再把这个值赋给PWMDTY就可以了
作者: 伤心的男人    时间: 2012-5-18 22:25
涛涛 发表于 2012-5-11 19:31
纠结ing!!!!

同感{:soso_e100:}

作者: 伤心的男人    时间: 2012-5-18 22:27
来电5566 发表于 2012-5-12 00:21
那真的积分不足吧,慢慢的网上加i试试啊,我是这个搞的,和中心值一起改

谢谢
作者: 伤心的男人    时间: 2012-5-18 22:28
同样纠结中
作者: 来电5566    时间: 2012-5-28 15:35
林夕22 发表于 2012-5-14 16:23
这个值不是确定的吗?要改吗?

问题解决了吗?最近考试,没怎么弄车了

作者: 林夕22    时间: 2012-5-29 10:00
来电5566 发表于 2012-5-28 15:35
问题解决了吗?最近考试,没怎么弄车了

车子跑的时候还是要一停一停的。纠结啊!
作者: 来电5566    时间: 2012-6-10 22:30
林夕22 发表于 2012-5-29 10:00
车子跑的时候还是要一停一停的。纠结啊!

今天去了实验室   把跑到铺好了  明天去认识调一下,你用的什么芯片?


作者: renqinglei    时间: 2012-6-12 09:57
来电5566 发表于 2012-6-10 22:30
今天去了实验室   把跑到铺好了  明天去认识调一下,你用的什么芯片?

你的车搞的怎么样了?我加了速度控制,加I的话会来回摆动,越摆越大,无法稳定,加了P之后如果把车放在离平衡位置偏差不大,他会在3-4CM来回走,如果打击一下,又开始来回摆了,越摆越大,也是无法稳定。是不是P加小了?
作者: 流浪花    时间: 2012-6-12 13:02
同样的问题 A
作者: kidbang    时间: 2012-6-12 15:55
风少 发表于 2012-5-15 21:06
你是定义的1ms中断是吧,我有个问题就是当100ms的时候,那么1ms中断里面的几乎所有的程序都要被执行(因为 ...

我感觉 不是每毫秒都变的啊  是平滑到二十步5毫秒中的  只是将除以100    然后调20次  这样每次的值就是20分之一 我这样理解对吗?


作者: 来电5566    时间: 2012-6-12 21:21
renqinglei 发表于 2012-6-12 09:57
你的车搞的怎么样了?我加了速度控制,加I的话会来回摆动,越摆越大,无法稳定,加了P之后如果把车放在离 ...

昨天的时候去搞了一下,怎么说的,现在稍微有点感觉了。就是你加大积分的话,上下摆动式肯定的。昨天尝试了一个新的方法就是速度控制的周期减小,原本是100ms的周期,现在改到25ms感觉要好了很多。你可以尝试一下。昨天下午试了一下跑完一圈没有问题。


作者: 林夕22    时间: 2012-6-12 21:52
来电5566 发表于 2012-6-12 21:21
昨天的时候去搞了一下,怎么说的,现在稍微有点感觉了。就是你加大积分的话,上下摆动式肯定的。昨天尝试 ...

几天没调车了,今天一跑结果转大S弯的时候老是跑出去。郁闷ing>>>

作者: 来电5566    时间: 2012-6-12 21:55
林夕22 发表于 2012-6-12 21:52
几天没调车了,今天一跑结果转大S弯的时候老是跑出去。郁闷ing>>>

我加你QQ吧

作者: 风少    时间: 2012-6-13 00:31
kidbang 发表于 2012-6-12 15:55
我感觉 不是每毫秒都变的啊  是平滑到二十步5毫秒中的  只是将除以100    然后调20次  这样每次的值就是2 ...

它的程序是每1ms平滑的,但是他说是5ms平滑,这有点出入

作者: 林夕22    时间: 2012-6-13 11:00
来电5566 发表于 2012-6-12 21:55
我加你QQ吧

1039469053

作者: 王海    时间: 2012-10-3 15:04
xhuan1 发表于 2012-5-13 22:44
我加了速度控制,往一边走能回,往另一边就回补了了,搞的我都开始怀疑直立控制调好了没

我们的现在也是这个情况,还望指导下.





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