晃涩 发表于 2018-4-18 17:34:42

数字电源控制器应该怎样去设计?

理解电源控制器
理解开关电源的非线性性质
■开关电源是一个反馈环路,但这反馈环路有两点非常独特的性质:
▶环路中的转换器为一个非线性模块,即使使用了开关周期评价的方法,将 开关切换等价成了线性平均,其依然不是一个线性模块;
▷这个问题导致了开关电源的2个特点:一是非线性,二是存在开关噪声。
▷后面会详细的讨论这2个特点。
▶系统会饱和,严格来说,这并不是开关电源独有的问题,但是开关电源的 饱和会有灾难性的后果,因此必须仔细的避开饱和区域。
▷比如电感电流过大后,会导致磁芯饱和,其结果是灾难性的,为了避开这个饱和 区域,必须对电感电流进行检测,一旦进入危险区,立即复位转换器。
深入理解开关电源的设计
■一提到环路,很多人会条件反射的运用反馈,自控等理论来分析和设 计,但对开关电源来说不行,因为开关电源中的各个模块都有其非线 性的一面。
▶下图示出了转换器可能会位于的3个区域,为了方便,将非饱和区直接命名 为非线性区。
▷转换器如果处于饱和区,转换器会损坏,因此,必须禁止进入此区域,一个合理 的做法是在非线性区内临近饱和区的区域设置警告区域,一旦进入,立即重启转 换器。
▷非线性区域内的线性区是通过小信号等效得到的,需要控制器提供合理的偏置, 并且限制变量变化的幅度,才能使其能等效成线性区。
换一个角度理解开关电源
■当开关电源处于稳态时,此时如果环路的变量的变化符合小信号假设, 那么可以认为系统处于线性区,此时可以利用线性系统的方法来设计。
■当开关电源上电时,或者虽然在稳态,但环路变量的变化很大,不符 合小信号假设,那么此时系统处于非线性区,此时不能直接利用线性 系统的方法来设计。
▶非线性系统的设计方法不像线性系统那么成熟,流派很多,也不容易理解, 在本文档中将针对电源系统进行讨论。
■无论如何,系统都不能进入饱和区,因此,饱和区的设计实际上就是 检测转换器中的关键变量,当变量值超阈值时,自动复位转换器。
控制器设计基本流程
■控制器设计是整个开关电源设计的核心,下图示出了控制器设计的3个 任务:饱和区域处理,大信号设计和小信号设计。

控制器的结构
■根据前面的分析,可知控制器实际上包含3部分:
▶DSP:当转换器处于线性区时,激活这部分工作;
▶Nonlinear Ctrl:当转换器处于非线性区时,激活这部分工作,DSP将不响应 环路误差,完全听从于NLC;
▶Guard:当转换器处于警告区时,激活这部分工作,完全接管DSP和PXM。

数字电源控制器的设计
■从前面的控制器结构可以看到,使用数字电路设计这一部分是非常方 便的。
▶数字电路的设计三要素:输入,输出,功能。
▶用前面的控制器结构模型,可以非常清晰的定义出这三要素。
■如果使用模拟电路,势必难以割裂这三个部分,控制器的设计将变成 一个非常依赖经验和技巧的任务。
数字电源控制器的设计
■目前找到的书籍和资料都只强调控制器在线性区工作的设计,而不强 调非线性区的设计。
■这个误区的原因可能在于以往的控制器都用模拟电路实现,而模拟电 路是很难实现丰富的非线性控制的。如今使用数字控制后,非线性区 控制可以做得很好。

控制器的线性区设计
环路建模工具
■环路建模工具就是matlab,通常的做法是建立M文件,然后在M文件中 输入各个模块的传递函数,利用matlab进行相乘(串联),连续转离 散,离散转离散等操作,得到高级环路模型。
▶高级环路模型是指将环路简化为几个基本模块后的结构,这些结构能被 matlab工具箱sisotool所支持。
▶下图为sisotool支持的所有结构:

