
做嵌入式十多年RS-232 这个老家伙我从一开始嫌弃到后来离不开。工厂设备、仪器仪表、PLC、路由器调试口甚至一些老式传感器到现在还在用它做最底的兜底通信。最近我评估了一款标称 “New RS-232 Transceiver Family with Adjustable Low-Voltage Interface” 的新系列收发器乍一看名字没什么特别但真正让我感兴趣的是“Adjustable Low-Voltage Interface”这几个字它允许逻辑侧接口电平从 1.65V 一直调到 5.5V也就是说1.8V 的 FPGA、2.5V 的 MCU、3.3V 的 SoC可以直接和 RS-232 总线对接不用再额外加电平转换芯片。这篇文章我就围绕这个新系列聊聊它的内部思路、选型要点、实际电路设计以及我在调试过程中踩过的坑。1. 可调节低压 RS-232 收发器要解决的真实痛点1.1 RS-232 在低压逻辑时代的尴尬RS-232 标准定义得比较早信号电平是反逻辑的逻辑 1 对应 -3V 到 -15V逻辑 0 对应 3V 到 15V。而现在的 MCU、FPGA 逻辑电平越来越低3.3V 是常态1.8V 甚至 1.2V 的 I/O 也不稀奇。传统 RS-232 收发器比如经典的 MAX232VCC 通常要 5V逻辑侧输出高电平大概是 VCC 减掉一个压降接 5V 单片机没问题接 3.3V 系统勉强能用但想直接接 1.8V 器件就完全没戏。逻辑侧输入阈值更是按 TTL/CMOS 设计对 1.8V 信号根本不能保证识别。过去解决这个问题常见做法是在 RS-232 收发器前面再加一级电平转换芯片比如 TXS0108、PCA9306或者用 MOS 管搭双向电平转换电路。这样做的结果是BOM 变多板子面积变大信号多经过一级转换延迟和波形畸变也跟着上来。尤其是高速波特率下比如 921600bps一个电平转换芯片的传播延迟就可能吃掉不少时序裕量。1.2 “可调节”到底调的是什么这个新系列的 “Adjustable Low-Voltage Interface” 并不是说 RS-232 侧的输出电平可调RS-232 电平依然是标准的负逻辑高压而是指芯片内部逻辑侧接口的电平可以跟随外部低压电源域变化。一般来说芯片会有一个专门的 VL 引脚也叫 VIO你把这个引脚接到 1.8V逻辑侧输入阈值和输出高电平就自动变成 1.8V 逻辑你把它接到 3.3V逻辑侧就变成 3.3V 逻辑。VL 引脚相当于给逻辑接口定制了一个参考电源域。这个设计思路并不复杂但很实用。芯片内部相当于多了一级电平转换把所有逻辑输入、输出信号都先转到一个中间电平域再传给 RS-232 驱动器和接收器。外部来看你只需要给 VL 供电其他不用管。这就把“RS-232 收发器 独立电平转换芯片”两层方案合并成了一颗芯片。1.3 和传统“固定低压”收发器有什么本质差别市面上有很多标称“3.3V RS-232 收发器”的芯片比如 MAX3232它们可以工作在 3.3V 电源下但逻辑侧的电平阈值是固定的 3.3V CMOS 电平并不是真正可调节。如果把 MAX3232 的逻辑输入接 1.8V 信号高电平可能达不到 VIH 阈值接收端根本不认。新系列的逻辑侧接口电压可以宽范围调节这就让它能适配更多的低压逻辑器件。还有一个容易被忽略的差别新系列通常会在 VL 和 VCC 之间做隔离设计保证即使 VCC 没上电逻辑侧 IO 也不会通过内部二极管漏电到电源轨。这点对混合电压系统非常重要因为很多系统里 MCU 先上电、收发器后上电或者 RS-232 侧连接器已经插着外部设备如果没有这种隔离设计芯片很容易损坏。2. 从内部电路看懂参数和选型2.1 VL 引脚、VCC 引脚和电荷泵怎么配合要理解这类收发器得先分清三个关键部分VCC、VL 和电荷泵。VCC 是芯片主电源给内部电荷泵和 RS-232 驱动器供电常见范围是 3.0V~5.5V 或更宽。电荷泵的作用是产生 RS-232 需要的正负高压比如内部把 VCC 升压到 5.4V 和 -5.4V然后驱动器以这对电压为电源输出符合 RS-232 标准的信号。VL 则单独负责逻辑接口的电平它决定了输入阈值和输出高电平。需要注意的是VL 和 VCC 可以相同也可以不同。例如 VCC 用 3.3VVL 用 1.8V这是最常见的低压逻辑场景。一些器件允许 VL 高于 VCC比如 VCC3.0VVL3.3V但通常数据手册会限定 VL 的上限不要超过 5.5V。设计时还要注意上电顺序虽然很多新芯片内部做了顺序容限但稳妥做法还是让 VL 先于 VCC 或同时上电避免逻辑侧 IO 处于不确定状态。电荷泵的外围电容选择很关键。一般需要四个电容两个飞跨电容和两个储能电容典型值 0.1µF 到 1µF。老款 MAX232 常用 1µF 电解电容新的陶瓷电容已经可以用 0.1µF但前提是电容的直流偏压特性不能太差。如果用了 X5R 或 Y5V 电容在额定电压下容量可能掉到标称值的 30%~50%电荷泵输出纹波会变大RS-232 驱动幅度会下降。我建议优先选 X7R 或 C0G至少也是 X5R并且容量按 1µF 起步余量更足。2.2 关键电气参数VIH/VIL、VOH/VOL、转换速率、ESD选型时最该盯的参数不是“支持波特率多高”而是逻辑侧输入输出电平规格。以 VL1.8V 为例典型 VIH 可能是 0.7×VL也就是 1.26VVIL 可能是 0.3×VL也就是 0.54V中间有约 0.72V 的迟滞窗口。这个窗口比单纯逻辑芯片要宽目的是抗噪声但也意味着输入信号不能太慢否则会在阈值附近振荡。如果 VL1.8V 时VIH 还是 0.7×VL可用裕量对 1.8V 逻辑输出是够的但对 1.2V 逻辑输出可能就不够了这也是为什么很多器件的 VL 最低只到 1.65V 左右。输出侧要看 VOH 和 VOL。逻辑输出比如 ROUT 引脚在高电平时应接近 VL在低电平时应接近 GND。有些芯片在输出高电平时有几十欧内阻带上拉负载后电压会掉一点但一般在 VL-0.4V 以内。如果 VL 接 1.8VROUT 高电平实测低于 1.5V那就要检查输出负载和 PCB 漏电。RS-232 侧的参数也要看主要是输出摆幅、驱动能力和转换速率。驱动器在空载时输出应该能达到 ±5V 左右接上标准 3kΩ~7kΩ 接收负载和 2500pF 电容负载后最小输出幅度仍然要满足接收端要求。新系列一般会内置转换速率限制让 RS-232 信号边沿不至于太陡从而降低 EMI但这也限制了最高波特率通常在 1Mbps 以内。ESD 参数同样重要工业现场经常插拔 DB9如果没有 ±15kV 级别的 ESD 防护芯片很容易被打坏。2.3 用一个实际例子算算驱动能力假设 VCC3.3V电荷泵输出 ±5.4VRS-232 驱动器内阻约 5Ω负载为 3kΩ 对地。驱动器输出高电平时负载电流约为 5.4V / (5Ω 3kΩ) ≈ 1.8mA压降很小所以输出电平仍然接近 5.4V输出低电平时类似接近 -5.4V。这个幅度对接收端来说非常充沛因为标准只要求 ±3V 以上。但负载电容影响更大。当线缆电容达到 2500pF 时驱动器翻转瞬间要给电容充放电转换速率由内部电流源限制。如果片上转换速率约 10V/µs那么从 -5V 翻到 5V 大约需要 1µs对应波特率可以支持到几百 kbps实际测试 115200bps 完全没有压力。关键要避免的是人为增加太大的外部电容比如在 RS-232 线上加了过大的 TVS 管结电容可能把上升沿拖慢导致高速通信误码。3. 实际电路设计与选型实操3.1 电源、电荷泵电容和逻辑侧连接在设计时我会先把电源分开。VCC 引脚用 3.3V 或 5V旁边放一个 100nF 陶瓷电容再加一个 10µF 的钽电容或陶瓷电容用来应对电荷泵启动瞬间的大电流。VL 引脚接低压域电源同样放一个 100nF 电容如果 VL 和 VCC 来自不同电源轨要确保 VL 的噪声不要太大因为 VL 会直接影响逻辑阈值。电荷泵电容的位置也有讲究四个电容应尽量靠近芯片对应引脚不要为了布线美观拉到很远。飞跨电容 C1、C2 连接在电荷泵泵之间储能电容 C3、C4 分别接在正负电压和 GND 之间。如果布局拉得很远寄生电感会导致电荷泵效率下降甚至输出波纹变大。我习惯上把电容放在芯片同一面走线短而粗尽量少打过孔。逻辑侧连接相对简单。比如一个 1.8V 的 MCUTX 接收发器的 DIN收发器的 ROUT 接 MCU 的 RX。注意 MCU 的电源域必须和 VL 是同一个 1.8V否则电平不匹配。如果 MCU 的 IO 支持漏极开路需要外部上拉到 VL如果推挽输出则不要再加上拉否则可能形成分压导致电平不对。3.2 接 1.8V FPGA 的完整接线示例我最近一个项目里用到一片 Xilinx 的 FPGAIO 供电是 1.8V需要和一台老式工控机的 RS-232 串口通信。传统方案要加电平转换芯片这次我直接用了新系列收发器整个电路简单很多。核心连接如下收发器的 VCC 接 3.3VVL 接 FPGA 的 1.8V 电源域GND 共地。FPGA 的 TX 引脚接到收发器的 DIN收发器的 ROUT 接到 FPGA 的 RX 引脚。RS-232 侧T1OUT 接 DB9 的 2 脚RXDR1IN 接 DB9 的 3 脚TXDDB9 的 5 脚接 GND。电荷泵电容四个都选 0.1µF X7R靠近芯片放置。FPGA 侧无需任何外部电平转换直接走线连接即可。这里有一个容易踩的坑FPGA 引脚配置成 LVCMOS18 时输出高电平约 1.8V但接收器 ROUT 输出的高电平也是 1.8V两者虽然兼容但要注意 FPGA 输入引脚不能接超过其 I/O 电压的电平。如果收发器的 VL 误接成 3.3VROUT 高电平就会到 3.3VFPGA 的 1.8V bank 可能承受不了甚至损坏。所以 VL 必须严格接到 FPGA 的同一个电源域不能凭经验接。3.3 选型清单和容易忽略的坑选型时我一般会拉一个清单逐个确认VL 的可调范围是否覆盖实际逻辑电平最低支持多少伏最高支持多少伏。VCC 范围是否和系统现有的电源轨匹配是否支持单电源。逻辑输入是否做过 5V 容忍如果你 VL1.8V但输入可能来自 3.3V 逻辑该引脚是否允许过压。电荷泵电容推荐值数据手册一般会给最大最小值不要自己随意改。是否有自动关断或低功耗模式在电池设备里很关键。ESD 等级是否符合应用场景工业级要选 ±15kV 以上的。有一个常见误区是认为“低压接口等于低压电源”。有些芯片虽然 VL 支持 1.8V但 VCC 最低也要 3V如果你的系统只有 1.8V 单电源那还得配一个升压芯片。另一类误区是忽略输入迟滞。RS-232 接收器有迟滞但逻辑侧输入 DIN 通常没有太大迟滞如果 DIN 信号边沿太慢比如来自一个弱上拉的开漏输出可能会在阈值附近反复翻转产生乱码。这种情况最好在 DIN 输入加一个施密特触发器或 RC 滤波。4. PCB 布局、测试与故障排查实录4.1 布局电荷泵电容和 ESD 防护要优先安排PCB 布局上我通常先放芯片然后立刻放电荷泵电容和电源旁路再处理 RS-232 连接器。电荷泵电容离芯片越近越好但也不要直接贴着高速数字线否则电荷泵开关噪声会耦合到信号上。RS-232 输出走线尽量短不要和 FPGA 的高速信号平行走很长距离。如果必须穿越中间加地线隔离。ESD 防护器件放在连接器入口TVS 管的地要直接回到芯片地和连接器地而不是绕一大圈。很多新手把 TVS 放在靠近芯片的地方这样防护效果大打折扣因为静电放电的瞬态电流会先经过长走线再被钳位走线上的寄生电感依然会让芯片受损。正确做法是连接器 - TVS - 芯片走线宽一点地孔靠近 TVS。多层板的话我习惯在 RS-232 芯片下方铺完整地平面但电荷泵电容的地不要单独割裂保证回流路径短。如果使用两层板那么要尽量加多地孔减少地环路。RS-232 信号是正负高压摆幅虽然速率不高但边沿陡峭时也能辐射噪声所以不能让 RS-232 线和敏感的模拟信号绕在一起。4.2 常见现象乱码、无输出、幅度不足实测中我遇到过几种典型故障整理成一个速查表方便对照。现象可能原因排查方法完全无输出VCC 未上电或电荷泵电容虚焊测 VCC 和电荷泵输出正负电压确认电容焊接输出幅度偏低电荷泵电容容量不足或 ESR 过大换 X7R 电容容量加到 1µF观察波形逻辑侧乱码VL 接错电源域或逻辑输入阈值不匹配用示波器测 DIN 波形确认高电平超过 VIH接收端误码RS-232 线缆过长负载电容过大测接收器输入波形考虑降波特率或加终端匹配芯片发烫VL/VCC 顺序异常或输出短路断电检查 RS-232 线是否接错测静态电流有一次我接了一个 1.8V 的 MCU 到收发器发送数据到工控机结果全是乱码。用示波器测 MCU 的 TX 波形正常测收发器 T1OUT发现高电平时只有 2.2V不是预期的 5V。我第一反应是电荷泵电容坏了换电容没用。后来才发现是 VL 引脚居然被上一个版本的 PCB 布线接到了 3.3V导致内部逻辑电平转换只把输入识别成高电平但驱动器偏置不对。把 VL 改到 1.8V 后输出波形恢复正常。这个小问题折腾了近两个小时教训就是画板时一定要把 VL 所在的电源网络标清楚不要靠走线颜色区分。4.3 多通道串扰、热插拔和接错线问题多通道收发器比如 4 路 TX/RX 同时工作邻道之间的串扰是个容易忽略的问题。尤其当一个通道正在发送高速数据另一个通道在接收微弱信号时电荷泵的开关噪声可能通过共用电源耦合到接收通道。解决方法是给每个接收通道的输入加一个小电容比如 100pF和 TVS 管并联限制高频噪声或者降低驱动器的转换速率。新系列一般内置有摆率限制但外部仍然可以加 RC 滤波。热插拔也是工业设备的常见需求。带电插拔 DB9 的时候如果收发器没有断电保护RS-232 线上可能瞬间出现很高的电压打坏芯片。我建议选型时优先选择带 ±15kV ESD 和断电高阻输出的型号。如果手头芯片没有断电保护可以在 RS-232 线上串联 1kΩ 电阻虽然会降低幅度但能限制故障电流。另外一定要把连接器的金属外壳和系统大地连接很多机壳干扰是从 DB9 外壳进来的。接错线的问题几乎所有人都遇到过最常见的是把 2、3 脚接反或者把 GND 接到信号脚。处理方式除了在连接器旁边加醒目标注最好在软件层做自动收发检测或者用带极性保护的连接器。硬件上我一般在 RS-232 线路上串联 1kΩ~5kΩ 电阻既能抑制反射又能在接错线时提供限流保护不影响正常通信。4.4 调试时的波形判读技巧最后聊一个很有用的调试技巧用示波器看 RS-232 波形时不要只看幅度要看空闲电平。RS-232 空闲时是负电平即逻辑 1对应电压大约 -5V。如果空闲时电平在 0V 附近说明收发器没有正确输出负压可能是电荷泵不工作或电容接反。波形上升沿和下降沿的不对称也能说明问题比如一边平缓一边陡峭可能是线缆电容不均或驱动器内部阻抗不对称。逻辑侧的波形更要注意阈值。用示波器同时抓 DIN 和 ROUT对比两者的时序关系如果 ROUT 的下降沿比 DIN 慢了太多可能是内部电平转换电路在低压时延迟增大。一般来说1.8V VL 时的传播延迟会比 3.3V 时略大但应在数据手册范围内。如果超出检查 VL 电源纹波。我在实际使用中的体会是这类带可调节低压接口的 RS-232 收发器最让人省心的不是少焊一个芯片而是整个设计流程变简单了不用再为逻辑电平匹配单独做一块小板也不用担心电平转换芯片的上电时序和方向控制。只要把 VL 准确接到对应电源域RS-232 的老设备和低压新器件就能稳定对话。如果你手上正好有 1.8V 的 FPGA 或 MCU又躲不开 RS-232这个新系列值得试一下。