接上篇,本节中用到的程序,在文章结尾的附件中提供。
3)ADC配置
在工程模板中已经包含了一个ADC的配置文件“ADC_SOC_Cnf.c”,所以不用再次导入。首先修改采样通道号,输出电压采样是用ADCINB4引脚,所以写入12:
工程模板中原本的配置就是用PWM1A来触发ADC的采样,这里就不需要修改了。
接下来调用ADC配置函数。
ADC_SOC_CNF()函数的前2个参数在前面都已经设定好了,第3个参数ACQPS为采样窗口的周期时长设定,这里按照工程模板的缺省值不要修改。第4个参数为设定哪个通道的ADC结果转换完成后触发ADC的整体中断,如果不需要ADC的中断,就写入一个大于15的数。这里的0表示ADCRESULT0完成后触发ADC的中断。在本例中,是不用ADC中断的,所有中断都在CLA中断里处理。
最后一个参数是ADC的采样模式:
0--起停模式,一般用于在定点内核中断处理ADC的中断服务子程序。
1--持续模式,不需要触发,持续进行ADC采样。
2--CLA模式,如果需要在CLA中处理ADC的采样结果,就选择该模式。
因为在本例中要在CLA中处理ADC的采样,所以选择2。接下来,要将ADC所需的头文件包含进来。
还要包含读取ADC结果函数用到的头文件。
当要读取ADC的转换结果时,要用函数ADCDRV_1ch_CLA_C(AdcResult.ADCRESULT0),在后面会再说明。
4)主功率电路传递函数的Bode图
至此,已经完成了构建Buck电压控制环路所需硬件的配置工作,接下来就需要依据主功率电路的传递函数来选择补偿器的类型和参数了。下面看看如何得到主功率的传递函数?
有两种方式取得主功率的传递函数:1)用软件仿真建模,如MatLab、Simplis等,在笔者以前的文章中提到过这种方式,这里不再详述。2)用网络分析仪测量,这种方法比软件仿真建模的方式更准确,在这里笔者尝试用这种方式。
如上图,对一个闭合环路来说,用网络分析仪测出的实际上是G和H乘积的bode图(G为反馈环节的传函、H为主功率电路的传函,H中包含PWM和Comp3的增益)。想要得到只含有H的bode图就必需要让G等于1。对于配置好的外设来说,Gfb、Gadc都是确定的,那么就需要用一个参数K来抵消这两个增益(K等于这两个环节增益乘积的倒数),同时设定控制器的增益为1,这样,G整体的增益就为1。输出电压的采样如下图:
在这里Gadc要说明一下,因为下面要用到ADCDRV_1ch_CLA_C()函数读取ADC的结果,该函数读取ADC寄存器的值后,会再除4096,所以Gadc=0.3。所以:
这里需要定义3个变量,分别用来存储输出电压的设定值,输出电压的ADC采样结果和电压的误差值。输入下面代码:
注意,为了使Comp3处于一个适当的直流偏置点上,还需要再乘一个系数,这个系数的选择其实并不唯一,在本例中,笔者选的系数是101.3。然后用网分测量H传函。测量结果如下图:
可以看到H的直流增益是一个小于1的值,有很大的静态误差,会导致输出电压到不了设定值 5V。这是因为前面乘的系数比较小,如果把系数101.3改大一些,曲线也会整体向上抬升,但并不影响曲线的形状。在这里笔者就按照这条曲线计算补偿参数。在得到了H的bode曲线后可以用MatLab的sisotools工具进行计算得到控制器的参数,当然也可以自己计算。可以参考笔者以前的文章《一种方便快捷计算开关电源环路参数的方法及实例》。
5)控制器的选择与配置
为了补偿上面得到的H曲线,用2p2z的控制器就可以了。
首先,把控制器的头文件包含进“ProjectName-CLA_Shared.h”文件中。
然后在“ProjectName-CLA_Tasks.cla”文件中声明控制算法用的两个结构体。
因为工程模板的程序框架中,在cla初始化阶段完成后,首先要执行一次cla的中断服务程序ClaTask8(),所以要在ClaTask8()中初始化2p2z的两个结构体参数是非常合适的。通过计算得到的2p2z的参数如下:
最后,还要将环路算法的代码写入:
另外,在输入电压较低的情况下(12V输入),为了让输出电压可以达到10V,还要把PWM1的占空比设定调节到0.85。
写完上面的代码后,将程序编译,并写入RAM中,运行程序。
在输入电压20V,输出电压5V,输出电流1A的条件下,测量环路的bode图:
测得穿越频率为3.8KHz,相位裕度为73.2°,幅值裕度为-15dB,直流增益为40dB。整体环路稳定。
在输入电压20V,输出电压7V,输出电流1.5A时测得:
测得穿越频率为3.815KHz,相位裕度为66°,幅值裕度为-19dB,环路稳定。
在输入电压20V,输出电压10V,输出电流2A时测得:
因为低频时干扰较大,所以在低频的相位曲线波动较大,当频率超过500Hz时,相位基本正确。可以看到穿越频率为4.5KHz,相位裕度为61°,幅值裕度为-13.5dB。但是在大约40KHz频率点处,幅频曲线的右侧会出现一个向上的凸起点,重新穿越0dB线,会引起环路的不稳定,所以需要修改一下2p2z的参数,下图为修改后参数:
再次测试环路开环响应。
经过调整后的曲线不再反复穿越0dB线,穿越频率降为1.88KHz,相位裕度也有所减少,但系统的稳定性更强了。在低频处的直流增益也基本不变,所以静态误差也没有变化。所以参数调整是成功的。
到此,buck电路峰值电流型控制环路的设计全部完成。