查看原文
其他

不要放过闲置快充头,DIY一个带屏幕显示功率的USB-PD电源诱骗器

ohdarling 欧大的自留地 2024-07-04

之前搞完了基于 CH32V003 的 USB 电流表,并把整个开发过程总结成一个教程《全开源!使用 7 毛钱的单片机 DIY USB 电流表教程,入坑硬件设计、固件开发、外观建模》

在此之前,其实已经了解到了 CH224K 这个芯片,同样也是沁恒出的,可以很简单地通过单电阻或者三个 IO 的方式来控制设备端与 USB PD 充电器通信,并且协商到指定的充电电压,在某些需要特定电压的场合就比较有用。

既然已经完成了 USB 电流表,并且电流表也自带了用户按键,那就是再多加一个功能页面的事,顺便把 PD 诱骗也集成掉吧~


成品照片

主界面

PCB

功能设计和元件选型

CH224K 介绍

CH224 单芯片集成 USB PD 等多种快充协议,支持 PD3.0/2.0,BC1.2 等升压快充协议,自动检测 VCONN 及模拟 E-Mark 芯片,最高支持 100W 功率,内置 PD 通讯模块,集成度高,外围精简。集成输出电 压检测功能,并且提供过温、过压保护等功能。可广泛应用于各类电子设备拓展高功率输入如无线充电 器、电动牙刷、充电剃须刀、锂电池电动工具等各类应用场合。

主要功能:

  • 支持4V至22V输入电压

  • 支持PD3.0/2.0,BC1.2等快充协议

  • 支持 USB Type-C PD,支持正反插检测与自动切换

  • 支持E-Mark模拟,自动检测VCONN,支持100W功率的PD请求  请求电压可通过多种方法动态调整

  • 单芯片集成度高,外围精简,成本低

  • 内置过压保护模块OVA、超温保护模块OTA

CH224 有多种封装,当前项目使用的是 CH224K,采用 ESSOP-10 封装,便于焊接,并且支持通过 3 个 IO 来控制诱骗电压,方便通过单片机控制。

USB PD 诱骗器需求

相比之前的 USB 电流表,USB PD 诱骗器会额外多了以下几个功能需求:

  • USB Type-C 输入

  • DC 2.5mm 以及 MX126 端子输出

  • USB PD 协议诱骗,支持多档电压,支持最高 20V 5A

另外 USB 电流表的输出输出均为 USB Type-C,但是对于 USB PD 诱骗器来说,输出直接用 USB Type-C 就不太合适了,这里采用了 DC 5.5/2.5 以及 MX126 端子输出,方便给其他需要高电压的设备供电。

原先 USB 电流表的需求仍然保持:

  • 支持 5~20V 电压检测

  • 支持 0~5A 电流检测

  • 支持功率计算、容量统计

  • 支持功率历史图表显示

  • 支持统计数据记录与清除

  • 按键切换电压电流数据与功率历史图表

  • 使用 INA219 采集电压、电流相关数据

  • 使用 12864 OLED 显示相关数据

CH32V003 介绍

单片机仍然使用的是 WCH CH32V003,就不过多介绍了。

CH32V003系列是基于青稞RISC-V2A内核设计的工业级通用微控制器,支持48MHz系统主频,具有宽压、单线调试、低功耗、超小封装等特点。CH32V003系列内置1组DMA控制器、1组10位模数转换ADC、1组运放比较器、多组定时器以及标准通讯接口USART、IIC、SPI等。

官网:https://www.wch.cn/products/CH32V003.html

原理图设计

相比 USB 电流表,整体原理图部分变化不大,主要是奖供电从 DC-DC 改为 LDO,输出从 USB Type-C 改为 DC 插座和 MX126 端子。

MCU

这里需要注意 CH32V003 的 I2C 未自带上拉,需要加上上拉电阻。

USB Type-C 输入及诱骗输出

USB Type-C 输入

DC 插座和接线端子输出

输入使用了 USB Type-C 16P 接头,PD 诱骗通常不是为了再同样输出到 USB Type-C 接口设备使用,因此这里的输出使用 MX126 螺钉式接线端子和 DC 2.5mm 接口,这样高电压用电设备可以直接通过 DC 插头或者祼线的方式接入。

LDO 供电

因为诱骗器本身没有额外供电,因此需要从待测量电压中取电,同时因为待测量电压会比较高,PD 协议中最高可以到 20V,因此需要使用耐压比较高的取电方案。