DSP设计工具
■DSP参数确定可以使用matlab自带的sisotool工具,这个工具能够根据 要求得到传递函数。得到传递函数后,再将传递函数化为PID和LPF系 数。
■因为我们采用的是平台化的控制方法,因此可以将传递函数通过特定 的公式转成PID和LPF系数。
电压控制环路
■画出整个环路的模块,如下图:
▶其中K表示输出电压反馈时的缩放系数。
▶PWM和Convertor的本质可以理解为一个DA,或者将PWM视为DA,将 convertor视为输入模拟量(0-100%),输出模拟电压的一个装置。

电压控制环路离散模型
■为了使用sisotool,将电压控制环路画成如下的形式。
▶环路设计的工作就是使用Sisotool在已知G和H的情况下求C

采样频率和固有延
■要将模拟模块处理成离散模块,首先要确定的就是采样频率,在这个 环路里面,唯一能作为标准采样频率的就是开关管的切换频率fs。
▶PWM的周期也为Ts。
▶固定采样频率后,所有的延迟都只能是Ts的整数倍。
■此系统为LTI系统,可以将所有的延迟集中到一起,此时如果延迟不是 一个整Ts,必须人为加上延迟,凑够Ts的整数倍。
▶将延迟分离后,所有的模型都视为和其传递函数表达式是完全相同的:
▷DSP,输入数据,0延迟立即输出数据,输入X,X,立即得到Y。
▷忽略ADC的量化误差后,ADC变成一个理想采样开关+ZOH,这个ZOH制造了1/2 倍转换时间的延迟。
★注意ADC的转换延迟并不是等于转换时间,而是等于1/2转换时间。

PWM和转换器的延迟
■PWM和转换器合力完成如下工作:
▶在周期的起始,PWM接收占空比信号D,输出持续一个周期的PWM波形, 在这个周期的结束点,输出电压反映了上一个周期的电压+当前周期占空比 的影响。
■由此可见,如果在周期的末尾采样输出电压的话,PWM和转换器合起 来有1个周期的延迟。
▶有些资料上将PWM直接等效为一个ZOH,这样是存在问题的,因为ZOH只 有半个周期的延迟,这样处理的前提是要求ADC在Ts/2的位置采样,并假 设Ts/2处采样的值等于周期平均值。
▷这个问题的根源是没有考虑开关电源的特殊性,而是将开关电源的等效模型当成 真实模型来用了,认为PWM+转换器是一个输入模拟量d,输出稳定电压V的装置。
环路延迟的处理
■前面讨论过,转换器的输出电压在一个周期内是变换的,因此,ADC 在何时采样就很关键了,假设电压在一个周期内是逐渐稳定的,那么 理想的采样点是上一个占空比D刚刚结束,下一个占空比还未更新时。
■按照这个思路,环路延迟(包括PWM的ZOH’等)=2Ts
▶理想无延迟状况是采样V,产生D,决定V,现在是采样V, 决定V。


提高输出电压采样精度
■前面是假设输出电压在周期结束时最精确,因而在周期末尾进行采样, 这并不是最好的方式,最理想的方式是在整个周期都进行采样,然后 进行平均,得到整个周期的平均电压。
▶这个方法在理论上是可行的,但实际操作时会面临一个问题是ADC本身的 量化误差可能会超过单个周期内输出电压的波动,使得这种方法毫无意义。
■作为一种折中,需要根据转换器的拓扑,研究转换器在何时的输出电 压接近其周期平均电压。
忽略输出电压单周期纹波
■如果忽略输出电压单周期纹波,那么采样时刻的选取就变简单了,一 个合适的采样时刻是采样后,完成后续的所有工作,恰好更新下一周 期占空比
▶按照这种方式,环路延迟将减少到Ts,而不是2Ts。

离散化方法的选择
■由前面的分析可知,整个环路的延迟等于,2Ts的延迟,加上模块传递 函数自带的相位改变。
▶比如传递函数分母出现s或1-z-1,意味着相位要推迟。
■但是光考虑这些还不够,还要注意到,在将连续传递函数进行离散化 的时候,离散化这个过程可能会引入延迟。
▶如果选择加零阶保持器法,那么会引入半个周期的延迟;
▶如果选择双线性变换法,那么不会引入延迟,因此,在充分考虑了环路延 迟后,应该选择这种离散化方法,以免得到的离散传递函数不能表达真实 的情况。

