PowerSmart DCLD设计电压模式BUCK数字补偿器

大家好,我是电源漫谈,很高兴和各位一起分享我的24原创文章,喜欢和支持我的工程师,一定记得给我点赞、收藏、分享。

加微信[13764329639]与作者微信及进群沟通交流。

Power Smart™ Digital Control Library Designer是一个新的用于设计数字补偿器的工具,相比于之前的DCDT工具更灵活简单,通过本文,我们以电压模式BUCK电路的补偿器设计及创建demo程序为例,探讨一下如何建立一个完整的工程,并且基于DCLD设计数字补偿器,且包含一定的保护功能,并且验证数字补偿器的闭环性能。

.数字电源开发板及基本代码框架介绍

我们建立工程基于dsPIC33CK的数字电源开发套件,上面的控制芯片为dsPIC33CK256MP505,上面包含一个同步buck和一个boost电路,这里我们使用其同步buck电路。

图1 DPSK3开发板

图2 同步BUCK的电路结构

此同步BUCK的电路中,包含一个对负载控制的按键,通过此按键可以控制加载到BUCK电路的负载,当然板上也安装了最大1ABUCK电路负载。

图3 同步BUCK的软件框架结构

在这个电路中,我们将通过dsPIC33C内部DSP运行一个数字补偿器,通过分压电阻采样输出电压和数字基准比较产生误差,最终计算的结果经过anti-windup限制范围后,输出给片上的PWM模块去控制BUCK电路的占空比。为了避免给输出电容充电产生的过充电流,我们添加软起动代码,通过一个定时器实现,同时,我们也会添加一些保护代码,如输入欠压UVLO和输出过压OVLO,及输出电压范围误差代码。按照惯例,我们也通过一个用定时器控制的LED来指示软件的运行状态。

图4 用MCC产生配置的部分模块

图5 通过DCLD产生数字控制器代码

.基本模块的MCC代码构建

新建一个工程,就开始分别进行模块设置,关于新建工程的步骤,我们不在此详述。具体而言,我们通过MCC来建立各个模块的代码,MCC的安装及使用我们在此不详述。我们首先需要做的是设置一个满足各个外设及CPU运行的时钟。

图6 系统主时钟的配置

通过图6所示的配置参数,将主时钟配置为最高主频100M,对应FOSC为200M,注意此处,我们使用片上内部8M的振荡器FRC为源振荡器,且不进行FRC分频。

图7 系统辅助时钟的配置

辅助时钟按照图7所示,配置为500M,PWM模块使用,规格书规定,如在高精度模式下运行PWM,则必须使用500M的时钟输入。

在系统设置部分,其非关键部分,这里我们不做特别说明。

图8 定时器T1的配置

通过如图8所示的配置,选择指令时钟FOSC/2 100M,我们将定时器Timer1进行适当分频设为2ms的周期,用于做一些指示灯功能,及启动电路状态机,且使能其中断,在中断中处理任务。

图9 PWM模块配置1

图10 PWM模块配置2

图11 PWM模块配置3

图12 PWM模块配置4

通过图9到图12进行PWM模块的配置,在本示例中使用PWM1模块,使能高精度模式,采用500M时钟驱动。设置为互补模式输出,设置一定死区,开关频率为500k,通过闭环控制占空比。PWM的触发为自触发,由于需要它触发ADC的转换,所以使用了ADCtrigger AADC triggerB这两个触发信号,信号A用于触发输入电压采样,信号B用于触发输出电压采样。

PWM更新模式设为改写占空比后触发更新,更新模式为立即更新。

图13 ADC模块的配置

我们采用ADC的时钟为100M,则按照默认设置ADCcore的转换时钟为50M,保持默认的采样时间设置。由于需要采样输入电压和输出电压,我们根据硬件连接选择AN12为输入电压采样,AN13为输出电压采样,且使能AN13中断,由于优先级问题,当AN13中断服务程序中AN13的转换结果得到时,AN12的转换结果也是完成的。由于AN13的结果需要参与环路运算,所以我们使能AN13的中断,当AN13的转换结果完成后触发进入ADC中断,去进行反馈环的调用。

图14 LED指示设置

图15 RB6设为指示灯输出

如图14所示,在pin manager中设置RB6为输出功能,我们设置它为用户指示灯的功能,重新在图15中的pin Module给它命名。

图16 设置中断的优先级

定时器的中断优先级可以设的不用太高,此处我们设置为1,高于CPU的优先级,而AN13中断需要参与反馈环调整,所以将它的优先级设为较高,此处设为6,确保AN13结果出来后能及时进入AN13中断中执行反馈换运算。

.DCLD的功能简介

图17 通过PowerSmart DCLD实现环路补偿器设计

此时我们已经完成了PWMADC的设置,接下来通过PowerSmart DCLD来设计数字补偿器,这是一个连接通用仿真计算工具如Matlab或者Simplis等和数字环路补偿设计的工具。

