
CH335F&RP2040 USB2.0拓展坞
简介
基于CH335F,带有过流检测和功率监控的USB2.0 HUB
简介:基于CH335F,带有过流检测和功率监控的USB2.0 HUB开源协议
:GPL 3.0
描述
CH335F USB2.0 HUB
基于CH335F&CH217K的USB2.0 HUB,使用RP2040+LVGL检测功率监测和显示
特性介绍
1)过流检测
使用CH335F搭配CH217K,实现USB单端口超过指定电流后断开端口(只断开过流的端口,其他端口正常使用)
阈值电流由接在CH217K的ISET引脚到地的电阻设置,我用了39K的电阻,根据CH217K的手册,阈值电流Iset=60K/Rset,Rset不小于22K,所以采用39K电阻时,阈值电流约为1.53A(实测大概是1.49左右就已经断了)。这个功率其实已经足够大多数设备使用了。(此gif中演示的断电速度慢是因为我的电阻负载电流是逐步增加的,实际上如果瞬间过流的反应是非常快的,具体可以参考CH217K的手册)
如图,当单端口电流超过设置电流之后,只会断开单端口的USB,不会影响其他端口的供电。
2)功率检测
使用四路TI的INA219电流传感器测量每个端口的电流,根据电压计算功率并显示。右侧四个横条分别为PORT1到PORT4的端口的电流和功率
因为四个端口并联,所以只显示一个电压就行了,左侧的竖排文字显示电压和总功率。
我这里的配置是超过1.5A自动断电,所以在每个端口的功率显示面板上还会有一个黑色的进度条来可视化当前负载的情况。
这样观察某一个口的负载将会更加直观,但是由于理论的阈值电流是在代码中设置的,所以如果上面的阈值设置电阻Rset如果跟我的不一样的话,那么这个固件的功率进度条就不准了,因为我代码里设置的是1.5A
也就是说更改Rset来更改阈值电流的话为了保证准确的显示也需要更改代码并重新编译固件。
3)其他特性
五颗LED显示芯片工作状态,和每个口的工作状态,如果有USB设备识别则亮起。
注意只有当HUB正确被主机识别之后才会在四个口输出电压,也就是说用手机充电器等不具有USB主机功能的设备供电会导致HUB不输出电压。
编译
本项目采用了RP2040单片机(我真的很喜欢这个单片机,便宜好用,虽说这里用它确实有点奢侈了),使用CLion开发,cmake组织构建,openocd烧录,下面的连接中提供了工程源码,如果不想再开发可以直接使用资料区的固件。
之后如果有bug修复/功能更新,都会在github页面发布release的形式来发布新的固件,这里不会再更新(应该吧)。
github:Temperature6/ch335f_usb_hub: 基于CH335F和RP2040的带功率计的USB 2.0 HUB
烧录
烧录工具:daplink(我用的是超迷你高速DAPLink下载器仿真器 合宙AIR32F103芯片性能超ST-LINK-淘宝网)
还推荐有一根至少4P的烧录探针,如果懒得买的话可以在背面烧录接口焊排针,但是这样比较难看。
如果你有使用pico-sdk 1.5.1的开发环境,你可以直接从上面的github连接下载源码来编译,一键烧录即可。没有环境的可以看下面的教程手动烧录
0)正确的将daplink和板子连接在一起,因为有的daplink支持U盘拖拽烧录,所以如果你的daplink支持的话,你可以在连线之后直接将固件拖到daplink的U盘中完成烧录,不需要看下面的内容了。
主要是因为没有将rp2040的USB接口引出来,导致RP2040自带的USB烧录不能用,所以罗嗦了这么多,还是尽量希望给大家减少烧录难度。
1)下载资料区的openocd_rp2040.zip 解压
2)将固件放到这个目录里面
3)在此处打开终端(必须是在此处打开终端,按shift+右键有在此打开powershell窗口,也可以,必须保证终端的工作目录是此目录)
win11直接在文件夹右键空白位置就有“在终端中打开”
输入如下命令
.\burn.bat rp2040_ch335f_usb_hub.elf
注意,命令里面的rp2040_ch335f_usb_hub.elf
前面不能有“.\”,这回导致命令里面出现不正确的转义字符。
输入“** Programming Finished **”意味着烧录成功了
装配
提供亚克力外壳的设计文件(.dxf),如果有需要可以去定制亚克力外壳。
亚克力版本的外壳的上壳下壳分别如下图所示
3D打印版本的因为不透明所以必须在屏幕位置开槽,大概的装配效果如下所示,上壳在屏幕位置和LED位置开了一些窗口,底壳和亚克力版本的一致(这个3D打印确实不好看,所以还是建议去定制亚克力版的)
其他
企鹅群:934478615,也是大家一起讨论电子的,欢迎各位大佬莅临。
设计图

BOM


评论