此次软件优化由CW32生态社区用户:随风½魔方广告工程、6336166A_SAKURA随风提供,感谢大家对CW32的大力支持!
软件下载:
https://gitee.com/mofuinsuifeng/cw32-pocket-power-supply
口袋电源板子购买:
相较最初版的修改
对比基线为飞书资料中的正式版 V1.0(2025-08-29)CW32L011_PD Power(CW32L011口袋电源)使用手册。本版本部分代码和实现思路参考了 wangjing123123/cw32-pocket-power-supply,并结合当前硬件及实测结果进行了调整。将 V1.0 的列表式界面改为四宫格主页,当前入口为 VOL FIXED、VOL ADJ、PROTOCOL SCAN 和 PDO INFO;重绘菜单、输出状态、数值及提示界面。
在原有 PD/PPS 功能基础上增加 QC2 和 QC3 输出:QC2 提供 5V、9V、12V 固定挡位,QC3 提供 3.6V 至 12V 可调输出;固定和可调页面均可通过右键切换协议。FS2711 的 PD/PPS 协商、PDO 读取和协议扫描改为非阻塞状态机;
增加 I2C/PDO 重试、PDO 合法性校验及扫描退出后的复位恢复流程,减少无 PDO、PPS 不可用和界面长时间阻塞的问题。
PD、PPS、QC2 和 QC3 进入输出页面前增加 WAIT 状态;
QC2/QC3 的等待页至少显示 500ms,协议设置完成后再进入输出界面。调整固定和可调输出流程:先选择挡位和确认参数,再由中键打开输出;调节电压或电流时先关闭 MOS,防止带载直接切换参数。保留 V1.0 的三级保护思路并重构为统一保护模块。输出开启时先同步 VC/ADC/软件门限、清除中断状态并启用保护,最后打开输出 MOS;关闭输出、调参或退出页面时同步关闭保护。
VC1 改用 25mV 迟滞、LSI 时钟、32N8 滤波和上升沿中断;ADC 看门狗改为监控电流采样 IN1,根据实测 Vref 和 VDDA 计算动态上下窗口,并采用连续 16 次超限判定。软件过流门限改为 max(设定电流 + 200mA, 设定电流 x 110%),持续 30ms 后关断。初版没有故障码报警;本版本新增故障分类与故障码,分别使用 UV ERROR、OV ERROR、SW OC ERROR、ADC ERROR 和 VC ERROR 表示欠压、过压、软件过流、ADC 看门狗过流和 VC 快速过流。
新增输出页面中央故障弹窗。短路或保护触发后保持在输出页面,按中键只关闭弹窗,不会因 VBUS 瞬时下降误判拔线并退回主页;PDO INFO 页面不显示故障提示。运行计时统一使用 BTIM3 的 1ms 时基;增加库仑计,按输出电流和时间累计并显示 mAh/Ah。关闭输出或调参时暂停累计,退出输出页面或 PDO 清空时清零。在原 Keil 工程之外增加 CMake、Ninja 和 Arm GNU Toolchain 编译方式,可生成 HEX、BIN 和 ELF 固件文件。
CW32L011 便携式可调电源
本项目基于 CW32L011 和 FS2711Q,实现 USB Type-C PD/PPS、QC2 和 QC3 诱骗输出,并提供协议扫描、PDO 信息、输出监测和多级保护功能。
当前界面采用 240 x 135 横屏四宫格布局。PD/PPS 协商、PDO 读取和协议扫描均使用非阻塞状态机,界面操作不会因协议处理长时间卡住。
主要功能
- PD 固定电压 PDO 输出。PPS 可调电压、电流输出。QC2 固定电压输出:5V、9V、12V。QC3 可调电压输出:3.6V 至 12V,电压步进 0.2V。协议扫描和 PDO 能力查看。实时显示电压、电流、功率、运行时间、容量和 MCU 温度。欠压、过压、软件过流、ADC 看门狗过流和 VC 快速过流保护。
首页
设备正常上电后播放启动画面,然后进入四宫格首页:
| 入口 | 功能 |
|---|---|
VOL FIXED |
进入固定电压输出,默认显示 PD 固定 PDO,也可切换到 QC2 |
VOL ADJ |
进入可调电压输出,默认显示 PPS PDO,也可切换到 QC3 |
PROTOCOL SCAN |
扫描充电头支持的协议 |
PDO INFO |
查看 PD、PPS、QC2 和 QC3 的输出能力 |
首页中 VOL 使用白色,FIXED 和 ADJ 使用橙色。
首页按键:
- 上/下:在上下两行之间移动。左/右:在左右两列之间移动。中键:进入当前选中的功能。
如果进入固定或可调输出时 PDO 信息尚未就绪,界面先显示 WAIT 并重新读取 PDO。读取完成后进入对应挡位页;不支持对应 PDO 时显示 NO FIXED PDO 或 PPS UNSUPPORTED,按左键返回。
VOL FIXED
该入口同时提供 PD 固定输出和 QC2 输出。
PD 固定输出
进入页面后,左上角显示彩色 PD FIXED 图标,右上角显示灰色 QC2 图标。
-
- 使用上/下键选择 PD 固定电压 PDO。按中键开始 PD 协商,期间显示
WAIT
- 。协商成功后进入输出页面。使用上/下键调节限流值,短按步进 0.1A,长按可加速调节。第一次按中键确认限流参数,输出仍保持关闭。再次按中键打开输出;之后按中键可切换输出开关。按右键重新进入限流编辑状态。进入编辑状态时会先关闭输出。按左键关闭输出并返回挡位页。
QC2 输出
在 PD 固定挡位页按右键进入 QC2 挡位页。此时左上角显示彩色 QC2 图标,右上角显示灰色 PD FIXED 图标。
-
- 使用上/下键选择 5V、9V 或 12V。按中键应用 QC2 挡位。界面显示至少 500ms 的
WAIT
- ,随后进入输出页面。QC2 默认限流为 2.0A,并在进入输出页时视为已确认;首次按中键即可打开输出。按右键可关闭输出并重新编辑限流值;修改后按中键确认,再按一次中键打开输出。在 QC2 挡位页按左键或右键返回 PD 固定挡位页。
VOL ADJ
该入口同时提供 PPS 和 QC3 可调输出。
PPS 输出
进入页面后,左上角显示彩色 PPS 图标,右上角显示灰色 QC3 图标。
-
-
- 使用上/下键选择 PPS PDO。按中键开始 PPS 协商,期间显示
WAIT
-
- 。协商成功后进入输出页面。使用上/下键调节当前字段,短按步进 0.1,长按可加速调节。按右键在电压和电流字段之间切换。切换字段时会先关闭输出。第一次按中键确认并应用参数,输出仍保持关闭。再次按中键打开输出;之后按中键可切换输出开关。按左键关闭输出并返回挡位页。
QC3 输出
在 PPS 挡位页按右键进入 QC3 页面。此时左上角显示彩色 QC3 图标,右上角显示灰色 PPS 图标。
-
-
- QC3 可调范围为 3.6V 至 12V,默认从 3.6V 开始,默认限流为 2.0A。按中键应用 QC3,界面显示至少 500ms 的
WAIT
-
- ,随后进入输出页面。使用上/下键调节当前字段;QC3 电压步进为 0.2V,电流步进为 0.1A。按右键切换电压和电流字段;切换时会先关闭输出。第一次按中键确认参数,再次按中键打开输出。在 QC3 挡位页按左键或右键返回 PPS 挡位页。
输出页面
输出页面显示以下信息:
实测输出电压、电流和功率。设定的最大电压和最大电流。
ON / OFF 输出状态。输出运行时间。累计容量,低于 1Ah 时显示 mAh,达到 1Ah 后显示 Ah。MCU 温度。
QC2 和 QC3 输出页左上角的电压文字与对应协议图标同色。关闭输出或进入参数编辑时暂停计时和容量累计;退出输出页面或 PDO 被清空时清零。
PROTOCOL SCAN
协议扫描页会读取 FS2711Q 的协议位图,并结合 PDO 结果显示充电头能力。当前 QC 映射为:
prot_exist bit2:QC3。
prot_exist bit3:QC2。
页面操作:扫描期间显示 WAIT 或 SCANNING。已检测协议优先排列并高亮,未检测协议低亮显示。上/下键:切换协议列表页。中键:重新扫描。左键:停止扫描、关闭输出并返回首页。停留在协议扫描页时,拔出充电头会在页面底部状态栏显示 NO CHARGER - PLUG IN;重新插入后自动再次扫描。
PDO INFO
该页面汇总显示:
- PD 固定 PDO 电压挡位。PPS 电压范围。QC2 固定挡位:5V、9V、12V。QC3 可调范围:3.6V 至 12V。
对应协议未识别时分别显示 PD UNSUPPORTED、PPS UNSUPPORTED、QC2 UNSUPPORTED 或 QC3 UNSUPPORTED。按左键返回首页,中键刷新页面。
故障保护
| 提示 | 含义 |
|---|---|
UV ERROR |
输出持续欠压 |
OV ERROR |
输出持续过压 |
SW OC ERROR |
软件检测到持续过流 |
ADC ERROR |
ADC 看门狗检测到连续过流 |
VC ERROR |
VC1 比较器检测到快速过流 |
保护触发后会立即关闭 MOS 并停止计时,输出页面保留故障弹窗。按中键关闭弹窗;排除故障后,再按中键重新打开输出。
软件过流门限为 max(设定电流 + 200mA, 设定电流 x 110%),持续 30ms 后关断。输出开启前会同步 VC、ADC 和软件保护门限;关闭输出、调节参数或退出页面时同步关闭保护。
编译
需要安装 CMake、Ninja 和 Arm GNU Toolchain。
Release 构建:
cmake --preset Release
cmake --build --preset Release
当前开发验证构建:
cmake --build build/CodexCheck
构建目录会生成:
cw32_pocket_power_supply.hexcw32_pocket_power_supply.bincw32_pocket_power_supply
pyOCD 烧录
工程自带 CW32L011 CMSIS-Pack,可通过 ST-Link 烧录 CodexCheck 固件:
pyocd load `
--pack IDEsupport/MDK/WHXY.CW32L011_DFP.1.0.1.pack `
--target cw32l011k8 `
--format hex `
--erase chip `
build/CodexCheck/cw32_pocket_power_supply.hex
如连接多个下载器,可增加 --probe <调试器序列号>。pyOCD 提示 CMSIS-Pack 中缺少 SVD 不影响擦除和烧录。
工程说明
芯片:CW32L011K8。协议芯片:FS2711Q。显示分辨率:240 x 135。Keil 工程:MDK/Project.uvprojx。
CMake 工程入口:CMakeLists.txt。
扫码加入QQ群3群| 610403240
491