CAN报文解析学习

#每一次总是记混编码类型的特点,这次决定记录一下

1.intel类型

高位在高字节,低位在低字节。以3A6B为例,3A为高位,6B为低位。

2.motorola类型

高位在低字节,低位在高字节

2.1 LSB

起始位为lsb(最低位),往前边填充,即符合motorola类型要求。以3A6B为例,3A为高位,6B为低位,协议给定起始位是32bit。

2.2 MSB

起始位为msb(最高位),往边后填充,即符合motorola类型要求。以3A6B为例,3A为高位,6B为低位,协议给定起始位是55bit。

注:在写dbc文件时,有一个inverted勾选选项。如若勾选,位的排列将会倒置。例如,第一个字节从左往右将会变为0bit到7bit。

3.物理值与信号值的转换

在DBC定义中,每一个消息都能定义数据类型,factor(精度)与偏移(offset)

数据类型:signed(有符号类型,可表示正负),usigned(无符号类型,不能表示负数)

注:signed类型的负数是采用补码,也就是取反+1表示的

物理值=信号值*factor+offset

这里我理解的物理值,是这条信息物理意义上的取值。而信号值则是在can通信时候的值,也就是不经过dbc文件能在CANtest里面直接读取到的值。

举例:报文信息motor_torque,占8个bit,精度为0.1,偏移为1。这里我们可以选择自动计算范围,8个bit即2的八次方=256,由于该报文是signed有符号的,因此信号值的取值范围是-128到127。通过转换物理值的范围就是-11.8到13.7。如硬件或算法有约束,可以自己在文件中指定范围。

因此转换过程是

控制:给定电机扭矩指令 >> DBC:信号值=(物理值-offset)/factor >> CAN总线

反馈:CAN总线 >> DBC:物理值=信号值*factor+offset >> 电机反馈扭矩指令

精度与偏移是自己理解的,不确定正不正确,如有错误希望各位积极讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值