考虑延迟后的环路模型
■下图示出了延迟为Ts时的环路模型:

环路延迟的的影响
■从之前的分析可以看到,如果环路有Ts的固有延迟,这Ts的固有延迟 在f=fs处制造了360度的相位延迟,环路稳定性将下降。
■因此,相位交点必须足够低,远离fs处,这样,这Ts的影响将降低, 按照前面的经验,100K的fs,将增益交点定在10K,相位交点也在10K 附近,离100K足够远,可以消除这个延迟的影响。
计算H的传递函数
■H的传递函数很简单:
▶Hk=K;
▶Hd=z-1;
▶H=Hk*Hd;

计算G的传递函数
■G的传递函数如下:
▶Gpwm=1/VM;
▶Gcov,Gaalpf;
▶G=Gpwm*Gcov*Gaalpf;
■将G转成连续传递函数:Gd=c2d(G, 1e-5,’tustin’)

C部分的传递函数
■C部分通常被称为补偿器,因为G和H已知,只能用C来调节环路性能。 C部分由一个PID和一个LPF串联而成,PID提供2个零点和一个极点, LPF提供2个极点和1个零点,两者串联后得到3零3极。
▶PID传递函数如下:

▶LPF传递函数如下:

▶注意LPF中存在一个-1处的零点,这个零点在z平面单位圆的最左边,属于 最高频的位置,对系统响应无影响,可以忽略。
LPF中的零点
■z域是离散抽象后得到的效果,要搞清楚-1处的零点的影响,需要联合 s域来考虑。
▶将s域传递函数转成z域有几种方法,不同的方法得到的零极点数量不一样。
▶将传递函数H=1/s转成z域传递函数:

▶由上可见,使用加zoh法,得到的传递函数其在原点有一个极点,和原s域 传递函数一样,使用双线性变换法后,在最高频有一个零点。
▷由此也可以看出,z+1这个零点完全是由于不同的离散化方法导致的。
PID和LPF系数的获取
■使用matlab可以得到C(PID+LPF)的传递函数,得到传递函数后,需要 得到PID和LPF的系数。
▶PID和LPF的系数有2种表示方式,一种方式就是得到3个零点和3个极点, 然后将这3个零点和极点分配到PID和LPF中去。
▶另一种方式就是将零极点转换为KP,KI,KD,A1,A2,A3的值,这是我 们最终需要的值,这些值可以直接写入到硬件寄存器中。

将零极点转为多项式系数
■联立2个式子,可以得出多项式系数的表达式:

PID加LPF v.s. III型补偿器
■PID加LPF这种3零3极的结构和III型补偿器是完全相同的,因此,可以 刻直接在z域设计PID和LPF,也可以在s域设计III型补偿器,转到离散 域,甚至可以直接将设计好的III型补偿器的参数转化为PID和LPF的系数。

通过波特图确定参数的原则
■PID和LPF一共提供了2个有效零点和3个有效极点,在设计时,先设 C(PID+LPF)的传递函数为1,画出开环传递函数的波特图,然后在此 波特图上添加零极点,同时通过上移或下移增益曲线来调整0频增益。
▶这些操作可以在matlab的工具箱sisotool中完成。
▶在添加零极点和调整增益时通常遵循如下的原则:
▷将开环截止频率定在开关频率的1/5-1/20,比如100KHz的切换频率,截止频率定 位10K;
▷截止频率出的增益曲线斜率设为-20dB;
▷相位裕度定为45-70,增益裕度定为10dB以上;
▷低频增益尽量高。
插入误差放大器
■按照前面的环路模型进行设计时,会发现一个问题,系统的开环增益 太小,直流增益甚至会小于1。这个问题的原因在于环路中没有任何误 差放大装置,虽然PID中的P能够承担放大任务,但由于寄存器位宽的 限制,P不可能做到很大,因此放大任务必须由专门的增益单元承担。
▶增益单元可以插在环路中任意位置,但理想的位置是在数字部分,比如插 在DSP内PID之前。
▶这个增益插入后,会导致输入到PID的数字码进一步加长,而稳定工作时输 入到PID的误差信号是很小的,因此在设计电路时,可以控制误差信号的大 小,当误差信号超过某一值时,溢出成最大值。
▷设误差信号为,当误差信号进行放大,比如x256倍,此时信号向左移位8位, 如果左移8位后信号大于1024,那么直接将误差视为11_1111_1111。
▷甚至可以设计成可变增益放大,当信号的高位为0越多,放大的倍数越大,以保证 不会有溢出丧失线性度的问题。其中最大的放大倍数是定值,这样环路只要在最 大放大倍数下是稳定的,就可以在所有放大倍数下稳定。
使用sisotool设计补偿器
■利用sisotool做设计非常方便,通常按照如下步骤:
▶在Archiecture标签中选择好环路形式,输入已知的传递函数;
▶利用直接编辑法,图形设计法,软件辅助设计法设计补偿器的传递函数;
▶将设计结果用图形显示出来,检验设计结果,Analysis Plot标签中提供了丰 富的分析图,能够分析开环,闭环等多种系统的响应。
SISOTOOL启动
■在matlab主命令窗口中输入sisotool,即可启动sisotool

