0 前言
本文基于 TI 的 TPS56637 实现一个支持调压的 BUCK 电路,包含从零开始详细的 原理解析、原理图、PCB 及 实测数据
本文属于《DIY迷你数控电源》系列,本系列我们一起实现一个简单的迷你数控电源
我是 LNY,一个在对嵌入式的所有都感兴趣的博主,一个原厂嵌入式软件开发工程师
如果对你有帮助,请点赞、收藏、关注三连,这是我持续创作的动力之一!!!
文章目录
- 0 前言
- 1 如何进行数控调压
- 1.1 BUCK原理简介
- 1.2 如何用BUCK得到想要的电压
- 1.3 如何动态调整BUCK的输出电压
- 1.4 其它
- 2 设计选型
- 2.1 背景:数控电源DIY项目
- 2.2 设计指标
- 2.3 BUCK选型
- 3 硬件设计
- 3.1 原理图 & 参数设计
- 3.2 软件效率优化
- 3.3 PCB & 渲染图
- 4 测试
- 4.1 测试环境
- 4.2 简单测试
- 4.3 进一步的测试待更新...
- 5 本系列其它文章(或更新计划)
- 6 参考资料
1 如何进行数控调压
1.1 BUCK原理简介
BUCK
是一种 DCDC 拓扑结构,把输入的高电压转换成更低的稳定电压
实现方式是 控制模拟开关导通的占空比 来调整输出电压的大小
而 控制模拟开关导通的占空比 是由输出电压决定的(许多BUCK芯片将模拟开关集成在芯片内部)
BUCK
的 FB
(Feedback,反馈)引脚用于获取 分压后的输出电压实际值
分压后的输出电压实际值 将和 内部参考电压 进行比较,组成一个反馈网络,通过监测输出电压,来控制模拟开关的占空比:
分压后的输出电压实际值 > 内部参考电压 ==> 提高模拟开关导通的占空比,输出电压升高
分压后的输出电压实际值 < 内部参考电压 ==> 降低模拟开关导通的占空比,输出电压降低
最终,FB
引脚的电压 将会稳定在 内部参考电压,而输出电压也会稳定在我们想要的电压上
1.2 如何用BUCK得到想要的电压
外围电路的结构芯片原厂已经给出,在一般应用下,我们最重要的工作是:计算FB
引脚上电阻分压网络的阻值,即下图中的 R6 和 R7
VOUTV_{OUT}VOUT—— 经过 BUCK
降压后的输出电压
R6、R7 —— 对应原理图的 R6 和 R7
0.6 —— 反馈电压,每个 BUCK
芯片可能不同,为一常量,在 DATASHEET 的电气参数中可以查到
芯片原厂在其应用实例中一般都会给出上图中所示的一个公式
在输入和输出参数都满足其要求的情况下,选定R6和R7的阻值,就可以得到想要的输出电压
这个公式是怎么得来的?
这个公式可以写成:
0.6=VOUTR6+R7∗R7\begin{aligned} 0.6 = \frac{ V_{OUT} }{R_6 + R_7} * R_7 \end{aligned} 0.6=R6+R7VOUT∗R7
看原理图,电流从 VOUT 经过 R6R_6R6 和 R7R_7R7 流入 GND,那么这条回路上的电流为:VOUTR6+R7\frac{ V_{OUT} }{R_6 + R_7}R6+R7VOUT
这条回路上电流处处相等,因此电阻 R7R_7R7 两端的电压为 VR7=VOUTR6+R7∗R7V_{R_7} = \frac{ V_{OUT} }{R_6 + R_7} * R_7VR7=R6+R7VOUT∗R7
电阻 R7R_7R7 两端的电压就是其两端的压差,而其一端是 GND 电压为0V,那么其另一端电压值就是VR7V_{R_7}VR7
这一点直接连接BUCK芯片FB引脚,即 VFB=VOUTR6+R7∗R7V_{FB} = \frac{ V_{OUT} }{R_6 + R_7} * R_7VFB=R6+R7VOUT∗R7
上面我们有说,BUCK芯片的目的就是控制模拟开关导通的占空比,让VFBV_{FB}VFB和内部参考电压保持一致,从而得到想要的输出电压。目前我们VOUTV_{OUT}VOUT(由设计指标得到)、VFBV_{FB}VFB(由芯片手册得到)已知,只要选择 R6R_6R6 和 R7R_7R7 让这个等式成立就可以了。
阻值选择的注意事项?
- 必须保证上述等式成立。
- 阻值应在合理范围内选择。阻值过大会导致
FB
引脚内部误差放大器偏置电流引起的误差变大,且更容易拾取环境中的电磁干扰噪声等;阻值过小会导致由过多电流流入电阻分压网络,导致系统功耗变大。
当手册没有明确指定时,选择几十kΩ级别(如10kΩ - 200kΩ) 的电阻通常是一个安全、合理且广泛应用的起点。
1.3 如何动态调整BUCK的输出电压
首先,厂商自己会推出一些支持调压的 DC-DC 芯片,可以通过一些通讯协议来调整输出电压。
但我们这里讨论的是 普通的 DC-DC 芯片如何完成调压。当然,TI 在其DATASHEET里有写,不建议这么操作。
卓晴老师在他的文章数控降压电源模块DCDC| 5A,LCD显示讲解了一种数控调压的方法:通过使用DAC注入电流,以调整FB电压,进而调整输出电压。我们简单复习一下。
在正常情况下,FB
引脚的电压VFBV_{FB}VFB由 VOUT 经过电阻分压网络直接得到
那么如果我们自己控制 FB
引脚的电压VFBV_{FB}VFB,是不是就能调整输出电压了呢?
卓晴老师在其文章中引用了XL4015-ADJ 5A 大电流DC-DC原理图分享一文中的原理图,这里借用一下:
从上图可以看到,I2I_2I2、I3I_3I3流入 VFB 节点,I1I_1I1流出 VFB 节点,他们的大小分别是:
I1=VFBR1I2=VOUT−VFBR2I3=VG−VD−VFBR3\begin{aligned} I_1 &= \frac{V_{FB}}{R_1} \\ I_2 &= \frac{V_{OUT} - V_{FB}}{R_2} \\ I_3 &= \frac{V_G - V_D - V_{FB}}{R_3} \end{aligned} I1I2I3=R1VFB=R2VOUT−VFB=R3VG−VD−VFB
其中:
VGV_GVG —— DAC (或其它,如滤波后的PWM信号)输出的直流电压
VDV_DVD —— 二极管(一般是肖特基二极管,因为压降低)的压降
根据基尔霍夫电流定律,在任意时刻,流入电路中某一节点(或闭合面)的电流之和等于流出该节点(或闭合面)的电流之和,因此:
I1=I2+I3\begin{aligned} I_1 = I_2 + I_3 \end{aligned} I1=I2+I3
联立以上四式,得:
VOUT=VFB×(1+R2R1)+(VFB+VD−VG)×R2R3V_{OUT} = V_{FB} \times \left(1 + \frac{R_2}{R_1}\right) + (V_{FB} + V_D - V_G ) \times \frac{R_2}{R_3} VOUT=VFB×(1+R1R2)+(VFB+VD−VG)×R3R2
现在我们在选定 R1R_1R1 、 R2R_2R2 和 R3R_3R3 三个阻值后,就可以通过调整 VGV_GVG 的电压来调整 VOUTV_{OUT}VOUT 了!
1.4 其它
在此我有个疑问,为什么不直接将DAC接入到FB引脚呢?
!!!以下内容来源于DeepSeek,供大家参考:
2 设计选型
2.1 背景:数控电源DIY项目
在选择设计指标前,有必要说一下要实现的DIY项目。
这个DIY项目的最终目标是实现一个迷你数控电源,其和调压相关的实现如下:
- 电压诱骗
数控电源的电源输入来自快充充电器,通过PD
协议芯片STUSB4500
,诱骗出5V、9V、12V或20V电压。如果快充头支持PPS协议,那么可以在 5V——20V 以 0.05V 的步进自由选择数控电源的输入电压(因为STUSB4500
只支持这些,而非快充协议限制)。 - 电压转换
作为一个数控电源,应该可以以较高精度的步进调整输出电压,为此支持两种电压输出方式:
方式1: 通过PPS
协议直接诱骗出需要的电压。
(优点:电路简单、效率高。缺点:最低输出5V,调整步进精度0.05V)
方式2: 由PD3.0
或PPS
协议诱骗出一特定电压后,输入到数控BUCK
电路,调整为最终需要的电压。
(优点:可以输出低于5V的电压、调整步进精度高。缺点:由于BUCK压差的限制,不能输出过高的电压;输出纹波大)
.
为了实现上述功能,将使用两个负载开关芯片LM73100
(也是理想二极管芯片)实现二选一输出。 - 计量
使用INA233
计量芯片实现对输出的电压、电流、功率和能量进行计量。 - 保护功能
使用TPS25974
电子保险丝实现过流、过压、短路等接口保护。
2.2 设计指标
基于上述前提,可以定出对BUCK调压电路基本的设计指标
- 输入电压:5V——20V(由PD诱骗芯片决定,
STUSB4500
最高支持20V) - 输出电压:0V——12V(需要更高电压时,由PD诱骗后通过快充头直出)
- 输出电流:5A(由PD诱骗芯片决定,
STUSB4500
最高支持5A) - 输出纹波:100mV(仅BUCK输出,不包含后级eFuse的大电容)
- 调压精度:10mV
2.3 BUCK选型
基于以上指标,选择了德州仪器的 TPS56637
。
3 硬件设计
3.1 原理图 & 参数设计
DATASHEET的参考设计:
参考以上设计,绘制我们的原理图
那么主要选择的参数就是 R22R_{22}R22 、 R23R_{23}R23 和 R25R_{25}R25 了。
根据上面的公式:
VOUT=VFB×(1+R23R22)+(VFB+VD−VG)×R23R25V_{OUT} = V_{FB} \times \left(1 + \frac{R_{23}}{R_{22}}\right) + (V_{FB} + V_D - V_G ) \times \frac{R_{23}}{R_{25}} VOUT=VFB×(1+R22R23)+(VFB+VD−VG)×R25R23
其中,已知参数是:
VGV_{G}VG是DAC输出的电压,范围是 0V — 3.3V;
VDV_{D}VD是肖特基二极管上的压降,1N5817WS
的压降是 0.45V;
R22R_{22}R22初选为10kΩ,R23R_{23}R23选为220kΩ,R25R_{25}R25选为36kΩ。
VOUT=0.6×(1+22010)+(1.05−VG)×22036V_{OUT} = 0.6 \times \left(1 + \frac{220}{10}\right) + (1.05 - V_G ) \times \frac{220}{36} VOUT=0.6×(1+10220)+(1.05−VG)×36220
在VGV_{G}VG输出 0V 时,VOUT=20.21VV_{OUT} = 20.21VVOUT=20.21V;
在VGV_{G}VG输出 3.3V 时,VOUT=0.05VV_{OUT} = 0.05VVOUT=0.05V;
12bit DAC的输出范围码字为0 — 4096,对应 0.05V 和 20.21V,那么一个码子对应的电压值为0.005V,即理论调压精度为5mV。
但是BUCK芯片是有压差要求的,且 TPS56637
最高输出电压为13V,因此DAC的最低输出电压VGMAX=1.18VV_{G_{MAX}} = 1.18VVGMAX=1.18V。
3.2 软件效率优化
在我们这个应用中,因为输入电压来源于快充充电器,所以可以获取到范围内的所有电压值。
那是否会有一种控制算法
根据输出电压值,先粗调一个输入电压值,再通过BUCK精调,保证BUCK工作在最高效率下呢?
题主认为这种方式肯定是必须且有成效的,但是这部分还没有完成,完成了会贴出来,并附上测试结果。
3.3 PCB & 渲染图
根据上述的原理图layout,BUCK电路对应下图中红框的位置。
4 测试
4.1 测试环境
上图中将BUCK的 MODE
引脚接地,从而使BUCK进入 ECO模式,在轻载下获得更高的效率
在实际应用中,MODE
引脚由MCU的GPIO控制(但是这块板的MCU刚刚炸掉,所以就简单粗暴的短接到GND了)
4.2 简单测试
DAC电压为3.197V时,BUCK输出电压1.941V
DAC电压为0V时,BUCK输出电压为13.97V
4.3 进一步的测试待更新…
总之先简单的验证一下这个电路能用吧,具体效果怎么样后面再更新
后面的打算换一款板子,把MCU焊好之后再测试。
5 本系列其它文章(或更新计划)
如果已经更新,下面会出现超链接
硬件:
- MCU —— STM32G431CBU6
- 调压BUCK电路 —— 基于TPS56637(本文)
- 功率计电路 —— 基于INA233
- 理想二极管开关电路 —— 基于LM73100
- 电子保险丝电路 —— 基于TPS25974
- PD3.0(PPS) SINK电路 —— 基于STUSB4500
- 旋转编码器 & 蜂鸣器电路 —— 基于EC11和SS8050
.软件:
- STUSB4500 —— BSP程序开发
- INA233 —— BSP程序开发
- EC11编码器 &蜂鸣器 —— BSP程序开发
- LVGL —— 图形库移植与应用开发
- FreeRTOS —— 移植与应用开发
.其它:
- 外壳设计及加工
- 元器件及结构件的选择
.相关文章:
- PPS(PD3.0)快充SINK模块 — 基于STUSB4500
6 参考资料
[1] 数控降压电源模块DCDC| 5A,LCD显示 —— 卓晴
[2] XL4015-ADJ 5A 大电流DC-DC原理图分享 —— 苏守坤
[3] TPS56637 DATASHEET