· Ivan Li  · 41 min read

造一个支持隔离、PD 供电的 全速 USB-C HUB

需求

我觉得呀,我一直缺一个 USB-C 口的集线器。为了能使用 USB-C,我买了好几个转接头长期插在 USB type-A 口上。所以这次我准备先开发一款 3C1A 的 USB HUB,同时通过 USB-C 数据线与电脑连接。

作为业余爱好者,折腾硬件的时候还是容易不小心接错线,上错电,为了避免把电脑一波带走,还是得考虑搞个隔离。

我预计将来大概会折腾使用 USB-C 接口索要 PD 供电,并且使用同一个接口进行烧录和调试,所以我还准备为下游的 USB-C 口提供 65W PD 输出。

这样的话,电源输入还得折腾。考虑使用 DC 端口进行 HUB 部分以及 PD 部分的供电,输入电压 24V。另外再加一个 USB PD 20V 作为备用的供电输入,通过 PD sink 芯片取电。快充芯片会根据输入电压来决定输出最大的电压档位,所以兼容性应该是 OK 的。这样的话总功率也得做限制,毕竟不是专门用来充电的,不考虑太大功率的使用。预计总输出功率也是限在 100W 以内。

既然 PD 输出安排了,那电流检测也得安排一下,如果电子负载项目的电流电压采集功能验证顺利,这次的 USB HUB 项目准备采用 MCU 的 ADC 采样电流、电压数据。否则考虑直接四个 INA226 采集。

这样看来要不要再加个屏幕呢?感觉没空间放屏幕,先预留 SPI 接口吧。

概念

USB-C 接口

母座

公头

参考资料:

USB-C 接口角色

USB-C 数据角色分为:

  • 下行端口(DFP):向下游发送数据;它通常是设备所连接的主机或集线器上的端口。DFP 将为 VBUS 供电(主机与设备之间的电源路径),还可以为 VCONN 供电(为电子标记的电缆供电)。包含 DFP 的典型应用是集线站。
  • 上行端口(UFP):连接到主机或集线器的 DFP,接收设备或集线器上的数据。这类端口通常从 VBUS 中取电。包含 UFP的典型应用是显示监视器。
  • 双角色端口(DRP):端口可以用作 DFP(主机)或 UFP(设备)。此类端口在连接时的电源角色决定了其初始角色。源端口承担 DFP 的数据角色,而接收端口承担 UFP 的数据角色。不过,通过使用 USB PD 数据角色交换功能,可以动态地更改此类端口的数据角色。包含 DRD 端口的典型应用是笔记本电脑、平板电脑和智能手机。

USB-C 供电角色分为:

  • 源端口(Source, SRC)
  • 接收端口(Sink, SNK)
  • 双角色电源端口(Dual Role Port, DRP)

这两类角色中,如果设备初始角色是双角色角色,那么在物理连接后可以随时协商到具体的角色。数据角色和供电角色可以任意搭配,虽然常见的是 DFP + SRC 和 UFP + SNK 这样的组合,但是它俩之间是相互独立的,并没有绑定关系。

USB-C 与 USB 2.0

USB SDP 与 CDP

SDP 和 CDP 能够对连接到它的任何设备进行 USB 枚举,原因是 SDP 和 CDP 是 PC/笔记本电脑或 USB 集线器上的主机/集线器端口。

  • 标准充电端口 (SDP):遵循 USB 2.0 规范,最大输出为 500mA,通常出现在计算机 USB 主机端口或集线器中。
  • 充电下游端口 (CDP):具有 USB 2.0/3.0 电流限制的扩展,允许高达 1.5A 的输出电流,与计算机或集线器上的 USB 主机端口关联。 在 USB-C 接口中,USB 2.0的数据传输信道由两组引脚提供:正面的 A6(D+)和 A7(D-),以及背面的 B6(D+)和 B7(D-)。这两组引脚无论在上游设备或是在下游设备,都是直接物理连接的。而 USB-C 公头只连接 A6 和 A7 两个引脚,最终连接的效果与 USB Type-A 接口一致。

USB-C 与 USB PD

USB-C 具有四个 VBUS 引脚,它们分别是 A4、A9、B4、B9。这些引脚不应该在插入 USB-C 电缆时立即供电。规范要求的供电过程如下:

  1. 连接检测:主机通过 CC 引脚检测到设备连接。
  2. 方向确定:根据哪个 CC 引脚检测到连接,确定插入方向。
  3. 能力协商:如果支持 USB PD,可以通过 CC 引脚进行电源能力协商。
  4. 启动供电:只有在正确检测到连接并完成必要的协商后,才能启动 VBUS 供电。

USB HUB 与过流检测

出于安全原因,USB 规范(修订版 2.0)要求所有自供电集线器设计具有过流保护。过流检测和电源切换需要外部电源开关。

