你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

非常希望大家能帮小弟解答这段程序的意义

[复制链接]
jiangyue 提问时间:2016-12-21 20:34 /
        ;程序的目的时求得两个轮子的速度矢量,但是却不知道为何是这样
    speed.left =TIM_GetCounter(TIM3)-0x7fff;
            speed.right=TIM_GetCounter(TIM4)-0x7fff;/

            speed.average*=0.7;
            speed.average+=((float)(speed.left+speed.right))*0.5*0.3       
                         TIM_SetCounter(TIM3, 0x7fff);
                  TIM_SetCounter(TIM4, 0x7fff);                                               

收藏 2 评论12 发布时间:2016-12-21 20:34

举报

12个回答
watershade 回答时间:2016-12-22 21:42:27
jiangyue 发表于 2016-12-22 09:58
speed.average的用途使用做一个速度pid环的输入,大神还想请教一下,这个kp是如何确定的, ...

sorry。我用了Kp让你误以为这是PID控制。如果你了解滤波算法就知道这是一个滤波的一种方法。

正常情况下VA = (Vl + Vr )/2
但是如果你将前一次的平均值取一部分去中和新获取值的波动。这就挺好了。但是这还不是最好的。你可以根据你实际测得的波动看看波动的变化情况,在指定滤波的深度或者更改更好的滤波算法

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

jackten 回答时间:2016-12-22 10:06:09
顶                                         
斜阳__ 回答时间:2016-12-22 08:57:41
帮顶         
watershade 回答时间:2016-12-21 21:01:29
显然程序应该设置TIM3和TIM7为编码器模式。而且设置初始值为0x7fff为初始值。应该是为了确定是正转还是反转。两个定时器分别记录一路的counter。正如代码注释一样一个是左轮,一个是右轮。

然后我们这里记speed.average为VA,左右轮的叫做Vl和Vr。
那么每一次更新后
VA_k = Kp * VA_(k-1) + (1 - Kp) *(Vl_k + Vr_k)/2
这里的Kp是0.7

那么这里的VA到底是干什么用的呐?是用来计算Vx和Vy以及Phi呐还是什么。就需要你提供如何利用VA的那段代码

5265325 回答时间:2016-12-22 08:49:42
jiangyue 回答时间:2016-12-22 09:58:36
watershade 发表于 2016-12-21 21:01
显然程序应该设置TIM3和TIM7为编码器模式。而且设置初始值为0x7fff为初始值。应该是为了确定是正转还是反转 ...

speed.average的用途使用做一个速度pid环的输入,大神还想请教一下,这个kp是如何确定的,
ts2000 回答时间:2016-12-22 14:58:34
看不明白。。。。帮顶吧
sssdd 回答时间:2016-12-22 16:15:57
表达式是:
(左边轮速度+右边轮速度)/2 =平均速度矢量。
前面两句就是在求速度。定时测量,计数就是速度。
然后,PID?出来了。
真正的速度平均值=历史的速度值*0.7+当前的速度值*0.3.这个算1阶IIR滤波器,因数是0.3。
所以,最后一句只是个滤波函数。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

anobodykey 回答时间:2016-12-22 16:43:33
帮顶,帮顶
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版