高手写的CAN总线入门总结
内容提要
CAN总线是一种串行通信总线,用于汽车工业和工业场合。CAN通信协议定义了信息传递方式和分层项。CAN总线具有高容错能力和抗干扰性。节点数量受驱动能力和终端匹配电阻限制。终端匹配电阻和电缆截面积保证通讯质量和距离。共模电压范围、信号延迟、节点容抗和电流隔离是CAN总线需要考虑的因素。
延伸解读
终端匹配电阻:不是可选项,而是必需项
文章明确指出,所谓近距离、低波特率CAN总线不加终端电阻的做法是错误的。因为CAN收发器从显性回到隐性需要终端电阻放电,否则导线分布电容会导致缓慢放电,造成位宽错误。这与RS485不同,RS485收发器内置失效保护电路,近距离低波特率下允许不加终端匹配电阻。设计时需注意这一差异,避免照搬RS485经验。
通讯距离的权衡:波特率、电阻与线径
文章通过实例说明,通讯距离受波特率、终端匹配电阻和电缆截面积共同影响。例如1.5 mm²双绞线在5kbps下,用120Ω电阻最远5km,用300Ω可到7km;而1Mbps时隔离后仅约25~30米。远距离时电缆直流电阻会与终端电阻分压,导致差分电压衰减,因此需确保最末端节点差分电压不低于1.2V。这提醒工程师在长距离低波特率场景中,可适当增大终端电阻以补偿压降。
高波特率下的隐形瓶颈:信号延迟与节点容抗
文章指出,高波特率时制约通讯距离的主要是信号延迟,包括隔离光耦、电缆和ESD器件带来的延迟。若重同步无法弥补,会导致采样错误和CRC校验失败。此外,节点容抗(收发器引脚、PCB走线、ESD器件等电容)会减缓上升沿和下降沿,造成位时间畸变,在高波特率下影响信号质量。因此CAN接口设计需选用高速隔离器件,并估算节点总电容,不能照抄RS485电路。
远距离通讯的保障:电流隔离与共模电压
文章强调,ISO 11898标准规定CAN收发器需容忍-2V~7V共模电压,但长达数千米的通讯系统中地电势差和地环流会形成更高共模电压,标准容忍能力远不够。因此电流隔离(隔离变压器供电、光耦或数字隔离器件传数据)对于远距离数据传输仍是必须的,可去除地环流、抑制噪声。这解释了为何实际项目中常对CAN模块进行电气隔离,但隔离器件也会降低通讯距离。
Q&A
CAN总线为什么最高速率只有1Mbps,而RS485可以达到10Mbps甚至更高?
CAN标准最大速率限制为1Mbps,主要原因是CAN总线对信号延迟敏感。在高波特率下,信号经过隔离光耦、传输电缆、ESD器件等产生的延迟可能导致采样错误,进而引发CRC校验错误。CAN的仲裁机制和错误检测机制也要求信号在较短时间内稳定,因此速率受限。而RS485没有这些限制,所以可以达到更高波特率。
CAN总线终端匹配电阻应该怎么选?不加会有什么问题?
终端匹配电阻大小应等于传输电缆的特性阻抗,通常为120欧姆。不加终端电阻会导致信号从显性回到隐性时放电缓慢,引起位宽错误,影响通讯质量。即使近距离、低波特率也不应省略终端电阻。在远距离通讯中,可适当增大终端电阻值(如150~300欧姆)以补偿电缆直流电阻造成的电压衰减,但需确保最末端节点差分电压不小于1.2V。
CAN总线的仲裁机制是如何工作的?优先级由什么决定?
CAN采用非破坏式逐位仲裁。当多个节点同时发送时,从仲裁域(标识符和RTR位)的第1位开始,连续输出显性电平(逻辑0)最多的节点获胜。标识符数值越低,优先级越高,因为显性电平更多。标识符为0的报文具有最高优先级。仲裁过程中,失败节点会自动退出并转为接收状态,不会破坏已发送的数据。
CAN总线在远距离通讯时,如何解决共模电压和地环流问题?
远距离通讯中,地电势差和地环流会形成高共模电压,可能超出CAN收发器的容忍范围(标准规定-2V~7V)。解决方法是在CAN接口电路中采用电流隔离:使用隔离变压器为系统供电,光耦或数字隔离器件隔离数据信号。电流隔离可以去除地环流、抑制噪声电压,提升数据传输的稳定性。
CAN总线最多可以连接多少个节点?受什么因素限制?
最大节点数量由收发器可驱动的最小负载阻抗决定,计算公式为:最大节点数 = 1 / (1/Rdiff_min + 1/RL_min + 1/RT_min),其中Rdiff_min为收发器差动输入阻抗最小值,RL_min为可驱动负载电阻最小值,RT_min为终端匹配电阻最小值。例如PCA82C251收发器(Rdiff_min=20kΩ,RL_min=45Ω,RT_min=120Ω)最大节点数为112个。
CAN总线的位填充机制是什么?有什么作用?
位填充是指发送器在帧起始、仲裁域、控制域、数据域和CRC校验和域中,每当检测到5个连续相同逻辑位时,自动插入一个补码位。接收器会自动删除填充位。作用包括:确保数据帧不会被误认为错误帧(6个连续相同位为错误帧标志)、正确识别帧结束(7个连续隐性位)、提供足够的上升沿用于网络同步。
CAN总线接口电路设计时,为什么不能直接照抄RS485接口电路?
虽然CAN和RS485都采用差分信号,但CAN对信号延迟和电容更敏感。CAN接口必须使用高速光耦或磁耦合器件进行隔离,以减少信号延迟(如TLP521因延迟过大不可用)。此外,CAN需使用专用共模电感、ESD器件,并根据波特率和通讯距离决定是否加滤波电容。直接照抄RS485电路可能导致通讯不稳定或失败。