USB HUB 一般会在出现过流时自动切断供电并禁用端口,并向标记过流状态,等待主机看到后,由主机决定是否要求 HUB 重新启用端口。

USB HUB 一般有两种电源切换模式:

  • 组模式(Gang Mode):如果一组端口中所有端口消耗的总电流超过预设限制,则集线器会关闭该组端口。在 CH338F、CH339F 中,是全部下游端口都在同一组。
  • 独立模式(Individual Mode):如果一个端口的电流超过预设限制,则集线器会关闭该端口。

显然,独立模式在某一端口出现过流时,不会影响到其他端口的供电。

分析

先 HUB 还是先隔离?

USB 2.0 分为三种速度:

  • 低速 1.5 Mbps
  • 全速 12 Mbps
  • 高速 480 Mbps

隔离芯片目前我看到主要是两种方案,一种支持低速、全速的 ADUM4160 这类 USB 数字隔离器芯片,淘宝大概 15 ~ 20 元,另一种就是 ISOUSB211 这种支持高速的芯片了,价格在45 ~ 80 元的样子。

对于我来说,全速的接口其实带宽不太够用,比如我经常使用的无头 USB 逻辑分析仪,就挺吃速率的。正常来说,下游每一路 USB 接口都应该单独隔离的,避免一波带走其他连接的 USB 设备。但是,我一般不会同时开发多个项目,所以连接在硬件上的调试工具,也是有可能直接从硬件这侧带走工具,所以我就不太考虑每路独立做隔离。

综上,出于成本考虑,我准备使用的连接方案如下图所示:

flowchart LR
    Computer --> isoUSB[Isolated USB Repeater]
    isoUSB --> hub[USB HUB]
    hub --> port1[USB Port 1]
    hub --> port2[USB Port 2]
    hub --> port3[USB Port 3]
    hub --> port4[USB Port 4]

这样保证了充分发挥 USB 2.0 的带宽,节约了成本。如果需要独立保护,大不了我再搓一个然后继续星形拓扑。

供电

从计算机连接到隔离芯片的这部分直接从上游端口取电就行了,这个没啥需要分析的,有点麻烦的是 HUB 以及下游端口如何取电和供电。

首先,

我准备让隔离芯片下游侧和 HUB 芯片使用同一路电源供电。那么这电源就有两种来路了,一种是从上游端通过独立的 DC-DC 隔离电源提供,另一种就是从独立外部供电提供。这是让我想了很久的问题。

我想了想我现在使用的 USB HUB,轻载输出 5V出头的电压,输出 0.3 A 后电压掉到 4.5 V,看起来这点实力属实有点差,毕竟中间有 1.5 米的线,可能是线阻比较大的缘故。

今天我买的 DC-DC 隔离电源模块也收到了,好家伙,10 W 的,还挺大。为了成品的体积不要太大,我毅然决然地决定:

flowchart LR
    pd[USB PD IN] --> pdSource[USB PD DC-DC Source]
    pdSource --> port1[Port 1 USB-C]
    pd --> iso[ISO DC-DC]
    iso --> iso2[Isolated USB Repeater]
    iso --> hub[USB HUB]
    hub --> port2[Port 2 USB-C]
    hub --> port3[Port 3 USB-C]
    hub --> port4[Port 4 USB type A]

这样,我就能拥有一个支持 USB PD 协议的 USB-C 接口,以及三个带有 5V 供电的接口。支持 USB PD 协议的接口电源部分没有与外部的电源输入隔离。另外三个通过 10 W 的隔离电源输出 5 V,虽说它们三个之间没有隔离,但也算是符合我的设计思路,优先保护计算机,然后保护外部电源(我怕它炸我),最后保护下游设备。

只设计一路 USB PD 协议的接口,主要考虑我不太会同时调试两个需要 USB PD 协议的设备。其次,只有一路 USB PD 输出,也省得我去做功率管理。

电源输入

正如前文所说,现在这情况就是我必须为这个 USB HUB 提供一路外部供电了,不然没办法使用。输入的接口我准备使用 USB-C 母口,显而易见,输入得支持 USB PD 协议。

还记得我前面提到的,我买了一个 DC-DC 隔离电源模块吗?这是一个支持 9 ~ 36 V 宽电压输入、5 V 稳压输出的 10 W 隔离电源模块。所以这个项目可以允许 9 ~ 28 V 的 PD 输入。不过受限于我所拥有的供电设备和 PD sink 芯片的选择,至少也是会支持 9 ~ 20 V 的输入。我们后面再选,毕竟这个输入还需要作为 65 W 的 PD 输出电路的电源呢。

USB PD 输出

作为半路还没出家的人,我非常不确定怎么把 Source 电路集成到 UDP 电路中。但是反过来想,我好像很清楚怎么把 UDP 电路连到 Source 电路中。有点迷惑但大概只要共地,然后把 USB 2.0 的两根数据线连到母口的两对 USB 2.0 数据脚上就行了。所以对于 USB HUB,我好像知道怎么做了。

