第2章 LIN总线物理层:单线12V总线、收发器原理与总线电平
各位同学,咱们今天聊聊LIN总线的物理层。说白了,就是这条线到底长什么样,信号怎么在线上跑,以及为什么非得用那个12V的单线。
我刚开始接触LIN的时候,心里也犯嘀咕:CAN总线那么成熟,干嘛还要搞个LIN?后来在项目里做车门模块,才真正体会到——有些地方,用LIN就是比CAN划算。你想想看,车窗开关、后视镜调节、座椅记忆,这些信号对实时性要求没那么高,用LIN一根线就能搞定,成本能省一大截。
2.1 单线12V总线——为什么是单线?
LIN总线只用一根线传输数据,参考地就是车身地(GND)。这和CAN的差分双线完全不一样。
- 成本低:少一根线,少一个连接器端子。在大批量生产中,每辆车能省下几块钱,一年几十万辆车,这笔账你自己算算。
- 线束轻:车门、座椅这些活动部件,线束越轻,耐久性越好。
- 速率够用:LIN最高20kbps,控制个车窗、灯光,绰绰有余。
2.2 收发器原理——以TJA1020为例
收发器是MCU和总线之间的桥梁。MCU出来的是3.3V或5V的逻辑电平,而总线上跑的是12V。这个转换工作,就交给收发器。
我习惯用NXP的TJA1020,这颗芯片在LIN收发器里算是经典款。咱们看看它的内部结构:
MCU(TXD) ——> TJA1020 ——> LIN Bus (12V)
MCU(RXD) <—— TJA1020 <—— LIN Bus (12V)
TJA1020的核心功能就两个:
- 发送:把TXD脚的低电平(0V)转换成总线上的显性电平(约0V~1.5V),把高电平(3.3V/5V)转换成总线上的隐性电平(接近12V)。
- 接收:把总线上的电平状态,通过RXD脚送回MCU。
2.3 总线电平定义——显性 vs 隐性
LIN总线的逻辑电平,和CAN有点像,但又不完全一样。它也是靠“线与”机制:
- 隐性电平(Recessive):总线电压接近12V(VBAT),对应逻辑“1”。这是总线的空闲状态。
- 显性电平(Dominant):总线电压被拉低到1.5V以下(通常0V~1.2V),对应逻辑“0”。
当多个节点同时发送时,只要有一个节点输出显性,总线就是显性。这就是“线与”。
| 状态 | 总线电压范围 | 逻辑值 | 说明 |
|---|---|---|---|
| 隐性 | VBAT * 0.8 ~ VBAT | 1 | 空闲状态,由上拉电阻维持 |
| 显性 | 0V ~ 1.5V | 0 | 由收发器内部下拉驱动 |
| 中间区 | 1.5V ~ VBAT * 0.8 | 无效 | 通信中不应出现此区间 |
2.4 上拉电阻与终端匹配
LIN总线上,每个节点内部都有一个上拉电阻,连接到VBAT。但和CAN不同,LIN不需要在总线两端各放一个120Ω终端电阻。
标准规定:
- 主节点:必须有一个1kΩ的上拉电阻,串联一个二极管(防止反向电流)。
- 从节点:可以有20kΩ~60kΩ的上拉电阻,也可以没有(取决于设计)。
为什么主节点要用1kΩ?因为主节点负责在总线空闲时把电压拉到12V,同时还要在显性时提供足够的电流。1kΩ的电阻,在12V下能提供约12mA的电流,足够驱动总线。
至于终端匹配,LIN总线不需要像CAN那样严格匹配阻抗。因为LIN速率低,信号波长很长,反射问题不严重。但如果你总线长度超过5米,或者节点数超过10个,我建议在离主节点最远的从节点处,加一个1nF的电容到地,能有效抑制高频噪声。
2.5 知识结构图:LIN物理层核心要素
下面这张图,把本章的核心知识点串起来了。你可以把它当作一个快速索引。
2.6 实战中的几个小细节
最后,分享几个我在项目里踩过的坑:
- 电源反接保护:TJA1020内部有反接保护,但外部最好还是加一个二极管。我曾经因为没加,工人插错电源,烧了一片收发器。
- ESD防护:LIN线是外露的,容易受到静电放电影响。在靠近连接器的地方,加一个TVS管(比如PESD1LIN),能省很多麻烦。
- 休眠唤醒:LIN总线支持本地唤醒和远程唤醒。远程唤醒靠的是总线上的显性脉冲。设计时要注意,从节点在休眠状态下,收发器必须能检测到这个脉冲,否则就唤不醒。