完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
;程序的目的时求得两个轮子的速度矢量,但是却不知道为何是这样
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); |
|
相关推荐
12个回答
|
|
sorry。我用了Kp让你误以为这是PID控制。如果你了解滤波算法就知道这是一个滤波的一种方法。
正常情况下VA = (Vl + Vr )/2 但是如果你将前一次的平均值取一部分去中和新获取值的波动。这就挺好了。但是这还不是最好的。你可以根据你实际测得的波动看看波动的变化情况,在指定滤波的深度或者更改更好的滤波算法 |
|
|
|
|
|
|
|
显然程序应该设置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的那段代码 |
|
|
|
|
|
naiztycheng 发表于 2019-2-15 12:05 speed.average的用途使用做一个速度pid环的输入,大神还想请教一下,这个kp是如何确定的, |
|
|
|
看不明白。。。。帮顶吧
|
|
|
|
表达式是:
(左边轮速度+右边轮速度)/2 =平均速度矢量。 前面两句就是在求速度。定时测量,计数就是速度。 然后,PID?出来了。 真正的速度平均值=历史的速度值*0.7+当前的速度值*0.3.这个算1阶IIR滤波器,因数是0.3。 所以,最后一句只是个滤波函数。 |
|
|
|
帮顶,帮顶
|
|
|
|
非常感谢,不知道那个是iir滤波 |
|
|
|
naiztycheng 发表于 2019-2-15 11:29 非常感谢,坛友们热心回答,让小弟收获知识的同时,更是感觉暖心 |
|
|
|
楼主有什么疑问可以在社区或QQ群多交流,这也是社区存在的意义 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1751 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1632 浏览 3 评论
4192 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1778 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2241 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-13 00:49 , Processed in 0.766296 second(s), Total 93, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号