设计一款基于 ESP322 微控制器的紧凑型 USB-C PD/PPS 电源与 PD 分析仪
如今,USB-C充电器随处可见。我们大多数人都在某个抽屉里藏着一个30W、65W甚至100W的PD充电器。我们通常认为它们只是简单的手机或笔记本电脑充电器,但实际上它们是功能强大的电源设备,能够根据需求提供不同的电压输出。
这正是我开发PowerPD的灵感来源。
PowerPD 是一款基于 ESP322 微控制器、AP33772S USB-C PD PD PD 沉积控制器和 INA226 电源监测器构建的紧凑型 USB-C PD/PPS 电源供应与 PD 分析仪。其原理很简单:连接 USB-C PD PD 充电器,通过旋钮编码器选择所需电压,板载系统将自动与充电器协商该电压。同时,它可实时测量电压、电流和功率,并将所有数据显示在小型 OLED OLED 屏幕上。
PowerPDPD 支持标准的 USB-C PD 电压,如 5V、9V、12V、15V 和 20V。如果充电器支持 PPS(可编程电源),输出电压还可进行小步调节,适用于电子设备测试、原型供电、电路调试及其他轻量级实验台电源应用。
材料
主要部件
•ESP32-WROOM-32EE 模块
•AP33772S USB-C PD 电源控制器
•INA226 电压/电流/功率监测器
•MP1584 降压转换器
•AP2204K-3.3V稳压器
•USB Type-C-C 接口
•5 mΩ 电流感应电阻
•MOSFET电源开关
•1.3英寸OLED显示屏
•旋转编码器
•按钮
•状态指示灯
•电阻、电容、电感和保护二极管等无源元件
该电路图包含AP33772S电源控制器、INA226监控器、MP1584降压转换器、3.3V稳压器、MOSFET输出级、ESP32、OLED显示屏接口、旋转编码器、开关以及编程引脚。
所需工具
•USB-C PD PD 充电器(支持至少 9V PD)
•3.3V USB转UART转换器(CP2102、CH340 或 FT232RL)
•两个小型按钮,用于BOOT和EN
•跳线
•万用表
第一步:工作原理
在进入硬件之前,先了解PowerPD的工作原理会有所帮助。
当连接USB-C PD充电器时,它会从默认的5V输出开始。AP33772S PD控制器随后通过USB-C CC线路读取充电器支持的电压电平。ESP32选择所需的电压或PPS设置,并通知AP33772S向充电器请求该设置。
当充电器切换到选定的电压后,电源会通过一个5 mΩ的分流电阻和MOSFET输出开关,再到达输出端子。INA226实时监测电压、电流和功率,并通过I²C将数据发送给ESP32。
ESP322 可更新 OLED OLED 显示屏,处理旋转编码器和按钮,控制输出开关,并可通过 Wi-Fi-Fi 将实时数据发送到 Adafruit IO。
机载降压转换器和3.3V稳压器直接从同一USB-C PD输入电压为ESP32及所有逻辑电路供电。
第二步:电路概览
USB-C接口用于传输电源和通信线路。AP33772S与充电器通信,并请求选择的PD或PPS电压,例如5V、9V、12V、15V或20V。
电流与功率监控
5 mΩΩ 并联电阻和 INA226 实时监测输出电压、电流和功率。测量数据通过 I²C 发送到 ESP32。
输出切换
MOSFET 用作电子输出开关。ESP322 可在故障情况下安全地将输出开启或关闭,并切断负载。
内部电源
MP1584降压转换器将USB-C输入电压降低,AP2204K稳压器则为ESP32及其他逻辑电路提供干净的3.3V电源。
ESP32 控制器
ESP32 控制整个系统,负责处理电源协商、读取传感器数据、更新 OLED OLED 显示屏、管理旋转编码器和按钮,并可选择通过 Wi-Fi-Fi 将数据发送到 Adafruit IO。
用户界面
该板配备了一个1.3英寸的SH1106 OLED显示屏、一个旋转编码器,以及用于菜单导航、电压选择和输出控制的按钮。
第三步:USB-C PD、PPS 和 AVSSS 基础知识
USB-C PD充电器可根据其支持的规格提供多种固定电压等级。SPR(标准功率范围)中的标准配置如下:
•5V (default for all USB-C connections)
•9V
•12V
•15V
•20V
这些固定电平覆盖了大多数应用场景,但电子设备工作往往需要介于两者之间的电压——例如两节锂聚合物电池需要8.4V,定制LED驱动器需要13.2V,或特定稳压器测试需要10V。这时PPS就派上用场了。
PPS — — 可编程电源(Programmable Power Supply)使充电器能够以100毫伏的步长连续调节输出电压,而无需在固定电平之间跳变。电流限制也可以50毫安的步长设置。这使得性能良好的USB-C充电器在轻量级工作时可接近小型台式电源。PPS是USB PD 3.0规范的一部分,许多现代充电器都支持该功能,但并非全部产品都支持,因此务必查阅充电器的规格说明书或标签信息。
EPR — — 扩展电源范围 新款充电器还支持 EPR,可提供更高的固定电压:28V、36V 和 48V。这些电压适用于显示器、工作站和游戏笔记本等高功率设备。目前的固件不支持 EPR,因此请勿尝试请求这些电压。
AVS — — 可调电压电源
AVS 是 USB PD 的一项新功能,可在高功率水平下提供精细的电压控制。它与 PPS 类似,但专为更高电压、更高功率的应用而设计。目前 PowerPDPD 并未使用 AVS。
在请求电压前,请务必确认充电器实际支持的电压。AP33772S 仅会协商充电器所宣传的电压,不会强制使用充电器不提供的电压。但为了安全起见,建议从5V开始逐步升高,尤其是在测试新负载时。
第四步:PCB设计与组装
我的朋友拉宾德拉在EasyEDA中设计了PowerPD PCB。
AP33772S USB-C PD 控制器被放置在靠近 USB Type-C-C 连接器的位置,以保持 CC CC CC 轨迹短而整洁。INA226 位于 5 mΩΩ 并联电阻旁边,以便通过合适的开尔文传感实现精确的电流测量。
由于大部分重要部件都是细间距SMD元件,手工焊接并不实用。AP33772S采用QFN封装,INA226是小型SOT-23器件,而USB-C接口的焊盘非常紧密。因此,我决定从一开始就采用专业的PCBA,并使用NextPCB进行制造和组装。
与NextPCB的订购流程非常简单,我通过他们的在线系统上传了Gerber文件、物料清单(BOM)以及拾取贴装文件。
NextPCBBB 负责了元器件采购和PCB组装,包括ESP32模块、AP33772S、INA226、USB-C接口、MP1584电源部分、AP2204K-3.3V稳压器、MOSFET输出开关以及所有小型无源元件。
由NextPCB赞助
本项目在可靠多层PCB制造商NextPCB的支持下成功完成。凭借在PCB制造和组装领域超过15年的经验,NextPCB为全球的创客和专业人士提供高品质、可靠的PCB解决方案。
HQDFM 是一款免费的先进在线 PCB Gerber 文件查看器,具备全面的制造设计(DFM)分析功能。
发货前,他们还发来了组装好的电路板的照片,让我可以直观地检查元件的安装位置。这非常有用,因为在我电路板离开工厂之前,就能确认零件是否正确组装。
当电路板到达时,几乎没什么可做的了。我将USB转UART转换器连接到编程引脚上,刷入了固件,电路板就准备好进行测试了。无需返工,没有缺少的零件,也没有冷焊接头。
如果你想自己制作PowerPD,Gerber文件、物料清单(BOM)和原理图均可在GitHub仓库中获取。你可以直接上传这些文件到NextPCB,然后以相同的方式进行电路板的制造与组装。
第五步:固件概览
对于AP33772S USB-C PD电源控制器,我使用了自己定制的Arduino库。
要使用该代码,请从仓库下载以下文件:
•AP33772S.h
•AP33772S.cpp
•PowerPD.ino
将这三个文件都放在同一个Arduino代码文件夹中。这一点很重要,因为主的PowerPD.ino文件使用了AP33772S库:
如果 .h 和 .cpp 文件不在同一个文件夹中,Arduino IDE IDE 将无法正确编译项目。
上传前,请安装所需的Arduino库:
•U8g2
•INA226
•PubSubClient
固件控制整个PowerPD系统。它通过USB-C PD/PPS协商与AP33772S通信,读取INA226的电压和电流数据,更新SH1106 OLED显示屏,处理旋转编码器和按钮,控制MOSFET输出开关,并可选地支持Wi-Fi/MQTT监控功能。
代码中使用的主引脚配置如下:
•I2C SDA GPIO21
•I2C SCL GPIO22
•PD_INT GPIO32
•MOSFET CG GPIO25
•Rotary CLK GPIO5
•Rotary DT GPIO18
•Rotary SW GPIO19
•SW1 GPIO17
•SW2 GPIO16
•LED GPIO4
在使用该板之前,最好了解其基本控制方法:
•旋转编码器 更改选定值
•短按编码器,移动到下一个字段
•长按编码器 应用设置 / / 打开菜单 / / 切换输出
•SW111 短按按 切换电压和电流设置
•SW111 长按按 打开菜单
•SW222 短按开关,开启/关闭输出
•SW222 长按打开会话界面
启动时,ESP32 会初始化显示屏,通过 I2CCC 检测 AP33772S 和 INA226,读取充电器中可用的 PD PD 配置文件,然后显示主界面。用户可在此界面选择固定的 PD 电压或 PPS 设置,并在准备就绪后开启输出。
我已将完整的源代码粘贴在下方,以便直接查看或复制。代码包含PD协商、测量、显示界面、安全检查、输出切换以及菜单系统。
第6步:Adafruit IO IO 配置
PowerPDPD 还可以将实时数据发送到 Adafruit IO,这样我就能通过网页仪表盘来监控电路板。对于这个项目,我保持了仪表盘的简洁,并只使用真正重要的数值:
•电压
•电流
•电力
•温度
•输出
这足以查看电源的实时状态,而无需让仪表盘被不必要的数据填满。
1. 打开 Adafruit IO
首先,前往 Adafruit IO IO 并登录您的账户。
登录后,您将看到 Adafruit IO 的概览页面。由于我使用的是基础套餐,最多可以创建 10 个数据源,这足以满足本项目的需求。
2. 创建信息源
前往:
订阅源 → 新订阅源
逐个创建这五个信息流:
•电压
•电流
•电力
•温度
•输出
我使用了简短的饲料名称,因为这些名称在ESP32代码中也用到了。
对于描述,我使用了像这样的简单文字:
•由PowerPD测量的电压实时输出电压
•当前由PowerPD测量的负载电流
•实时输出功率
•温度板 / PD控制器温度
•输出状态,0 = 关闭,1 = 开启
3. 创建仪表板
创建订阅源后,请前往:
•仪表板 → 新建仪表板
我为PowerPD监控创建了一个仪表盘。该仪表盘将实时显示电压、电流、功率、温度和输出状态。
仪表板名称示例:
•PowerPDPD 监控器
步骤7:上传固件
文件夹设置
创建一个名为 PowerPD 的文件夹,并将三个文件放入其中:
•PowerPD/
•PowerPD.ino
•AP33772S.h
•AP33772S.cpp
在 Arduino IDE 中打开 PowerPD.ino 文件。在编译之前,请在文件顶部更新您的 Wi-Fi 和 Adafruit IO IO 认证信息:
如果你没有使用 Adafruit IO,可以将这些内容留作占位文本。本地显示和控制功能仍可正常使用。
连接USB转UART转换器
使用 3.3V 逻辑电平的 USB USB USB 转 UART UART UART 转换器。5V 适配器会损坏 ESP32。
USB转UART电源PD编程接口
•发送发送 接收
•RX TX
•GND GND
•3V3 3V3
第8步:USB-C PD充电器和数据线
您使用PowerPD时的充电器和数据线,比您想象的更为重要。
任何USB-C PD充电器默认从5V开始。AP33772S芯片通过CC线路与充电器通信,以协商更高的电压,但只能请求充电器实际公布的电压值。
在使用任何充电器之前,请检查背面的标签。标签上应列出支持的电压和电流规格,例如:5V/3A、9V/3A、12V/3A、15V/3A、20V/3A。如果某个充电器标称功率为65W,但标签上仅显示5V/3A,那么无论你请求多少电压,它都无法提供20V输出。
如果你想测试PPS,请查看充电器上或其规格中是否印有“PPS”字样。并非所有高瓦数充电器都支持该功能。
线缆也很重要。劣质的USB-C线缆可能导致电压下降、连接不稳定或PD协商失败,即使主板运行正常,也可能看起来有故障。大多数测试情况下,任何额定3A且支持PD的USB-C转USB-C线缆都可接受。对于接近20V和5A的高功率负载,请使用带有e-mark认证的5A线缆。
避免使用USB-A转USB-C适配器、磁性连接器和未知的延长线。保持简单:
在连接任何负载之前,务必先用万用表检查输出电压。这只需30秒,可避免许多潜在的误解。
第9步:首次通电
使用优质线缆连接 USB-C PD 充电器。目前不要连接任何设备到 V_OUT 接口。
当充电器连接时:
•状态指示灯应亮起——这确认了VBUS已存在
•OLED应在几秒内显示PowerPD的启动界面
•主板读取充电器提供的可用PD配置文件
•输出保持关闭
如果OLED屏幕保持空白,请检查固件上传情况。如果LED灯未亮,请检查USB-C数据线和充电器。
启动界面出现后,以115200波特率打开串行监视器,并确认AP33772S和INA226均已检测到。然后检查OLED上是否显示至少5V的可选配置文件。
此时电路板运行在5V(默认值),输出处于关闭状态,V_OUT未连接任何设备。这正是进行电压测试前的正确状态。
第10步:CAD设计
我的朋友穆凯什使用 Autodesk Fusion 设计了完整的 PowerPD 外壳,重点在于紧凑的尺寸、简洁的外观以及围绕定制 PCB 的便捷组装。
整个设计由四个主要部分组成:
1. 前面板:
•这是机箱的顶部盖板/前部区域。
•包含OLED显示屏的开孔
•用于固定旋转编码器轴和按钮
•提供USB-C接口和输出端子的开口
•作为整个外壳的主要顶盖
2. 主住房:
•底部外壳可牢固地固定已制作好的PowerPD电路板。
•根据精确的PCB尺寸设计
•包含PCB安装支架和螺丝孔
•提供USB-C接口和编程引脚的接入
•保护内部电子元件并确保其正确对齐
3. 旋转编码器旋钮:
•专为PowerPD定制的旋转编码器旋钮。
•调节电压和浏览菜单时握感舒适
•紧凑设计,与机箱风格相匹配
•直接压入式安装于旋转编码器轴上
4. PCB安装布局:
•该外壳设计使得组装好的PCB可直接安装在内部,无需额外的支架或复杂的布线。
•OLED 头部已与前面板窗口对齐
•旋转编码器位置与旋钮开口一致
•紧凑的内部布局使机身结构简洁整洁
我已附上:
•原始的Fusion 360设计文件
•所有可打印部件的STL文件
你可以:
•在 Fusion 360 中查看和修改 CAD 模型
•如有需要,请调整外壳尺寸
•直接切片并3D打印提供的STL文件,用于您的自行组装
电压测试
•在电源开启且输出禁用的情况下,我使用旋转编码器切换了可用的USB-C PD电压配置文件。OLED显示屏显示了充电器支持的配置文件,包括5V、9V、15V和20V。
•选择电压后,我打开了输出,并使用福禄克万用表验证了实际的V_OUT。测得的电压与OLED显示值非常接近:
•5V 电平测量值约为 4.98V
•16V PPS 设置测量值约为 15.96V
•20V 电位测量值约为 20.07V
这证实了AP33772S已正确协商选定的PD配置文件,并且INA226电压监测已得到适当校准。
我还通过旋转编码器选择了可调电压电平来测试PPS模式。输出电压变化正确,万用表读数与OLED显示屏上显示的设定值一致。
第12步:负载测试
在确认电压曲线正常工作后,我将几个真实负载连接到PowerPD输出端进行测试。我没有使用电子负载,而是用一个12V的冷却风扇和一个由选定的USB-C PD电压供电的高功率BLDC电机来测试电路板。
开启输出后,OLED显示屏实时显示电压、电流和计算出的功率。Adafruit IO仪表板也通过Wi-Fi无线更新,可远程显示相同的实时电压、电流、功率和温度数据。
PD分析模式用于监控充电器的协商过程。OLED可直接显示从连接的USB-C充电器获取的检测到的PD曲线、主动电压、PPS状态以及实时输出信息。下方附有GIF图,展示了实时PD协商和分析界面的实际运行效果。
在确认电压曲线正常工作后,我将几个真实负载连接到PowerPD输出端进行测试。我没有使用电子负载,而是用一个12V冷却风扇和一个由选定的USB-C PD电压供电的高功率BLDC电机来测试电路板。当输出开启时,OLED显示屏实时显示电压、电流和计算出的功率。Adafruit IO仪表板也通过Wi-Fi无线更新,远程显示相同的实时电压、电流、功率和温度数据。我还添加了一个内置的PD分析模式,用于监控充电器的协商过程。OLED可直接显示从连接的USB-C充电器检测到的PD曲线、当前电压、PPS状态以及实时输出信息。
本文编译自hackster.io





