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

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

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

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

成品照片

主界面

img

PCB

img

功能设计和元件选型

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

img

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

USB Type-C 输入及诱骗输出

USB Type-C 输入

img

DC 插座和接线端子输出

img

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

LDO 供电

img

因为诱骗器本身没有额外供电,因此需要从待测量电压中取电,同时因为待测量电压会比较高,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 长时间运行也不发烫。

img

屏幕及按键

img

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

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

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

下载及调试

img

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

外壳及面板

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

img

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

程序功能

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

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 电压诱骗,实现了完全不同的功能。

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>