输入环路模型

直接编辑传递函数
■直接编辑传递函数本质上就是手工添加和编辑零极点,编辑后传递函 数会立即更新,至于传递函数的形式,可以在主菜单:Edit > SISO Tool Preferences中编辑。

利用图形法设计传递函数
■这是最主要和最常用的方法,其方法就是在开环传递函数的波特图和 根轨迹上添加,删除,移动零极点和增益,sisotool会根据修改完的结 果自动产生补偿器的传递函数。
▶在标签Graphical Tuning中可以选择使用何种图,默认是3种:根轨迹图, 开环波特图,闭环波特图,通常不需要修改。

利用开环波特图设计传递函数
■一开始,补偿器传递函数为1,开环波特图显示的是G*H的传递函数, 为了进行补偿,加入零点和极点,G和H的零极点显示为蓝色,不可修 改,用户加入的零极点显示为红色,可以删除,移动。
▶在菜单Edit中有undo和redo。

利用根轨迹图设计传递函数
■和波特图类似,也可以利用根轨迹图来设计,同样可以添加删除移动零极点,而且还可以移动k值,点击图中紫色的小方块,可以移动,将k设为不同的值,移动的过程中,波特图也会实时关联更新。

软件辅助设计传递函数
■软件辅助设计是利用matlab内置的机制全自动产生补偿器传递函数,或者交互式的设计,给出带宽和相位裕量要求,软件自动产生传递函数。
▶这个方法非常适合对环路理解不够深刻的用户,通过软件的辅助,逐渐加深理解,最终得到合适的设计。

系统性能分析图
■设计时,打开系统性能分析图很重要,可以随时观察当前补偿器导致的结果,随时调整设计。

软件使用技巧
■在设计时,一定要打开图形设计界面和系统性能分析界面,这样无论是直接设计还是软件辅助设计,图形都会实时更新,随时监视系统性能。
■对于经验欠缺的用户,刚开始使用软件辅助设计,随后利用图形调整是一个比较好的做法。
利用Matlab的Help
■Matlab的Help是很强大的,与其记住大量的命令格式,不如记住这些命令的专业术语,然后在help中搜索。
■比如要将连续传递函数转为离散传递函数,记住其命令术语为c2d,使用时,在help中搜索c2d,就能得到c2d的完整语法。而且记住c2d了后,也就知道了d2c,d2d命令。
Matlab常用命令
■表示传递函数的方法:
▶tf:分子分母用多项式的方法表示传递函数,加上采样时间就是离散,不加是连续;
▶zpk:用零极点的方法表示传递函数,加上采样时间就是离散,不加是连续;
▷注意tf和zpk既能用来直接描述传递函数,也能用来将传递函数从一个形式转化为另一个形式,省的手工乘因子和做多项式分解。
▶如果传递函数中含有e-sT这样的项,就只能手工输入多项式了,在输入多项式之前,需要运行s=tf(‘s’)或z=tf(‘z’,T),确保matlab能识别出多项式中的s和z,
■绘图方法:
▶bode:波特图;margin:带裕量的波特图;step:阶跃响应;impulse:冲激/脉冲响应;rlocus:根轨迹;

