虽然很早就对CAN协议有所耳闻,但自己一直没机会去探究,因此同很多人一样,对CAN的认知仅仅停留在“用在汽车领域的通讯”。由于最近一直在看锂电池BMS:
内容涉及到了CAN通信,并且工作中也会在客户那里听到一些J1939、NMEA2000等,于是就感觉是时候来了解下CAN了。
一、CAN
控制器局域网(Controller Area Network),最初是专门为解决乘用车的串行通信而研发的,其具有较高的实时处理能力、工作在较强电磁干扰下的高可靠性和良好的错误检测能力。其目的主要是简化汽车中各电子控制单元间的控制连接,降低成本。CAN协议中各通信节点通常是由控制器和收发器组成:

这种通讯结构是非主从式的,也就是任何节点都可以在总线上自由发言,广播式的通信最大的问题就是没有对象,各节点总是时刻在选取总线上自己关心的报文进行接收,然后处理,对于不关心的就过滤掉。那问题就来了,各节点是怎么来区分报文呢?这其实是自己开始时很困惑的地方,直到参悟了报文帧中的仲裁域。
二、报文
CAN的报文帧分为标准帧和拓展帧,也就是CAN2.0A和CAN2.0B,CAN2.0A是只支持标准帧,而CAN2.0B是支持拓展帧的。以常用的CAN数据帧为例,标准帧结构如下:

标准帧总计127bits,仲裁域中的标识符有11bits,这11位的标识符不仅用作优先级而且用作报文区分,但这11位的标识符就限制了同一网络中的最大节点数,为扩大最大通讯节点,于是就有了拓展帧:

拓展帧主要是增加了18位的拓展标识符,因此拓展帧的标识符就达到了29bits,帧的总长度为150bits。
三、SAE J1939
本文介绍了基于STM32的CAN通信测试,解析了CAN协议的报文结构、SAE J1939协议以及STM32的CAN控制器配置。通过CAN收发器TJA1050连接步进电机,实现对地球仪的转动控制。通过CAN盒或USART将数据传输到PC进行测试和验证。
最低0.47元/天 解锁文章
169

被折叠的 条评论
为什么被折叠?



