终端分别并联120Ω电阻
如何学习CAN总线? 很多经验之谈
终端电阻,CAN和RS485一样,要在终端减少差分信号的反射。我记得最经典的一张图是这么画的,水流在试管(平躺)的尾部受阻,水也就涌了回来。差分信号也是如此,你不在两个终端加电阻,信号会反弹回来影响通讯。终端电阻在CAN总线上要有两个,阻值为120欧姆,并联,最远的两端一边一个。多了不行少了也不行。你不确定的话,用万用表量一下,CANH和CANL之间60欧姆左右最好。如果有多个节点的话,终端电阻应适当加大。
![]()
CAN总线的终端电阻 好的,现在你应该已经明白,帧ID、帧信息和帧数据都是什么,知道CAN总线波特率是什么,终端电阻是什么,重要的是,你收到一个陌生设备发出的CAN总线数据了。你成功的迈出了学习CAN总线最重要的一步。
CAN 电信号定义与串口对比
Robomaster电控入门(3)RM系列电机控制 在物理层比较了一下CAN和串口的 电信号定义的不同。
差分信号
与其他通信方式重要差别之一是CAN采用的是“差分信号”,即通过组成总线的2根线(CAN-H和CAN-L)的电位差来确定总线的电平,信号是以两线之间的“差分”电压形式出现,总线电平分为显性电平和隐性电平。
CAN总线采用两种互补的逻辑数值"显性"和"隐性"。"显性"数值表示逻辑"0",而"隐性"表示逻辑"1"。当总线上同时出现“显性”位和“隐性”位时,最终呈现在总线上的是“显性”位。
与串口这种除了TX和RX,还需要用GND连接两个设备串行通讯方式不同,CAN总线只需要CAN_H和CAN_L两根线,就能够通过差分信号的方式表征逻辑"0"和逻辑"1"
CAN控制器与CAN收发器
CAN收发器的作用
顾名思义,收发器既可以收,也可以发,收是接收CAN总线上的差分数据,将数据转换为TTL电平,发送给控制器;发是将CAN控制器的TTL电平信号转换为差分信号进行总线数据传输。
CAN控制器的作用
CAN控制器一方面接收收发器的数据,进行解析后发送给CPU;另一方面接收CPU的指令数据,然后发送给CAN收发器。
120Ω终端电阻
高频信号传输时,信号波长相对传输线较短,信号在传输线终端会形成反射波,干扰原信号,所以需要在传输线末端加终端电阻,使信号到达传输线末端后不反射。
对于低频信号则不用CAN总线两端必须连接终端电阻才可以正常工作,终端电阻应该与通讯电缆的阻抗相同,典型值为120欧姆,其作用是匹配总线阻抗,提高数据通信的抗干扰性及可靠行。
很多单片机内部都集成了CAN控制器模块,拿比较常用的S32K14X系列单片机来举例,内部的CAN控制器功能框图如下,它将单片机的CPU想要发送的信息,转换成符合CAN标准的帧报文,再通过CAN收发器发送到总线上面。
CAN收发器将二进制的数据流(RX/TX)转换成了差分信号(CANH/CANL),CAN收发器电路是本文主要想讨论的地方;之前有分析过很多BMS的竞品,它们使用的CAN收发器大部分是来自NXP的TJA1051
不同CAN设备之间的通信标准一致性问题
CAN总线(一) CAN总线标准只规定了物理层和数据链路层,需要用户自定义应用层。不同的CAN标准仅物理层不同。
那么是不是CAN物理层的区别就只由选用的CAN收发器的型号决定??
每种CAN收发器的Datasheet里都会说明它支持的是哪种CAN标准。比如买来给Xavier用的SN65HVD230 CAN Board 的Datasheet里明确标明“Compatible With the Requirements of the ISO 11898 Standard”。
![]()
SN65HVD230 CAN Board 原理图 (看到自带120Ω电阻)
正点原子战舰板-《STM32开发指南》第三十章 CAN通信实验 里解释得更清楚
也就是说,CAN2.0就俩ISO标准,ISO11898(高速CAN:125Kbps~1Mbps) 和 ISO11519-2(低速CAN:125Kbps以下)
所以只要是通信速率能大于125Kbps的CAN设备都是遵循ISO11898标准,这样就很容易辨别。
多个不同CAN设备时120Ω电阻的把控
正点原子战舰板-《STM32开发指南》第三十章 CAN通信实验 里解释得很清楚
如果开发板不是作为CAN终端的话,需要把这个120Ω电阻去掉,以免影响通信。
多个不同CAN设备时的其他电信号问题
1.而对CAN总线物理层结构特性进一步了解,总线需要在终端连接两个120欧电阻,但是通过对所有测试点的电路检测可知,每个节点收发器的CAN_H与CAN_L之间均连接了1个120欧电阻,而CAN通信时仅需在总线终端各加1个电阻即可。
将总线中多余的120欧电阻去掉,而只保留两个节点的电阻,通过测试发现,此时的4节点、5节点通信均正常。
2.通过了解CAN物理层特征可知,CAN_H、CAN_L在隐性状态时的对地电压均为2.5V左右,经实际测量, ARM端CAN总线隐性对地电压约为2.3V,PC端CAN总线隐性对地电压约为2.2V,而ECU端CAN总线的隐性对地电压约为1.5V,由于总线电压的差异,CAN总线的对地电压被强制拉低,导致CAN控制器无法正常识别总线数据。
当ECU端的收发器VP230的供电由3.3V更改为5V后,其总线隐性对地电压约等于2.3V,此时ARM、ECU、PC间的任意两节点、三节点通信均正常。
CAN总线带宽问题
—我用can1控制了六个3508电机和两个2006电机,分开控制各部分都没有问题,8个一起控制时就出现了乱动,不受控制的现象,是什么问题?
—带宽不够啊,这个问题很早就有了