控制器的非线性区设计
识别系统的非线性区
■系统可能会由于多种原因进入非线性区,为了简化,将其归为2类:
▶由于转换器变量的大幅度变化而进入非线性区;
▶由于其他部分的非线性特征而进入非线性区。

转换器以外的非线性因素
■转换器以外的非线性因素主要包括:
▶DSP饱和;
▶ADC的非线性;
▶占空比超过一定阈值后,转换器会切换模式;
▶PWM换成了PFM。
■DSP的饱和主要是积分器导致的,而积分器之所以饱和,是由于误差信号过大,误差信号过大意味着转换器此时并不在稳态,已经进入了非线性区,因此,DSP只要处理好饱和导致的溢出问题即可,并不需要处理饱和情况下的算法问题。
■ADC的非线性如果是和输入电压相关,那么将稳态时ADC输入调整到ADC线性度尽量高的部分即可。
■占空比的限制比较好解决,可以将转换器限制在DCM或CCM模式。
■PFM的问题此处不涉及。
转换器的非线性
■转换器进入非线性区的起因是转换器的某个或多个变量大幅度偏离稳态值(也就是线性条件),使得转换器传递函数发生了改变。
■将转换器的输入变量列出后,就能识别出非线性的具体原因了:
▶输入电压Vg:当输入为交流信号时,Vg将有大幅度变化;
▶输出电压V:在上电时,V=0至V达到稳态的过程中,V大幅度变化;
▶输出负载R:负载热插拔,或者负载消耗的能量发生明显的变化,R大幅度变化;
▶输入控制D:当以上现象发生时,D会有大幅度变化,虽然D变化是以上因素的结果,但D作为转换器的关键输入,还是单独列出来。
▶其他因素,比如L大幅度变化,这种情况出现,通常转换器会直接进入到饱和区,因此不作为非线性区现象处理。
深入分析转换器的非线性现象
■在AC输入时,Vg是一个变换范围很大的量:
▶Vg的变化范围可能从0-310V,如果要强行稳压,D的变化会远超出0-100%的范围,因此,必须放弃部分区域,利用输出电容的滤波作用来实现稳压。
■除了Vg外,其他变量都可能会突然大幅度变化:
▶V的最大变化发生在上电时,V迅速上升,尤其在刚上电时,V很小,此时反馈环会导致D上升至100%。
▶移除R会导致输出电压上升,直至超过警戒值,此时转换器进行饱和区,因此,R被移除可以放到饱和区考虑。
▶突然接上R会导致输出电压下降,但由于输出端存在大的滤波电容,因此输出电压不会大幅度下降,但由于负载消耗的能量是一个大的阶跃,因此占空比D需要从非常小的值快速跃升至比稳态值还要大的值,再逐渐回落到稳态值。
非线性控制器NLC的设计:Vg变化
■针对前面的非线性现象,逐一解决,考虑Vg的大范围变化。
▶将Vg划分为多个区域,在电压过低的区域,DSP锁定,不再响应误差,直接将输出占空比置为最大值;
▶在电压过高的区域,DSP锁定,不再响应误差,直接将输出占空比置为最小值;
▶在电压的合理区域,检测输入电压值,利用系数算法模块实时更新PID系数,确保反馈环路性能最优。

非线性控制器NLC的设计:上电
■上电时,V不够,此时的需求就是要尽可能的提供大的能量效率。
▶检测V,发现V低于某个阈值,锁定DSP,直接将输出占空比置为最大值;当V超过最低阈值时,解锁DSP,2个周期后使用DSP输出的占空比。
▶当V超过某个阈值时,属于警戒区,不属于非线性控制器处理。

