ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

MOS管双向电平转换电路:从原理到实战,3.3V与5V互连全解析

2026/10/6 11:47:17 拓冰建站 浏览量
MOS管双向电平转换电路:从原理到实战,3.3V与5V互连全解析 1. 电平转换这件事为什么值得单独拿出来讲做过嵌入式或者硬件开发的朋友大概率都遇到过这种场景主控是一颗3.3V的MCU比如STM32、ESP32或者树莓派但手头的外设模块偏偏是5V逻辑的比如某些老款LCD屏、继电器板、舵机驱动板甚至一些工业传感器。两边一连要么3.3V这边识别不到5V的高电平因为5V灌进3.3V的IO口可能直接烧掉要么5V那边觉得3.3V的高电平不够高通信时好时坏。这时候你就需要一个电平转换电路。市面上的方案不少有专用的电平转换芯片比如TXS0108、TXB0104这类也有用三极管搭的还有用电阻分压的。但如果你只是偶尔做一两个小项目手头不一定有专用芯片而且有些芯片还不好买、价格也不便宜。这时候用一颗MOS管搭双向电平转换电路成本几毛钱两个上拉电阻加一个N沟道MOS管就能搞定而且支持双向通信I2C、UART、SPI都能用。这篇文章就是把我自己反复搭过、测过的MOS管双向电平转换电路完整拆开讲一遍。从MOS管的工作原理、Vgs阈值怎么选、上拉电阻取多大到实际焊接、示波器抓波形、常见问题排查全部按实操顺序来。不管你是刚入门的学生还是做了几年硬件想补补基础的老手这篇内容都能直接抄作业。2. 先搞懂MOS管为什么能双向转换2.1 MOS管三个极和导通条件用生活化方式理解MOS管全称是金属-氧化物-半导体场效应管常见的有N沟道和P沟道两种。我们这里用的是N沟道增强型MOS管比如2N7002、BSS138、AO3400这些。它有三个引脚栅极Gate简称G、源极Source简称S、漏极Drain简称D。你可以把它想象成一个由电压控制的水龙头。栅极就是那个开关把手源极是进水口漏极是出水口。但和普通水龙头不同的是这个“把手”不是靠机械力拧的而是靠栅极和源极之间的电压差Vgs来控制的。当Vgs超过一个特定值也就是阈值电压Vgs(th)时MOS管内部形成导电沟道漏极和源极之间就导通了电流可以从漏极流向源极也可以从源极流向漏极这一点很关键后面双向转换就靠它。N沟道MOS管的导通条件是Vgs Vgs(th)而且通常要留一定余量。比如BSS138的Vgs(th)最大是1.5V你在设计时让Vgs达到2.5V以上就比较稳妥。2N7002的Vgs(th)最大是2.5V那你就得让Vgs至少到3V以上才能可靠导通。这个参数在选型时一定要看数据手册不能凭感觉。2.2 双向电平转换的核心原理靠体二极管和沟道导通配合这个电路的精髓在于MOS管的源极接3.3V侧漏极接5V侧栅极接3.3V电源同时3.3V侧和5V侧各有一个上拉电阻。注意这里MOS管是反过来用的源极接低压侧漏极接高压侧栅极接低压侧电源。当3.3V侧输出低电平时MOS管的源极被拉低到0V此时Vgs 3.3V - 0V 3.3V远大于阈值电压MOS管导通。导通后漏极和源极之间相当于一个很小的电阻几十毫欧到几欧姆5V侧通过上拉电阻和这个导通电阻被拉到低电平。所以5V侧也得到低电平。当3.3V侧输出高电平时源极电压是3.3V栅极也是3.3VVgs 0VMOS管截止。此时5V侧的上拉电阻把漏极拉到5V而3.3V侧的上拉电阻把源极保持在3.3V。由于MOS管截止两边互不影响。但这里有个细节MOS管内部有一个寄生体二极管方向是从源极指向漏极对于N沟道来说体二极管阳极在源极阴极在漏极。当5V侧是5V、3.3V侧是3.3V时体二极管是反偏的不会导通。所以5V不会倒灌到3.3V侧。反过来当5V侧输出低电平时漏极被拉低体二极管正向导通因为源极是3.3V漏极是0V二极管阳极电压高于阴极把源极也拉低。源极被拉低后Vgs又变成3.3VMOS管导通进一步把两边都拉低。所以5V侧的低电平也能传到3.3V侧。这就是双向转换的奥秘低压侧到高压侧靠MOS管沟道导通高压侧到低压侧靠体二极管先导通再触发沟道导通。整个过程不需要方向控制引脚自动识别方向非常适合I2C这种双向总线。2.3 为什么I2C特别适合用这个电路I2C总线是开漏输出加上拉电阻的结构设备只能把总线拉低不能主动拉高。高电平是靠上拉电阻拉上去的。这种特性正好和MOS管电平转换电路完美匹配。因为MOS管电路也是靠上拉电阻提供高电平两边都不需要推挽输出。而且I2C的时钟线和数据线都是双向的用这个电路不需要额外控制方向省事又可靠。如果你用这个电路转UART或者SPI也没问题但要注意速率。MOS管有寄生电容上拉电阻越大RC时间常数越大边沿越缓高速通信可能出错。I2C标准模式100kHz、快速模式400kHz一般没问题再高就要减小上拉电阻或者换专用芯片。3. 元器件选型和参数计算别拍脑袋3.1 MOS管怎么选Vgs阈值、导通电阻、寄生电容都要看选MOS管不是随便抓一个就行。首先看Vgs(th)要确保在3.3V驱动下能可靠导通。BSS138是经典选择Vgs(th)最大1.5V3.3V驱动绰绰有余。2N7002便宜好买但Vgs(th)最大2.5V3.3V驱动时余量只有0.8V温度变化或者批次差异可能导致导通不充分导通电阻变大波形边沿变差。所以如果追求稳定优先选BSS138或者AO3400Vgs(th)更低。其次看导通电阻Rds(on)。BSS138在Vgs4.5V时Rds(on)约3.5欧姆在Vgs2.5V时约6欧姆。这个电阻和上拉电阻分压会影响低电平电压。比如上拉电阻10kRds(on) 6欧姆低电平大约是5V × 6/(100006) ≈ 3mV完全可以接受。但如果上拉电阻只有1k低电平就是5V × 6/(10006) ≈ 30mV也还行。所以Rds(on)不是大问题只要不是几十欧姆那种。寄生电容才是高速通信的隐形杀手。BSS138的输入电容Ciss约27pF输出电容Coss约5pF。这些电容和上拉电阻形成RC低通滤波器会延缓边沿。计算一下10k上拉电阻和27pF电容时间常数τ 10000 × 27e-12 270ns上升时间约2.2τ 594ns。对于400kHz I2C周期2.5微秒上升时间占近四分之一勉强能用但余量不大。所以高速时要把上拉电阻降到4.7k甚至2.2k。3.2 上拉电阻取多大平衡功耗、速度和驱动能力上拉电阻的选择是个权衡。电阻越小上升沿越快但静态功耗越大而且低电平时灌电流越大。I2C总线要求低电平电压VOL不超过0.4V标准模式或0.3Vdd快速模式。假设VOL0.4V5V电源那么灌电流I (5V - 0.4V)/R。如果R10kI0.46mAR4.7kI0.98mAR2.2kI2.1mA。大多数I2C设备的灌电流能力在3mA以上所以2.2k也扛得住。但功耗也要考虑。如果总线经常处于低电平10k电阻的功耗是5V × 0.46mA 2.3mW4.7k是4.9mW2.2k是10.5mW。对于电池供电的设备这个功耗不能忽略。所以我的经验是低速100kHz用10k400kHz用4.7k1MHz以上用2.2k或1k。如果总线上设备多、电容大还要再减小。还有一个细节3.3V侧和5V侧的上拉电阻可以取不同值。因为3.3V侧电压低同样电阻下灌电流小可以取小一点来加快上升沿。比如5V侧用4.7k3.3V侧用3.3k这样两边上升时间更接近。但一般为了方便两边取一样也没大问题。3.3 实测波形告诉你电阻选错会怎样我用BSS138搭了一个电路3.3V侧和5V侧各接10k上拉电阻用示波器抓了I2C时钟线的波形。在100kHz下上升沿大约600ns下降沿大约100ns波形还算方正。把上拉电阻换成100k后上升沿变成6微秒波形变成明显的锯齿状通信直接失败。换成1k后上升沿降到60ns波形很漂亮但静态功耗上去了而且低电平有约50mV的抬升。所以实测结论很明确上拉电阻不是越大越好也不是越小越好。10k是100kHz下的甜点值4.7k是400kHz的甜点值。如果你不确定先用4.7k大部分场景都能跑。4. 手把手搭建电路从原理图到实物4.1 原理图连接和PCB布局要点电路连接很简单N沟道MOS管的栅极接3.3V电源源极接3.3V侧信号线漏极接5V侧信号线。3.3V侧信号线通过一个上拉电阻接到3.3V电源5V侧信号线通过另一个上拉电阻接到5V电源。如果有多路信号需要转换比如I2C的SCL和SDA那就每路用一个MOS管栅极都接3.3V各自配上拉电阻。PCB布局时注意几点MOS管尽量靠近连接器或者信号入口减少走线长度。上拉电阻靠近MOS管放置不要放在板子另一头。3.3V和5V的电源走线要足够宽避免压降。如果信号速率高尽量让3.3V侧和5V侧的走线对称减少寄生参数差异。还有一个容易忽略的点栅极接3.3V电源时最好加一个100nF的旁路电容到地滤掉电源噪声。因为栅极电压的稳定直接决定MOS管导通状态如果3.3V电源有纹波可能导致MOS管意外导通或截止。4.2 焊接和连线实操记录我这次用的是洞洞板焊接方便快速验证。BSS138是SOT-23封装引脚间距小焊接时先用镊子固定再焊两个引脚最后焊第三个。注意不要虚焊尤其是源极和漏极虚焊会导致导通电阻变大波形变差。上拉电阻用0805封装的10k一边焊到信号线另一边焊到电源线。3.3V和5V电源从稳压模块引出来共地。信号线用杜邦线接到逻辑分析仪或者示波器探头。焊接完成后先用万用表测一下有没有短路特别是电源和地之间确认无误再上电。上电后先不接信号源测一下静态电压。3.3V侧应该是3.3V5V侧应该是5VMOS管栅极应该是3.3V。如果5V侧不是5V检查上拉电阻有没有焊好。如果3.3V侧被拉低检查MOS管是不是装反了或者坏了。4.3 用示波器抓波形的具体步骤抓波形是验证电路是否正常工作的关键。我用的是双通道示波器通道1接3.3V侧信号线通道2接5V侧信号线地夹子接公共地。触发方式设为下降沿触发触发电平设在2V左右。然后给3.3V侧输入一个100kHz的方波信号幅度0到3.3V。示波器上应该能看到两路波形基本重合5V侧的幅度是0到5V3.3V侧是0到3.3V。上升沿和下降沿要对齐不能有明显的延迟。如果5V侧上升沿比3.3V侧慢很多说明上拉电阻太大或者MOS管寄生电容太大。再测试反向给5V侧输入方波看3.3V侧能不能正确跟随。注意5V侧输入低电平时3.3V侧应该被拉低5V侧输入高电平时3.3V侧应该保持3.3V。如果3.3V侧高电平被抬到4V以上说明体二极管有问题或者MOS管选错了。5. 常见问题排查和避坑经验5.1 通信不稳定、时好时坏怎么查这是最常见的问题。首先用示波器看波形重点看上升沿和下降沿。如果上升沿太缓超过通信协议允许的最大上升时间就会导致数据采样错误。I2C标准模式最大上升时间1000ns快速模式300ns。如果实测超过这个值减小上拉电阻。如果波形看起来没问题但通信还是不稳定检查电源。3.3V和5V电源的纹波要小最好用LDO供电不要用开关电源直接供。开关电源的纹波可能通过上拉电阻耦合到信号线上导致误触发。还有一个隐蔽问题MOS管的栅极阈值电压漂移。如果3.3V电源实际只有3.1V而MOS管的Vgs(th)又偏高可能导致导通不充分低电平不够低。用万用表测一下MOS管导通时漏极和源极之间的电压应该小于0.1V。如果大于0.3V换一个Vgs(th)更低的MOS管。5.2 上拉电阻小了不通信的真相有人觉得上拉电阻越小上升沿越快就无脑用1k甚至更小。结果发现通信反而失败了。原因有两个一是灌电流太大超过了I2C设备的驱动能力设备拉不低总线低电平电压升高被误判为高电平。二是功耗太大电源被拉垮电压不稳。我实测过用1k上拉电阻时低电平电压约50mV看起来没问题。但如果你总线上挂了多个设备每个设备的灌电流能力有限加起来可能不够。比如一个设备只能灌3mA1k电阻需要灌5mA那这个设备就拉不低总线。所以上拉电阻的最小值要满足R (Vdd - VOL_max) / I_OL_min其中I_OL_min是所有设备中最小的灌电流能力。5.3 MOS管发热甚至烧毁的原因正常情况下MOS管不应该发热因为导通时电流只有几毫安Rds(on)又很小功耗是毫瓦级。如果发热说明要么MOS管没有完全导通工作在放大区要么有短路。没有完全导通的原因通常是Vgs不够。比如你用2N7002Vgs(th)最大2.5V3.3V驱动时只有0.8V余量温度升高后Vgs(th)还会下降但导通电阻会上升。如果3.3V电源实际只有3.0V余量更小。这时候MOS管可能处于半导通状态Rds(on)从几欧姆变成几十欧姆甚至几百欧姆功耗急剧增加。解决办法很简单换BSS138或者AO3400Vgs(th)更低3.3V驱动时余量充足。或者把栅极电压提高到5V但这样就需要额外的电平转换得不偿失。5.4 常见问题速查表现象可能原因排查方法解决措施5V侧始终为高MOS管未导通测Vgs是否大于阈值检查栅极是否接3.3V换低阈值MOS管3.3V侧被抬到4V以上体二极管导通或MOS管装反测源极和漏极方向调换源极漏极确保源极接低压侧上升沿太缓上拉电阻太大或寄生电容大测上升时间减小上拉电阻换低电容MOS管低电平不够低上拉电阻太小或MOS管导通电阻大测低电平电压增大上拉电阻换低Rds(on) MOS管通信时好时坏电源纹波大或地线干扰测电源纹波检查地线加滤波电容单点接地MOS管发热未完全导通或短路测Vgs和电流换低阈值MOS管检查短路6. 进阶技巧和扩展应用6.1 多路信号转换怎么布局I2C需要两路SPI需要四路甚至更多。每路用一个MOS管和两个上拉电阻。栅极可以共用都接3.3V。上拉电阻可以共用电源但每个信号线要独立的上拉电阻不能共用。布局时把MOS管排成一排上拉电阻放在旁边走线尽量短且等长。如果信号路数很多比如8路以上可以考虑用排阻代替分立电阻节省空间。但排阻的精度和温漂可能不如分立电阻要求高的话还是用分立。6.2 这个电路还能用在哪些场景除了I2C这个电路还能用于UART、SPI、GPIO电平转换。UART是单向的但用这个电路也没问题而且不需要方向控制。SPI的MISO是输入MOSI是输出SCK是输出CS是输出都可以用。但SPI速率高要注意上拉电阻和MOS管电容的影响。还有一个场景是开漏输出的中断信号。比如5V设备的中断引脚是开漏输出需要上拉到3.3V给MCU。这时候用这个电路5V侧上拉到5V3.3V侧上拉到3.3VMOS管自动转换很方便。6.3 什么时候该放弃MOS管方案MOS管方案虽然简单便宜但不是万能的。如果通信速率超过1MHz或者总线电容超过400pF或者需要真正的推挽输出那还是用专用电平转换芯片更靠谱。比如TXS0108支持100Mbps以上TXB0104支持推挽和开漏但价格贵一些。另外如果两边电压差不是3.3V和5V而是1.8V和3.3VMOS管方案也能用但要注意Vgs(th)要低于1.8V比如BSS138的Vgs(th)最大1.5V勉强能用但余量小。这时候建议用专门的低压MOS管或者专用芯片。我个人在实际操作中的体会是MOS管双向电平转换电路是硬件工程师的必备技能成本低、效果好、灵活性强。但一定要根据实际速率和总线电容选好上拉电阻和MOS管型号不能随便抓一个就用。实测波形是最可靠的验证手段不要只看原理图就觉得没问题。最后再分享一个小技巧如果你手头没有BSS138可以用两个NPN三极管搭一个类似电路但三极管是电流控制需要额外的基极电阻而且单向性更强不如MOS管方便。所以还是备一些BSS138在元件盒里几毛钱一个关键时刻能救急。