其他 USB 电源输出

除了支持 USB PD 的端口 1,另外两个 USB-C 接口,将会提供 5 V 的 VBUSV_{BUS} 输出。这个输出不是一直存在的,而是需要通过 CC 引脚进行检测。因为剩下的两个 USB-C 端口只会提供 5V 电压,反推能得,我们需要实现的是“不带 USB PD 的 USB C DFP USB 2.0“ 的接口。下图是这个接口必要的模块:

USB Type-C DFP USB 2.0 block diagram without USB PD

受限于我的时间和能找到的资料有限,本文大概会混淆 USB Type-C 1.1 和 1.2 规范,希望不会有什么大问题。最后实现前我会再和 LLM 确认,尽量不要出错。

我们暂时忽略掉 USB 2.0 DFP 部分,只看 VBUSV_{BUS} 和 CC。由于我们不实现 USB 3.1,也不提供 3A 以上的电流,所以 VCONNV_{CONN} 的供电可以省略。剩下的主要就是:

  • VBUSV_{BUS} 开关
  • VBUSV_{BUS} Discharge (650ms 内泄放完成)
  • CC logic

USB Type-C 规范要求源端必须支持过流保护,这两路 USB-C 端口和 USB Type-A 端口共享同一路 5V 电源,这个电源自带过流保护,所以就再而外添加保护电路了。

USB 2.0

USB 2.0 通信和物理连接似乎没啥难点,会连连看就行的样子。 根据规范,USB-C DFP、UFP 可以直接将两组 D+、D- 直接连接在一起,这样我们可以省略三份 USB 2.0 Mux 电路。

选型

隔离式 USB 中继器

根据前面的分析,我们需要一个高速 USB 隔离芯片。在淘宝上,ADUM3165 价格和 ISOUSB211 看起来差不多,不过似乎 ISOUSB211 特性更丰富。

ISOUSB211

特性:

  • 符合 USB 2.0 要求
  • 支持低速 (1.5 Mbps)、全速 (12 Mbps) 和高速 (480 Mbps) 信号传输
  • 不需要外部晶体或时钟输入
  • 自动速度和连接检测
  • 支持 L1(睡眠)和 L2(挂起)低功耗状态
  • 可编程均衡,用于补偿高速模式中的板迹线损耗
  • 下游端 CDP 广播
  • 对侧电源正常指示
  • 支持 USB On-the-Go (OTG) 和 Type C® 双角色端口 (DRP) 设计的自动角色交换
  • 高 CMTI:100kV/µs
  • 在整个隔离栅具有 ±8kV IEC 61000-4-2 接触放电保护
  • VBUS 电压范围:4.25V 至 5.5V
    • 3.3V 和 1.8 V 内部 LDO
  • 符合 CISPR32 B 类辐射限制
  • 环境温度范围:—40°C 至 +125°C
  • 小尺寸 28-SSOP 封装
  • 安全相关认证:
    • 符合 DIN EN IEC 60747-17 (VDE 0884-17) 标准的 7071VPK VIOTM 和 2121VPK VIORM(增强型)
    • 符合 UL 1577 标准且长达 1 分钟的 5000VRMS 隔离
    • IEC 62368-1、IEC 60601-1 和 IEC 61010-1 认证
    • CQC、TUV 和 CSA 认证

ADUM3165

特性:

  • USB 2.0 signaling with automatic detection of low, full, and high speed connections

    • 1.5 Mbps, 12 Mbps, and 480 Mbps data rates
  • Bidirectional USB isolator for upstream and downstream ports

    • Redriving and high speed data retiming for input jitter removal and an open eye
    • Flexible clock input options
  • 4.5 V to 5.5 V VBUSx or 3 V to 3.6V operation on each side

    • 21 mA typical idle, low or full speed mode supply current
    • 48 mA typical idle, high speed mode supply current
  • Ultra low power standby in USB 2.0 suspend (L2) or disconnect

    • 1.7 mA typical low power standby, upstream supply current
    • 20 μA typical low power standby, downstream supply current
  • ±6000 V IEC 61000-4-2 ESD protection across the isolation barrier

  • Passed CISPR32/EN55032 Class B emissions

  • High common-mode transient immunity: 50 kV/μs typical

  • Safety and regulatory approvals (pending)

    • UL (pending): 3750 V rms for 1 minute per UL 1577
    • CSA Component Acceptance Notice 5A (pending)
      • IEC 62368-1, IEC 61010-1, and IEC60601-1
    • VDE certificate of conformity (pending)
      • DIN V VDE V 0884-11 (VDE V 0884-11):2017-01
      • VIORM = 849 VPEAK (working voltage)
  • Operating temperature range: -55°C to +125°C

  • Compact 20-lead SSOP with 5.3 mm creepage and clearance