图18 DCLD的结构框图

DCLD的结构框图,由基本补偿器部分,扩展功能部分,及API函数组成,可以实现dsPIC33F,dsPIC33E, dsPIC33C系列的环路补偿设计。

图19 DCLD实现平均电流模式的示例

通过DCLD可以实现较为复杂的控制模式,如平均电流模式控制,可以建立两个独立的控制环路,电压环和电流环,电压环输出作为电流环的输入参考,两个环路之间的互联由用户代码结合API完成,后续我们会介绍。

关于DCLD的详细功能介绍,我们放在后面。

.DCLD参数配置及补偿器设计

图20 DCLD配置位置路径及连接MPLAB XIDE

由于DCLD是一个独立的设计工具,因此在图20中,我们给出了DCLD配置位置的设置,通过这个窗口将DCLD的配置和MPLAB XIDE的工程连接起来,此处给配置命名为Voltage_loop,这个名称将自动放到代码中作为变量定义的名称。

图21 DCLD和MPLAB XIDE工程的连接设置

通过设置如图21的项目工程路径,我们就将MPLAB XIDE当前工程和DCLD的设置连接了起来,窗口会显示如图20中的绿色打勾。

图22 DCLD的配置窗口

图23 对DCLD代码的裁剪

此处我们对DCLD产生的代码进行一定裁剪,由于我们采用MCC产生的中断服务程序去调用控制环路,控制环路本身不需要关注CPU的背景信息,因此在默认设置上我们将Context Management去掉。

图24 Context Management优化中断延时

关于通过管理不同器件的背景信息,以便优化中断延时的说明如图24所示,当有存储背景和恢复背景需要时,可以通过这个选项处理。

图25 Add Enable/Disable Switch功能

对使能和去使能的选项,当增加这个选项时,会在NPNZ16b_t中增加一个控制位status.enable,当需要更新控制库时,需要将这一位置位。当清零时,控制代码就会被忽略。

我们需要连续运行控制环路,因此Add Enable/Disable Configuration选项也会去掉。

图26 ADC触发位置的精确设置

当需要精确设置ADC的触发位置时,我们可以通过选择Add ADC Trigger Placement来自动设置在最新的控制输出位置的50%,同时通过ADCTriggerAOffsetADCTriggerBOffset去增加偏置量。

由于我们这里采取周期内固定的采样点设计,所以去掉Add Automatic Placement of Primary ADC Trigger A, Add Automatic Placement of Primary ADC Trigger B这两个选项。

这里我们需要用到Anti-windupClamp Control Output MaximumClamp Control Output Minimum对计算最大值和最小值进行Clamp

图27 Anti-Windup设置

我们需要用Anti-Windup来控制环路计算结果在一个定义的范围内,一旦超出这个范围,控制计算结果就会被Clamp,这就不会造成在模拟控制中的饱和问题,如图27描述所示。

图28 Andi-Windup对低频率范围的支持

当没有使能Limit Control Loop Output to Positive Numbers时,控制库是支持-3276832767之间的Q15有符号数据的,而此时在dsPIC33C高精度模式下,最低能达到的控制开关频率为144k,为了支持更低频率,我们可以使能这个选项,使得控制库支持无符号16位计算结果,将计算结果扩大到0-65535,使得高精度PWM模式下最低的开关频率达到61k。我们现在这个实验案例开关频率较高,不需要使能这一选项。

此时,我们就可以进行滤波器的设计了。

.DCLD设计数字补偿器

在设计控制器零极点之前,我们通过P控制器测试出功率级电路的Bode图。

图29 P控制器代码生成选项

图30 反馈增益的设置

通过对反馈增益的设置,我们得到正常的反馈ADC采样数字量为2048,对应输出电压为Vout 3.3V时的ADC采样值2048

图31 典型控制量计算

设置PWM模块的工作频率为4G(500MHz*8),在500k电源开关频率下,自动得到周期为8000tick,通过系统自带的计算器去对效率进行估算,以得到合理的占空比计算值,如图32.最终得到计算的典型控制输出为3188,如图29所示。

图32 合理占空比计算

图33 产生P控制器代码

通过菜单中的Export Files可以产生P控制器代码,用以测量功率级Bode图,如图34所示。

图34 P控制器汇编代码

图35 在DCLD目录中添加代码

图36 DCLD添加代码

如图3536所示,将DCLD的产生的相应控制环代码添加到当前工程目录中,包括2个头文件,1个C文件,1个汇编文件。

图37 添加头文件和定义输入输出及参考变量

图38 添加ADC中断调用代码及控制器初始化代码

图39 添加控制器初始化调用及中断服务程序Handler

控制器的初始化,主要是对控制器初始化函数进行初始化,并且指定控制器的输入变量adc_vbuck,输出目标变量PG1DC,及控制参考ref_vbuck。

