1. 这个方案到底在做什么:先看懂需求再谈设计
做充电器开发这几年,最头疼的不是把功率做大,而是把外围做少。传统方案一个口一摊料:协议芯片、DC-DC控制器、MOS、采样电阻、环路补偿,尺寸越做越大,调试也越做越烦。用户的需求其实很朴素:一个充电器,最好能同时喂饱笔记本、手机、耳机,功率还得看得见。所以我把目标定为"三口快充、零外围、DPS+屏显全到位"——简单说就是一颗高集成数字电源芯片搞定协议与环路,两个C口加一个A口,面板嵌一块小屏,实时显示每一口的电压、电流和功率。
这套方案适合谁来参考?如果你是做电源硬件、做快充配件,或者纯粹想自己DIY一个看得见功率的桌面充电器,下面这些内容基本可以照着抄作业。我会把选型、硬件、固件、调试验证的过程和坑都梳理一遍,尽量讲清楚每一步为什么要这么做。先解释两个容易误解的点,否则后面会看得云里雾里。
1.1 "零外围"不是真的零,而是把能并的全都并进去
传统PD快充的"外围"其实包含两大部分:一部分是功率变换所需的高压启动、辅助绕组供电、环路光耦、同步整流控制、MOS驱动;另一部分是协议解析需要的CC逻辑、VBUS开关、D+/D-检测、各种保护比较器。如果你用分离器件搭,一块板子七七八八加起来三四十个料很正常,光是把这些料在Layout上排开,就很占面积。
所谓"零外围"方案,核心思想是把这些功能全部收进一颗数字电源控制芯片里。芯片内部自带协议解析引擎、数字环路补偿、同步整流驱动,甚至功率管栅极驱动,外围只需要保留变压器、输入输出电容、Type-C母座、显示屏幕和有限的阻容。这样做的好处有三个:BOM成本低、Layout面积小、调试量小。从立项到打样,硬件设计周期可以压缩一半以上。
但有一句话必须说清楚:零外围不等于零设计。变压器参数、输出电容容量、屏显走线这些仍然需要用工程经验去校,只是相比传统方案,你不需要再花两周去调光耦环路,也不用反复改协议芯片的寄存器映射表,大部分策略都在固件层面完成。硬件迭代周期压短了,对调试能力的重心反而转移到了数字域。
1.2 DPS在这里指的什么
标题里的DPS,我这边定义为Digital Power System,也就是数字电源管理系统。它跟传统"模拟环路+独立协议芯片"方案的本质区别在于:环路补偿、恒压恒流控制、功率分配策略全部以数字方式实现。芯片内部有高速ADC实时采样输出电压和电流,再通过数字补偿器算出占空比,直接驱动功率级。
DPS带来的最大好处不是"看起来高大上",而是可观测性和可配置性。你可以在不改设计的情况下,通过寄存器把环路带宽调快或者调慢,把某个口的限流值从3A改成5A,把功率分配策略从固定档切成智能动态档。这些在传统模拟方案里几乎都要动硬件,而在DPS方案里就是一两条I2C命令的事。屏显的数据,也是直接从DPS的数字采样域里拿,不需要额外挂一颗电流采样IC,这是它能做到"零外围"的关键原因之一。
1.3 屏显到底要显示什么
很多人觉得充电器带屏就是花架子,但实际用过之后会发现信息量很大。我在这版设计里让OLED显示四类内容:每个口的电压、每个口的电流、每个口的功率,以及当前握手到的快充协议。比如C1口显示"20.0V 4.98A 99.6W PD3.1",A口显示"9.02V 1.80A 16.2W QC3.0",一眼就能看明白设备在跑多大功率。
这些信息在调试阶段是救命的数据。以前调快充要拿协议分析仪或者万用表一点一点量,屏幕直接挂在板子上的好处是,插上设备的一瞬间你就能看到它请求了什么电压、反馈了多大电流、协议有没有握手成功。作为成品功能,对用户来说也有直观参考价值,自己能确认到底是不是在快充状态,心里有底。
2. 选型思路:核心芯片、拓扑与屏幕怎么定
2.1 核心芯片选型逻辑
先说说选型要满足的条件。第一,必须支持至少三个口的协议解析,两个C口要能独立做PD/PPS协商,A口要兼容QC3.0、UFCS这些主流协议。第二,芯片内部必须带数字环路和足够快的ADC,否则谈不上DPS。第三,最好内部集成功率管驱动和同步整流控制,这样才叫零外围。第四,通道数要够,至少三路独立的降压控制单元,每路可以单独使能和调压。
基于这些需求,我选了一款"多口数字电源SOC",它内部集成三路DC-DC控制单元、三个协议引擎、一个数字电源管理核。每路DC-DC可以独立配置为Buck或Boost模式,也可以把两路并联给同一个口提供更大功率。最关键的是,它的CC1/CC2和D+/D-引脚数量足够,三个口的协议检测都能挂进去,不需要额外扩展。
选型时有一个特别容易忽略的点:封装和散热。三口100W的总功率,功率级效率即使到93%,也有7W左右的损耗要散出去。如果选了QFN小封装,PCB敷铜散热面积必须认真算。我最后选了带底部大焊盘的封装,并且Layout时在焊盘投影区域下方做了密集过孔阵列,确保热路通畅。
预算敏感的话,也可以退一步选"协议MCU+数字Buck控制器"的两芯片方案,但那样外围会多出至少二三十个元件,"零外围"的卖点就没了。所以我个人的建议是:如果目标就是对标这种小型化产品,高集成SOC是更合理的起点,省下来的面积和调试时间远比芯片贵的那几块钱值钱。
2.2 功率等级与拓扑结构
目标功率我定在100W。理由很简单:单C口要能带动市面上常见的16英寸笔记本,20V5A是刚需;同时还要能剩出功率给手机和耳机。如果只做到65W,虽然更常见,但两个C口同时满载的场景会非常局促,演示效果也弱一些。
拓扑上,这种"高电压小电流进来,低电压大电流出去"的场景,最合适的方案就是前级AC-DC加后级多路Buck。前级把市电降到一路中间母线电压,比如24V,然后三路DPS Buck分别降压输出给C1、C2和A口。前级建议用氮化镓反激或者半桥LLC,效率能拉高两三个点。
这里补充一个关键知识点:三路独立Buck从同一个母线取电,天然支持"动态功率分配"。因为母线是共用的,C1功率用多了,母线电压会轻微下降,但每路Buck的输出是独立调节的,总功率通过数字方式限制在设定值内。DPS做这件事的方法是让每路控制器维护一个功率预算,根据口的状态实时更新,超预算就触发恒流限制或主动降低输出档位,这个机制是整套方案的核心。
2.3 屏显器件的选择与对接
屏显器件我给两个方案:最小化的0.96寸OLED,I2C接口,分辨率128x64;或者段码LCD,成本低但信息量小。为了调试方便,我最终选了OLED,因为能显示的字符多,协议名称、电压、电流、功率能一次性全部看完,排查问题的时候帮助最大。
屏幕供电和逻辑电平要注意:OLED模块一般支持3.3V供电,DPS芯片的数字IO如果也是3.3V就可以直接对接,省掉电平转换。I2C总线上除了屏幕,我还会挂一颗EEPROM保存配置参数,所以上拉电阻要做总量计算,不要一个器件就丢一颗4.7k,容易导致总线高电平太弱。我这边算下来总上拉等效约4.7k,波形干净利落。
还有一个容易被忽视的问题:屏幕放在外壳面板上,走线要从主板引出去,中间可能需要FPC连接器。连接器选型要考虑插拔次数和EMI,我第一版用普通排针焊线,结果屏幕刷新时干扰到了A口的D+检测,导致QC握手偶发失败。后来换成带屏蔽的FPC,并在数据线各加一个100pF对地电容,问题才彻底消失。这个坑值得单独说,因为你很难从原理图上看出来,只能靠实测。
3. 硬件设计拆解:让零外围落到板子上
3.1 整机电路框架
先把整机框架画出来:市电输入,经过EMI滤波和整流桥,进入前级反激变换,输出24V中间母线,然后分成三路DPS Buck,分别接C1、C2和A口的Type-C母座,OLED屏挂在DPS的I2C总线上。框架看起来不复杂,但每一级的具体选型都有讲究。
DPS芯片内部集成的东西很多,但原理图上依然要外置一些必须在板级的器件:输入母线电容、每路Buck的输出电感、输出电容、上下分压反馈电阻、VBUS放电通路、Type-C座的CC和VBUS引脚。这里要特别注意,分压电阻的精度直接影响输出电压精度,我用了1%甚至0.5%精度的电阻,温漂也要控制在50ppm以内,否则屏显的电压值会有看得见的漂移。
一个容易被忽略的细节:C1和C2口的VBUS上建议各加一个放电MOS管。插拔设备后VBUS要在规定时间内放到安全电压以下,否则再插另一台设备时容易出现"过压惊扰",轻则握手失败,重则损坏设备。零外围方案里这个MOS由芯片内部的放电控制引脚驱动,外部只需要放一个电阻和一个MOS管,逻辑很简单,但千万别省。
3.2 关键外围选型与计算
电感选值我用实际计算来演示。每路Buck开关频率假设650kHz,母线电压24V,C1目标输出20V5A。占空比D = Vout/Vin = 20/24 = 0.833。纹波电流目标取输出电流的30%,也就是1.5A。电感值 L = (Vin - Vout) x D / (f x ΔIL) = 4 x 0.833 / (650000 x 1.5),算出来约3.4uH,实际选了3.3uH,饱和电流标到7.5A,DCR控制在15mΩ以内。
这里要特别强调,饱和电流一定要按极端工况算:动态分配时一个口可能瞬间承担接近全部功率,如果电感饱和,电流会陡增,轻则触发保护,重则把功率管打穿。所以额定5A的口,电感饱和电流至少留1.5倍以上的裕量。这个认知是我后来实测出来的,一开始选了5.5A饱和电流的3.3uH电感,满载动态切换时偶发炸管,换成7.5A的之后问题消失。
输出电容方面,Buck的输出电容主要承担负载瞬态的能量缓冲,滤波作用相对次要,而且MLCC的ESR和ESL都很低。100W口我放了4颗22uF/25V的MLCC并联,合计88uF。C1和C2两个C口共享一组输出电容,这样在动态分配功率切换时,电容能短暂撑住电压,避免设备检测到电压跌落而误判为断开重连。
母线电容放在前级输出侧,需要同时承担前级环路的稳定和三路Buck的输入瞬态。我放了两颗100uF/35V电解电容加四颗10uF MLCC,总容值大约240uF。如果只用电解电容,高频纹波会偏大,MLCC的作用就是补高频瞬态,两者配合才能让母线电压在六安培级别的负载跳变时保持稳定。
3.3 PCB布局与散热设计
布局思路一句话总结:前级电路放在板子一端,三路Buck在中部一字排开,Type-C母座和OLED屏分布在面板侧。功率回流路径尽量短,每路Buck的输入电容要贴着芯片的VIN引脚放,而不是放在电感后面,这是很多人容易犯的错误。输入电容离芯片VIN引脚越近,开关噪声环路越小,辐射和振铃都会明显改善。
接地处理上,功率地和信号地单点连接,OLED的I2C走线不要跨过功率管的开关节点下方,否则屏幕容易闪,协议检测也可能被干扰。数字电源芯片的旁路电容也要讲究,在MLCC旁边放100nF加10nF的组合,分别吸收中频和高频噪声,这是模拟电源里常见的做法,在数字电源里同样有效。
散热方面,铜箔厚度用到2oz,功率路径顶端镀锡增加均热面积,芯片下方打密集过孔阵列到背面大面积铜箔。实际满载100W跑半小时,芯片外壳温度稳定在67度左右,外壳实测58度,算是在消费电子可接受范围内。如果想把温度压得更低,可以加一片导热垫把热量导到铝合金外壳上,但要注意绝缘处理,避免Type-C外壳带电的误解。
4. 固件与屏显实现:DPS的灵魂在数字域
4.1 协议栈与数字电源控制
很多朋友对固件有畏惧心理,其实这套方案的固件可以拆成三块:协议解析、数字环路、应用策略。不夸张地说,协议解析这一块大部分工作量已经被芯片内部的硬件引擎消化了。
PD的物理层收发、CRC校验、重传机制都是硬件引擎自动处理的,固件只需要关心"收到了什么Request、该回什么Accept或者Reject"。比如一台手机发来PDO Request请求5V3A,DPS引擎解析完把它放在寄存器里,固件读出来判断合法性,然后写指令让对应Buck输出5V,再让协议引擎回复Accept,整个握手就完成了。这种"硬件解析加软件策略"的分工,既保证了协议时序的实时性,又保留了业务逻辑的灵活性。
数字环路部分,固件要做的是配置补偿系数。DPS内置的补偿器一般有两三个极点和零点可调,初始值根据电感电容算一个大概,通电后通过观察负载阶跃波形微调。这个过程跟模拟环路调试很像,区别是你不用换电阻电容,直接写寄存器就能改带宽,效率高很多。我那边从初始上电到环路收敛,大概花了一个下午,在传统方案里通常要拆板换料好几次。
负载阶跃测试时,我关注的是输出电压过冲和恢复时间。100W口从空载切换到5A负载,输出电压过冲控制在150mV以内,恢复时间约400us。这个性能对PD快充来说已经非常稳,比很多模拟方案都好,原因就是数字补偿器没有温漂和老化问题,参数稳定。
4.2 动态功率分配策略
功率分配是这台充电器的核心竞争力,我做了两套策略,固件里用一个标志位切换。第一套是固定档位分配:单口接入时C1最大100W;C1和C2同时接入,C1 65W、C2 35W;三口全部接入,C1 45W、C2 30W、A口25W。固定档位的优点是逻辑简单、可预期、好测试,适合对稳定性要求更高的用户,但缺点是如果C2只插了一台手机只需要20W,C1却只能拿到固定65W,剩下35W就白白浪费了。
第二套是智能动态分配,也是我推荐平时用的方案。每个口初始都给出额定最大功率,DPS实时检测各口实际拉取的电流,当总需求超过100W时,按优先级把功率从低优先级口抽走补给高优先级口。我的优先级顺序是C1大于C2大于A口。举例来说,C1在跑80W时C2又插上一台请求45W的笔记本,系统会先把A口降到0,再把C2口限到20W,保证C1不断电,这就是动态分配的价值。
但智能动态分配的关键难点是切换速度。如果切换太慢,新口插入时高优先级口可能因为母线瞬时过流而触发保护抖动。我在固件里做了一个功率预判逻辑:检测到新口插入,立刻把该口的输出能力先降到最低档,等协议协商完成、知道设备真实需要多少功率后,再逐步放开。实测从插入到功率稳定大约需要80ms,用户完全无感。这个时间窗口要卡得准,太短会分配出错,太长会让低优先级设备先掉电,我是用示波器加可编程负载反复调试出来的。
4.3 屏显数据映射与UI逻辑
OLED屏的数据来源就是DPS的采样寄存器。DPS内部ADC每周期都在采样电压和电流,固件只需要把这些原始值换算成可读数字,再映射到屏幕的显示缓冲区。换算公式本身不复杂:电压码值乘以分压比再除以ADC参考电压,电流则是采样电压除以采样电阻阻值,但采样电阻的误差会让读数明显漂移。
所以上电时一定要做两点校准。我的方法很简单:把每个口接一台可编程电子负载,先拉1A记录一个点,再拉5A记录一个点,算出增益和偏置存进EEPROM。屏显校准之后,实测功率偏差小于0.2W,这个精度在充电器产品上已经足够。如果只做软件里按标称值硬算,偏差可能到0.5W以上,屏显的可信度会打折扣。
UI逻辑上我做了两种显示模式。正常模式每两秒轮询显示三个口的状态,像一个仪表盘循环,适合日常使用;调试模式固定显示某一个口的实时数据,方便盯着某一路细看。OLED刷新我用10Hz,I2C速率400kHz,数据量不大,CPU占用不到3%。屏幕功耗本身只有十几毫瓦量级,对整机效率的影响可以忽略。
5. 调试验收全程记录
5.1 上电调试顺序
第一次上电千万别直接插笔记本,这是我踩过坑后的血泪教训。我的顺序是:先不装屏幕,用最小系统验证DPS芯片供电正常;然后烧入最简固件,用电子负载在A口做5V和9V两种电压的恒流测试,确认环路稳定;接着装上OLED,验证I2C时序和显示有没有问题;最后才做C口的PD测试。
这里有个非常容易踩的坑:OLED的I2C地址和DPS芯片的寄存器读写地址共用一条总线,如果地址冲突,整个总线都会被拉死或者读到错误数据。我第一次焊接时把屏幕地址看错,结果读DPS寄存器全是屏幕回的错误字节,排查了大半天才发现是地址映射没做对。所以建议硬件原理图阶段就把每个从设备的7位地址列成一张表,软件里也统一用宏定义,避免低级错误。
C口测试用PD诱骗器逐个PDO验证。诱骗器请求5V、9V、12V、15V、20V,每次都观察屏显电压是否和请求值一致。诱骗器的好处是能模拟设备端的拉载行为,配合电子负载完成全量程测试,整个过程不用真的插手机和笔记本,省时省力。等到诱骗器全部过一遍,再拿真机实测兼容性,真机测试主要看实际拉载时的协议协商速度。
5.2 满载与长期稳定性测试
满载测试是最能体现DPS价值的一环。三个口同时接电子负载,设置成C1 65W、C2 30W、A口5W,总计100W跑2小时。期间用热像仪记录温度,用示波器挂每个口的输出纹波。实测纹波表现相当理想,我整理成了一张表方便对照:
| 输出口 | 满载纹波 | 测试条件 |
|---|---|---|
| C1 | 18mVp-p | 20V5A |
| C2 | 22mVp-p | 20V1.5A |
| A口 | 25mVp-p | 5V1A |
这个纹波水平对PD标准要求的几百毫伏来说是相当富裕的。更值得一提的是,C2从30W突然切到0W也就是拔出设备的瞬间,C1的输出纹波几乎没有任何抖动,说明各路数字环路之间的隔离做得不错。这在传统模拟多口方案里很难做到,因为各路共享输入母线的串扰很难彻底消除,DPS的独立数字控制在这里帮了大忙。
长期稳定性测试主要看有没有累积漂移。我跑了48小时循环老化,每隔30分钟记录一次输出功率和温度,功率波动始终在1W以内,屏显读数没有出现累积误差。这说明EEPROM里的校准数据非常稳定,数字采样链路没有受热漂移影响,这算是对整套方案可靠性的一个有力验证。
5.3 常见问题速查与解决思路
把我在这个项目里踩过的坑和解决方案直接列出来,大家做类似产品时至少可以先避掉一半:
| 现象 | 根因 | 处理方法 |
|---|---|---|
| 屏显功率明显偏大或偏小 | 采样电阻误差、校准缺失 | 做两点校准,把增益偏置写入EEPROM |
| 插上设备后屏显有电压但电流始终为零 | 协议未握手成功,设备不拉载 | 检查协议支持列表、CC线序、D+/D-干扰 |
| 多口切换时另一口设备瞬间掉电重协商 | 总功率超限后降功率时序不对 | 优化分配顺序,先降目标口再升新口,加缓冲 |
| OLED满载时闪动或花屏 | I2C被开关节点干扰 | 屏显走线隔离,磁珠滤波,降低I2C速率 |
| 满载一段时间后输出功率自动下降 | 过热降额保护触发 | 确认触发阈值,改进散热,在安全范围放宽阈值 |
这里我想单独展开一个典型案例:插上设备后屏显有电压但电流为零。这个情况在快充开发里太常见了,解决思路是先看协议类型是否在支持列表里,再看CC线序有没有接反,D+/D-检测有没有被走线干扰。用示波器抓CC引脚的波形,可以直接看到有没有发起BC1.2或者USB PD握手信号,比盲猜快得多。我那个案例最后是FPC走线干扰D+导致的,加了对地电容就解决了,排查过程耗了一下午,但结论其实很简单。
另一个值得说的案例是满载功率自动下降。第一次遇到时我还以为是芯片太热触发了过热保护,后来查寄存器确认降额原因是芯片温度超过默认阈值。这个默认阈值通常定得特别保守,因为要兼顾不同散热条件,我在自家产品上配合散热改进把阈值从80度调到了95度,满载时间明显延长,芯片结温依然在安全范围。如果你要做类似产品,这个参数值得仔细看,别被默认值限制住性能。
6. 可以继续挖的方向
6.1 加入无线数据通道或无屏幕版本
这套硬件的固件架构只要在I2C总线上挂一个蓝牙透传模块,屏显的数据就能直接推送到手机App。充电器的状态、功率曲线、充电进度都能远程看,产品定位立刻从工具变成智能硬件。如果不想做App,用串口调试工具也可以完成数据抓取,固件里只需要加一个串口打印模块,调试效率会大幅提升。
6.2 协议适配的扩展空间
C口目前兼容PD3.1、PPS、QC4+、QC5、UFCS,A口做了QC3.0、FCP、SCP、AFC、PE,几乎覆盖了市面上主流手机和笔记本的快充协议。唯一没法覆盖的是某些品牌深度定制的私有协议,这种通常需要后期升级固件尝试适配,硬件本身不需要改动。这也是DPS方案的一个优势,协议栈在固件层,硬件更新成本为零。
6.3 更多口的组合
三个口只是起点。如果选用更高功率的前级,比如200W母线,同样架构的DPS方案可以扩展成4C加2A,功率分配策略从三路动态变成六路协同,逻辑复杂度会上升不少,但DPS的灵活性恰好能承接这种复杂度。我下一版准备做4C2A,先把母线功率提到200W,再把固件策略改写成基于状态机的多路仲裁,核心的DPS和屏显思路不变。
最后分享一点个人体会。当初看到"零外围"这个词,觉得有点营销味道,实际做完这版才发现,高集成数字电源确实能把硬件复杂度大幅压下来,但代价是你要把更多精力放在固件和数字环路上。屏幕不再是装饰,调试时它就是你的示波器和电流表;DPS也不再是玄学,你能清楚看到每一个控制信号、每一次功率切换。踩过几次坑之后,我最大的体会是:这类方案的调试重心已经完全前移到数字域,传统的"焊板子改元件"式做法会越来越跟不上节奏。
如果你也想做一台类似的可视化快充充电器,建议从我这个架构起步:先做单口验证DPS和屏显,再扩到三口动态分配。硬件难度不算高,固件才是真正要花时间的地方。把我上面列的五个常见问题提前看一遍,至少能少走一半弯路。祝顺利。