dmBot Techical Forum

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1419|回复: 1

MIT Mini Cheetah 驱动器 can 滤波器设置更正

[复制链接]

67

主题

148

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
42664
发表于 2020-10-28 08:36:19 | 显示全部楼层 |阅读模式
MIT Mini Cheetah 的驱动器 高帧率can数据会出现丢帧的现象,经排查发现,主函数初始化can.filter的位置以及参数配置有误。导致该配置无效,此时can会接收所有总线上的数据,can会频繁进入接收中断,驱动程序中can中断的优先级较低(如下图所示)。


mbed的can接口中有int CAN::filter(unsigned int id, unsigned int mask, CANFormat format, int handle)  API,该函数可以配置can滤波器的参数。
第一个参数id是FilterId               :该参数是期望的收到的ID                                            作用于FxR1寄存器的高11位
第二个参数mask是 FilterMask    :该参数表示CAN ID 过滤的ID中的哪些位是需要判断的    作用于FxR2寄存器的高11位
第三个参数format是 can的模式  :enum CANFormat {    CANStandard = 0,    CANExtended = 1,    CANAny = 2};  数据帧 扩展帧 还是两者均过滤
第四个参数handle是滤波器序号 :can一共有28个滤波器,选择其中的一个滤波器的序号
该函数默认使用32位的屏蔽位模式。

如果我们想直接收该驱动板的CANID相符的can数据,做如下配置即可
can.filter(CAN_ID, 0xFFFF, CANStandard, 0);
can滤波器.png
原程序中有一个参数载入的函数,含函数主要是载入一些校准参数 canid之类的参数,但我们需要设置的can滤波器使用到了变量CAN_ID ,如果将can.filter置于该函数之后,那么参数CAN_ID将无效.

按照上图修改即可达到直接收与电调canID相关的数据,屏蔽掉其他ID的数据,从而减少进入can中断的次数,避免高帧率下丢帧、can卡死的现象。


回复

使用道具 举报

5

主题

8

帖子

324

积分

版主

Rank: 7Rank: 7Rank: 7

积分
324
发表于 2020-11-2 21:00:27 | 显示全部楼层
楼主牛逼,亲测有效
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|dmBot Inc. ( 粤ICP备19140833号-1 )

GMT+8, 2024-5-21 02:05 , Processed in 0.025200 second(s), 24 queries .

Powered by dmBot!

© 2001-2029 dmBot Inc.

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