本文是阅读《数字电源控制环路设计指导书》后的一个衍生和实践。阐述的是用Multism做一个模拟线路的频率响应曲线后导出成Excel文件后,再用Matlab去拟合出曲线从而估算出模拟线路的传递函数。该方法具有普适性,仿真软件不局限于文中提到的软件。其中模拟线路以之前讨论过的三型补偿网络。
一、Multism频率响应
首先在Mutism中绘制如下原理图,并配置好参数,将探针放置在输出的位置:
选择交流分析,并设置好交流分析的参数:
开始仿真,得到以下图形:
点击工具,选择导出至Excel:
这里有两个注意点:
1、由于频率响应有幅、相两条曲线,这里要选择不同的图形导出两次;
2、导出的幅频曲线数据的Y轴的值是按实际的值导出而不是按分贝值导出,在用matlab分析前可以现在Excel中整合下数据比较方便后边的分析;
整理后的Excel数据如下:
二、用Matlab进行曲线拟合
在Matlab键入以下代码:
%Read the FRA Plant data from the excel sheet%
Freq=xlsread('Frequency_Response.xlsx','幅值','A2:A600');
Phase_H=xlsread('Frequency_Response.xlsx','相位','B2:B600');
Mag_H=xlsread('Frequency_Response.xlsx','幅值','C2:C600');
%Convert the FRA data to a bode object in MATLAB%
Mag_H=(10.^(Mag_H./20));
Phase_H=pi.*Phase_H./180;
Plant_Bode_Obj=frd(Mag_H.*exp(i*(Phase_H)),Freq,'FrequencyUnit','Hz');
%Curve fit the data to get a transfer function%
% user may choose to fit 3p3z or any other depending on what works best%
[Hn,Hd] = invfreqs(Mag_H.*exp(i*(Phase_H)),(2*pi).*Freq,2,4); %using 2z4P
H = tf(Hn,Hd);
% plot both the measured and curve fitted TF to compare accuracy
figure(1);bode(H,Plant_Bode_Obj);title('Control-to-Output Measured Vs Curve Fitted');
legend('Curve Fitted','Measured')
%call sisotool to design the compensation with the transfer function%
sisotool(H)
运行得到如下图形:
同时脚本语言调用了sisotool()工具,我们可以在这里看到传递函数: