👉个人主页: highman110
👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容
目录
前文我们分享了三种常用非隔离DCDC的基本拓扑:buck、boost、buck-boost。本文分享一下隔离型的DCDC拓扑—反激变换器。
反激型电路的结构简单,元件数少,成本较低,广泛适用于各种功率为数瓦~数十瓦的小功率开关电源,在各种家电、计算机设备、工业设备中广泛使用的小功率开关电源中基本上都采用的是反激型电路。比如常用的台式电脑的电源就是反激式。但该电路变压器的工作点也仅处于磁化曲线平面的第I象限,利用率低,而且开关元件承受的电流峰值很大,不适合用于较大功率的电源。
反激变换器拓扑可由buck-boost拓扑演变而来,我们先回顾一下buck-boost电路:

升降压电路由电感周期性的充能和放能过程维持均匀的电压输出,且输出电压与输入电压极性相反。将升降压电路中的电感替换成互相耦合的电感N1和N2(也就是变压器)就是反激拓扑,详细的变换过程在硬件十万个为什么的推文中有说明,大家可以自行查阅。反激电路中的变压器既有隔离变压的作用,又有储能电感的作用:

在开关导通时,电流流入变压器初级给磁芯充能,流过变压器初级的电流线性上升,而此时次级线圈依据楞次定律会产生阻碍磁通增加的电流,也就是从变压器次级同名端流出的电流,此电流被二极管截止阻断,也即初级线圈电流充电的磁能没有被释放。
在开关关断时,初级线圈的电流被关断,磁通有减少的趋势,于是此时次级线圈依据楞次定律会产生维持现有磁通的电流,也就是从变压器次级同名端流入的电流,此电流和二极管导通方向相同,组成电流回路给负载供电,也就是磁能释放的过程。
如下图所示,i10为开关导通时,初级线圈的初始电流,在导通期间,电流线性上升,电流的增量为:

i20为开关关断时,次级线圈的初始电流,在关断期间,电流线性下降,电流的减量为:


将变压器的初级线圈和次级线圈看做两个电感,初级电感L1的充能和次级电感L2的放能在开关周期内是相等的,根据电感的能量公式:W=1/2 L*I²,将电流增量和电流减量带入此式,有:

电感的计算公式为:L=μ*Ae*N2/lm,其中L表示电感量、μ表示磁心的磁导率、Ae表示磁心的截面积、N表示线圈的匝数、lm表示磁心的磁路长度。
变压器的初、次级只有线圈匝数不同,于是有:

化简为:

可以看出在CCM时,反激的输入输出关系只比buck-boost增加了变压器的匝数比。
断续电流模式指的是在开关关断期间,次级线圈的电流会下降到0。如下图所示:

t0~ t1、t1~ t2的过程与连续电流模式一致,增加了第三个阶段t2~ t3,这个阶段初、次级线圈电流均为0,由电容向负载提供能量。
下面对电流断续时的输入输出电压关系进行推导。
设开关断开后的次级线圈电流持续时间为αT(t2-t1),0≤α≤1-D,二极管在整个开关周期的平均电流为:

忽略电容的漏电流,负载电流基本等于二极管的平均电流:

根据变压器初次级充能和放能相等可得:

解得:

将此值代入负载电流等于平均电流的等式中,解得:

从上式可以看出,若R很大,输出Vo也将很大,这将损坏器件,也就是说当反激电路输出开路时,次级电流没有回流路径,磁芯的能量无处释放。所以反激变换器不能工作于负载开路状态。
由于反激变换器的初级和次级不会同时有电流存在,不存在磁势相互抵消的可能,所以变压器磁芯的磁通密度仅取决于绕组电流的大小。如下图所示变压器磁通与绕组电流的关系:

