工业通信接口(上):UART(RS232/RS485)、SPI、I2C、CAN/CAN FD、LIN总线
各位工程师朋友,咱们今天聊聊工业通信接口。说实话,这玩意儿是嵌入式系统的“神经系统”。没有它,MCU就是个孤岛。我做了这么多年硬件,踩过的坑有一半都跟通信接口有关。今天我把UART、SPI、I2C、CAN和LIN这五个常用接口掰开揉碎了讲,全是实战经验。
一、UART与RS232/RS485:最经典的串行通信
UART(通用异步收发器)是所有MCU的标配。它只需要TX、RX两根线,就能实现全双工通信。但注意,UART的电平是TTL(0~3.3V或5V),工业现场根本扛不住干扰。所以就有了RS232和RS485。
核心区别:
- RS232: 点对点通信,±12V电平,传输距离15米左右。适合调试口、短距离设备互联。
- RS485: 差分信号,半双工,最远1200米,支持最多32个节点(标准)。工业现场首选。
我个人习惯,凡是需要走线超过1米,或者环境有电机、变频器的,直接上RS485。RS232在工业现场就是个“娇气包”。
实战技巧: RS485的A/B线一定要加120Ω终端电阻,而且只在总线两端加。我见过有人每个节点都加,结果信号反射得一塌糊涂。
二、SPI:高速同步通信的王者
SPI(串行外设接口)是速度担当。它用四根线:SCK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)。全双工,速度轻松上10MHz甚至更高。
SPI适合什么场景?ADC、DAC、LCD、SD卡、RF模块……说白了,需要高速批量数据传输的地方,SPI是首选。
我曾经踩过的坑: SPI的时钟极性(CPOL)和相位(CPHA)一定要和从设备匹配。有一次我调一个LCD屏,死活显示不出来,折腾了两天。最后发现是SPI模式配错了。嗯,从那以后我每次画原理图前,都会把从设备的datasheet翻出来,把CPOL和CPHA标在原理图上。
另外,SPI的布线要注意:SCK线尽量短,不要和MOSI/MISO平行走长距离,否则串扰会让你怀疑人生。
三、I2C:两线制,多从机,省引脚
I2C(Inter-Integrated Circuit)只用两根线:SCL(时钟)和SDA(数据)。每个设备有唯一地址,理论上可以挂127个从机。速度标准模式100kHz,快速模式400kHz,高速模式3.4MHz。
I2C的优点是省引脚。一个MCU的I2C接口,可以挂温度传感器、EEPROM、RTC、IO扩展芯片……特别适合板级通信。
但I2C有个“软肋”:上拉电阻。阻值选不好,要么信号爬不上去,要么功耗太大。我一般这样选:
| 总线电容 | 推荐上拉电阻 |
|---|---|
| 小于100pF | 4.7kΩ |
| 100pF~200pF | 2.2kΩ |
| 200pF~400pF | 1kΩ |
避坑指南: 我曾经在一个项目里,I2C总线上挂了5个设备,结果通信时好时坏。查了半天,发现是其中一个从机的地址冲突了。I2C地址是7位,但有些芯片的地址引脚可以配置,一定要仔细看datasheet,确保每个设备地址唯一。
四、CAN/CAN FD:工业与汽车的总线之王
CAN(控制器局域网)是工业自动化和汽车电子的事实标准。它用差分信号(CAN_H、CAN_L),抗干扰能力极强。标准CAN最高1Mbps,CAN FD(灵活数据速率)最高8Mbps,数据段最长64字节。
CAN的帧结构很讲究:有数据帧、远程帧、错误帧、过载帧。但咱们做硬件的,更关心物理层。
物理层要点:
- 终端电阻:120Ω,必须加在总线两端。
- 共模扼流圈:强烈建议加,能抑制共模干扰。
- ESD保护:CAN收发器本身有一定防护,但工业现场最好再加TVS管。
我记得有一次给一个矿山设备做CAN总线,现场有大型电机启停,总线动不动就报错。后来加了共模扼流圈和TVS,问题彻底解决。说白了,CAN物理层看着简单,但细节决定成败。
CAN FD是CAN的升级版。它兼容CAN的物理层,但数据段更长、速度更快。选型时要注意:MCU的CAN控制器是否支持CAN FD?如果不支持,就得外挂CAN FD控制器芯片。
五、LIN:低成本的车身网络
LIN(本地互联网络)是CAN的“小弟”。它基于UART,单线传输(加地线),速度最高20kbps。成本极低,适合车窗、座椅、雨刷、灯光等低速控制。
LIN网络采用主从结构:一个主节点,最多15个从节点。主节点通常由MCU承担,从节点可以是MCU或者专用LIN收发器。
LIN的物理层很简单:总线通过1kΩ上拉到12V(汽车电池电压)。信号以12V为高电平,0V为低电平。所以LIN收发器需要耐压36V以上。
注意: LIN的波特率误差要求很严,不能超过±2%。我见过有人用内部RC振荡器做LIN从机,结果温度一变化,通信就断了。所以,做LIN从机,最好用外部晶振或者精度高的内部振荡器。
六、接口选型速查表
| 接口 | 线数 | 速度 | 距离 | 节点数 | 典型应用 |
|---|---|---|---|---|---|
| UART (TTL) | 2 | ~1Mbps | 1m | 2 | 调试口、短距通信 |
| RS232 | 3~9 | ~115.2kbps | 15m | 2 | 工控设备、串口屏 |
| RS485 | 2 | ~10Mbps | 1200m | 32~256 | 工业总线、PLC |
| SPI | 4 | ~50MHz | 1m | 多(片选) | ADC、LCD、SD卡 |
| I2C | 2 | ~3.4MHz | 1m | 127 | 传感器、EEPROM |
| CAN | 2 | 1Mbps | 40m@1M | 110 | 汽车、工业控制 |
| CAN FD | 2 | 8Mbps | 40m@8M | 110 | 汽车、高端工业 |
| LIN | 1 | 20kbps | 40m | 16 | 车身低速控制 |
七、总结与建议
选通信接口,说白了就是看需求:
- 板级通信,省引脚:选I2C。
- 高速批量数据:选SPI。
- 远距离、抗干扰:选RS485或CAN。
- 低成本、低速:选LIN。
- 调试、简单通信:选UART。
最后说一句:无论选哪个接口,原理图设计时一定要留测试点。我吃过亏,板子贴好了才发现通信有问题,没测试点,飞线飞得想哭。嗯,就这些,下节课咱们聊工业通信接口的下半部分——以太网、USB、无线通信。