图40 自行Debug验证ADC中断

经测试,可以看到ADCAN13中断可以正常进入,调试窗口可以看到输入电压的测量值为0x598

图41 输入电压采样电路

根据输入电压硬件采样电路,当输入电压为9.2V时,可以测试出TP47电压为1.152V,对应调试窗口测试出的数值0x598,根据ADC的模拟数字量基本关系,不难确定这一点是正确的。

在主程序中添加对控制器的初始化代码调用,并且将相应的ADC的中断服务程序和TMR1的中断服务程序指定给相应的中断Handler

TMR1的中断服务程序如下所示,主要用于处理状态指示,欠压锁定及软起动功能,此处代码中VBUCK_REF代表正常输出电压。

voidTMR1_Int(void)

{

    static int led_tmr =0;

    static int fsm_state = 0;

    static int start_tmr = 0;

    static int err_tmr = 0;

   

    // blink LED 1Hz

    if(++led_tmr>=500)

    {

        led_tmr = 0;

        USER_LED_Toggle();

    }

    

     switch(fsm_state)

    {

        case 0:     // State 0: wait for Vin>threshold(delay time)

            ref_vbuck = 0;

            err_tmr = 0;

            if (adc_vin<VIN_TH_ON)

            {

                start_tmr = 0;

            }

            else if (++start_tmr>2000)

            {

                fsm_state = 1;

            }

        break;

        case 1:     // State 1: ramp up buck reference value(soft-start)

            if (ref_vbuck < VBUCK_REF)

            {

                ref_vbuck += VBUCK_RAMP;

            }

            if ((adc_vin<VIN_TH_OFF) ||(err_tmr>200))

            {       // low input voltage OR error for>200ms

                start_tmr = 0;

                fsm_state = 0;

            }

        break;

    }

}

接下来我们测试开发板的P控制器对应的环路,即功率级传递函数曲线。

图42 满载时P控制器测试功率级Bode图

从测试出的功率级Bode图来看,功率级LC转折频率约为5kESR零点约为60k,这些信息为设计数字补偿器零极点提供参考。

图43 空载时P控制器测试功率级Bode图

在图43中,我们同时给出了空载时的功率级Bode图,可知二阶LC极点转折频率变为1k附近,由于负载阻抗较大,因此Q值很小,可以看到增益曲线没有出现像满载一样的峰值,高频ESR零点位置还是60k附近。

图44 设计补偿器零极点

根据P控制器测试出的功率级Bode图,我们找到了相应的功率级零极点大致位置,且根据前述文章的讨论,可以使用3P3Z的数字补偿器,且使用归一化输入增益,以便在AB系数中考虑输出分压反馈电阻。参考BUCK电路模拟补偿器的数字化过程,中对输入增益归一化的说明。

此时,我们可以指定相应的零极点去得到期望的环路曲线,这里开关频率设为500k,零频率极点设为600Hz,两个零点用于抵消LC二阶极点,分别设在2k4k,一个极点用于抵消ESR零点设在75k,另一个极点用于衰减高频分量,设在低于奈奎斯特频率的频率200k,使得奈奎斯特频率处的分量有一定衰减。

图45 调用电压环控制代码

根据新输入的控制器零极点,重新产生代码后,我们在AN13的中断服务程序中调用电压环控制函数,如图45所示,完成闭环控制。

图46 DCLD产生的数字补偿器系数

图46为DCLD所产生的补偿器AB系数,及相应的Q15格式数据。

图47 空载时PWM驱动波形(CH1-PWM1H-CH2-PWM1L)

前述文章,BUCK电路模拟补偿器的数字化过程 ,详述了通过DCLD产生的数字补偿器AB系数的过程,后续我们也会详细分析基于产生的AB系数结合数字补偿器,如何在DCLD产生的代码上执行新的控制量计算。

图48 满载时开环增益传递函数Bode图

满载时的开环增益传递函数曲线如图48所示,我们从图上得知,带宽为17.7k,相位裕量为50C,增益裕量为17.2db,且低频段具有较高的积分增益,高频200k以上以40db/10倍频衰减,它是一个非常稳定的符合我们期望的环路曲线。

图49 满载和空载时开环增益传递函数Bode图

从图49满载和空载时的开环增益曲线对比来看,空载时的穿越频率略低于满载时的穿越频率,相位裕量略高于满载时相位裕量,符合同步BUCK的特性。

 

总结,本文通过介绍数字电源开发板DPSK3的基本结构及基本代码框架的形成,接着通过MCC去得到基本的开关电源外设配置代码,最后通过DCLD去设计数字补偿器设计,首先由P控制器测试出功率级Bode图,进而得到控制器零极点,最终本文设计了电压模式BUCK电路的环路补偿器,并且测试了典型负载下的环路Bode图。

参考资源:

Creating a Digital Power Supply from Scratch (microchip.com)

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 3
收藏 6
关注 389
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