首页/文章/ 详情

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

2年前浏览1285

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的安装及使用我们在此不详述,可以参考前述文章,dsPIC33C新建工程及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 DCLDMPLAB 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)


相关文章:

BUCK电路模拟补偿器的数字化过程

dsPIC33C新建工程及MCC插件说明

BUCK电路电压模式CCM环路补偿设计及仿真

来源:电源漫谈
电源电路通用芯片控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-09-19
最近编辑:2年前
仿真秀32093466624
硕士 签名征集中
获赞 89粉丝 74文章 163课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