CH318

高速USB信号隔离延长器 CH318

特点:

  • 上位机模式提供1个USB2.0下行端口,下位机模式提供2个USB2.0下行端口,向下兼容USB1.1协议规范
  • 支持480Mbps高速、12Mbps全速和1.5Mbps低速USB传输
  • 支持USB控制传输、批量传输、中断传输、同步/等时传输
  • 同一芯片可配置为上位机模式和下位机模式,分别连接USB Host主机和USB Device设备
  • 搭配CH339芯片,可以实现USB读卡器、USB转SPI、转JTAG、转I2C等多种接口的隔离
  • 支持连接状态指示
  • 内置电容耦合驱动电路和网络变压器耦合驱动电路
  • 纯硬件解决方案,对USB协议完全实时和透明,不需要额外安装任何驱动程序,支持各种包含USB接口的系统
  • 提供晶体振荡器,支持外部时钟输入,内置PLL为USB PHY提供480MHz时钟
  • 上行端口内置1.5KΩ上拉电阻,下行端口内置USB Host主机所需下拉电阻,外围精简
  • USB接口引脚具有6kV增强ESD性能,Class 3A
  • 工业级温度范围:-40~85°C
  • 提供TSSOP20封装形式

这里出现了一个不一样的家伙,根据我查到的资料,使用磁耦合方案就能与 ISOUSB211 和 ADUM3165 等价。由于我计划使用 CH338F 芯片作为下游的 HUB 芯片,所以如果能使用 CH318 做隔离芯片的话,那就可以说是恰到好处了。

但是这个似乎没有人能保证传输速率,从公开资料来看,没有找到相关应用示例和性能数据,所以这个方案可能得保留了。或许也可以先用 CH318 + CH338F 做一个版本测试一下。

USB HUB 芯片

我觉得这部分不是很重要,要么使用 CH339X,要么使用 CH338X。

CH338

7端口USB HUB控制器芯片 CH338

CH338 系列功能对比

CH338X 支持下游端口独立电源切换模式。

CH339X

7端口多功能USB HUB CH339

CH339 系列功能对比

CH339X 主要比 CH338F 多了 USB 转网卡、读卡器、UART、JTAG、SPI、I2C、SMBus 功能。不过,我看中的转 SPI、I2C 这种功能,似乎需要驱动程序才能使用。目前公开资料似乎没有表明能在 MacOS 上使用,Linux 和 Android 可以通过WCHSoftGroup/ch341par_linux 驱动。

虽然我很喜欢这些功能,不过我还不清楚具体调用方法,或许后续的版本会使用 CH339X,但是目前的版本我决定使用 CH338F,简化一些设计。如果需要 SPI、I2C 啥的,也可以通过 USB 内置或外置的方式,用 CH437 之类的芯片实现。这方面我想还是后续再验证吧。

USB PD 快充协议与 DC-DC 调节

因为输入是支持 USB PD 3.0 协议,所以输入电压在 5 V ~ 20 V 之间。我能接受输出电压小于等于输入电压,那么要么找到能在电压相等时直通的芯片,要么选择支持自动升降压的芯片。本来想着为了设计简单点,将寻找的范围缩小在同时支持 PD 协议和 DC-DC 控制的芯片上。我找了英集芯、南芯、智融三家,只找到英集芯有这样的芯片,其他的得分成电源和快充协议两个芯片。

IP6557

IP6557 数据手册

IP6557 是支持 UFCS/PD2.0/PD3.1/EPR28V 等快充协议的升降压 SOC,支持 USB PD 3.1 的 140 W 输出。输入电压范围 5 ~ 31 V。

IP6557 是一个集成度很好的芯片,但是公开的资料中,只能通过调整输出端的检流电阻两端的电压来改变限流能力。如果这样的话,实际上在与接收端协商能力时,是无法声明带载能力的,这样的话我倒不太想用了。并且这种调节方式,我还不知道如何数控。毕竟我需要根据外部供电的情况来调整输出功率,这样看来没办法用这款芯片了。

SC8701/SC8703

SC8703 数据手册

输入 2.7 ~ 29 V,输出 2.5 ~ 29 V,支持轻载 FPM 的外置四管同步升降压控制器。SC8701 支持的最高输入输出电压是 36 V,但是没有 FPM 模式,所以轻载条件下功耗偏高。看起来这两款芯片价格好像差不多,那本项目用例下,输入输出最高都不会超过 28V,所以就选择 SC8703 省点电吧。

不过,使用 SC8703 需要外挂 USB 快充协议芯片。

SW2303/SW2305

SW2303 数据手册

这是外挂的 USB Type-A 、Type-C 多快充协议芯片。

