工程作者:Q2H2
我做了个“万能”Type-C受电工具!
有了它,就能实现供电自由!!1个充电器,也能给笔记本、示波器、手机、智能小车等各种设备供电!
-
支持输出功率:≥140W持续输出
-
支持输出电流:5A以内可调
-
支持输出电压:5V~28V可调
-
支持网页设置电压/电流:提供离线网页,不联网即可设置当前电压/电流,手机电脑都能设置,设置完手机充电器也能给笔记本充电!还配置掉电保存,下次上电直接使用
-
支持FIX/PPS/EPR/AVS协议:常见设备,都能用!协议请求顺序可调
-
集成过压 / 过流 / 过温保护,不怕炸板
-
DIY成本低:仅6.8元就能复刻一个
-
芯片选型逻辑、电源路径可靠性设计、大电流采样优化、PD 库封装 + WinUSB 免驱设计,可复用!
-
可二次开发:提供一个.a库文件,PD协议通信轻松搞定,还可以自行增删功能(例如RGB灯效,串口、I2C接口功能拓展等)
事情是这样的。
最近我想做一套从Type-C取电的电源工具,方便给开发的各种新设备上电,以及用于旧设备的维修(经常找不到适配充电器,很麻烦啊)等……
遂看了下平台上的开源方案。
-
做可调电源吧,系统复杂难焊
-
用PD受电芯片吧,挡位少不够灵活
好吧,老老实实自个手搓一个得了……
其实我起初考虑过用CH224Q这种受电芯片,它支持140W EPR,还能用MCU去配电压,但是,都自己手搓了,我又不太想用PD芯片加MCU这种过于老套的组合。
咱就说,能不能只用一个芯片,实现要什么电压就给什么电压?
研究了一下,还真能!
我的灵感来自沁恒PD芯片的在线定制平台,这个网站神奇的地方在于——可以通过网页给eMarker芯片下载参数。
也就是说,如果我照葫芦画瓢把参数设置交给网页,输出电压通过PPS或者AVS协议让Type-C电源适配器去做,那么PCB上只要个MCU就够了。
这是一个基于CH32M030的单芯片方案。
硬件框图
原理图
PCB图
3.1 我为啥选择做单芯片方案?
因为这颗芯片的工作电源,能满足需求。
CH32M030内部的高压LDO支持5~28V电源。本设计中,Type-C接口最高输出140W(28V@5A)。
VBUS电压正好落在高压LDO工作范围中,因此芯片直接从VBUS上取电,省去传统双芯片方案中必需的外部高压 LDO。大大降低制作成本。
3.2 从VBUS上取电?这能可靠/安全吗?
能的,兄弟,能的。
现在电源通断好像都喜欢用NMOS,一是内阻低发热小,二是成本也比PMOS便宜
因此我这里也用的一对NMOS背靠背设计,防止VBUS掉电情况下模块输出端向Type-C接口倒灌电流。
本设计采用电源直出形式,模块输出电压与Type-C接口输入电压一致,NMOS的导通需要给栅极施加至少VBUS+Vgs(th)的开启电压。
3.3 高于VBUS的电压怎么来?
这就要用到芯片内部的电荷泵了。
①电荷泵升压工作原理
M030的二级电荷泵只需要三个电容即可输出VBUS+8V,可为电源路径上NMOS的开启提供足够的高压。
电荷泵的工作原理非常简单,先将电容C1充电至VBUS,之后电容C1叠加PB14的高电平,将C2充至VBUS+4V;然后C2再叠加PB12的高电平,将C3充到VBUS+8V。
整个过程持续交替进行,从而保证HVCP带载情况下也能输出稳定高压。
电荷泵的三个引脚由CH32M030定时器2的两对互补通道驱动。工作时,PC5、PB14输出互补波形、PB14与PB12输出互补波形。通道2中插入死区,可以防止C1向VBUS倒灌。
解决了NMOS 的驱动难题,接下来聊聊如何防止驱动后的高温击穿?如何让方案更稳定?
②电源路径上NMOS的通断控制
有了HVCP引脚上的VBUS+8V,就可以通过MCU的I/O控制电源路径上的NMOS。这里使用PB15,这个引脚只能开漏输出。
PB15内部可选120k欧的电阻再到地,这是为了防止VBUS+8V与DCDC后的DC Out压差过大导致MOS栅源击穿用的。本方案没有使用DCDC,VBUS+8V与DC Out压差总是8V,因此内部的120k没有用到。
另加的2M电阻用于防止MOS漏源在较高温度下微弱漏电造成栅源击穿。
3.4 那产生压差了,咋办?
或许,你需要一个差分电流放大电路。
毕竟在 140W 大功率场景下,大电流流过 GND 平面会产生微小压差 —— 用普通单端采样的话,这个压差会混进采样信号里,导致电流测不准,甚至触发误保护。
使用差分采样可以很好地解决这个问题。
CH32M030内部的运放可以很方便地配成高增益的差分输入,本方案将采样电阻上的电压放大50倍后加偏置送给ADC进行采样。
由于M030的EVT自带PD例程,项目起步就比较方便。
可以先参考例程跑通PD通信,再照着PD官方文档把对应的逻辑堆出来就行。
这部分比较枯燥,代码写了好几天。考虑到许多朋友对PD协议可能不太熟,我把PD的底层代码封成了libPD_SNK.a库给大家,直接调用API,这样做二次开发的朋友上手会比较容易。
Google的Chrome等许多浏览器都支持用网页访问本地USB设备的Web API。本作品通过网页更新受电工具参数就依赖这套API。
网页和受电工具的通信基于WinUSB。
所谓WinUSB,是微软为USB设备与主机通信提供的简单解决方案。WinUSB无需安装驱动,操作系统会自动识别并加载内置的WinUSB驱动,同时提供数据收发的上层接口。
通过浏览器的Web API,可以扫描并连接受电工具,将网页上配置好的参数通过USB写进受电工具中。
如果只是做着玩,直接编译工程烧录固件就可以了。CH32M030不支持ISP下载,下载程序要用WCH-LinkE,也不贵。
对于有志二次开发的朋友,这里简要介绍一下工程结构。
几个比较重要的文件和文件夹:
User文件夹|----HVCP文件夹----NMOS升压和驱动相关|----USBFS文件夹——USB设备枚举|----USBPD文件夹——PD驱动库|----PD_User.c——PD回调函数
PD_User.c提供初始的默认配置和PD通信节点的回调函数,此外还包含一个不精确的1ms延时,可以加入灯效或者按键扫描等内容。这个1ms延时不能添加Delay或者其他耗时长的操作。这个文件中,电压、电流、温度的单位分别为mV、mA和℃,例如:
.VoltTarget = 20000代表20V.CurrentTarget = 4500代表4.5A.OTPNum = 70代表70℃
另外,CH32M030K9U7的信息在DS2手册里,芯片用的时候要结合DS0/RM一起看。
这里主要介绍网页配置工具的界面功能,网页工具对应压缩包CfgWeb/PD WEBUSB/index.html文件。
最后点名表扬一下MRS2。
怎么说呢,Keil确实功能强大,但是吧《那你和我的MRS2说去吧》《我们都在用力的活着》。
MRS2你就用吧,香就完事了。
再啰嗦一句,注意用电安全!!!
这个方案涉及高压大功率,尝试之前一定要做好功课,安全第一!
方案分享给大家学习研究Type-C受电技术,做产品的话还是建议选用CH224Q/CH224A这类专用芯片。
怎么样?
你喜欢这个作品吗
如果你想给作者点个赞
或想了解开源项目[源码][硬件]等资料
就下滑吧!
▼▼
开源网址:https://oshwhub.com/q2h2/ch32m030-140w-typec-dc?code=AC-f93aadb4bcaf4102947acbc42bf7a592