4、LIN从节点硬件设计:从节点MCU选型、LIN收发器电路设计、电源管理电路
好,咱们进入正题。这一章聊的是硬件设计,说白了就是怎么把LIN从节点的“骨架”搭起来。很多刚入行的朋友觉得硬件设计就是照着参考设计画板子,其实没那么简单。我这些年踩过的坑,大部分都出在硬件细节上。
一个典型的LIN从节点,核心就三块:MCU(大脑)、LIN收发器(嘴巴和耳朵)、电源管理(心脏)。咱们一个一个说。
4.1 从节点MCU选型
MCU选型,我个人的习惯是先看外设,再看算力,最后看成本。LIN从节点对算力要求不高,但对外设的匹配度要求很细。
4.1.1 主流方案对比
目前市面上用得最多的两个系列:NXP的S32K1xx 和 ST的STM32G0/G4。我列个表,大家看得更清楚。
| 对比项 | S32K144 | STM32G070 |
|---|---|---|
| 内核 | ARM Cortex-M4F | ARM Cortex-M0+ |
| 主频 | 80 MHz | 64 MHz |
| LIN外设 | 2路LPUART(支持LIN) | 2路USART(需软件模拟) |
| 工作温度 | -40 ~ 125°C | -40 ~ 85°C |
| 典型成本 | 中高 | 低 |
看到这个表,你可能会问:为什么S32K144贵那么多还有人用?
嗯,这里有个关键点——汽车级认证。S32K144是AEC-Q100认证的,工作温度能到125°C。我去年做一个发动机舱内的LIN节点,环境温度动不动就105°C,STM32根本扛不住,只能选S32K。但如果你做的是座舱内的车窗开关、氛围灯,STM32完全够用,成本还能省一半。
4.1.2 选型避坑指南
我曾经在一个项目中选了某款国产MCU,号称支持LIN,结果发现它的UART在低功耗模式下根本没法唤醒。那叫一个惨,板子都贴片了才发现,最后只能飞线加一个外部中断引脚来唤醒。所以,选型时一定要确认:
- UART是否支持自动波特率检测(LIN协议要求)
- 是否支持低功耗模式下的UART唤醒
- 有没有独立的LIN控制器(不是所有MCU都有)
我个人建议,如果你做的是车规级产品,优先考虑S32K144。它的LPUART模块对LIN协议的支持非常完善,硬件上就能处理同步间隔场和波形检测,省去很多软件麻烦。
4.2 LIN收发器电路设计
LIN收发器,说白了就是MCU和LIN总线之间的“翻译官”。MCU输出的是3.3V或5V的UART电平,而LIN总线是12V的。收发器负责电平转换,还要处理总线冲突和故障保护。
4.2.1 典型电路:TJA1020
TJA1020是NXP的经典芯片,我用了快十年了。它的电路设计其实很简单,但有几个细节不注意就会出问题。
// 典型TJA1020电路连接
// MCU (S32K144) -> TJA1020
// TXD (PTA12) -> TXD (pin 1)
// RXD (PTA13) -> RXD (pin 4)
// VDD (3.3V) -> VCC (pin 5)
// GND -> GND (pin 3)
// LIN总线 -> LIN (pin 6)
这里我要强调一个容易忽略的点:TXD引脚的上拉电阻。TJA1020的TXD引脚内部没有上拉,如果MCU的TXD引脚在复位期间是高阻态,收发器可能会误发送数据,把总线拉低。我建议在TXD上加一个10kΩ上拉到VCC,确保复位期间总线是隐性状态。
4.2.2 总线保护电路
LIN总线是直接暴露在车身上的,什么静电、浪涌、反接都有可能。所以保护电路不能省。
- TVS管:选双向的,击穿电压24V左右。我习惯用SMBJ24CA。
- 串联电阻:在LIN引脚上串一个1kΩ电阻,限制浪涌电流。
- 电容:对地接一个100pF电容,滤除高频噪声。
我个人习惯在PCB布局时,把TVS管和电阻尽量靠近LIN连接器放置。这样浪涌电流在进入芯片之前就被泄放掉了。你想想看,如果TVS管离连接器很远,走线上的寄生电感会降低保护效果。
4.3 电源管理电路
电源管理是LIN从节点最容易出问题的地方。为什么?因为LIN从节点经常需要休眠和唤醒,电源电路既要保证低功耗,又要能快速响应。
4.3.1 电源架构选择
我见过两种主流方案:
- LDO直供:从VBAT(12V)直接降压到3.3V或5V。简单、成本低,但效率也低,待机功耗大。
- DC-DC + LDO:先用DC-DC降到5V,再用LDO降到3.3V。效率高,但成本高,PCB面积大。
对于LIN从节点,我建议用LDO直供。因为LIN从节点电流通常不超过100mA,LDO的功耗可以接受。而且LDO的静态电流可以做到很低,比如TI的TPS7A16,静态电流只有1μA,非常适合休眠场景。
4.3.2 休眠与唤醒电路
这里有个关键点:MCU休眠时,LIN收发器必须保持供电。否则总线上的唤醒信号来了,收发器没电,MCU永远醒不过来。
正确的做法:
- LDO的输出直接给LIN收发器供电
- MCU的VDD通过一个MOSFET开关控制,由MCU自己控制通断
- LIN收发器的RXD引脚连接到MCU的唤醒引脚(如WAKEUP或外部中断)
我曾经遇到一个案例:客户把LDO的使能引脚接到了MCU的GPIO上,MCU休眠时把LDO关了。结果总线上的唤醒信号来了,收发器没电,RXD输出不了低电平,MCU永远醒不过来。最后只能改板子,加了一个二极管和电容,让收发器在休眠时由VBAT直接供电。
4.3.3 电源滤波与去耦
车上的电源噪声很大,尤其是发动机点火时,VBAT上会有几百毫秒的跌落和尖峰。所以滤波不能马虎。
- 输入滤波:在VBAT输入端加一个100μF电解电容 + 0.1μF陶瓷电容
- 输出滤波:在LDO输出端加一个10μF陶瓷电容(ESR要低)
- 去耦电容:每个IC的电源引脚旁边放一个0.1μF电容,距离不超过5mm
注意:陶瓷电容的容值会随着直流偏置电压升高而下降。比如一个10μF/10V的电容,在5V偏置下实际容值可能只有6μF。所以选电容时,要留足余量。我一般选额定电压两倍于工作电压的电容。
4.4 小结
嗯,这一章的内容就这些。硬件设计没有太多花哨的技巧,关键是把基础打牢。MCU选型要看外设匹配度,LIN收发器要注意保护电路,电源管理要处理好休眠唤醒的逻辑。你把这些细节都照顾到了,板子回来基本一次点亮。
下一章咱们聊软件,LIN协议栈的移植和配置。到时候我会分享一些调试时的血泪史,敬请期待。