通信基础:串口通信原理、RS232/RS485标准、CAN总线基础、以太网基础

做运动控制这些年,我最大的体会就是:通信协议栈的根基,全在物理层。你想想看,上层协议写得再花哨,底下的电平都传不对,一切都是白搭。今天咱们就把这四种最常用的通信方式掰开揉碎了聊一聊。

一、串口通信原理

串口通信,说白了就是一根线发数据,一根线收数据,按位(bit)一个一个地传。我刚开始做项目时,总觉得它慢,后来才发现——简单、可靠、通用,这三个优点在工业现场比什么都重要。

1.1 异步串行通信

为什么叫异步?因为没有独立的时钟线。收发双方得事先约定好:

  • 波特率:每秒传多少位。比如9600、115200。
  • 数据位:通常是8位,也有5、6、7位的。
  • 停止位:1位或2位,用来分隔数据帧。
  • 校验位:奇校验、偶校验或无校验。

核心要点:收发双方的波特率误差不能超过2%。否则就会出现乱码。我在项目中遇到过,两块板子晶振精度不同,9600波特率下偶尔丢字节——后来换成115200反而好了,因为误差比例变小了。

1.2 数据帧格式

一个典型的串口数据帧长这样:

起始位(1位) + 数据位(8位) + 校验位(1位) + 停止位(1位)
    0       1 0 1 0 1 0 1 0     0/1         1

起始位是低电平,停止位是高电平。这个设计很巧妙——空闲时总线是高电平,起始位的下降沿正好用来同步。

1.3 硬件流控

RTS/CTS 这对信号线,很多人觉得没用。但我建议:如果距离超过3米,或者用无线模块,最好把流控接上。否则接收缓冲区一满,数据就丢了。

二、RS232 与 RS485 标准

这两个标准,是串口通信的物理层实现。很多人搞混,我简单说说区别。

2.1 RS232:点对点,全双工

参数RS232
传输方式单端(非平衡)
最大距离约15米(@9600bps)
信号电平±3V ~ ±15V
逻辑1-3V ~ -15V
逻辑0+3V ~ +15V
拓扑点对点

RS232 的电压摆幅大,抗干扰能力其实不错。但问题是——只能接一个设备。你想想看,一个运动控制系统里,电机驱动器、编码器、IO模块……全用232连,那得多少串口?

个人经验:调试阶段我习惯用232,因为笔记本自带串口(或者USB转232),接线简单。但正式产品,我几乎不用232。

2.2 RS485:多点,半双工

参数RS485
传输方式差分(平衡)
最大距离约1200米
信号电平差分电压 ±1.5V ~ ±6V
节点数最多32个(标准),可扩展至256个
拓扑总线型

RS485 用两根线(A、B)传差分信号。为什么能传1200米?因为差分信号抗共模干扰。工业现场电机一启动,地线上全是噪声,232早挂了,485还能稳稳地传数据。

避坑指南:我曾经在一条485总线上挂了16个驱动器,结果通信时好时坏。查了两天才发现——终端电阻没加。记住:总线两端必须各加一个120Ω终端电阻,用来匹配阻抗,防止信号反射。

三、CAN 总线基础

CAN 总线,运动控制领域的老大哥。为什么?因为它实时性好、可靠性高、多主通信

3.1 CAN 的物理层

CAN 也是差分信号,两根线:CAN_H 和 CAN_L。但和485不同的是:

  • 显性电平(逻辑0):CAN_H 3.5V,CAN_L 1.5V,差分2V
  • 隐性电平(逻辑1):CAN_H 2.5V,CAN_L 2.5V,差分0V

这个设计很有意思——显性电平会覆盖隐性电平。所以多个节点同时发数据时,谁发0谁就赢。这就是CAN的仲裁机制。

3.2 CAN 的数据帧

标准CAN帧长这样:

SOF + 11位ID + RTR + IDE + r0 + DLC(4位) + 数据(0-8字节) + CRC(15位) + ACK + EOF

注意那个11位ID,它不只是地址,还决定了优先级。ID越小,优先级越高。我习惯把急停信号设成ID=0x001,这样不管总线多忙,急停都能第一时间发出去。

关键点:CAN 的 CRC 校验是15位的,加上位填充机制,误码率极低。我在一个振动台上做过测试,连续跑72小时,零误码。

3.3 CAN 的位时序

CAN 的波特率由三个段决定:

  • 同步段(SS):1个时间量子
  • 传播段(PTS):1~8个时间量子
  • 相位缓冲段1(PBS1):1~8个时间量子
  • 相位缓冲段2(PBS2):1~8个时间量子

采样点通常在PBS1和PBS2之间。我建议采样点设在87.5%左右,这样抗干扰能力最强。

四、以太网基础

以太网现在越来越普及了。EtherCAT、PROFINET、EtherNet/IP……底层都是以太网。但很多人只会上层应用,对物理层一知半解。

4.1 以太网的物理层

常见的以太网物理层:

  • 10BASE-T:10Mbps,两对双绞线
  • 100BASE-TX:100Mbps,两对双绞线
  • 1000BASE-T:1Gbps,四对双绞线

注意:100M和1000M用的都是RJ45接口,但线序不同。100M只用1、2、3、6四根线,1000M八根全用。

4.2 MAC 与 PHY

以太网芯片内部通常分两层:

  • MAC(媒体访问控制):负责组帧、解帧、CRC校验
  • PHY(物理层):负责编码、解码、电平转换

两者之间通过MII/RMII接口连接。我建议用RMII,只需要9根线,比MII少一半。

个人习惯:做运动控制以太网通信时,我通常把MAC集成在MCU里,外挂一个PHY芯片(比如LAN8720A)。这样成本低,布线也简单。

4.3 以太网的帧结构

前导码(7字节) + 帧起始定界符(1字节) + 目标MAC(6字节) + 源MAC(6字节) + 类型/长度(2字节) + 数据(46-1500字节) + FCS(4字节)

最小帧长64字节,最大1518字节。为什么有最小帧长?因为要保证冲突检测(CSMA/CD)能正常工作。不过现在全双工模式下,这个限制其实已经不重要了。

五、四种通信方式对比

特性RS232RS485CAN以太网
传输距离15m1200m40m@1Mbps100m
速率115.2kbps10Mbps1Mbps100M/1Gbps
节点数232~256110理论上无限
实时性好(需协议支持)
成本
适用场景调试、短距多节点、长距实时控制高速、大数据

六、知识体系总览

下面这张图,把本章的核心逻辑串起来了:

通信基础:四种物理层方案 物理层通信方案 RS232 点对点 · 全双工 15m · 115.2kbps 调试、短距通信 RS485 多点 · 半双工 1200m · 10Mbps 工业总线、多节点 CAN总线 多主 · 差分信号 40m@1Mbps 实时控制、运动控制 以太网 MAC+PHY 100m · 100M/1G 高速、大数据量 选型建议 • 调试/短距 → RS232(简单可靠) • 多节点/长距 → RS485(性价比高) • 实时控制 → CAN(确定性好) • 高速/大数据 → 以太网(未来趋势)

七、写在最后

嗯,这一章的内容就到这里。四种通信方式,各有各的脾气。我个人建议:做运动控制,先把RS485和CAN吃透。这两个是工业现场的主力,也是后面讲协议栈的基础。

你想想看,物理层搞明白了,上层协议才能跑得稳。下一章咱们就开始聊数据链路层——怎么组帧、怎么纠错、怎么保证数据不丢。