Ivan Li 13 分钟阅读

搓一个 USB PD 协议与 DC-DC 反馈

使用 STM32G431RBT6实现 USB PD 协议和 DC-DC 反馈控制。DC-DC 控制器选用 SC8701。本次的硬件电路作为开发板进行设计,带有一些额外的器件供外部调用、调试和复用。顺便验证一下高侧检流时使用 INA19x 系列芯片提取差模量来当做低侧检流的可行性。

电流检测

项目中设计了三种电流检测方案,分别是 - INA226 进行高侧或低侧采样,通过 I2C 进行通信 - INA193 进行高侧或低侧采样和放大,通过模拟信号供 ADC 使用 - INA138 进行高侧采样,通过模拟信号供 ADC 或 SW2303 使用

INA193 进行高侧或低侧采样

INA19x 芯片支持高侧或低侧采样,其中 INA193 的增益是 20 V/V。 这里选用了一路 INA193 进行验证,一是因为我用过 INA193,想进一步验证下 INA193 的性能和校准方案;二是我想看看 INA19x 这类电流检测放大器在高侧和低侧测量输出的差别。

INA138 进行高侧采样方案

这个方案主要用于验证使用 INA138 将高侧采样的差模信号转为相当于低侧采样取得的差模信号,以便 SW2303 能够使用。

INA138电流检测电路图

从上面的数据手册给出的典型应用可以看出,INA138 支持配置输出增益。我准备设计两个增益: - 1 V/V,供 SW2303 使用 - 20 V/V,供 MCU ADC 使用

通过 20V/V 的增益,可以对比一下 INA138 与 INA193 在高侧采样时的差异。

在输出端,实现了一个低通滤波器。使用计算公式 f3dB=12πRLCLf_{-3dB} = \frac{1}{2 \pi R_L C_L} 来计算所需的电容值,并选择最接近的标准电容值。

INA138 Output Filter

  1. 5k 电阻, 1 V/V 增益

    • RL=5kΩR_L = 5 \text{k}\Omega
    • f3dB=10kHz=10000Hzf_{-3dB} = 10 \text{kHz} = 10000 \text{Hz}
    CL=12π×10000×5000C_L = \frac{1}{2 \pi \times 10000 \times 5000} CL3.18nFC_L \approx 3.18 \text{nF}
  2. 100k 电阻, 20 V/V 增益

    • RL=100kΩR_L = 100 \text{k}\Omega
    • f3dB=10kHz=10000Hzf_{-3dB} = 10 \text{kHz} = 10000 \text{Hz}
    CL=12π×10000×100000C_L = \frac{1}{2 \pi \times 10000 \times 100000} CL0.159nFC_L \approx 0.159 \text{nF}

结果如下:

电阻值增益计算所需电容合适的标准电容
5kΩ1 V/V3.18 nF3.3 nF
100kΩ20 V/V0.159 nF150 pF

使用运放实现恒压恒流反馈

我选用的 DC-DC 控制器芯片,通过 FB 引脚来闭环控制输出电压。在一般的定压输出的情况下,通过电阻分压网络对 VOUTV_{OUT} 进行分压,使 FB 电压 VFBV_{FB}VOUTV_{OUT} 成比例。DC-DC 控制器芯片根据实际的 FB 电压调整输出电压,使 得 VFBV_{FB} 与其内部的参考电压相等,从而实现恒压输出。

而 USB PD 协议需要支持多电压输出,并且需要带有过流保护,我查阅了一些开源项目,感觉有点不理解,最后准备实现下面这种限流方案:

运放实现的恒压恒流反馈原理图

这个方案实现了类似“与”的逻辑,FB 网络是通过电压信号控制 DC-DC 控制器的输出电压。 未触发限流保护的情况下,由上面 N 沟道场效应管进行恒压,恒流反馈会因为电流未到达限流值而使下面的 N 沟道场效应管在力所能及的范围内尽可能地导通。 一旦负载电流达到限流值,下面的场效应管会开始在线性区域内导通,这个时候 DC-DC 控制器的输出电压会下降,这样就实现了限流的功能。 与此同时,由于 DC-DC 控制器输出电压下降,上面的场效应管会开始尽可能导通,以期望得到更高的输出电压。 通过串联这两个“阀门”,使这俩个场效应管的组合阻值永远不低于最小的那个,从而实现恒压恒流模式。

