开关电源拓扑结构:Buck降压,boost升压,Buck-Boost升降压、正激、反激

开关电源拓扑结构:Buck降压,boost升压,Buck-Boost升降压、正激、反激

开关电源学习系列(一)------开关电源了解_开关电源csdn-CSDN博客

一、开关电源是什么?

在电路设计中,我们常把稳压电源分成两类:开关稳压电源与线性稳压电源。

开关稳压电源,顾名思义就是通过高频率的“开关” 来控制输出的电源。
线性稳压电源,顾名思义就是通过线性元件来控制输出的电源。

两者对比优劣势:

二、开关电源工作原理

1.开关电源电路构成

开关电源主要由以上几部分组成,核心部分为反馈回路,通过电压反馈回路来调整输出电压,从而达到稳定输出。

2.开关电源拓扑结构

常见的基本拓扑结构:■ Buck 降压■ Boost 升压■ Buck-Boost 降压-升压■ Flyback 反激■ Forward 正激■ Two-Transistor Forward 双晶体管正激■ Push-Pull 推挽■ Half Bridge 半桥■ Full Bridge 全桥■ SEPIC■ C’uk

这里主要讲几种常接触到的基础拓扑结构,比如Buck,boost,正反激这些。

1.Buck降压式开关电源

拓扑结构分析:
①三极管Q导通,电流从电源流经电感L1后给电容和负载供电,此时电感L1储能,此时电路可以简化为下图

②三极管Q断开,由于电感释放存储的能量,充当电源给负载供电,此时电路可以简化为下图

这样的话我们就可以通过控制三极管导通时间来控制输出大小。

(b)是芯片内部的功能框图,我们可以看到有两个MOS Q1和Q2,这种有两个控制MOS的BUCK被称为同步BUCK异步BUCK中使用二极管代替Q2,把图中的开关部分和外围电感提取出来就构成了图2-2 的经典的异步BUCK拓扑图,图2-2中的S对应图2-1的Q1,图2-2中的D对应图2-1中的Q2

图2-1 BUCK原理图与内部框图

下面就介绍降压型BUCK电路的基本工作原理,并进行原理仿真。为了把我们的主要精力放在理解BUCK原理上,我们选择非同步BUCK进行开环分析,也就是电路中只有一个开关管,由二极管对电感进行续流放电,见图2-2 ,简约的东西经过组合往往会迸发出不可思议的结果,BUCK就是这样的电路。

图2-2 异步BUCK电源拓扑

图2-2 中,当开关S导通时SW电压为高电压,等于Vin,Vin给电感L充电,流过电感L的电流逐渐增加,充电电流路径如图中虚线箭头所示,电感电流充电波形见图2-3 ,SW高电平时电感处于充电状态。

当开关S断开时SW为低电平,电感L通过负载和二极管D放电,电感L的电流逐渐减小,放电电流路径见图2-2 实线箭头部分,电感放电波形见图2-3

BUCK的基本工作过程就是对电感充放电的过程。

这里有个小说明,在同步BUCK中D会被开关代替,以提高效率在S断开时,SW位置的电压是0,但是本章中使用的是续流二极管,则在S断开时,SW其实是有一部分的负电压的,差不多是-0.7V,这个问题在2.5.1节会有详细介绍。

图2-3 BUCK开关节点电压波形和电感电流波形

下面推导BUCK输入、输出电压的计算关系,我们先不用管什么伏秒特性,只看最基本、最本质、与电感有关的公式:

V是电感两端的电压,L是电感量,△I是电感两端电流的变化量,△t是经过的时间,将公式(2-1)变换得到公式(2-2):

在BUCK建立稳态后,一个开关周期内,电感充、放电的电流是相等的,T*D是充电的时间,T*(1-D)是放电的时间(T为开关周期;D为占空比,就是开关(上管)导通的时间占整个开关周期的百分比),在稳态时电感充放电是相等的,可得到公式(2-3):

在充电时可得到公式(2-4),充电时电感两端的电压等于Vin-Vout,

同样的道理,可以计算得到放电过程电感电流的变化量:

联立2-3、2-4、2-5整理得到:

非常简单的计算过程,一点也不复杂。从公式(2-6)可以看出,由于D是小于1的数,因此输出Vo是小于输入Vi的,因此BUCK是降压电源。

下面看下基于Multisim软件的BUCK原理仿真,本书中所提供仿真电路仅供交流学习使用,实际工程要考虑的参数、因素太多,本书只关注所涉及的知识内容。仿真原理图见图2-4 ,输入电压Vin=10V,开关频率为2kHz,10Vpp方波,占空比是50%,电感取2.2mH。

图2-4 BUCK电源仿真