SW2303 是一款高集成度 Type-C 口/Type-A 口快充协议芯片,支持 PD、QC、FCP、高低压 SCP、AFC、SFCP 以及 PE 等主流快充协议,支持光耦反馈和 FB 反馈两种工作模式。SW2303 集成了 CV/CC 控制环路,Type-C 接口逻辑,快充协议控制器,以及多种安全保护功能。配合 ACDC 或 DCDC 以及少量的外围元器件,即可组成完整的高性能的 Type-C 口/Type-A 口快速充电解决方案。

通过 FB 反馈到电源芯片,可以调整输出电压。

SW2305 比 SW2303 多了个 VOOC 协议,不过价格看起来得加两元,达到 4.5 元。这就是 VOOC 税吗?我还是尽量选择 2.5 元的 SW2303 吧,我可没机会开发 OV 系的东西。

这两款芯片明确提示了支持通过电阻或 I2C 来动态配置功率限制。基本上符合这个项目的使用场景。

SW2303 功率限制配置

IP2736

IP2736 数据手册

IP2736 最大的亮点就是支持 UFCS 融合快充协议了。支持 28V EPR 档位,140 W 功率。价格 5.4 元。但是公开资料非常的粗略,没有提供调整限制功率的方法,还是不要碰了。

快充芯片选型小结

国内厂家可真是秘密多,智融至少算是公开了一些比较够用的信息,其他两家资料可太难找了。最后敲定的方案就是 SC8703 + SW2303 的组合了,唯一的问题就是不知道 SW2303 在 FB 反馈到底能不能支持 CC 和 CV 了。

SW2303 环路控制

USB-C 协议芯片

HUB 下游的端口 2 和 端口 3 是计划支持 5 V 1.5 A 的 USB-C 口,所以我们需要 USB-C 协议芯片,来识别和管理供电。其实有个朴素的解决方法,直接判断 CC 脚是否存在 5.1 KΩ 的下拉电阻,有就送电。正常来说这样做不会出太大问题,不过我是讲究人,还是得尽量搞清楚点,省得以后遇到什么奇奇怪怪的问题,到头来发现是自己埋的坑就乐呵了。

大概我的目标是找到集成度高的芯片,最好能自主运行 Source 模式,能内置 VBUS 放电路径,能配置通告的电流能力,要是再集成过流保护就更妙了。

FUSB301A

FUSB301A 数据手册

FUSB301A 支持 USB Type-C 1.1 和 1.0。

FUSB301A 是一款完全自动化的 Type-C 控制器,优化用于<15 W 应用。FUSB301A 提供源模式、接收模式、双向模式(on),配件检测支持和死电池支持的 CC 逻辑检测。 FUSB301A 具有可配置的 IC 地址,以支持每个系统的多个端口。FUSB301A 具有极低的功耗禁用模式以及正常操作时的低功耗。它采用超薄的 12 引脚 TMLP 封装。

作为 source 时,支持通过 I2C 配置 CC 引脚的上拉电流。符合这个项目的使用场景。FUSB301A 比 FUSB301 多了个 I2C 地址配置,这样放两个不会冲突。

FUSB302B

FUSB302B 数据手册

FUSB302B 是 FUSB302 的新版本,支持了 USB-C 的 1.2 版本。这款芯片支持了可编程的 USB PD 协议,目前看至少可以通过软件实现 PD 3.0 PPS。

这款芯片的 I2C 地址是固定的,提供了几个不同地址的版本,但是价格比默认地址的贵了好多。普通的 4 元,特殊地址的要加三五块钱。

FUSB302B 没有内部或外部的 VBUS 放电路径,这部分还需要额外实现。看起来 FUSB302B 是一个底层的 USB PD 芯片。

HUSB331

HUSB331 数据手册

特点:

  • USB PD双重角色(Dual-Role Port)
  • 支持USB PD3.0和USB TCPCI V1.1
  • Host模式、Device模式和DRP模式的插拔检测
  • 电流能力广播和检测
  • 线缆类型识别
  • 支持VCONN
  • 支持死电池模式
  • 超低功耗待机模式
  • 30V VBUS引脚耐压和24V CC引脚耐压
  • 支持2个I2C通信地址
  • 支持BIST模式
  • e-fuse烧录模式
  • WLCSP-9B (1.35mmx1.4mm)和 QFN-14L (2.5mmx2.5mm)两种封装模式
  • ±2kV HBM ESD

HUSB331 支持 2 个 I2C 地址,配置,其他和 FUSB302B 其实差不多。

TUSB320

TUSB320 数据手册

TUSB320 和 FUSB301A 差不多,实现了 USB Type-C 规范 1.1 版本并向下兼容 1.0。支持配置两个不同的 I2C 地址,能够配置 SRC、SNK、DRP、广播电流等功能。

TUSB320 没有提供 PD 协议支持和 VBUS 放电路径。

TPS25810

TPS25810 数据手册

  • 兼容 USB Type-C 版本 1.2 的下行数据端口 (DFP) 控制器
  • 连接器连接/断开检测
  • 配置通道 (CC) STD/1.5A/3A 电流能力通告
  • 超高速极性确定
  • VBUS 应用和放电
  • VCONN 应用于电子标记电缆
  • 音频和调试附件识别
  • 端口未连接时,IDDQ 的典型值为 0.7µA
  • 三个输入电源选项
    • IN1:USB 充电电源
    • IN2:VCONN 电源
    • AUX:器件电源
  • 电源唤醒可保证系统冬眠 (S4) 和关闭 (S5) 功耗状态下的低功耗
  • 34mΩ(典型值)高侧金属氧化物半导体场效应晶体管 (MOSFET)
  • 1.7/3.4A ILimit (±7.1%) - 可编程
  • 端口功率管理可实现多端口的功率资源优化
  • 封装:20 引脚晶圆级四方扁平无引线 (WQFN) 封装 (3mm x 4mm) (1)

TPS25810 不支持通过 I2C 编程,但是他支持端口电源管理(PPM)来动态分配电源,看起来能够通过不同的相互连接,实现双 USB-C 口的总功率限制在 4.5 A 或者 2.0 A 或是其他组合。

USB-C 协议芯片选型分析

突然发现之前选择的 10 W 隔离电源好像不太够用,准备更换成同尺寸 20 W 的。这样能支持两路 USB-C 的 1.5 A + 一路 USB Type-A 的 500 mA 电流供应。然后剩下 500mA 一些用来供给其他内部芯片和作为裕量。

这样的话我的希望其实是默认广播并限流两个 USB-C 在 1.5 A。但是也可以通过设置来改成一个是 3.0 A,另一个 500 mA。A 口依然是 500 mA 限流。虽然很极限,不过自用还好,毕竟相当于特殊的模式,如果在这个模式下还需要所有端口都占满功率的话,可以考虑单独给 Type-A 口提供隔离电源。

模式平均^*聚能
Port 1 (Type-C)独立 PD独立 PD
Port 2 (Type-C)1.5 A3 A
Port 3 (Type-C)1.5 A0.5 A
Port 3 (Type-A)0.5 A0.5 A

按照这个计划,我会偏向使用支持 I2C 控制的芯片来处理。所以先排除 TPS25810。剩下的都没自带 VBUS 放电路径的话,那么 1.1 元的 HSUB331 和 2.5 元的 FUSB302B 就是我想选的芯片了。虽然 USB PD 功能暂时用不上,但是后续其他项目的开发可能会使用上,少用一款芯片少折腾一次。反正价格比 FUSB301A 便宜。根据搜索的资料来看 HUSB311 能够 pin to pin 替代 FUSB302。

那么大概结论就是用 HUSB311 来试试了。这样还需要带保护的 USB 开关芯片,以及 VBUS 放电电路。

我改主意了,我完全没必要研究 3 A 的电流能力,或者说电流高了其实还不太安全。如果要高电流或者高功率,我应该使用支持 USB PD 的端口 1,而不是在这研究怎么提供 3 A 的电流能力。增加了系统复杂度,开发周期变长了,就很消磨热情了。

所以我准备还是使用两个 TPS25810,固定限流 1.5 A。

带保护的 USB 开关芯片

CH217K

CH127 数据手册

特点:

  • 内置功率开关管,典型70mΩ导通电阻;
  • 可通过外置电阻调节限流门限,支持400mA~2.7A,典型误差±10%;
  • 支持电源电压2.7V~5.5V;
  • 输出短路时快速限流保护;
  • 低功耗,典型 50uA 静态工作电流;
  • 典型关机电流小于 1uA,关断时没有反向电流;
  • SOT23-6封装。

它自带了 VBUS Discharge,有种安全的感觉。

目前只需要一个这个芯片给 USB Type-A 口进行保护,不做开关用途。我就不找其他芯片了,这个感觉挺好的,比一般芯片还多了一个状态指示。

CH217K 价格不到五毛钱,就是没找到能包邮或者凑单的店,运费 2 元,搞几片备用。

开发

CDP 广播

ISOUSB211 在隔离两侧都提供 CDP 广播的使能引脚。由于本项目并没有将隔离芯片的下游通过 USB 接口暴露到外部,而是在内直接连接到了 USB HUB 芯片上,所以这个下游的引脚并不需要启用 CDP 广播。而上游侧作为 USB Device,不需要启用 CDP 广播,项目设计上也不提供角色反转,所以两端都下拉 CDP 使能引脚。

下游的端口 1 使用 USB PD 快充,没准备实现 USB BC,所以是不需要管 CDP。 因为前面已经决定原则上给下游端口 2 ~ 4 只提供 SDP,所以也不考虑 CDP。

主隔离电源外围电路

