一、 CAN简介 控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。 CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。 二、 CAN硬件接口 CAN总线为差分传输,可以很好的抵制共模干扰,如图,CAN-H和CAN-L的波形中间穿插了一个共模干扰,但是经过差分后的信号,很好的过滤掉了这个共模干扰。 需要注意的是,CAN总线有5V和3.3V之分,两种电压类型的CAN总线并不兼容,实际使用的时候注意区分。 三、 CAN数据包解析 如图,一个CAN总线数据包,由仲裁段(ID)、控制段、数据段、CRC等部分组成 。 标准帧、扩展帧主要是ID不一样,其它都一样,每个数据包最大可包含64bit(8byte)的数据。 四、 CAN发送逻辑 CAN RX接收CAN总线上的波形数据,故:CAN TX发送的数据,也会被自己RX接收,因此CAN可以监控自己数据是否发送成功。 CAN发送数据的时候,其他CAN设备接收了数据之后,如果CRC校验通过,会在ACK SLOT时间发送“显性”位填充,因此总线上不能只有一个节点,因为无接收节点在ACK SLOT时间内 发送“显性”位填充,而始终保持隐性,发送方会认为数据发送失败。 五、 CAN软件应用 i. 采样点设置 受总线上容性器件影响,CAN总线波形上升沿下降沿会变得平滑,采样点设置尤其重要,过前或者过后采集到的波形可能压差不符合压差标准而出现误采样数据出错的现象,一般推荐采样点82%左右 程序初始化的时候,根据实际需要的波特率以及采样点来确定参数的大小,计算的时候注意CAN模块寄存器BRP位宽可以满足设置的数据大小,防止寄存器溢出。 ii. 使用逻辑 用户可以设置CAN总线的自动重发机制,如果长时间数据都没有发送成功,建议取消发送。 推荐开启Error中断,当总线发生错误的时候,可以提前处理,也可以定期查询SR,出现Busoff之后做相应处理。 当出现了Error之后,需要排查出现Error的原因,解决了问题,才会使通信变得更稳定。
|