2. VBUS 检测电路原理
VBUS 检测,说白了就是让芯片知道:现在有没有外部电源插上来?电压够不够?这个检测一旦出问题,轻则无法识别 OTG 设备,重则烧坏接口。我当年第一次做 USB 项目时,就被这个问题坑过——板子回来死活不进主机模式,查了一周才发现是检测电阻焊错了封装。好,咱们今天把原理彻底说透。
2.1 检测电路的基本架构
VBUS 检测电路通常由三个部分组成:分压网络、比较器(或 ADC)、以及数字逻辑处理。不管你是用专用 PHY 芯片还是 MCU 内置的 USB 控制器,这条链路跑不掉。
来看一个典型的分压方案:
VBUS (5V/5.5V max)
|
R1 (100kΩ, 1%)
|
+--- VBUS_SENSE ---> GPIO/ADC
|
R2 (100kΩ, 1%)
|
GND
两个电阻把 VBUS 电压砍到一半。如果 VBUS=5V,VBUS_SENSE 就是 2.5V。MCU 的 ADC 量这个值,再反推 VBUS 实际电压。
嗯,这里要注意:电阻精度必须 1% 以上,否则误差太大。我见过有人用 5% 的电阻,结果 VBUS 标称 5V 检测出来 4.2V——系统直接报欠压,拒绝工作。
| 元件 | 推荐参数 | 为什么 |
|---|---|---|
| R1、R2 | 100kΩ ±1% | 分压比稳定,功耗低(~25μA) |
| C1(可选) | 0.1μF | 滤除 VBUS 纹波,防止误判 |
| TVS 管 | 5.5V 双向 | 保护 GPIO 不被浪涌打坏 |
2.2 比较器检测 vs ADC 检测
两种主流做法,各有千秋。我个人习惯是:如果不是成本敏感,尽量上 ADC。为什么?ADC 能告诉你「电压正在爬升」,比较器只能告诉你「到了还是没到」。
比较器检测:
- 参考电压设为 4.4V(经分压后 2.2V)
- 输出只有 0/1,硬件简单
- 无法区分「VBUS 未接」和「VBUS 欠压」
- 容易受噪声干扰抖动
ADC 检测:
- 软件可以设定多个阈值:4.5V 正常、4.0V 警告、3.3V 报错
- 能检测电压波动趋势,提前预警
- 需要占用一个 ADC 通道,并且注意采样率
我曾经在一个项目中用比较器,结果手机插上后偶尔能识别偶尔不能。示波器一抓,原来是 VBUS 刚上电时有个 100μs 的跌落,比较器输出在那段时间内来回跳。后来换成 ADC 加软件滤波,问题解决。
2.3 关键阈值定义
USB OTG 规范对 VBUS 检测有明确的电压门限。你做电路设计时,务必把这些值刻在脑子里:
| 参数 | 最小值 | 最大值 | 说明 |
|---|---|---|---|
| VBUS 有效电压 | 4.4V | 5.5V | 正常工作时 VBUS 必须在此范围内 |
| VBUS 欠压阈值 | — | 4.4V | 低于此值应视为脱落或异常 |
| VBUS 过压阈值 | 5.5V | — | 立即断开并上报 |
| VDAT_REF(OTG A-device) | 0.8V | 2.0V | 用于会话请求检测时的参考 |
你想想看,4.4V 和 4.5V 就差 0.1V,分压电阻稍偏一点就跨过阈值了。所以我说电阻精度 1% 是底线。
2.4 电路寄生参数的影响
纸面上看分压比完美,焊到 PCB 上就不一定了。有几点容易被忽略:
- PCB 漏电流:潮湿环境或助焊剂残留,会让分压电阻上并联一个几十 MΩ 的漏电阻,检测电压直接被拉低。
- GPIO 输入漏电流:MCU 的 ADC 输入阻抗一般很高,但有些老芯片只有几十 kΩ,相当于在 VBUS_SENSE 上挂了个负载。
- TVS 管结电容:过大的结电容会拖慢 VBUS 上电时的检测上升沿,导致软件误判「无 VBUS」。
我记得有个客户寄了一块板子,说 VBUS 检测总是偏低 0.15V。我们用热成像一看,某个电阻附近温度比其他地方高。拆下来量阻值,已经漂了 2%。原来他选的贴片电阻额定功率低了,长期工作发热后阻值变化。换用 0805 包装后问题消失。
2.5 检测电路的整体流程
把以上内容串起来,就是 VBUS 检测的完整链路。下面这张图可以帮你快速回顾:
核心记忆点:VBUS 检测不是单纯的电压测量,而是信号完整性 + 阈值判断 + 软件滤波的协同工作。
2.6 避坑指南
我把这些年踩过的坑总结成几条,你设计时逐条核对:
- 分压电阻的耐压和功率:0805 电阻耐压 150V 足够,但功率要算。VBUS=5V,R=200kΩ,功耗才 0.125mW——但万一浪涌,峰值功率会大很多。留够余量。
- ADC 采样时序:MCU 刚上电时 ADC 还没稳定,不要立即读。我习惯加 10ms 延迟后再做第一次采样。
- 检测线与 VBUS 走线隔离:VBUS 是大电流路径,检检测线要单独走,别跟大电流回路共线。否则 PCB 压降会让检测值偏高或偏低。
⚠️ 特别警告:如果 VBUS 直接连接 GPIO(无分压电阻),端口会被 5V 电压烧坏!很多 MCU 的 GPIO 耐压只有 3.6V。分压电阻不是装饰品,一定要焊上。
💡 经验技巧:测试 VBUS 检测电路时,用一个可调电源从 0V 缓慢升到 5.5V,同时用示波器看 VBUS_SENSE 波形。你很快就能发现有没有电阻焊错、TVS 漏电、或者分压比例不对。
好了,VBUS 检测电路的原理就这些。下一层咱们会聊更具体的故障排查方法——但今天先把底层的分压、比较、ADC 机制吃透。设计时多留一份心眼,少走一个月弯路。