图2-5 是在BUCK电源输出端并联了47uF电容后的结果,红色方波是开关节点SW位置电压波形(方波的-0.7V电压在2.5.1节有详细介绍),黑色平滑曲线是输出的电流波形,也就是电感充放电的电流波形。通过开关管对电感充放电,可以明显看到电流充放电时的平滑三角波形(电容有滤波效果)。输入电压是10V,占空比是50%,测试得到输出电压DC值是4.3V,接近公式2-6推导的10*50%=5V,思考:为什么计算和仿真相差0.7V呢?

图2-6 是断开C1 47uF电容的仿真结果,黑色电流曲线更接近三角波(无电容滤波效果),输出电压的纹波也会跟着变的陡峭。当改变输出电容时,有助于缓解输出电压的纹波,然而由于BUCK开关架构的先天特点,此纹波无法消除,只可以对它的纹波进行抑制。

同时,我们也可以看到由于续流二极管的存在,当开关断开后,红色波形有小段的负电压,这个负电压大约是-0.7v,这是和二极管相关,接近二极管的导通电压。与此同时,由于此二极管的存在,输入输出关系也略微改变,导致输出输入关系与公式2-6略有差异。这个二极管是会消耗能量的,为了进一步提升BUCK电源的效率就出现了同步BUCK电路,将续流二极管更换为开关管就可以得到同步BUCK电源。

以上就是BUCK降压电源的原理介绍。

图2-5并联47uF输出电容时仿真波形

图2-6没有输出电容时仿真波形

2.Boost升压式开关电源

拓补分析:
①三极管导通时,电感不断充电,负载通过电容供电,电路可以简化为下图所示

②三极管截至时,电感由于电流保持特性,不会里面断开为0,而是会给后面的负载供电,这时候负载两端的电压等于电感及电源相加的电压。

这样,当电感放电完毕后我们立马导通三极管Q对电感进行储能,这时负载通过电容供电,如此反复循环通过调整三极管的导通时间就可以控制输出电压。

3.Buck-Boost升降压式开关电源

反激又被称为隔离buck-boost 电路

拓扑分析:
①当三极管Q导通时,由于二极管的单向导通特性,电源流经电感后回到电源,电感充电,此时电路可以简化为下图

②当三极管截至时,电感由于电流保持特性,此时电感需要释放能量,负载通过电感供电,电路图可以简化为下图所示。

4.单端正激式开关电源

当三极管VT1导通时,变压器初级绕组上正下负,次级绕组感应电压上正下负,二极管VD2导通,电感L储能后向负载供电;当三极管VT1截至时,二极管VD2截至,电感释放能量,通过二极管VD3形成回路给负载供电。

5.单端反激式开关电源(反激又被称为隔离buck-boost 电路)

反激式开关电源     详细设计

当三极管S1导通时,变压器初级绕组感应电压为上正下负,二极管D1截至,初级绕组储能;当三极管S1截至时,变压器T初级绕组中储存的能量通过次级绕组给后级电路供电。,使用成本低,但是输出的纹波较大。
 

