Power Smart™ Digital Control Library Designer是一个新的用于设计数字补偿器的工具,相比于之前的DCDT工具更灵活简单,通过本文,我们以电压模式BUCK电路的补偿器设计及创建demo程序为例,探讨一下如何建立一个完整的工程,并且基于DCLD设计数字补偿器,且包含一定的保护功能,并且验证数字补偿器的闭环性能。
一.数字电源开发板及基本代码框架介绍
我们建立工程基于dsPIC33CK的数字电源开发套件,上面的控制芯片为dsPIC33CK256MP505,上面包含一个同步buck和一个boost电路,这里我们使用其同步buck电路。
图1 DPSK3开发板
图2 同步BUCK的电路结构
此同步BUCK的电路中,包含一个对负载控制的按键,通过此按键可以控制加载到BUCK电路的负载,当然板上也安装了最大1A的BUCK电路负载。
图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 A和ADC triggerB这两个触发信号,信号A用于触发输入电压采样,信号B用于触发输出电压采样。
PWM更新模式设为改写占空比后触发更新,更新模式为立即更新。
图13 ADC模块的配置
我们采用ADC的时钟为100M,则按照默认设置ADC的core的转换时钟为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实现环路补偿器设计
此时我们已经完成了PWM和ADC的设置,接下来通过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%,同时通过ADCTriggerAOffset和ADCTriggerBOffset去增加偏置量。
由于我们这里采取周期内固定的采样点设计,所以去掉Add Automatic Placement of Primary ADC Trigger A, Add Automatic Placement of Primary ADC Trigger B这两个选项。
这里我们需要用到Anti-windup和Clamp Control Output Maximum和Clamp Control Output Minimum对计算最大值和最小值进行Clamp。
图27 Anti-Windup设置
我们需要用Anti-Windup来控制环路计算结果在一个定义的范围内,一旦超出这个范围,控制计算结果就会被Clamp,这就不会造成在模拟控制中的饱和问题,如图27描述所示。
图28 Andi-Windup对低频率范围的支持
当没有使能Limit Control Loop Output to Positive Numbers时,控制库是支持-32768到32767之间的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电源开关频率下,自动得到周期为8000个tick,通过系统自带的计算器去对效率进行估算,以得到合理的占空比计算值,如图32.最终得到计算的典型控制输出为3188,如图29所示。
图32 合理占空比计算
图33 产生P控制器代码
通过菜单中的Export Files可以产生P控制器代码,用以测量功率级Bode图,如图34所示。
图34 P控制器汇编代码
图35 在DCLD目录中添加代码
图36 DCLD添加代码
如图35,36所示,将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转折频率约为5k,ESR零点约为60k,这些信息为设计数字补偿器零极点提供参考。
图43 空载时P控制器测试功率级Bode图
在图43中,我们同时给出了空载时的功率级Bode图,可知二阶LC极点转折频率变为1k附近,由于负载阻抗较大,因此Q值很小,可以看到增益曲线没有出现像满载一样的峰值,高频ESR零点位置还是60k附近。
图44 设计补偿器零极点
根据P控制器测试出的功率级Bode图,我们找到了相应的功率级零极点大致位置,且根据前述文章的讨论,可以使用3P3Z的数字补偿器,且使用归一化输入增益,以便在AB系数中考虑输出分压反馈电阻。参考BUCK电路模拟补偿器的数字化过程,中对输入增益归一化的说明。
此时,我们可以指定相应的零极点去得到期望的环路曲线,这里开关频率设为500k,零频率极点设为600Hz,两个零点用于抵消LC二阶极点,分别设在2k和4k,一个极点用于抵消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)
相关文章: