4、LIN物理层:单线12V总线、收发器(如TJA1020)、总线终端电阻、EMC要求
聊到LIN总线,很多人第一反应是「便宜、简单」。没错,它确实便宜,但简单不等于可以随便搞。我见过不少项目,软件写得飞起,结果一上车就出问题——最后查出来,全是物理层埋的雷。
物理层,说白了就是信号怎么在线上跑。LIN用的是单线12V总线,跟CAN那种差分双绞线完全不是一个路子。今天我就把这块掰开揉碎了讲清楚。
4.1 单线12V总线:为什么是12V?
LIN总线只用一根线,外加地线。信号电压以12V为基准。为什么选12V?因为汽车电气系统就是12V的,省得额外搞电源转换。
逻辑电平定义是这样的:
- 显性电平(Dominant):总线电压接近0V(实际低于0.6倍Vbat),代表逻辑0
- 隐性电平(Recessive):总线电压接近12V(实际高于0.8倍Vbat),代表逻辑1
你想想看,这跟CAN刚好反过来。CAN是显性为0,隐性为1。LIN是显性为0,隐性为1——嗯,逻辑上一样,但电平定义完全不同。
关键点:LIN总线的隐性电平是12V,不是5V也不是3.3V。所以你的MCU不能直接连总线,必须经过收发器。
我在项目中遇到过有人想省成本,用电阻分压直接把MCU的UART连到LIN线上。结果呢?通信时好时坏,最后查出来是电平不匹配,隐性状态MCU识别成了高电平,但噪声一进来就误判。老老实实加收发器吧,别省这个钱。
4.2 收发器:TJA1020 深度解析
收发器是LIN物理层的核心。市面上主流的是NXP的TJA1020,还有TI的TLIN2020、Microchip的MCP2003等。我用的最多的是TJA1020,皮实耐造。
4.2.1 TJA1020 内部框图
收发器干三件事:
- 发送:把MCU的TX信号转换成总线上的12V/0V电平
- 接收:把总线上的电平转换成MCU能识别的3.3V/5V逻辑
- 保护:过压、过流、热关断、地偏移保护
TJA1020的引脚不多,常用的就这几个:
| 引脚 | 名称 | 功能 |
|---|---|---|
| 1 | TXD | 发送数据输入(来自MCU) |
| 2 | RXD | 接收数据输出(到MCU) |
| 3 | NSLP | 休眠模式控制(低电平进入休眠) |
| 4 | BUS | LIN总线引脚 |
| 5 | GND | 地 |
| 6 | INH | 禁止输出(可用来控制外部稳压器) |
| 7 | BAT | 电池电源(12V) |
| 8 | WAKE | 唤醒输入 |
我的习惯:NSLP引脚一定要接MCU的GPIO控制,不要直接拉高或拉低。这样可以在不需要通信时让收发器进入休眠模式,整车功耗能降不少。我曾经在一个项目中,靠这个功能把待机电流从5mA降到了20μA。
4.2.2 典型应用电路
收发器外围电路其实很简单,但有几个关键点:
// TJA1020 典型应用电路示意
// MCU侧
MCU_TX ----> TJA1020 TXD (引脚1)
MCU_RX <---- TJA1020 RXD (引脚2)
MCU_GPIO ----> TJA1020 NSLP (引脚3)
// 总线侧
TJA1020 BUS (引脚4) ----> 1kΩ电阻 ----> LIN总线
TJA1020 BUS (引脚4) ----> 30pF电容 ----> GND
// 电源
TJA1020 BAT (引脚7) ----> 12V电池 (加100nF去耦电容)
TJA1020 GND (引脚5) ----> GND
注意那个1kΩ电阻和30pF电容。这不是随便选的,它们构成了一个低通滤波器,用来抑制总线上的高频噪声。我见过有人偷懒不装这个电容,结果EMC测试直接挂掉。
4.3 总线终端电阻:到底要不要加?
这个问题我经常被问到。CAN总线必须加120Ω终端电阻,那LIN呢?
答案是:LIN总线通常不需要终端电阻。但有一个例外——如果总线长度超过某个值,或者节点数太多,就需要考虑。
为什么不需要?因为LIN是低速总线(最大20kbps),信号上升时间相对较慢,反射问题不严重。而且LIN收发器内部已经有上拉电阻了。
具体来说:
- 每个LIN节点内部都有一个约30kΩ的上拉电阻到Vbat
- 主节点内部还有一个约1kΩ的上拉电阻(用于保证隐性电平)
- 这些电阻共同作用,形成了总线的偏置
注意:千万不要在LIN总线上加120Ω终端电阻!我见过有人把CAN的经验搬过来,结果总线电压被拉低,通信完全瘫痪。LIN不是CAN,别混用。
那什么时候需要加外部电阻?
- 总线长度超过10米
- 节点数超过16个
- 总线拓扑结构有长分支线
这种情况下,可以在主节点端加一个1kΩ的下拉电阻到地,或者在从节点端加一个30kΩ的上拉电阻到Vbat。具体加多少,得根据总线负载计算。
我曾经在一个项目中,总线长度达到了15米,节点数12个。刚开始通信偶尔丢帧,后来在总线两端各加了一个1kΩ的电阻到地,问题就解决了。嗯,这就是经验。
4.4 EMC要求:怎么过测试?
EMC是物理层设计的重头戏。LIN总线虽然速度慢,但它是单线,共模噪声抑制能力差,所以EMC设计反而比CAN更讲究。
4.4.1 常见EMC问题
- 辐射发射:总线上的高频谐波通过线束辐射出去
- 抗扰度:外部电磁干扰耦合到总线上,导致通信错误
- 静电放电:插拔连接器时产生的ESD损坏收发器
4.4.2 设计建议
我总结了几条实用的EMC设计规则:
- 总线加RC滤波:前面提到的1kΩ+30pF就是最基本的滤波
- PCB布线:LIN走线尽量短,远离时钟信号和电源走线
- 共模扼流圈:如果EMC测试不过,可以在总线入口加一个共模扼流圈
- TVS管:在总线对地之间加一个双向TVS管,电压选24V或36V
- 地线处理:收发器的GND要单独走线到电源地,不要跟数字地混用
避坑指南:我曾经在一个项目中,EMC辐射发射超标了8dB。查了两天,最后发现是收发器的BAT引脚去耦电容离芯片太远,导致高频噪声串到了总线上。把100nF电容挪到紧挨着引脚的位置,问题就解决了。记住:去耦电容要靠近电源引脚,越近越好。
4.4.3 测试标准
LIN总线的EMC测试主要参考ISO 7637和CISPR 25标准:
| 测试项目 | 标准 | 要求 |
|---|---|---|
| 辐射发射 | CISPR 25 | Class 3或Class 5(根据整车厂要求) |
| 传导发射 | CISPR 25 | 150kHz-108MHz |
| 抗扰度 | ISO 11452 | BCI法,100mA |
| 瞬态脉冲 | ISO 7637 | Pulse 1, 2a, 2b, 3a, 3b |
说实话,EMC这东西,理论是一回事,实际测试是另一回事。我建议你在设计阶段就预留好滤波和防护的位置,等测试不过的时候再补,那成本可就高了。
4.5 小结
LIN物理层看着简单,但细节决定成败。单线12V总线、TJA1020收发器、终端电阻的取舍、EMC防护——每一个环节都值得认真对待。
我个人习惯是:设计阶段就把物理层画清楚,该加的滤波和防护一个不少。等板子回来了,先拿示波器看总线波形,确认隐性电平在11V以上,显性电平在1V以下,再开始调软件。这样能省掉后面80%的调试时间。
下一章我们聊LIN协议的数据链路层,到时候你会看到,物理层搞定了,协议层其实就顺理成章了。