3、物理层设计:信号编码方式、电平标准与传输介质选择
各位同学,咱们今天聊聊物理层。说实话,很多做嵌入式的人容易忽略这一层,觉得「不就是接几根线嘛」。但我在项目里吃过不少亏,才明白物理层要是没选好,上层协议再漂亮也是白搭。
物理层要解决三个核心问题:信号怎么编、电平怎么定、线怎么走。咱们一个一个说。
3.1 信号编码方式
信号编码,说白了就是怎么把0和1变成电信号。我见过不少新手直接拿MCU的GPIO往外怼,结果通信距离一远就乱码。嗯,这里要注意,编码方式决定了你的抗干扰能力和时钟恢复能力。
3.1.1 NRZ编码
NRZ,全称Non-Return-to-Zero,不归零编码。这是最朴素的编码方式:高电平代表1,低电平代表0。
// 举个简单的例子,发送字节 0xA5 (10100101)
// NRZ编码波形示意:
// 1: ━━━━
// 0: ────
// 波形:━━━━ ──── ━━━━ ──── ──── ━━━━ ──── ━━━━
NRZ的优点很明显:实现简单,带宽利用率高。但缺点也很致命——连续发送多个相同比特时,电平不变,接收端没法恢复时钟。我在一个老项目中用过NRZ,结果遇到连续32个0,接收端直接失锁了。
3.1.2 曼彻斯特编码
曼彻斯特编码就聪明多了。它用跳变来表示数据:从高到低代表1,从低到高代表0(也有反向定义的,看具体协议)。
为什么要这么干?因为每个比特中间都有跳变,接收端可以从跳变中提取时钟信号。这就是所谓的「自同步」特性。
// 同样是 0xA5,曼彻斯特编码波形:
// 1: ━┓ (高到低跳变)
// 0: ┏┛ (低到高跳变)
// 波形:┏┛ ━┓ ┏┛ ━┓ ━┓ ┏┛ ━┓ ┏┛
// 每个比特中间都有跳变,时钟信息嵌在数据里
我个人习惯在视觉仿生系统中用曼彻斯特编码。为什么?因为摄像头数据流里经常有长串的0或1(比如黑色背景区域),曼彻斯特编码能保证接收端始终同步。
3.2 电平标准
电平标准决定了你的信号能传多远、抗干扰能力多强。我见过有人用TTL电平拉了10米线,结果数据全乱套。你想想看,TTL的噪声容限才0.4V,稍微有点干扰就翻车。
3.2.1 TTL电平
TTL是5V逻辑,高电平≥2.0V,低电平≤0.8V。这是最常用的电平标准,MCU的GPIO基本都是TTL兼容的。
| 参数 | 最小值 | 最大值 |
|---|---|---|
| 输出高电平(VOH) | 2.4V | 5.0V |
| 输出低电平(VOL) | 0V | 0.4V |
| 输入高电平(VIH) | 2.0V | 5.0V |
| 输入低电平(VIL) | 0V | 0.8V |
TTL的致命伤是传输距离。我曾经在实验室里用TTL传了3米,波形就开始变形了。超过5米基本不可靠。
3.2.2 RS232电平
RS232是串口通信的老标准,用±12V表示逻辑电平。+3V~+15V是逻辑0,-3V~-15V是逻辑1。注意,它和TTL是反的。
RS232的优点是抗干扰能力强,传输距离能到15米左右。但缺点也明显:需要电平转换芯片(比如MAX232),而且只能点对点通信。
3.2.3 RS485电平
RS485是我在视觉仿生系统里最推荐的电平标准。它用差分信号传输,两根线(A和B)的电压差来表示数据。A比B高代表1,A比B低代表0。
差分信号的好处是什么?共模噪声会被抵消。你想想看,如果外界干扰同时耦合到A和B线上,它们的差值不变,数据就不会错。
| 特性 | RS232 | RS485 |
|---|---|---|
| 传输方式 | 单端 | 差分 |
| 最大距离 | 15米 | 1200米 |
| 最大节点数 | 2(点对点) | 32(可扩展至256) |
| 抗干扰能力 | 一般 | 强 |
| 速率 | 115200bps | 10Mbps(短距离) |
我曾经在一个视觉检测项目中,用RS485把摄像头数据传到30米外的工控机,跑了两年没出过问题。嗯,真事。
3.3 传输介质选择
介质选对了,物理层就成功了一半。我见过有人用普通杜邦线跑RS485,结果信号反射得一塌糊涂。
3.3.1 双绞线
双绞线是RS485的标配。两根线绞在一起,能有效抑制共模干扰。我建议用屏蔽双绞线(STP),屏蔽层接地,效果更好。
选型时注意特性阻抗,RS485要求120Ω。我曾经用过100Ω的线,结果信号反射严重,加了终端电阻才解决。
3.3.2 同轴电缆
同轴电缆适合高频信号传输,比如视频信号。它的特性阻抗一般是50Ω或75Ω。我在一个视觉系统中用过75Ω的同轴电缆传模拟摄像头信号,效果不错。
但同轴电缆贵,而且布线不方便。除非是高频场景,否则我不太推荐。
3.3.3 光纤
光纤是终极方案。抗干扰能力最强,传输距离最远(几十公里),速率最高(Gbps级别)。但成本也最高,需要光电转换模块。
我在一个户外视觉监控项目里用过光纤,摄像头在山上,控制室在山下,距离2公里。用光纤一点问题没有,换成铜缆早就被雷劈了。
- 板内通信(<30cm):TTL电平,普通排线
- 短距离(<10m):RS232,屏蔽线
- 中距离(10m~1000m):RS485,双绞线
- 超长距离或强干扰:光纤
3.4 知识体系总览
下面这张图是我画的物理层设计决策树,帮你快速定位该用哪种方案。
这张图是我多年经验的总结。你从「传输距离」开始,顺着分支往下走,就能找到适合你项目的方案。
3.5 避坑指南
最后,分享几个我踩过的坑:
- 终端电阻不能省:RS485总线两端必须加120Ω电阻。我曾经偷懒没加,结果信号反射导致数据错位,排查了两天才发现。
- 地线要接:差分信号虽然抗干扰,但共模电压不能超过芯片承受范围。RS485的共模电压范围是-7V~+12V,超过就烧芯片。
- 线缆选型别省钱:我见过有人用网线里的两对绞线跑RS485,结果距离一远就丢包。正规双绞线也就贵几毛钱一米,别省这个钱。
- 注意电平转换:MCU的TTL电平不能直接接RS232或RS485,必须用转换芯片。我刚开始做项目时直接怼上去,烧了三个串口才长记性。
好了,物理层就讲到这里。记住一句话:物理层是通信系统的地基,地基不稳,上层建筑再漂亮也是空中楼阁。
公众号:蓝海资料掘金营,微信deep3321