本申请涉及2002年11月14日由Kent Kernahan,John Carl Thomas,David F.Fraser和Jack Roan提交的名称为“开关功率转换器(SwitchingPower Converter)”的第10/296,000号的美国专利申请,其在这里通过引用被全部并入。本申请还涉及2005年1月5日由Kent Kemahan和MiltonRibeiro提交的名称为“使用省电的有限操作和克服振铃的调节的功率转换器(POWER CONVERTERS WITH LIMITED OPERATION TO CONSERVEPOWER AND WITH ADJUSTMENTS THAT OVER COME RINGTING)”的第11/030,585号美国专利申请,其在这里通过引用被并入。
具体实施方式
定义、首字母缩写词和缩写词
CCM |
连续的电流模式 |
Coss |
FET输出电容 |
Cycleskipping |
在一个或多个时段没有应用脉冲的过程 |
DCM |
不连续的电流模式 |
DPC |
如前述第10/296,000号美国专利申请和第6,825,644号美国专利中所描述的数字脉冲控制器。 |
dX |
X值的变化,其中X可为任意参数,例如I、V、Tp、Ts等等
|
Icoil |
线圈电流 |
L |
电感值(h) |
pX |
当前事件之后的事件的X值(例如,对于T(n+1),pTp=Tp) |
lX |
当前事件之前的事件的X值(例如,对于T(n-1),lTp=Tp) |
REG |
调节系统,其包括如前述第10/296,000号美国专利申请和第6,825,644号美国专利中所描述的REG_Eng、REG_Sch、SC、SV、DPC的变量和接口、DAS、NFETDVR和SYS。 |
SYS |
如前述第10/296,000号美国专利申请和第6,825,644号美国专利中所描述的基于微处理器的系统控制。 |
T |
一个时段 |
THIGH |
设计者所允许的最大FET导通时间 |
TLOW |
设计者所允许的最小FET导通时间 |
Tp,tp |
接通控制FET的时段 |
Ts,ts |
接通同步FET或“低端”二极管导电的时段 |
Vdbh |
高的不工作区界限 |
Vdbl |
低的不工作区界限 |
Vdb |
不工作区宽度;等于(Vdbh-Vdbl) |
Vo |
输出电压;负载两端的电压 |
VSPL |
非常简单比例回路 |
Vtar |
目标电压 |
参考图1,降压开关功率转换器的基本操作是:在一段称为“Tp”(图2-4)的时间通过控制FET 114在由一些电源98在输入端100处提供的输入电压“Vin”和线圈118之间产生间断式连接,其后FET 114被关闭,并且同步FET 116被接通一段称为“Ts”的时间。这是通过控制器112根据线路128和130上的Tp和Ts参数而产生合适的信号来实现的,该线路128和130与FETs 114和116的栅极连接。这使电流“Icoil”流经线圈118到 达负载126。在输出端122处测量的输出电压“Vo”由电容器C2变平滑。FET 116可用二极管来代替以形成非同步的降压电源,在这种情况下不需要线路130。在非同步布局中,Ts为当FET 114关闭后,来自线圈118的电流继续流动所经过的时间。换句话说,它是当时间Tp结束成后,电流回到零值(图3、图4)或某个最小值(图2)所需要的时间。本技术领域的技术人员将认识到,本发明的一些实施例可应用于任何开关功率转换器布局,包括但不限于降压、升压和降压/升压,其中它们的任一个都可按同步或非同步设计来实现。Tp和Ts在一个时段Tn 200期间被计算,并且在下一个时段Tn+1202期间被应用,如图2、图3和图4中所举例说明的。我们有时将T(n)写为Tn,将T(n+1)写为Tn+1,等等。
在控制器112中,模数转换器112A在连续的电压采样操作中对电压Vo进行采样和数字化,并且向一个微处理器(或一些微处理器)112M提供数字电压。微处理器112M计算时间Tp和Ts,并且在每个时段Tn内在线路128,130上产生相应的信号。一些实施例使用在前述第10/296,000号美国专利申请或于2004年11月30日颁布给Kemahan等人的第6,825,644号美国专利(两者在这里通过引用被并入)中描述的电路,但利用以软件编程的微处理器112M来实现本发明。在这样的实施例中,ADC 112A和DPC(数字脉冲控制器)112D分别对应于第10/296,000号申请的图12A-12D中所示的ADC 1206和DPC 1201。本申请的图1的微处理器112M控制DPC 112D以产生线路128,130的信号。在第10/296,000号专利申请中,时间Tp、Ts的计算在和中央处理模块(SYS)1205的合作的REG1204中被执行。这些功能合并到被认为是由本发明的图1的控制器112所引起的操作中。第10/296,000号申请的REG和SYS模块可为本申请的处理器块112M的一部分。如第10/296,000号申请所描述的,DPC输出可通过驱动器与FETs 114、116连接,在当前申请的图1中并没有显示。本发明不限于第10/296,000号申请或第6,825,644号美国专利的电路,或不限于可软件编程的实现。
降压操作可被认为具有两种模式:对线圈118的电流的连续线圈电流作用和不连续线圈电流作用。如图2所示,连续线圈电流模式(“CCM”) 被定义为始终有被线圈118传送的电流的情况,虽然不必处于稳定状态的值。在不连续线圈电流模式(“DCM”)中,如图3所示,来自线圈118的电流在每个工作周期事件期间(即,每个时段Tn,Tn+1等等,其中Tp>0)返回到零。正当另一个工作周期事件开始时,线圈118的电流返回到零的情况限定了在DCM下能传送的最大电流,并被称为图4所示的“临界导电状态”。当负载需求非常小时DCM发生变化,以使控制FET 114所需要的脉冲窄到它不能有效地操作控制器112和接通及关闭FETs 114和116。在这种情况下,一定数量的周期Tn被全部跳过,即,在Tn周期期间晶体管114保持关闭,但在工作周期事件中的脉宽Tp增大。这种操作被称为“周期跳步模式”。在一些实施例中,本发明适于DCM控制,无论有无周期跳步,并且还适于CCM。
在DCM操作中,经过线圈118的电流在一个时段T(其中T为周期Tn,Tn+1等等的一般符号,还表示每个周期的长度;在一些实施例中这些周期的长度相同)内总是返回到零。因此,线圈118不合并来自先前工作周期事件的任何电流。没有包含历史记录。因为可精确计算传送至线圈的电荷,也可知道平均电流。然而,DCM的难题是当电流返回到零时出现的振铃。在图10中,振铃在1004处示出,其中线圈电流Icoil在Ts周期末端为负。振铃由FET 114和FET 116的输出电容(“Coss”)产生而抑制线圈118的电感。振铃的大小可以相当大,并且能引起非单调性响应。换句话说,如果控制器112在一些周期Tn中增大占空比Tp/T,那么在下一个周期T(n+1)中流入线圈118的总电荷可能减少,或者反之亦然。这是振铃与Icoil周期频率异步的结果。因此,我们根本不能提前知道下一个工作周期在振铃的相位中开始的确切地方。例如,考虑我们增大占空比Tp/T的情况。我们期望在后面的周期T中电流增加。但是如果脉冲能量(或电荷)的递增量小于振铃能量的递增量,并且如果下一个周期的上升沿在Icoil振铃的最差状况计时期间(即,在区域1004的底部)开始,那么在下一个周期中电流的变化实际上可能在错误的方向。因此,Vo可能减少,而不是增加。此外,如果控制器112响应于下降的Vo而持续增加占空比,以及所增加的占空比最终将Vo推到比期望更大的值,那么可能出现振荡情况。这个问题的解决方案是始终使用具有比振铃的最大反向脉冲1004更 大的步长的误差校正(即,递增电荷)。这将确保校正总是在期望的方向,尽管可能超过所需要的量。
对于给定的开关电源设计,最大功率情况是在CCM中。对于低功率要求,可以使用脉冲频率模式(“PFM”)。对于在CCM和PFM之间的功率要求,可以使用根据本发明的一些实施例的DCM方法。在一些实施例中,DCM控制回路专门使用如下描述的VSPL方法。当DCM下的占空比达到临界导电点(图4)时,存在混合情况。如果占空比增大而超过临界导电点,那么按照定义系统在CCM中,但通过继续使用具有非常低的增益(即,对于Tp参数的非常低的增量值dTp,因此非常低的递增电荷)的VSPL可节省功率。在一些实施例中,一旦启动VSPL,只要输出Vo能维持在期望的范围内(例如见下面描述的图5),我们就继续使用它,当输出Vo不能维持时,才转换到对CCM更合适的控制技术。
图5详细说明了Vo的不同电压状况。目标输出电压为“Vtar”500。高不工作区极限为“Vdbh”502。低不工作区极限为“Vdbl”504。总的不工作区范围为“Vdb”506,其等于(Vdbh-Vdbl)。在一个实施例中,Vtar=2.5V,Vdbh和Vdbl与Vtar相差2%,即50mV。在一些实施例中,相同的控制器112控制在系统中的多个不同的Vo电压,其范围从1.5V到12.5V,具有2μsec的相同T值。这些值是示例性的,而不是限制性的。其它实施例包括其它的电压和定时值。在一个实施例中,不使用VSPL,直到Vo在Vdb 506内并且系统在DCM中。为了启动VSPL,设计者可能希望强加其它要求,例如在某个时段处于平衡(平衡状况意味着Icoil电流等于负载电流,因此Vo保持不变)、在某个时段保持在Vdb内、低于某个dVo/dt,等等。为了这一描述,我们在在这里假定我们已经在不工作区Vdb的范围内,并且已经使用VSPL,正如设计者所定义的。
有四种设计策略可被VSPL方法采用:
1.在一个实施例中,接受任何在不工作区内稳定的Vo值(并且因此不对Tp和Ts进行改变)。也就是说,输出Vo不必精确地等于Vtar。在另一个实施例中,不允许偏离目标(Vtar)的但在不工作区内的稳定性持续超过某个时间界限。
2.如果输出Vo在正确的方向移动,那么不对Tp和Ts进行改变。
3.对Tp和Ts的校正取决于Vo,并且可能取决于所测量的Vo值是否大于、等于或小于先前测量的Vo值,然而该校正不另外取决于Vo的变化率(dVo/dt)。
4.充分地处理振铃以确保单调性。
上面的策略体现在图6的流程图中。这个流程图示出,在工作周期T(n)期间由微处理器112M执行操作以计算下一个工作周期的Tp和Ts,若没有周期跳步,则下一个工作周期为周期T(n+1),若周期跳步有效,则下一个工作周期为某个随后的周期。如下所述,由控制器处理的值T、Tp、Ts、Vo以及其它值以数字形式存储于控制器的存储器(未显示)。在步骤600,我们检验查看Vo是否等于先前所存储的被称为“VoSave”的Vo值(VoSave可被存储在控制器112的存储器内,该存储器未显示)。如果Vo=VoSave,那么我们退出(保持Tp和Ts不变)。如果Vo不等于VoSave,那么我们在步骤602检验以确定Vo是否大于Vtar。如果Vo大于Vtar,我们转到步骤604,并比较Vo和VoSave。这将指示Vo是移向Vtar还是远离Vtar。如果Vo移向Vtar(在步骤604,Vo<VoSave),那么不采取行动,除了将Vo的当前值更新为VoSave(步骤614),并且退出循环。如果Vo远离Vtar移动(在步骤604,Vo>VoSave),那么我们移到步骤606来分别确定Tp和Ts所需要的调整dTp和dTs。这些调整能够以不同的方法被确定,下面将结合等式(EQ7)来讨论一个实施例。对于该实施例,dTp和dTs分别被计算为TpINC和TsINC的倍数,且TpINC和TsINC的值可在步骤606被计算,dTp和dTs的值可稍后被确定。如果在步骤602我们发现Vo不大于Vtar,那么我们在步骤603检验查看Vo是否小于Vtar。若否,那么我们从步骤602得知Vo一定等于Vtar,因此不需要改变Tp和Ts。我们在步骤619更新VoSave并且退出。如果步骤603Vo小于Vtar,则我们转到步骤621,并检验Vo是否小于VoSave。若否,那么Vo在正确的方向移动,且无需调整,因此再次在步骤619更新VoSave并且退出。然而,如果Vo小于VoSave,那么将需要增加Tp。在增加Tp之前,我们注意查看Tp是否需要被预处理以避免极限环问题。首先,如果VoSave小于Vtar (步骤618),则我们没有接近Vtar,因此不需要预处理;在步骤626,将Vo保存为VoSave,并且转到步骤606。如果在步骤618,VoSave大于或等于Vtar,并且我们知道当前的Vo小于Vtar,那么我们非常接近Vtar。通过在步骤622或624从Tp中减去一个单位(一个单位相当于最小时间分辨率TimeRes=T/TimeSteps,其中TimeSteps为在时段T中数字单位的个数),我们对Tp的增益减少一个单位。这种增益上的不对称(与对Vo大于Vtar的增益比较)消除了极限环问题,并且还促使系统达到平衡状态。对于CCM和DCM,预处理是不同的。如果在CCM(步骤620)中,则我们对Tp减少一个单位,及对Ts增加一个单位(步骤622)。如果我们接近CCM,可执行相同的预处理。例如,“接近CCM”的情况可被定义为Tp+Ts在总周期T的某个固定值内的情况。例如,见下面描述的等式[EQ5]。如果不在CCM中或不接近CCM,我们则对Tp和Ts都减少一个单位(步骤624)。在这两种情况下,我们都将Vo保存为VoSave(步骤626),并且现在准备找到对当Vo大于Vtar时和当Vo小于Vtar时的两种情况的Tp和Ts的校正TpINC和TsINC。
在步骤606,我们计算与误差的大小(即Vo-Vtar)成比例的Tp和Ts的调整值TpINC和TsINC。例如见下面的等式[EQ4]。在步骤608,我们检验查看是否周期跳步有效。若否,在步骤611,我们检验查看我们是否在CCM中或接近CCM。这个计算可利用等式[EQ5]来进行,Tp和Ts值可能在步骤622、624被修改。如果我们不在CCM中或不接近CCM,则我们在DCM中,因此移到步骤610。如果在CCM中,那么我们在步骤613确定新的Tp值为Tp=Tp+dTp。利用步骤604的TpINC值,下面将结合等式[EQ6]来描述示例性计算。通过填充时段T,我们也计算新的Ts(Ts=T-Tp,见等式[EQ6])。这完成了对于Vo值大于和小于Vtar的对CCM情况的下一个Tp和Ts的计算。如果在步骤608我们确定周期跳步有效,或在步骤611我们确定我们不在CCM中或不接近CCM,因此在DCM中,那么我们移到步骤610以计算DCM的Tp和Ts(根据下面描述的等式[EQ7])。在一些实施例中,无论在CCM还是DCM中(根据步骤613或610),为了更好的效率,我们转到步骤615以进一步调整Tp和Ts值(如下面结合图16-17所描述的)。在发出Ts和Tp信号之前,我们在步骤630 检验是否为如根据新的Tp和Ts值所确定(即Tp+Ts>T)的CCM。若在CCM中,那么在步骤632我们设置临界导电状态的Tp和Ts。Tp被设置为如下面的等式[EQ1],Ts被设置为T-Tp。最后,我们转到步骤634,并且将Tp和Ts值传递到处理器112M中的REG模块以便在下一个工作周期事件时使用。附录1为实现一个实施例的C语言源码的示例。
在一些实施例中,不使用在步骤603的检验,这意味着Vo=Vtar的情况按Vo<Vtar处理。在一些其它实施例中,当已经完成对Tp的调整(在步骤606)时,Vo只被存储为VoSave,删除了步骤614和步骤619。附录2为实现这样一个实施例的C语言源码的示例。
在一个实施例中,监控Vo以确保在不工作区内的操作。在DCM中,在具有工作周期事件的周期中只进行校正,因此当跳步计数变得较大时,VSPL的有效增益变得较小(有效增益为dTp/T1,其中T1为两个连续的工作周期事件的起始点之间的时间,即T1包括一个工作周期事件和随后的跳步周期)。VSPL不知道时间,仅仅知道工作周期事件。在CCM中,如果使用VSPL,那么它没有一个准确的电流值,但是试图利用非常低的增益来不断地控制Vo回到Vtar。
一旦进入,VSPL就能将系统带入CCM。在这种情况下,VSPL算法继续运行,但线圈118的电流根本不回到零。虽然在CCM期间我们也可以使用不同的控制方法,但是只要Vo保持在Vdb内,我们就可以选择继续使用VSPL。
为了确定VSPL的初始Tp、Ts和VoSave值,首先得到临界导电点的Tp:
(我们的变量名称不区分大小写:Vtar=VTAR,VIN=Vin,TP=Tp等等。)按大约85%的比例来估算Tp:
现在利用 来计算Ts。
初始的周期跳步计数为0,因此我们初始化CS=1,其中CS为存储比跳步计数大1的值的存储单元。
为了最终确定VSPL的初始条件,我们确定最小dTp和dTs增量为TpVSPLGain=VSPLGain和
dTp和dTs的值分别为TpVSPLGain和TsVSPLGain的倍数,即dTp=TpINC*TpVSPLGain和dTs=TsINC*TsVSPLGain(在步骤610计算)。
如下所述确定TpVSPLGain=VSPLGain。
现在我们初始化VOSave=VTAR。
TpVSPLGain由设计者确定以确保在DCM中的线圈电流振铃问题被克服。在确定TpVSPLGain的过程中,要考虑两个问题:(a)考虑到可能的振铃而确保单调性的最小调整步长,以及(b)最大增益,超过其系统可能不稳定。
在其它实施例中,使用固定增益dTp。这是有效的,因为当使用VSPL方法时,假定Vo接近于Vtar。
图10示出振铃。脉冲1000的线圈电流被看到在振铃。振铃的能量(测量为电荷)由区域1004表示。在轴线Icoil=0下面的区域表示从负载126(图1)中去除,即,从脉冲1000所提供的能量中减去的能量。脉冲1002表示下一个工作周期的电流脉冲,在这里被示出叠加在脉冲1000的上方。两条曲线之间的差别是由于在步骤610计算的调整;在这个例子中Tp调整为正。脉冲1002和脉冲1000之间的能量差为区域1006。注意,控制器112既不知在时间上任意一点处振铃的相位也不知其大小。因此所调整的脉冲1002的起始点与振铃不同步。如果进行调整以便区域1006小于区域1004,以及如果所调整的脉冲1002在被示为点1008的时刻开始,那么脉冲1002中(因此,在电压Vo中)作为结果的能量变化将为负(电荷的变 化等于区域1006减去区域1004),尽管控制器系统期望增加。在一些实施例中,设计者将TpVSPLGain设置为确保最小调整dTp保证在期望的方向产生变化的值。这确保了对于任意给定的调整,Vo响应总是单调的。
图13为工作周期事件的理想化表示。标号1502和1504表示在当前工作周期中流过线圈的电流,其中功率时间和同步时间分别为Tp和Ts。标号1506和1508表示对各自FET的驱动时间Tp、Ts应用调整dTp1510和dTs1512之后的电流。脉冲1506、1508被示出叠加在当前脉冲1502、1504的上方。第二(所调整)脉冲的总时间为(Tp+Ts+dTp+dTs)。相对于第一脉冲,第二脉冲的增益为dTp。当前脉冲的峰值电流Icoil被称为“Ipk”。如图13所示,两个脉冲之间的电荷差等于它们各自曲线下方的区域差,忽略任何来自振铃的影响。
两个脉冲之间的电荷差为区域Q1 1602(图1 4中Ipk上方的区域)加上区域Q2 1604,或
dQ=Q1+Q2
我们知道:
和
因此
类似地,
并且
通过代入,将[EQ2]重写为:
或者
振铃的最大能量为储存于FETs的Coss电容内的能量,因此QRING=2CVo。
其中C为Vo处的有效(电荷平均)Css。因此确保单调性的最小时间增益(dTp)由下式得到:
或者
假定dTp<<2Tp,我们得到
或者
最小时间增益dTp应当考虑到最差情况的条件,其为最大Vo,最小Vin和最小Tp。同样地,考虑到制造公差、部件老化、板上寄生现象等等,设计者应当预先考虑L、C的最大值。
增益dTp必须不超过不稳定操作可能产生的值。标准的稳定性分析技术,例如波特图(Bode plots)可用于此目的。最差情况的条件为具有小L、C值,低输出电压Vo和高负载电流,对该条件应确定最大增益。因此 TpVSPLGain由设计者确定,确保它大于[EQ3]的右边式,并且还确保TpVSPLGain*TpINC小于由稳定性分析确定的最大值。TpINC具有由下面等式[EQ4],即,
|TpINC|≤max{Vdbh-Vtar,Vtar-Vdbl}/VoltageRes确定的最大值。
TpVSPLGain的最大值可以通过将从稳定性分析得到的最大增益除以TpINC的最大值而获得。
Vin和Vo之间的关系为
因此,Vo可达到的最小变化为
其中TpCounts和TsCounts为以计数,即,以单位TimeRes=T/TimeSteps表示的时间Tp和Ts。对于最低功率操作,其中可找到解法使得Vo处于平衡状态,ΔVo必须小于或等于一个ADC量(定义为ADC 112A的数字输出的一个最不重要的位或LSB的电压值)。
一旦初始条件实现并且VSPL运行,我们就在每当有工作周期事件时开始应用VSPL。如果Vo正在变化,那么有四种可能性:Vo大于/小于Vtar,以及对于这些情况的每一个Vo移向Vtar/远离Vtar。在这四种情况中,在Vo移向Vtar的两种情况中,不进行调整。所以现在我们减少到两种情形:大于和小于Vtar,都远离Vtar。
对于Vo远离Vtar的两种情况,我们现在在如下的步骤610得到脉冲调整。首先,我们计算步长为
TPINC=TSINC=((VO-VTAR)/VoltageRes) [EQ4]
VoltageRes为测量Vo的装置如ADC 112A的分辨率。这在早些时候被 定义为“量”。
如果没有周期跳步(步骤608),那么我们检验是否在CCM中或接近CCM(步骤611)。对此的检验为
(TP+TS+gb1+gb2)>=(T-T/TimeSteps) [EQ5]其中:
gb1为FET 114关闭和FET 116接通之间的传播延迟,gb2为相反情况的传播延迟;以及
TimeSteps为在周期T中的数字时间单位的个数;因此T/TimeSteps为当DPC 112D改变Tp或Ts一个数字单位时可得到的最小时间增量。
如果在CCM中或接近CCM,那么在步骤613计算脉宽为
TP=TP-(TPInc*vspl_ecm_gain*(T/TimeSteps))和 [EQ6]
TS=T-TP。
此处的“vspl_ccm_gain”为当在CCM中时VSPL使用的增益步长(以TimeRes数量的计数),而不是VpVSPLGain。vspl_ccm_gain*T/TimeSteps的值为最小增益。在一些实施例中,它比在DCM期间被使用的VpVSPLGain小得多。建议大约(1/10)*VpVSPLGain的增益,即
vspl_ccm_gain*T/TimeSteps=(1/10)*VpVSPLGain。
对于DCM而不是接近CCM的情况(即,等式[EQ5]不成立),我们得到
TP=TP-TPInc*TPVSPLGain 和 [EQ7]
TS=TS-TSInc*TSVSPLGain
为了说明实现上面方法的策略,利用来自图7B的数据和对图6流程图的参考,考虑图7A所示的实例。注意,图中的水平轴表示工作周期事件,不是时间的线性表示,因为从一个事件到另一个事件,周期跳步计数可能不同。因此,图7B中“速度”为每工作周期事件,而不是每时间单位Vo的变化率。这种方法的一个结果是当跳步计数增加时系统的有效增益减少。图7B中“起始量”表示相对于Vtar的ADC可分辨的Vo最小增 量单位的电压(1的量相应于上述电压VoltageRes)。
在数据点700处(工作周期事件0),以每工作周期事件2个量的速率减少的Vo比Vtar高2个量。为了说明,假定在此点处VoSave=Vo。因此步骤600指示我们退出,不采取进一步的行动。在下一个工作周期事件(#1),数据点702,Vo处于Vtar。因此我们经过步骤600、602、603、619而退出。在下一个工作周期事件,数据点704,Vo与Vtar相差-2的量。注意,本算法并没有考虑速度的大小,只考虑速度的符号和偏移Vo-Vtar的大小。现在,步骤次序为600、602、603、621、618、620、624、626、606。如上所述,假定我们不在CCM中或不接近CCM,在步骤624Tp和Ts被减小一个单位,然后在步骤626Vo被保存。在步骤606我们根据等式[EQ4]计算2个量的校正,当在步骤634运用新的Tp和Ts值时,这2个量将完全破坏Vo速度。
正如图7B的表格中所看到的,不需要进一步的校正,如图7A的数据点704之后的平直线所反映的。因此,每次迭代将只执行步骤600,然后退出。
另一个例子根据图8B的数据表在图8A中示出。在这个例子中,在点800处VoSave再次等于Vo,因此步骤600指示没有校正。在下一个工作周期事件(#1,点802),Vo不等于VoSave,但能被看到移向Vtar,所以流程600、602、604、614以及退出指示没有校正。在工作周期事件#2(点804)Vo此刻小于Vtar和VoSave。步骤600、602、603、621、618、620、624(假定不在CCM中或不接近CCM)、626引导我们在步骤606计算TpINC和TsINC。尽管Vo的速度为-2个量,但算法并不知道这些。因为测量出Vo比Vtar小1个量,所以根据等式[EQ4]在步骤606计算校正TpINC=+1。步骤634输出校正的Tp和Ts以便DPC 112D使用。Vo的速度现在为每工作周期事件-1个量。
在下一个工作周期事件806,Vo以-1的速度低于Vtar 2个量。图6的流程通过TpINC=+2的量来校正,导致Vo以每工作周期事件1个量的速率上升。在下两个点处(808和810),Vo移向Vtar,因此不进行校正。在工作周期事件#6(点812),Vo高于Vtar和高于VoSave,因此程序流程 为600、602、604和606,其中计算TpINC=-1的量的校正。现在Vo将稳定(速度=0)在高于Vtar 1个量处。
显然,Vo速度通常不为一个确切整数的量。更确切地,它取决于脉宽Tp、Ts,以及DPC 112D和ADC 112A或其它用于测量电压的装置的分辨率。Vo可能在Vtar附近波动。但是,当电压Vo改变和有效脉宽(Tp/T1,其中T1包括工作周期事件和随后的跳步周期,如下所述)改变时,脉冲和振铃之间的相位关系也变化。Vo可能最终为整数个量,并且VSPL将应用一个导致平衡的校正因子TpINC。相对于控制器112所消耗的功率,这是最低功率状况,因为在每个工作周期期间的唯一的活动为ADC转换和步骤600。
在本发明的一个实施例中,使用较大的不工作区来扩展可以使用VSPL的操作范围。然而,设计者可能发现当远离目标(Vtar)一段延长的时段时,不希望允许Vo在不工作区内稳定。通过添加计数器112CNT(图1)或一些其它超时装置,可消除这个局部稳定点,控制器112可通过改变工作周期以使Vo在Vtar的方向移动来响应计数器112CNT或一些其它超时装置。计数器112CNT可为处理器112可存取的存储单元。超时可被实现为软件循环、事件计数器(对时钟滴嗒声,或图6的循环被执行的次数,或一些其它事件计数)、触发一个触发信号的RC时间常数电路,外部监视器(外部计时器或一些其它类型)等等。一种响应技术的例子在图9中被示为流程图,其结果是当Vo在Vtar上方稳定超过某个时间界限时,将Vo从其局部稳定点朝着Vtar移动。本技术领域的技术人员应理解,当Vo在Vtar下方稳定时,也可运用相同的技术。
参考图9,我们首先考察步骤900以查看Vo是否没有移动,即,是否Vo=VoSave(dV=0)。如果Vo=VoSave,则设置计数器112CNT为0(步骤905)并退出(步骤918)。计数器112CNT在控制器112初始化期间也被初始化为0。如果在步骤900Vo≠VoSave,那么步骤901检验查看Vo是否大于Vtar。若否,则设置计数器112CNT为0(步骤905),并退出(步骤918)。若Vo大于Vtar,那么在步骤902,我们检验计数器112CNT以查看其是否超出所期望的最大值。如果在步骤902计数器112CNT不大于最大 值,那么我们在步骤904递增计数器(增加1)并退出(步骤918)。如果计数器大于所期望的最大值,那么我们在步骤906将增益dTp、dTs设置为一些相应的值VSPLTpGain、VSPLTsGain:
dTp=VSPLTpGain
dTs=VSPLTsGain
这些值可为在设计时就确定的固定值,并且用来使Vo移向Vtar,消除局部稳定性。在一些实施例中,VSPLTpGain、VSPLTsGain为上面描述的相应值TpVSPLGain、TsVSPLGain的整数倍。在步骤908,我们通过检验周期跳步计数是否为0,即CS=1(CS比跳步计数大1)来检验我们接近于CCM条件的可能性。如果跳步计数为0,我们采取步骤910以降低dTp、dTs。在一个实施例中,dTp、dTs被右移一位,其为被2除的整数,或右移一些可为在设计时确定的预定数字的其它位数。无论跳步计数是否为0,控制都从步骤908、910传递至步骤912。在步骤912,我们检查以确保步骤910没有将dTp减少到没有校正被进行的程度。也就是说,如果我们首先确定应当进行改变,那么我们通过在步骤914将增益TpINC重置为某个最小值来确保实际上一些事情确实发生变化。这个值被示为1,但可为TpVSPLGain或一些其它值。然后,在步骤916通过分别从Tp和Ts中减去增益值dTp、dTs来进行对Tp和Ts的调整。同样在步骤916,计数器112CNT被重置为0,然后我们退出(步骤918)。用于消除局部稳定性的C语言源码的例子在附录3中被提供。
本发明不限于特定的操作次序。图6的方法可在每个时段T或每个工作周期中先于或后于图9的方法执行,以确定下一个时段或下一个工作周期的Tp和Ts。这些方法可以同时执行(例如,通过不同的微处理器电路)。值得注意的是,如果Vo=VoSave,那么图6的方法将保持Tp和Ts不变,且根据图9方法的任何变化因此不与图6的方法的变化矛盾。反之也是正确的(如果Vo≠VoSave)。可合并这两种方法。步骤900与步骤600完全相同。如果在步骤600Vo=VoSave,那么控制可传递到步骤901。如果Vo≠VoSave,那么控制可传递到步骤602。
一些实施例使用图6的方法而不是图9的方法,反之亦然。
接着,我们确定正确的周期跳步计数。我们想避免非常窄的Tp和Ts,这通过使工作周期脉冲逐渐变宽但更远地分离来实现。这个策略被设计成将线圈电流脉冲维持在对给定驱动电路(其包括晶体管114、116和118)有效的范围内,而不管负载。这个效率被测量为由电源98提供的每单位电荷在终端122处提供的电荷的百分数。图16示出示例性驱动电路的效率,其如线条1104所绘,为Tp参数(以微秒显示)的函数。如果负载电流的范围非常宽,那么意味着Tp和Ts将从非常窄变化到非常宽,在那些情况下效率将远离中间值而受到损害。本发明的一些实施例通过调整周期跳步计数和Tp以将Tp脉冲时间保持在狭窄的范围内,来在在负载的整个很宽的范围内最优化效率。设计者确定被称为“TLOW”1100的最小Tp和被称为“THIGH”1102的最大Tp。将Tp值保持在这个范围内使驱动电路接近于其最大效率条件。因此调整周期跳步计数以使传送到负载的能量是正确的。
观察图17,本方法以包括步骤1400、1402和1404的回路开始,该回路比较Tp和THIGH 1102,且如果Tp大于THIGH,那么用2的平方根(
)来除Tp和Ts,同时将跳步计数减半,直到Tp小于THIGH 1102。(在一些实施例中,Tp和Ts乘以0.75来作为除以2的平方根的近似。将跳步计数减半可用右移1位来代替。本发明不限于特定的计算。)这个回路根据先前计算的脉宽来降低脉宽,同时提供大约相同的能量。
如果Tp小于THIGH 1102,我们离开步骤1402而转到步骤1406来确定Tp是否大于TLOW 1100。若否,则Tp和Ts乘以
(即,乘以大约1.5),并且跳步计数被加倍,再次保持总电荷大致恒定。我们从步骤1408返回到1400以与THIGH 1102比较而检验Tp。不退出这个流程直到Tp在TLOW 1100和THIGH 1102之间,在步骤1406以“Yes”表示。为了确保没有无限循环,我们可选择TLOW和THIGH以便两者都为正数,并且THIGH<TLOW*
(或者THIGH<TLOW*f,其中f为在步骤1404的除数和在步骤1408的乘数)。在一些实施例中,执行检验以确保SkipCnt不为0。如果SkipCnt=0,则不执行步骤1402-1408。在一些实施例中,如果SkipCnt=0并且Tp<TLOW,则通过一些其它加倍的方法,例如设置SkipCnt 为1或一些其它的正值来增加SkipCnt。
在一个实施例中,TLOW被定义为0.7*T,THIGH被定义为0.95*T。设计者可选择其它值。
这个方法的结果是周期频率,该周期频率为相应于CS=1(跳步计数=0)的频率的最快循环时间T的次谐波。加倍跳步计数和估算Tp及Ts的过程推测出提供稳定数量的能量的解决方案。我们寻找将脉宽保持在使驱动电路的效率最优化的区域内的解决方案。在一些实施例中,这个策略是首先计算所需要的能量(即,来自VSPL算法的Tp),接着改变跳步计数直到重新计算出的脉宽在TLOW和THIGH之间,这又使效率保持高,而不管负载,如图16所示。
设计者可能希望限制最大跳步计数。在负载需要超过设计者所允许的最大值的跳步计数的情况下,Tp将小于TLOW。在一些这样的实施例中,当系统要求超过最大值的跳步计数时,系统被置于PFM中。因为我们使用已知频率的次谐波,所以我们准确地知道频率族,并且因此能设置最大跳步计数以保证我们根本不降到音频范围、找到音频中的IF频率,或产生其它类似的顾虑。
如上所述,本发明不限于特定的计算。例如,不在步骤1402检验Tp>THIGH,我们可以检验Tp≥THIGH。在一些实施例中,在步骤1406不检验Tp>TLOW,我们可以检验Tp≥TLOW。
在一些实施例中,在步骤1402和/或1406,微处理器112M检验Tp的某个递增函数大于THIGH或TLOW,或者大于或等于THIGH或TLOW的情况。这个Tp的递增函数可为Tp+Ts,在这种情况下,步骤1402和1406如下:
步骤1402:Tp+Ts>THIGH(或Tp+Ts≥THIGH);
步骤1406:Tp+Ts>TLOW(或Tp+Ts≥TLOW)。
在一些实施例中,如果Tp+Ts变得大于T,那么转换器移向CCM,或者对临界导电状态(图4)Tp和Ts被减少。因此,控制器112确保Tp+Ts在一些值TLOW和THIGH之间,检验或没有检验Tp是否在某个期望的 范围内。
图15是一个实施例的模拟例子,其中跳步计数响应于负载的变化而变化,因此将每单位时间传送的平均功率保持在期望的范围内。图15A表示随时间过去(以毫秒为单位)的输出电压Vo(以伏特为单位)。图15B表示注入驱动电路的电流脉冲(以安倍为单位),因此为线圈电流。在区域1中,周期跳步计数(“CS”,与在图17中的SkipCnt相同)为7,脉冲峰值大约为700mA。当Vo接近2.5伏特的Vtar时,CS减少为3,对区域2Vo稳定在Vtar附近。周密的检查指示,Vo在Vtar上下波动很小的量。在2.0秒处,负载电流降低,且区域3中的Vo增大到大约2.55伏特(高于Vtar)。CS增大到7,减少了注入负载的能量,导致Vo返回到Vtar。图15C是显示在区域1中跳步计数如何随着Tp变化的较大的比例图。
普通技术人员应当清楚,所描述的技术对任何驱动电路都是有益的,尤其是如果负载电流在大范围内变化。
本发明不限于被
乘或除Tp或Ts,以及加倍或减半跳步计数。例如,Tp和Ts可被2*
乘或除,以增大或减少流入线圈118的电荷4倍,并且跳步计数也可以被4乘或除。通过根据负载情况来改变Tp和/或Ts以及调整跳步计数,也可用其它计算方案提供有效操作。附录1和4举例说明了调整跳步计数来获得高效(图16)的不同实施例的C代码。本发明不限于这些实施例。
本发明适用于任何开关功率转换器布局,包括不同步的升压或多个晶体管降压/升压电源,其中的例子在图11和图12中示出。对于本技术领域的技术人员来说,这些标准的布局是公知的;不需要进一步的解释。
在附录中的一些源码使用整型数而不是浮点数。例如,时间以“计数”而不是秒表示。一个计数指DPC所使用的时段T的最小分段。一个计数还可指被ADC的一个LSB表示的电压。
以时间为单位的Tp被转换为每 的计数,其中 TimeRes=T/TimeSteps。
在一个实施例中TimeSteps=210。
电压被转换为每VoCounts=Vo/VoltageRes的计数。
本发明不限于上述实施例。本发明包括计算机可读存储介质,其包括有实现本发明方法的微处理器112M的计算机指令。本发明包括计算机数据信号,其以载波体现并且包括用于实现本发明方法的计算机指令。控制器112M的一些或所有功能可为硬连线的而不是可软件编程的。本发明不限于合并上面所描述的所有技术。一些实施例使用的技术少于上面所描述的所有技术。同样,上面所描述的技术的一种或多种可与其它技术结合。本发明不限于任何特定的电路、电压值和其它参数。本发明由所附的权利要求来限定。
附录1VSPL程序C模型范例
//VSPL算法
if(Vo!=VoSave) //如果Vo变化
{
if(Vo>Vtar) //且Vo大于其目标
{
if((Vo-VoSave)>0) //以及Vo上升
{
flag_inc=1; //那么调整Tp和Ts
}
}
if(Vo<Vtar) //如果Vo小于其目标
{
if((Vo-VoSave)<0) //且Vo下降
{
flag_inc=1; //那么调整Tp和Ts
//首先克服Coss振铃
if(VoSave>=Vtar)
{
if((pTp+pTs+gb1+gb2)>=(T-T/TimeSteps))
{//如果我们在CCM中或接近CCM
pTp-=T/TimeSteps; //降低Tp增益
pTs+=T/TimeSteps;
}
else
{
pTp-=T/TimeSteps;//降低Tp增益
pTs-=T/TimeSteps;
}
}
}
}
VoSave=Vo;
}
//此处改变VSPL PWM
if(flag_inc)
{
real_T TpINC=(Vo-Vtar)/VoltageRes;
real_T TsINC=(Vo-Vtar)/VoltageRes;
if((CS==1)&&(PFM==0)) //如果没有周期跳步
{
if((pTp+pTs+gb 1+gb2)>=(T-T/TimeSteps))
{
//如果在CCM中或接近CCM模式;减少增益
real_T vspl_ccm_gain=4;
if(vspl_rate3) vspl_ccm_gain=1;
else if(vspl_rate2) vspl_ccm_gain=2;
else if(vspl_rate1) vspl_ccn_gain=2;
pTp-=TpInc*vspl_ccn_gain*T/TimeSteps;
pTs=T-pTp;
vspl_rate1=1;
vspl_rate2=1;
vspl_rate3=1;
}
else
{
//在DCM中;使用高增益
pTp-=TpInc*pTpVSPLGain;
pTs-=TsInc*pTsVSPLGain;
}
}
else
{
//按照定义周期跳步为DCM
pTp-=TpInc*pTpVSPLGain;
pTs-=TsInc*pTsVSPLGain;
}
//现在调整脉宽
if((pTp+pTs)>Thigh)
{
if(CS>1)
{
pTp=pTp/sqrt(2.0);
pTs=pTs/sqrt(2.0);
CS=CS/2;
}
else if(((pTp+pTs)<Tlow)&&(PFM==0))
{
pTp=pTp*sqrt(2.0);
pTs=pTs*sqrt(2.0);
CS=CS*2;
if(CS>VSPLMaxCS)
{
pTp=0;
pTs=0;
PFM=1;
}
}
if((CS==1)&&(PFM==0))//如果没有周期跳步
{
if((TpInc<0)&&((pTp+pTs)>T))//在CCM中?
{
//试图从DCM转换为CCM
//将PWM固定至临界导电
pTp=T*Vtar/Vin;
pTs=T-pTp;
}
}
//发出所选择的工作周期
pTp=pTp-Tcorr;//校正任何定时问题
pTs=pTs-(gb1+gb2);//确保不重叠
Tdc=T-pTp-pTs-(gb1+gb2);//不工作时间?
if(Tdc<0)Tdc=0;//确保非负
}
else
{
if(vspl_rate3) vspl_rate3=0;
else if(vspl_rate2) vspl_rate2=0;
else if(vspl_rate1) vspl_rate1=0;
}
//退出
附录2VSPL程序C模型范例
touched=0;
if(VoCounts!=VSPLVoSave) //如果Vo变化
{
//如果输出电压高于其目标
if(VoCounts>VtarCounts)
{
//如果输出电压的dv/dt为正
//那么调整脉冲
if(VoCounts>VSPLVoSave)
{
TpInc=VSPLTpMaxGainCounts*abs(VoCounts-VtarCounts);
TsInc=VSPLTsMaxGainCounts*abs(VoCounts-VtarCounts);
if(TpInc>VSPLTpMaxGainCounts)
{
TpInc=VSPLTpMaxGainCounts;
TsInc=VSPLTsMaxGainCounts;
}
if(VSPLCS==1)
{
TpInc=TpInc>>VSPLCCMGainDiv;
TsInc=TsInc>>VSPLCCMGainDiv;
}
VSPLpTpCounts-=TpInc;
VSPLpTsCounts-=TsInc;
touched=1;
}
}
//如果输出电压小于其目标
else if(VoCounts<VtarCounts)
{
//如果输出电压的dv/dt为负
//那么调整脉冲
if(VoCounts<VSPLVoSave)
{
TpInc=VSPLTpMaxGainCounts*abs(VoCounts-VtarCounts);
TsInc=VSPLTsMaxGainCounts*abs(VoCounts-VtarCounts);
if(TpInc>VSPLTpMaxGainCounts)
{
TpInc=VSPLTpMaxGainCounts;
TsInc=VSPLTsMaxGainCounts;
}
if(VSPLCS==1)
{
TpInc=TpInc>>VSPLCCMGainDiv;
TsInc=TsInc>>VSPLCCMGainDiv;
}
VSPLpTpCounts+=TpInc;
VSPLpTsCounts+=TsInc;
//通过克服Coss振铃来调整
if(VSPLVoSave>=VtarCounts)
{
VSPLpTpCounts-=1;
VSPLpTsCounts-=1;
}
touched=1;
}
}
}
if(touched!=0)VSPLVoSave=VoCounts;
附录3局部稳定性消除的C模型
//消除 Vtar上方的局部平衡点
if(touched==0)
if(1VoutCounts==VbutCounts)
if(VoutCounts>VtarCounts)
{
if(VSPLcounter>2)
{
TpInc=VSPLTpGainCounts;
TsInc=VSPLTpGainCounts;
if(VSPLCS==1)
{
TpInc>>=VSPLCCMGainDiv;
TsInc>>=VSPLCCMGainDiv;
}
if(TpInc==0)
{
TpInc=1;
TsInc=1;
}
VSPLpTpCounts-=TpInc;
VSPLpTsCounts-=TsInc;
touched=1;
}
else
{
VSPLcounter++;
}
}
if(touched!=0)VSPLVoutSave=VoutCounts;
if(touched!=0)VSPLcounter=0;
附录4适应性周期跳步率的C模型
//修改周期跳步率
if(touched)
{
if(VSPLpTpCounts>VSPLTpCCMCounts)
{
if(VSPLCS>VSPLMinCS)
{
VSPLpTpCounts=VSPLpTpCounts-VSPLpTpCounts/4;
VSPLpTsCounts=VSPLpTsCounts-VSPLpTsCounts/4;
VSPLCS =VSPLCS/2;
}
else
{
VSPLpTpCounts=VSPLTpCCMCounts;
VSPLpTsCounts=VSPLTsCCMCounts;
}
}
else if(VSPLpTpCounts<(VSPLpTpCounts-VSPLpTpCounts/4))
{
if(VSPLCS<VSPLMaxCS)
{
VSPLpTpCounts=VSPLpTpCounts+VSPLpTpCounts/2;
VSPLpTsCounts=VSPLpTsCounts+VSPLpTsCounts/2;
VSPLCS =VSPLCS*2;
}
}
}