主隔离电源用于为 USB 端口 2 ~ 4 提供 5 V 供电,并为系统中 MCU 等芯片外设的转换器供电。主要是为了保证 USB 端口的电源干净,根据电源模块手册建议,我为主隔离电源的输出端提供了 LC 滤波电路。

主隔离电源外围电路

USB PD 电源外围电路

SC8703 的 MOSFET 选择

根据数据手册建议,我直接把选择范围缩小到 VDSV_{DS} 耐压 40 V、VGSV_{GS} 耐压 ±20 V 的管子。找了一圈决定使用 NCEP4045GU。

SC8703 死区时间设置

在同步 4 管升降压控制器(也称为同步 4 开关 Buck-Boost 控制器)中,MOSFET 的死区时间(Dead Time)是指在切换期间,为防止同一桥臂上下管同时导通而设置的一个短暂延时。正确计算并设置死区时间对于防止直通电流(Shoot-through)和提高转换器效率至关重要。

以下是计算 MOSFET 死区时间的一般步骤和考虑因素:

  1. 了解关键参数:

    • MOSFET 的延迟时间和转换时间:
      • 关断延迟时间(td(off):栅极驱动信号下降到漏源电流下降开始的时间。
      • 下降时间(tf:漏源电流从高电平下降到低电平所需的时间。
      • 导通延迟时间(td(on):栅极驱动信号上升到漏源电流上升开始的时间。
      • 上升时间(tr:漏源电流从低电平上升到高电平所需的时间。
  2. 计算死区时间:

    • 死区时间应满足以下条件,以确保在一个开关器件完全关断后,另一个器件才开始导通: tdeadtd(off)+tf[td(on)+tr]t_{\text{dead}} \geq t_{d(\text{off})} + t_f - [t_{d(\text{on})} + t_r]
    • 安全裕度:为了适应器件参数的分散性、温度变化和电路中的寄生参数,通常在计算的基础上增加一定的安全裕度。

NCEP4045GU 需要关注的参数

根据上图可知:

  • 导通延迟时间 td(on)=6nst_{d(\text{on})} = 6 \, \text{ns}
  • 关断延迟时间 td(off)=23nst_{d(\text{off})} = 23 \, \text{ns}
  • 上升时间 tr=2.8nst_r = 2.8 \, \text{ns}
  • 下降时间 tf=3nst_f = 3 \, \text{ns}
  1. 计算关断路径的总延迟时间:

    toff_total=td(off)+tf=23ns+3ns=26nst_{\text{off\_total}} = t_{d(\text{off})} + t_f = 23 \, \text{ns} + 3 \, \text{ns} = 26 \, \text{ns}
  2. 计算导通路径的总延迟时间:

    ton_total=td(on)+tr=6ns+2.8ns=8.8nst_{\text{on\_total}} = t_{d(\text{on})} + t_r = 6 \, \text{ns} + 2.8 \, \text{ns} = 8.8 \, \text{ns}
  3. 计算最小死区时间:

    tdead_min=toff_totalton_total=26ns8.8ns=17.2nst_{\text{dead\_min}} = t_{\text{off\_total}} - t_{\text{on\_total}} = 26 \, \text{ns} - 8.8 \, \text{ns} = 17.2 \, \text{ns}
  4. 计算 20% 安全裕度:

    安全裕度=tdead_min×20%=17.2ns×0.20=3.44ns\text{安全裕度} = t_{\text{dead\_min}} \times 20\% = 17.2 \, \text{ns} \times 0.20 = 3.44 \, \text{ns}
  5. 计算推荐的死区时间:

    tdead_recommended=tdead_min+安全裕度=17.2ns+3.44ns20.6nst_{\text{dead\_recommended}} = t_{\text{dead\_min}} + \text{安全裕度} = 17.2 \, \text{ns} + 3.44 \, \text{ns} \approx 20.6 \, \text{ns}

很刚好地超过了 20 ns。 SC8703 的延迟设置如下:

DT 电阻死区时间
20ns
68kΩ (±10%)40ns
270kΩ (±10%)60ns
开路80ns

所以为了避免出问题,我决定将死区时间设在 40ns。

FB 反馈电路

FB 反馈是协议芯片 SW2303 向 DC-DC 控制器 SC8703 的 feedback 的电路。它连接了 SW2303 的 OPTO/FB 引脚、SC8703 的 FB 引脚。

智融没有公开协议控制器 SW2303 的 FB 引脚电压或电路设计建议,但是根据在立创开源广场的相关项目,大家都会为 SC8703 的 FB 网络的配置 100 KΩ 的上拉电阻和 31.6 的下拉电阻,将 VOUTV_{OUT} 设为 5 V 左右。

以下是固定 RUP=100R_{\text{UP}} = 100 \, \text{kΩ} 时,通过修改 RDOWNR_{\text{DOWN}} 调整输出电压的表格:

VOUTV_{\text{OUT}} (V) (目标)RUPR_{\text{UP}} (kΩ)RDOWNR_{\text{DOWN}} (kΩ) (计算值)推荐的 RDOWNR_{\text{DOWN}} 标准值 (kΩ)实际 VOUTV_{\text{OUT}} (V)
310072.46753.016
510030.25305.04
910015.13159.07
1210011.081112.1
151008.678.215.04
181007.16.818.11
241005.215.124.15

计算说明

  1. 固定 RUP=100R_{\text{UP}} = 100 \, \text{kΩ}
  2. 原始公式:VOUT=VREF×(1+RUPRDOWN)V_{\text{OUT}} = V_{\text{REF}} \times \left(1 + \frac{R_{\text{UP}}}{R_{\text{DOWN}}}\right)
  3. 使用公式计算 RDOWNR_{\text{DOWN}}RDOWN=RUPVOUTVREF1R_{\text{DOWN}} = \frac{R_{\text{UP}}}{\frac{V_{\text{OUT}}}{V_{\text{REF}}} - 1}
  4. 内部参考电压 VREF=1.22VV_{REF} = 1.22 V
  5. 将计算值四舍五入到最近的标准电阻值。
  6. 使用标准电阻值计算实际 VOUTV_{\text{OUT}}

由于 SW2303 的电源由 SC8703 的输出提供,所以 SC8703 默认输出电压需要在 3.0 V 以上。由因为默认的 USB 电压是 5 V,我认为 SC8703 默认的 FB 电阻配置应该是要让电压在 3 V ~ 5 V。固定 RUPR_{UP} 为 100 KΩ,RDOWNR_{DOWN} 应该在 72.46 KΩ(3.016 V)~ 30.25 KΩ(5.04 V)之间。

输入与输出限流

电流检测电路原理图

从上图中可以看出,输入输出的限流的电路结构上是一样的,根据数据手册说明,我们可以按比例使用电流采样电路的三个电阻:

  1. 使用 10 mΩ 的检流电阻和两个 1 kΩ 的电阻对
  2. 使用 5 mΩ 的检流电阻和两个 510 Ω 的电阻对

给定公式:

IIN_LIM=VLIM_REFRILIM1×RSS1RSNS1IIN\_LIM = \frac{VLIM\_REF}{RILIM1} \times \frac{RSS1}{RSNS1}

我们需要计算 RILIM1RILIM1

RILIM1=VLIM_REF×RSS1IIN_LIM×RSNS1RILIM1 = \frac{VLIM\_REF \times RSS1}{IIN\_LIM \times RSNS1}

代入已知值:

  • VLIM_REF=1.21VLIM\_REF = 1.21
  • RSS1=510RSS1 = 510
  • RSNS1=0.005RSNS1 = 0.005

计算 RILIM1RILIM1IIN_LIM=1IIN\_LIM = 11010 A 的范围内,1A 递增:

RILIM1=1.21×510IIN_LIM×0.005RILIM1 = \frac{1.21 \times 510}{IIN\_LIM \times 0.005}

RILIM1=617.1IIN_LIM×0.005RILIM1 = \frac{617.1}{IIN\_LIM \times 0.005}

RILIM1=123420IIN_LIMRILIM1 = \frac{123420}{IIN\_LIM}

计算结果:

IIN_LIMIIN\_LIM (A)RILIM1RILIM1 (Ω)推荐标准电阻阻值 (Ω)实际限流值 IIN_LIMIIN\_LIM (A)
1123420120k1.03
26171060.4k2.04
34114040.2k3.07
43085530.1k4.10
52468424k5.19
62057020k6.21
717631.4317.8k6.93
815427.515k8.29
913713.3313.3k9.28
101234212k10.29

实际限流值是根据使用的标准电阻重新计算得到的。

Back to Blog

相关文章

查看更多 »
LumiDock Flex:双色温主动散热台灯

LumiDock Flex:双色温主动散热台灯

这是我制作的第三款照明设备,最大支持 16 W 的 LED 灯。带有 1/4 英寸固定接口,既可以连接支架后作为台灯使用,也可以使用内部锂电池临时作为移动照明灯使用。为了支持 16 W 的灯光功率,还增加了主动散热能力,外壳使用普通树脂光固化打印。

2023 年,再组一台黑苹果 ITX 主机

2023 年,再组一台黑苹果 ITX 主机

这是第二次组黑苹果台式机了,上一次是第一次,所以保守地选择了 i5-10400 + B460M + 6600XT 的组合。因为最近感受到 CPU 性能有一些吃紧,并且 ITX 的遗憾又开始涌上心头,最后看到 V 站老哥出 10700K + Z490I。顺势入手了。但是夜长梦多,挑选了半天的配件,最后发现应该买 12600K 比较合适。只能友好地鸽掉了 TAT