接触过CAN总线的小伙伴都知道,在实际项目中CAN总线都需要在首尾两端各并上一个120Ω的电阻,那么问题来了,为什么一定要120Ω,其他阻值不行吗?
我们以TJA1044内部架构图为例进行展开。
CAN总线:显性代表0,隐性代表1。当总线为隐性时:TJA1044内部的上下两个管Q1和Q2都会截止,CANH和CANL处于无源状态,压差为0V。当总线为显性时:TJA1044内部的上下两个管Q1和Q2都会导通,CANH和CANL之间差生压差。如果总线上没有负载的时候,而且总线处于隐性时,那总线的差分阻值就会很大,致使外部很微小的能量都可以让总线进入显性,主要原因在于一般收发器的显性最小门限电压只有500mV左右。所以为了提高总线的抗干扰能力,就需要增加一个终端电阻,但是,这个阻值尽量小(同时也要考虑不能有过大的电流)。
除此之外,总线上的寄生电容也要考虑在内。总线显性时,电容充电,总线隐性时,电容放电,如果总线没有并任何的电阻的话,总线只能通过向两端的收发器进行放电了,这就影响了两个转态(隐性和显性)之间的转换时间,从而出现波形异常(爬坡),如上图所示。当信号在高速传输的路径中如果碰到阻抗不连续的情况,就会造成信号发射,也就是我们说的阻抗不连续,这个现象可以比喻成汽车在道路上行驶的时候遇到道路变窄时,汽车就很容易堵塞。
那加入终端电阻就可以消除或者减小这个信号反射的影响,主要靠终端电阻吸收信号的能量,使得能量不在总线上乱窜。那为什么是120Ω?其实在ISO 11898-2标准文件中就明确定义出,120Ω是通过大量的实验测试得出的最合理的阻值,如下图所示:
如果想验证实际项目中总线需要多大的终端电阻,可以通过下面手段进行测试。
在总线上并联可调电阻,通过调节可调电阻,进而观察波形即可。那这个终端电阻的封装是不是可以随意定?当然不行!这个终端电阻我们在选型时必须要考虑到接口短路的情况,也就是说在短路发生时,CAN总线的节点也必须能够承受的住短路的风险,假设CANH和电源18V发生了短路,那这个短路电流会直接通过CANH流向CANL,但是一般的CAN收发器能承受的电流也就几十ma(收发器内部有限流措施),就比如TJA1145就只有50mA。根据P=I²*R,可以得到50ma*50ma*120Ω=0.3W。考虑到环境存在高温的情况,所以电阻的功率选择在0.25W是合适的,也就是常见的1206封装,少数有0805和0603封装的。