下面的场效应管给电流控制环路,主要是考虑未触发限流的情况下, 下面的场效应管产生的阻值相对来说是低且稳定的,能让上方的 N 沟道场效应管的源极(S)电位尽可能固定在 0 附近,减少引入的干扰。如果反过来,我就猜不出会不会出现什么曲折的跳动了,这个问题已经进入我的知识盲区了。 同理,回到现在的方案,如果触发过流保护,这时我就不知道会发生什么了,但是大概最后应该是会稳定在上管线性,下管饱和。或许中间过程曲折,但是保护状态我就不挑三拣四了。

这个方案是我想出来的,看起来和下图的有点像,希望能成功吧。

SW2303 功能框图

使用 STM32G4 实现恒压恒流反馈

恒压模式使用到 STM32G4 内部的 DAC3 和 OPAMP1; 恒流模式使用到 STM32G4 内部的 DAC3 和 OPAMP3。 其中,运放实现的功能是反相放大器。STM32G4 的片上运放是轨到轨输入和输出的。 使用 DAC 输出参考电压送入运放的同相输入端,电压和电流信号分别送到两个运放的同相输入端,实现增大 DAC 输出就增大电压或电流。

STM32G4 运算放大器电路图

上图是 STM32G4 运算放大器的原理图,参考上图并结合我们的用例,将同相输入端连接到 DACx 的输出端,将 VINM0 连接到分压的输出电压或分流的电压,就是我们需要的结果。

至于这个外部电容的容值要用多少的,目前我不知道,所以先留个焊盘空着,后续再做调整。

USB PD

VBUS 泄放电路

USB Type-C 规范要求源端口在接收端口断开后的 650ms 内对 VBUS 进行放电到 5V 以内。所以需要一个泄放电路。

下面是 LLM 计算的结果:

1. 计算电容放电所需的电阻值

电容放电的公式为:

V(t)=V0×etRCV(t) = V_0 \times e^{-\frac{t}{RC}}

其中:

  • V(t)V(t) 是时间 tt 时的电压
  • V0V_0 是初始电压
  • RR 是电阻
  • CC 是电容
  • tt 是时间

我们知道:

  • V0=20VV_0 = 20 \, \text{V}
  • V(t)=5VV(t) = 5 \, \text{V}
  • C=1000μF=1000×106FC = 1000 \, \mu\text{F} = 1000 \times 10^{-6} \, \text{F}
  • t=650ms=0.65st = 650 \, \text{ms} = 0.65 \, \text{s}

将这些数值代入公式:

5=20×e0.65R×1000×1065 = 20 \times e^{-\frac{0.65}{R \times 1000 \times 10^{-6}}}

简化得到:

14=e0.65R×0.001\frac{1}{4} = e^{-\frac{0.65}{R \times 0.001}}

取自然对数:

ln(14)=0.65R×0.001\ln\left(\frac{1}{4}\right) = -\frac{0.65}{R \times 0.001} ln(4)=0.65R×0.001-\ln(4) = -\frac{0.65}{R \times 0.001}

解出 RR

R=0.65ln(4)×0.0010.651.386×0.001469ohmsR = \frac{0.65}{\ln(4) \times 0.001} \approx \frac{0.65}{1.386 \times 0.001} \approx 469 \, \text{ohms}

2. 计算峰值电流

峰值电流 IpeakI_{\text{peak}} 在放电开始时最大,即 t=0t = 0 时:

Ipeak=V0R=204690.043A=43mAI_{\text{peak}} = \frac{V_0}{R} = \frac{20}{469} \approx 0.043 \, \text{A} = 43 \, \text{mA}

3. 验证电阻值与放电时间

使用0402电阻封装时,通常电阻的功率为0.063W (63mW),需要确保在放电过程中功率不超出此范围。

在放电过程中,瞬时功率可以计算为:

P(t)=I(t)2×RP(t) = I(t)^2 \times R

在峰值电流时:

Ppeak=Ipeak2×R=(0.043)2×4690.87mWP_{\text{peak}} = I_{\text{peak}}^2 \times R = (0.043)^2 \times 469 \approx 0.87 \, \text{mW}

这在0402封装的功率范围内。

上面使用的公式看起来好像没啥问题,我就不验证了。直接使用 510 的电阻就行了。

Feedback

如果这篇文章对你有帮助,欢迎留下反应或评论。