<think>嗯,用户现在问的是关于TabPFN的源码。首先,我需要回顾一下之前的对话历史。之前用户询问了TabPFN是否可以用于预测船舶载货量,我详细分析了可行性和实现路径,包括分类改造和回归扩展的方案。现在用户进一步想要了解源码,这说明他们可能已经对TabPFN的应用有了一定的兴趣,现在想深入理解其内部机制,或者可能想要自己修改或扩展模型。 接下来,我需要确定用户的真实需求。用户可能是一名研究人员、数据科学家或者开发者,想要通过查看源码来更好地理解模型的实现细节,或者进行二次开发。因此,回应的内容需要详细但不过于技术化,同时要考虑到用户可能的不同背景。 用户可能想知道如何获取源码,源码的结构,核心模块的功能,以及如何参与贡献。此外,他们可能对预训练机制、快速推理实现以及如何自定义模型感兴趣。需要确保回答覆盖这些方面,并且提供相关的资源链接,比如GitHub仓库和论文,以便用户进一步查阅。 在组织回答时,应该分点说明,结构清晰。首先介绍源码的获取方式,然后概述整体架构,接着详细讲解核心模块,再讨论预训练和推理的机制,最后提供二次开发的建议和注意事项。需要避免使用过于专业的术语,或者在使用时进行解释,确保用户能够理解。 同时,需要注意用户可能对某些技术细节不太熟悉,比如Transformer架构或贝叶斯推断,因此在解释这些部分时需要简明扼要,必要时提供类比或简单解释。此外,提醒用户关于硬件依赖和社区支持的问题,帮助他们评估是否适合深入源码研究。 最后,确保所有链接确无误,并且建议用户参考官方文档和论文,以便他们获得最准确和最新的信息。如果有社区或论坛的链接,也可以提供,方便用户寻求帮助和讨论问题。</think>以下是关于TabPFN源码的核心信息及解读指南,按技术层级逐步展开: --- ### **1. 源码获取与官方资源** - **代码仓库**: TabPFN官方代码托管在GitHub: [https://github.com/automl/TabPFN](https://github.com/automl/TabPFN) (注意:需遵守Apache-2.0开源协议) - **关键分支**: - `main`:稳定版实现 - `experimental`:包含未式发布的扩展功能(如回归任务原型) - **依赖项**: 源码基于PyTorch实现,需配合`transformers`库(用于预训练模型加载)。 --- ### **2. 源码结构概览** ```plaintext TabPFN/ ├── tabpfn/ │ ├── models/ # 模型定义核心 │ │ ├── tabpfn.py # TabPFN主网络结构 │ │ └── transformer.py # 自定义Transformer层 │ ├── priors/ # 预训练先验知识生成器 │ │ ├── diffusions.py # 数据扩散过程定义 │ │ └── prior_utils.py # 先验采样工具 │ ├── scripts/ # 训练与评估脚本 │ ├── utils/ # 数据预处理工具 │ └── ... # 其他辅助模块 ├── experiments/ # 实验配置与日志 └── tests/ # 单元测试 ``` --- ### **3. 核心模块解析** #### **(1) 模型架构 (`models/tabpfn.py`)** - **核心类**:`TabPFN` 继承自`nn.Module`,包含: - **输入编码层**:将分类/数值特征映射到统一嵌入空间 ```python self.input_encoder = MixedInputEncoder(feature_embedding_sizes) ``` - **Transformer骨干网络**:多层堆叠的注意力机制 ```python self.transformer = TransformerModel( d_model=config.d_model, nhead=config.nhead, num_layers=config.num_layers ) ``` - **输出头**:分类概率预测(`classification_head`)或回归预测(实验分支) #### **(2) 预训练机制 (`priors/diffusions.py`)** - **关键逻辑**:通过**合成数据生成器**创建预训练任务 ```python def generate_batch(batch_size): # 生成虚拟特征X和标签y,模拟真实数据分布 X = sample_features(prior_distributions) y = apply_synthetic_function(X) + noise return X, y ``` - **先验知识融合**:在微调阶段,模型利用预训练的归纳偏置快速适应新数据集。 #### **(3) 快速推理 (`models/tabpfn.py:forward`)** - **批量预测优化**:通过缓存中间结果加速推理 ```python def forward(self, x, cache=None): if cache is None: x_emb = self.input_encoder(x) features = self.transformer(x_emb) else: # 使用缓存的嵌入结果 features = cache return self.classification_head(features) ``` --- ### **4. 二次开发指引** #### **(1) 扩展回归功能** - **修改位置**: 在`TabPFN`类中添加回归输出头: ```python class TabPFN(nn.Module): def __init__(self, ..., regression_output_dim=1): super().__init__() self.regression_head = nn.Linear(d_model, regression_output_dim) def forward(self, x, task_type='classification'): if task_type == 'regression': return self.regression_head(features) ``` #### **(2) 自定义先验分布** - **编辑路径**:`priors/diffusions.py` 修改`sample_features()`中的分布参数,例如: ```python def sample_features(): # 原代码使用均匀分布 # 可改为船舶领域相关的分布(如船舶尺寸的Weibull分布) feature = weibull_dist.sample() ``` --- ### **5. 关键代码片段示例** #### **Transformer层改进(位置编码)** ```python class PositionalEncoding(nn.Module): def __init__(self, d_model, max_len=5000): super().__init__() pe = torch.zeros(max_len, d_model) position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1) div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model)) pe[:, 0::2] = torch.sin(position * div_term) pe[:, 1::2] = torch.cos(position * div_term) self.register_buffer('pe', pe) def forward(self, x): x = x + self.pe[:x.size(0), :] return x ``` --- ### **6. 运行环境要求** - **硬件**:官方预训练模型需**GPU支持**(建议显存 ≥ 16GB) - **软件依赖**: ```plaintext Python >= 3.8 PyTorch >= 1.12 transformers >= 4.18 ``` --- ### **7. 注意事项** 1. **预训练权重加载**:官方提供的`TabPFNClassifier`会自动下载预训练参数(约2.3GB) 2. **计算效率限制**:由于使用全注意力机制,输入特征数建议 ≤ 100列 3. **社区支持**:当前开发活跃度较低,重大修改建议fork后自主维护 --- 如需深入理解具体实现细节,推荐结合原始论文阅读: [TabPFN: A Transformer That Solves Small Tabular Classification Problems in a Second](https://arxiv.org/abs/2207.01848)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学海无涯_come on

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值