非线性控制器NLC的设计:负载插入
■因为将负载移除后,输出电压升高,guard会控制芯片进入低功耗模式,插入负载后,要尽快退出低功耗模式,进入正常模式。
▶负载突然插入后,输出负载会突然降低,输出电流突然增大,检测到这一现象后,Guard控制芯片进入正常模式,同时,NLC注入新的参数给PID,比如加大微分和比例系数,降低积分权重,使环路变敏感,加快动态响应。
▶如果调整系数没有效果,可以由NLC产生占空比,强行给PWM赋值。
确定线性区和非线性区边界
■这是一个非常复杂的专题,包括饱和区的设计,需要用专门的专题来讨论。
在延迟环中插入一部分,非线性处理
■引入NLC后,相当于在ADC到DSP的中间需要增加一级NLC电路,NLC需要完成如下功能:
▶检测当前输入变量是否在线性区内,如果是,让信号直通过去,如果不是,产生相应的控制信号。

增加NLC后的框图
■NLC会实时的检查V和Vg的值,当V过低或Vg过界时,接手环路。
■关于负载的热插拔,最好的解决方式是使用电流模式,而不是使用电压模式。

控制器的饱和区设计进饱和区的情况
■饱和区就是各种各样的保护,视拓扑而定,一般的保护如下:
▶OVP:过压保护,包括OVPI,OVPO;
▶OCP:过流保护,包括OCPL,限制流过电感的电流,OCPO,限制流过负载的电流;
▶OTP:过温保护;
▶LSHORT:电感短路保护;
▶RSHORT:sense电阻短路保护;
▶VOSHORT:输出短路保护。
保护的本质
■需要保护的有3个部件:
▶输入电源
▷输入电源通常来自AC或其他DC,可以认为电源本身已经具备了完善的保护功能,在这个电源中不需要考虑。
▶转换器
▷转换器的核心是2个开关和1个电感,所有的保护都是围绕着这3个元件来进行的。
▶负载
▷负载的保护就是2个:限制最高电压,限制最高电流。
转换器的保护
■OVP很好理解,器件的承压能力有限,过高的电压会导致损耗。
■OCPL实际上保护的是开关管,过大的电流会导致电感饱和,使电感丧失阻抗,变成短路,从而导致开关管烧坏。
▶电感饱和的原因是电感中的磁芯发生了饱和;
▶对于buck来说,电感饱和损坏的是负载。
■LSHORT实际上也是OCP的一种。
■VOSHORT和RSHORT都是检测被测量是否过低。
▶VOSHORT可以和OVPO共用检测对象,VOPO限定最大值,VOSHORT限定最小值;
▶RSHORT可以和OCP共用检测对象,OCP限定最大值,RSHORT限定最小值;
负载的保护
■负载的价值通常超过转换器的价值,因此负载的保护是很重要的。
▶OVPO,过压保护很容易被触发,触发的原因可能是负载阻值变化,负载热插拔等原因,因此OVPO触发后的处理机制要设计好。
▷输出开路VOPEN也是通过OVPO来保护的,但是输出开路的处理机制要设计得合理,否则电源不能支持热插拔。
▶OCPO,过流保护更容易被触发,触发的原因也是负载阻值变化,负载热插拔等原因,另外输出短路也会导致OCPO触发,甚至在上电时也会触发过流保护,因此要很好的分清楚触发的原因,设计好处理机制。
▶VOSHORT在输出端进行测试,但不是为了保护负载,其方法是检查输出电压,当电压过低时触发VOSHORT。
▷VOSHORT必须避开上电的过程,不能在上电时触发。
显式和隐式的检测
■显式检测是指直接测量节点电压,不需要在开关电源拓扑中加入任何额外元件,隐式检测是指需要加入传感元件进行检测,这些元件会对电源的成本和性能造成一定影响,而且增加了电源的故障率。
▶电压的检测都是显式的;
▶电流的检测都是隐式的,通常使用一个小电阻穿在电流支路上,通过测电阻两端的压降来计算电流;
▶电感短路的检测也是隐式的,需要增加一个辅助绕组,用过零比较器来检测电感上的电压,间接判断电感是否短路。

引入饱和区和非线性处理后的环路延迟
引入Guard后,相当于在NLC之前又增加一级判断延迟:
检测当前输入变量是否在饱和区内,如果不是,让信号直通过去,如果是,产生相应的控制信号。

增加Guard后的框图
Guard会实时的检查V和Vg的值,当V过低或Vg过界时,接手环路。

页: [1]
查看完整版本: 数字电源控制器应该怎样去设计?