相比之前的 USB 电流表,这里使用了 LDO 来从输入电压中降压到 3.3V 使用,因为输入电压有可能会高达 20V,因此这里选择了 HT7533S 这款 LDO 来作为降压方案,本项目中使用了 https://item.szlcsc.com/323875.html 这款。

整体 MCU + OLED 屏幕 + INA219 的耗电大概在 5mA 左右,因此可以不用担心 LDO 的发热,并且相比 DC-DC 方案,可以节省更多元器件以及 PCB 面积。

INA219 电压电流测量

本电流表使用的电压电流测量元件为德州仪器 INA219。选择它主要是因为之前使用过,比较熟悉,而且也有现成的库可以使用。

INA219 是一款具备 I2C 或 SMBUS 兼容接口的分流器和功率监测计。该器件监测分流器电压降和总线电源电压,转换次数和滤波选项可通过编程设定。

INA219 的电压最大量程为 26V,在 PD2.0 100W 中,最大 20V 是足够使用的,但是如果碰到支持 PD3.1 140W,使用 28V 供电时,就会超量程了。但是目前看支持 140W 的充电器和设备都比较少,暂时不纠结这个问题。后续可以考虑使用 INA226 来代替,它具备更高的量程。

为了能测量比较高的电压,并且避免较大的发热,这里使用 10mR 的采样电阻,这样即使在 100W 20V 5A 时,功耗也只有 0.25W,实测 100W 长时间运行也不发烫。

屏幕及按键

本电流表使用常见的 0.96 寸 12864 OLED 屏幕作为显示设备,该屏幕操作比较简单,功耗也比较少,比较适合这种场景。另外由于 0.96 OLED 祼屏需要比较复杂的配套电路,为了简化制作,这里直接采用成品屏幕模块,通过排针焊接在 PCB 上。

2.54mm 排针的高度,刚好可以让屏幕与 PCB 保持一定的距离且不会压到 MCU 等其他元件。注意 U8 和 H2 为同一个接口,放置 U8 主要是为了定位位置,方便对齐。

按键使用普通侧按,低电平触发。

下载及调试

需要注意 CH32V003 系列需要使用 WCH Link-E 编程器,实际使用时只需要连接 V3.3、GND、SWDIO 即可烧录程序,如果电流表 Type-C 输入有供电,也可以只接 GND、SWDIO 烧录程序。

外壳及面板

参加嘉立创的活动,尝试了一下三维猴的 3D 打印服务,使用了透明树脂材料,以及喷油处理,整体是透明质感,看着还不错,而且这不就是透明探索版嘛 😃。

同时因为这次使用了彩色丝印,那必须把图案露出来呀,透明外壳更合适。

程序功能

电流表程序就是一个死循环,读取电压、电流后计算功率及容量,并统计显示。

I2C 及 12864 OELD 驱动相关代码参考了 https://github.com/wagiminator/CH32V003-GameConsole 的实现。

实际测试屏幕刷新率约 40FPS,即电压、电流每秒采样 40 次。

功率历史曲线采用每分钟平均值来显示,横向 128 个点,即总共可以显示 128 分钟的功率历史,在一般场景下可以满足使用需求。


项目开源地址

硬件开源地址

https://oshwhub.com/wandaeda/pd-power-supply-spoofing-based-on-ch32v003-and-ch224k

原理图、PCB、外壳模型 STL 文件等都在立创开源平台发布了。

固件开源地址

https://github.com/ohdarling/CH32V003-USBMeter

固件代码尚未完全整理完成,不过只需要在 USB 电流表代码的基础上,添加电压选择界面并且设定三个 CFG IO 的值就可以了。

后记

相比之前基于 CH32V003 的 USB 电流表,这个 USB PD 诱骗器将 DC-DC 替换为 LDO,并且添加了 CH224K 这个芯片来用来 USB PD 电压诱骗,实现了完全不同的功能。


其他 DIY 项目

成本60元,用ESP32-S3做个开源游戏机,能玩FC/NES、GameBoy,还有专属彩色PCB

30 元 DIY 一个柔性灯丝氛围灯

DIY USB 电流表教程,入坑硬件设计、固件开发、外观建模


关注公众号获取更新

如果这个文章对你有帮助的话,可以关注、点赞、转发或分享,非常感谢 😃。

历史文章



继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存