最近低功耗装机圈里,有一个话题的关注度正在明显上涨:把 ATX 电源整体拿掉,只用一个 USB-C PD 3.1 充电头给台式主机供电,甚至让显示器也走 PD 链路取电。
这个方案看起来非常“反常识”,因为很多人对 USB-C 的认知还停留在“手机快充”和“笔记本 65W 适配器”上。实际上,USB PD 3.1 规范已经把供电档位推到了 48V、5A、240W。240W 是什么概念?一台不带独立显卡的 Mini-ITX 主机,加上一台常见的 USB-C 便携显示器,整机功耗可能还不到 150W。从功率数字看,USB-C 给台式机供电确实可行。
但这里真正的问题不是“充电头够不够大”,而是一整套供电链路怎么搭:充电头如何通过 CC 协议让设备请求到 48V PDO;48V 直流进来之后,DC-ATX 又怎么把这一路高压转成主板需要的 +12V、+5V、+3.3V 和 5VSB;开机时序、待机功耗、端口共享策略又会不会让这块“外置电源”变得不可用。
这篇文章会把这条链路从协议层拆到接线层,再给出一套可以直接照着执行的最小验证流程。读完你至少能回答三件事:这套方案能不能省下传统 ATX 电源;选材时哪些参数绝对不能妥协;主机和显示器两路负载到底该怎么分配。
先给一个明确的判断:这个方案适合低功耗主机、HTPC、软路由、迷你办公机,以及系统总功耗在 150W 以内的场景;不适合带高端独立显卡的台式机,也不适合拿便宜诱骗线和普通 DC-ATX 模块硬拼。下面进入正题。
1. 为什么现在才值得讨论:USB-C 给台式机供电改变了哪一层
1.1 从 100W 到 240W,供电能力发生的是量变
USB PD 3.0 时代,USB-C 能协商到的最大功率是 20V、5A、100W。100W 并不是不能用,它已经能带动不少办公迷你主机,但距离台式机主板加 CPU 加外设的功耗还是差了临门一脚。
USB PD 3.1 引入了 EPR(Extended Power Range)扩展功率范围,在原有 SPR(Standard Power Range)基础上增加了 28V、36V、48V 等多个固定 PDO 档位。其中 48V 与 5A 的组合正好落在 240W,这已经超过了传统 200W-300W ATX 小电源覆盖的一部分场景。这才是“USB-C 插台式机”能被认真讨论的起点。
从技术分层看,USB-C 给台式机供电改变的并不是主板端接口形态,主板根本不认识 USB-C,它只认识 24Pin ATX、8Pin EPS 和标准电压轨。USB-C 改变的是“交流转直流的这一级放到了哪里”:传统方案里,市电 220V 进 ATX 电源内部,经过 PFC、高频开关变压器、次级整流后变成各路直流;而这里把“220V 转 48V”的工作交给了外置 PD 充电器,机箱里只保留一块 DC-ATX 模块,负责把 48V 直流再做一级 DC-DC 变换,生成主板需要的 ATX 电压。
换句话说,这块 DC-ATX 模块和 picoPSU 时代的外置电源砖思路是同源的,唯一的新变量是供电接口从圆头 DC 口变成了 USB-C,并且能协商到 48V/240W。
1.2 适合与不适合的人群,一开始就要分清
必须说清楚:不推荐任何人用这个方案去替代 300W 以上的游戏主机。
这套方案的工程边界非常明确。USB-C 供电本质上是一个 “有一个外部电源、一根线、一个协议协商芯片、一块小 DC-DC 板” 的系统。它的优势是体积小、灵活、可以复用 PD 充电器,劣势是持续带载能力、峰值电流承受能力、以及各路低压大电流输出能力,通常都不如正经 ATX 电源。
如果你手头是这类机器,才值得往下看:
- 65W 级 TDP 的 CPU,核显或者低功耗显卡;
- Mini-ITX / 1U 小机箱,需要压缩内部电源体积;
- HTPC、All-in-One、软路由、办公机、便携机箱;
- 系统实际持续功耗在 120W 左右,峰值能控制到 180W 以内;
- 显示器是带 USB-C PD 供电输入、整机功耗 30W 以内的小屏。
如果你的机器要带 200W 以上的显卡,或者峰值功耗经常超过 300W,那么再大的 PD 3.1 充电器也不该成为首选。那不是充电头的问题,是这套两级 DC-DC 链路在整机层面的综合可靠性还无法和成熟的 ATX/DC-ATX 大功率方案相比。
2. 这条链路里的核心概念:PD 协议和 DC-ATX
2.1 USB PD 不是“一根线直通”,而是先握手再决定给多少电压
很多人会误以为 48V 充电头只要插上去,设备就能拿到 48V。这是个非常危险的理解偏差。
USB PD 协议的工作机制是:充电器作为 Source 会广播自己的供电能力,这个消息里包含一组 PDO(Power Data Object),例如“5V/3A、9V/3A、15V/3A、20V/5A、28V/5A、48V/5A”。用电设备作为 Sink 必须从中选择一个 PDO,并向 Source 发出 Request 请求。Source 收到请求后返回 Accept,再输出 PS_RDY,这时候总线上的电压才会切换到被请求的档位。
也就是说,48V 不是“插上去就有”的电压,而是充电器有能力广播、设备有能力请求、线缆有能力承载,三者同时成立后才能建立的一个供电契约。把 20V 显示器、普通 USB-C 线或只支持 20V 的诱骗板放到这条链路上,48V 根本不会被协商出来,甚至可能因为设备不支持 EPR 而一直停在 5V/20V 档位。
这也解释了为什么满功率跑通比想象中复杂:充电器输出端要支持 48V PDO,PD 诱取模块要支持 48V EPR 请求,线缆要有 EPR 标志且电流承载能力达到 5A。任何一环缺失,链路就只能回退到低功率档。
2.2 DC-ATX 的核心任务:把一路直流变成主板认识的 ATX 电压轨
ATX 主板需要的不只是 +12V。标准 24Pin ATX 接口里,除了 +12V,还有 +5V、+3.3V、-12V,以及关键的 5VSB 待机电压。主板开机时还需要 PS_ON# 信号被拉低,电源反馈 PWR_OK 信号告诉主板“各路电压已经稳定”。CPU 的供电则走另外的 4Pin/4+4Pin EPS 接口,它同样要求来自 +12V 的大电流通道。
DC-ATX 模块的作用,就是把外部送进来的直流电压(比如常见的 12V、19V、24V,以及本方案的 48V)通过内部 DC-DC 降压电路,转换成上面这些 ATX 标准电压轨。48V 输入不能直接进主板,也绝不能接到主板的 +12V 引脚,否则主板上游的 VRM、输入电容和电源管理芯片会直接过压损坏。
这里其实隐藏了一个和手机供电完全不同的问题:手机插入充电器后,内部电源管理芯片可以直接切换供电路径,让充电器为整机供电,同时给电池充电;但 PC 主板没有一套“外接单路直流即可全机直供”的机制。PC 必须经过 DC-ATX 把直流电压拆成各路 ATX 电压,然后主板再按自己的上电时序启动。所以 DC-ATX 不是可有可无的转接板,它是整个方案里真正承担“翻译”和“功率分配”的核心部件。
2.3 一条典型链路长什么样
把上面的概念穿起来,链路结构可以用下面这张文本图表示:
[240W USB-C PD3.1 充电器] │ ├── 输出口1:请求 48V PDO / 5A │ ├── USB-C EPR 线(5A 以上,含 E-Marker) │ ├── PD 诱取板(支持 EPR 48V) │ └── 输出 48V DC │ └── DC-ATX 模块 │ ├── 24Pin ATX → 主板主供电 │ ├── 4+4Pin CPU EPS → 主板 CPU 供电 │ ├── SATA 电源 → 硬盘 │ └── 12V 输出 → 风扇或外设 │ └── 输出口2:请求 20V PDO(典型 65W 级) └── 带 USB-C PD 供电输入的便携显示器 / DC 屏注意:图中的显示器走的是独立的另一路 PD 输出口,而不是从 48V 主路分叉。USB PD 不支持直接把一路供电用 Y 型线并给两个设备,而且 48V 也几乎肯定会超过便携显示器的输入耐压。双路负载必须由充电器分别协商、分别供电。
3. 48V 不是越高越好,先算功率预算
3.1 为什么典型低功耗主机选 48V/240W 有合理性
从数值上看,USB PD 3.1 的几档 EPR 功率分别是 28V×5A=140W、36V×5A=180W、48V×5A=240W。如果你的目标是“一个充电头带主机还带显示器”,那么 140W 往往扣掉显示器后给主机剩下的余量太少,180W 又刚好卡在临界,48V/240W 才是目前 PD 3.1 里最稳妥的档位。
另外一个不可忽视的原因是线缆压降。USB-C 的 5A 电流上限是固定的,要提升功率只能升压。同样传输 240W,20V 需要 12A,这早已超出 USB-C 标准接头和线缆承载能力;28V 还需要 8.6A;只有 48V 能控制在 5A 以内。所以 48V 档位不仅是“更高功率”,它还是 USB-C 物理连接器能够可靠承载 240W 的必要设计。
不过电压高不代表效率一定高。DC-ATX 模块要把 48V 降到 12V,再从 12V 分出 5V/3.3V,中间任何一级 DC-DC 都会有损耗。选型时应该看模块的整体额定功率和输入电压范围,而不是只看输入端电压数字。
3.2 写一个简单的功率预算脚本
动手买物料前,最好先把功率预算写下来。下面这个 Python 脚本可以帮你做一个粗粒度判断,脚本里所有数值都是占位数据,真实项目请按自己的 CPU、主板、硬盘、外设和显示器规格填写。
#!/usr/bin/env python3 # power_budget.py # 估算“PD充电器 + DC-ATX”方案是否能覆盖主机与显示器负载 from dataclasses import dataclass @dataclass class Pdo: volt: float amp: float @dataclass class SourcePort: name: str pdos: list # 充电器实际 PDO 以产品说明为准,这里只是示例 charger_ports = [ SourcePort("主供电口", [ Pdo(5, 3), Pdo(9, 3), Pdo(15, 3), Pdo(20, 5), Pdo(28, 5), Pdo(48, 5), ]), SourcePort("副显示口", [ Pdo(5, 3), Pdo(9, 3), Pdo(20, 3.25), ]), ] # 负载估算:请根据实测/功耗评测填写,不要盲信示例数值 loads = [ ("主机持续功耗", 110), ("主机瞬态峰值", 175), ("显示器持续功耗", 25), ] # 预留 25% 裕量 margin = 0.25 def run(): main_port = charger_ports[0] max_main = max(p.volt * p.amp for p in main_port.pdos) total_avg = loads[0][1] + loads[2][1] print(f"{main_port.name} 最大可选功率: {max_main:.0f}W") print(f"持续负载合计: {total_avg:.0f}W, 建议不超过 {max_main*(1-margin):