为了了解SFRA的使用,本节对SFRA库在buck变换器中的应用进行了案例研究。
使用SFRA的典型工作流程如下:
如果主回路模型未知,则可通过开环运行SFRA来识别主回路模型。为此,首先选择一个直流工作点。例如,在buck变换器中,向变换器提供固定的占空比。SFRA_INJECT函数用于将小信号注入到占空比,然后提供给PWM驱动器。SFRA_COLLECT函数用于分析来自激励的数据,并计算传递函数,例如(y/u),如果是电压控制电源,则为Vout/Duty。图10展示了SFRA包含的软件图。
观察PWM ISR代码,这里调用SFRA_INJECT,在直流工作点点“Duty_pu_DC”上添加正弦注入,以生成PWM模块的占空比“Duty_pu”。在后面的代码中,反馈被用于收集正弦注入的响应。
interrupt void PWM_ISR(void)
{
….
//
// Read ADC and computer Fbk Value
//
Vout1_Read = (float32)Vout1R/(4096.0);
//
// Add SFRA injection into the duty cycle for the open loop converter
//
Duty_pu=SFRA_F32_inject(Duty_pu_DC);
//
// Update PWM value
//
EPwm1Regs.CMPA.half.CMPA=((long)(BUCK_PWM_PERIOD))* Duty_pu;
SFRA_F32_collect(&Duty_pu,&Vout1_Read);
…..
}
一旦直流工作点被建立,即转换器正在运行并输出所需的占空比,SFRA GUI可用于启动SFRA扫描。打开位于SFRA安装目录GUI文件夹中的SFRAGUI.exe。单击Setup Connection设置连接,并在弹出窗口中将波特率设置为57600。取消选中“boot on connect连接时启动”,然后选择适当的COM端口,单击“确定”关闭弹出窗口并返回主屏幕。
在主窗口中,单击“Connect连接”。连接后,图形用户界面将依据当前设置分析来自控制器的SFRA扫频数据,这些设置包括扫描的开始频率、扫频阵列的长度(这在代码中是固定的,因此不能通过图形用户界面更改)、注入幅度和每十倍频点数。暂时将其保留为默认值。
按“Start Sweep开始扫描”按钮,等待GUI中的状态栏更改为扫描完成。完成SFRA扫描的结果现在显示在窗口上。开环结果没有意义,因为主回路没有在闭环运行。因此,在左侧的下拉菜单中选择Plant。在下拉菜单中选择Plant后,图形用户界面将类似于图11。
在任意一个图上拖动鼠标以定位频率响应分析中特定频率的值。GUI文件夹中的SFRAData.csv文件将依据最新运行的SFRA扫频进行更新。SFRA库的所有运行和时间戳都保存在该文件夹下。如果未选中“将SFRA数据另存为CSV”复选框,则每次扫描频率响应数据后都会弹出excel工作表。随后的每个扫描都将作为新页添加到excel工作表中。
对复选框的更改只会影响SFRA下一次运行的保存情况,必须在点击“开始扫描”之前完成设置。
然后,通过导入频率数据至Matlab,可以利用所测得的频率响应进行补偿设计。第3.5节描述了所需脚本。
SFRA_GUI.exe将最新的频率扫描数据放在调用它的文件夹中,该文件夹通常是SFRA库安装目录中的GUI文件夹。单击位于同一文件夹中的“CompDesigner.exe”可以启动补偿设计GUI。补偿设计器默认使用最新运行的SFRAData.csv文件。第5.1节完成了SFRA的运行,CompDesigner将使用SFRA数据来设计补偿。
图12显示了根据上一节SFRA运行的主回路数据,选择并用于设计稳定闭环系统的两极双零补偿样式的补偿器。补偿器系数可以从补偿设计器GUI复制到C代码中,这将在下一节中完成。
设计的补偿器可以在控制器上实现,SFRA库可以用来测量闭环功率转换器的开环频率响应。图13描述了使用SFRA的闭环系统的软件连接。
闭环控制ISR的代码如下所示,并添加了SFRA例程。
interrupt void PWM_ISR(void)
{
….
//
// Read ADC and computer Fbk Value
//
Vout1_Read = (float32)Vout1R/(4096.0);
//
// Add SFRA injection into the reference of the controller
//
Vout1_Ref_wInj= SFRA_F32_inject(Vout1_Ref);
//
// Call the controller
//
gi_out=DCL_runPI_C1(&gi,Vout1_Ref_wInj,SFRA_F32_inject(Vout1_Read));
//
// Update PWM value
//
EPwm1Regs.CMPA.half.CMPA=((long)(BUCK_PWM_PERIOD))* gi_out;
SFRA_F32_collect(&gi_out,&Vout1_Read);
.....
}
SFRA库已在多个电源拓扑上成功运行。下一节显示了在DPSWorkshop板(buck转换器)上模拟和测量的频率响应之间的比较。这清楚地表明,模型与测量值非常接近,反之亦然。由于参数估计误差和模型的非理想性,会有一定的误差。