从图中可以看出,在最大磁通密度相同的条件下,连续工作时磁通密度的变化范围∆B小于断续方式。在反激型电路中,∆B正比于一次侧每匝绕组承受的电压乘以开关处于通态的时间ton,在电路的输人电压和ton相同的条件下,较大的∆B意味着变压器需要较少的匝数,或较小尺寸的磁心。从这个角度来说,反激型电路工作于电流断续模式时,变压器磁心的利用率较高,故通常在设计反激电路时应保证其工作于电流断续方式。
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
我最近将一个ruby库转换为一个gem,这似乎破坏了命令行的可用性作为图书馆工作得很好$ruby-rfoobar-e'pFooBar.question'#=>"answer"作为一个gem,irb知道如何从命令行开关中请求一个gem$irb-rubygems-rfoobarirb(main):001:0>FooBar.question#=>"answer"但对于ruby本身来说同样失败了:$ruby-rubygems-rfoobar-e'pFooBar.question'ruby:nosuchfiletoload--foobar(LoadError)我现在必须这样做吗,这看起来
目录1.1访问Cisco路由器的方法1.1.1通过Console口访问路由器1.1.2通过Telnet访问路由器1.1.3终端访问服务器1.2终端访问服务器配置命令汇总1.1访问Cisco路由器的方法 路由器没有键盘和鼠标,要初始化路由器需要把计算机的串口和路由器的Console口进行连接。访问Cisco路由器的方法还有Telnet、WebBrowser和网络管理软件(如CiscoWorks)等,本节讨论前2种。1.1.1通过Console口访问路由器 计算机的串口和路由器的Console口是通过反转线(Rollover)进行连接的,反转线的一端接在路由器的Console口上,另一
当我在Windows764位系统上运行bundleexecrspecspec/时,我收到以下错误:invalidswitchinRUBYOPT:-F(RuntimeError)我正在运行ruby1.9.2p136(2010-12-25)[i386-mingw32](安装在c:\ProgramFiles(x86)\Ruby192)和bundler1.0.15(作为rubygem安装).关于如何解决这个问题的任何线索?谢谢,本 最佳答案 Bundler不喜欢Ruby的路径包含空格这一事实。为了解决这个问题,我编辑了runtime
我正在开发rubyonrails应用程序。对于sessionController,我想用一个案例来检查用户的帐户是否被锁定或禁止。我正在尝试使用类的对象作为案例,并使用when来检查属性。例如,user=Profile.find(1)caseuserwhenuser.banredirect_to()whenuser.lockredirect_to()elseredirect_to()end唯一的问题是它不起作用。这是什么工作:caseuser.banwhentrueredirect_to()elseredirect_to()end关于如何使用开关检查用户对象是否被禁止或锁定,有什么
Flickr都给我带来了启发和Disqus使用功能开关。他们都在博客上介绍了他们以及他们在两个开发博客上的工作方式。我只是想知道是否有我缺少的Rubygem,或者是否有人知道在Ruby中执行此操作的方法?如果没有任何东西,我希望自己制作并在野外释放它。但我只是想先在这里问一下,因为我还没有找到任何与Flickr和Disqus所达到的远程相似的东西。 最佳答案 检查rollout如果您已经在使用Redis。 关于ruby-on-rails-Ruby功能开关/功能脚蹼,我们在StackOve
我正在编写一个脚本,我想要一个带有值的--host开关,但是如果没有指定--host开关,我想要选项解析失败。我似乎不知道该怎么做。文档似乎只指定如何使参数值成为强制性的,而不是开关本身。 最佳答案 一种使用optparse的方法,可以在缺少开关时提供友好的输出:#!/usr/bin/envrubyrequire'optparse'options={}optparse=OptionParser.newdo|opts|opts.on('-f','--fromSENDER','usernameofsender')do|sender|op
这个问题在这里已经有了答案:HowtowriteaswitchstatementinRuby(28个答案)关闭9年前。谁能提供一个关于如何在Ruby中为变量使用switchcase的例子?
我正在尝试使用来自Ajax的条件返回值来更改Bootstrap开关的状态,HTML,if(objData.limit==='Yes'){$('#limit').bootstrapSwitch('setState',true);$("#limit_amount").prop("readonly",false);}else{$('#limit').bootstrapSwitch('setState',false);$("#limit_amount").prop("readonly",true);}但它抛出如下错误..UncaughtTypeError:Cannotreadproperty'
我目前正在学习关于Javascript的代码学院类(class),并且我被困在FizzBuzz任务上。我需要从1到20数,如果这个数字可以被3printfizz整除,被5printbuzz整除,被两个printfizzbuzz整除,否则只打印数字。我能够用if/elseif语句来完成它,但我想用switch语句来尝试它,但无法得到它。我的控制台只记录默认值并打印1-20。有什么建议么?for(varx=0;x 最佳答案 Switch将switch(x){中的x与case表达式的求值结果相匹配。由于您所有的情况都会导致true/f