使用系统标识指定模型组件的线性化

这个例子展示了如何使用System Identification Toolbox™识别的线性模型来指定线性化效果不佳的模型组件。这个示例需要Simscape™Electrical™软件。

线性化硬盘驱动器模型

打开该硬盘驱动器的万博1manbetxSimulink模型。

模型=“scdpwmharddrive”;open_system(模型)

在此模型中,在硬盘驱动器设备由一个电流源来驱动。电流源被通过由脉冲宽度调制(PWM)信号驱动,使得它的输出可以由占空比进行调整的电路实现。对于硬盘的型号的详细信息,请参阅一个硬盘驱动器的数字伺服控制(控制系统工具箱)。

PWM驱动电路通常具有高频开关元件,例如在此模型中,其平均行为没有很好地定义的MOSFET晶体管。因此,这种类型的电路的精确线性化是有问题的。当你从线性化的占空比输入模式,位置误差,结果是零。

该模型中的Simscape求解器被配置为在本地求解器模式下运行。在线性化模型时,首先关闭局部求解器。

SimscapeSolver = [模型'/PWM驱动的转换器/解决方案配置'];set_param (SimscapeSolver“UseLocalSolver”,“关”);

线性化模型。

io (1) = linio (“scdpwmharddrive /占空比”1,“输入”);io (2) = linio (“scdpwmharddrive /硬盘型号”1,“输出”);sys =线性化(模型,io)
系统= D =占空比位置err 0静态增益。

正如所料,PWM成分导致系统线性化到零。

打开本地解算程序进行模拟。

set_param (SimscapeSolver“UseLocalSolver”,“上”)

查找PWM组件线性模型

您可以估计压水堆驱动的电流源的频率响应,并使用结果来识别线性模型。当前信号的离散采样时间为1 e -。因此,你需要使用一个sinestream信号与固定的采样时间为您估计输入信号。创建具有2000和200000之间弧度频率的信号/秒。

idinput = frest.createFixedTsSinestream(TS,{2000,200000});idinput.Amplitude = 0.1;

定义输入和输出点的PWM驱动的电路和运行使用sinestream输入信号的频率响应估计。

pwm_io (1) = linio (“scdpwmharddrive /占空比”1,“输入”);pwm_io (2) = linio (“scdpwmharddrive / PWM驱动转换器”1,“openoutput”);sysfrd = frestimate(模型,pwm_io,idinput);

若要使用频率响应数据识别二阶模型,请使用tfest从系统标识工具箱。然后,将识别出的模型与原始频率响应数据进行比较。

sysid = ss (tf (idfrd (sysfrd), 2));波德(sysid sysfrd,'R *')

我们使用频率在2000到200000 rad/s之间的频率响应数据。识别出的模型对小于2000的频率具有平坦的幅值响应。然而,我们的估计不包括这些频率。要验证低频时的频率响应是否平坦,请使用频率为20和200 rad/s的sinestream输入信号估计响应。

lowfreq = [20 200];inputlow = frest.createFixedTsSinestream(TS,lowfreq)
输入信号:频率:[20 200](rad/s)振幅:1e-05采样周期:[3141593 314159]数字周期:4个渐变周期:0频率单位(rad/s,Hz): rad/s调整周期:1个应用滤波(开/关)时间:模拟顺序(序列/一段时间):序列

的快速采样时间的组合1 e -秒(10 MHz的采样频率)和下产生高SamplesPerPeriod值。在这种情况下,考虑到每个频率有四个周期,频率响应估计将记录大约1400万个样本的输出数据。

由于如此高的采样率对于分析20和200 rad/s频率是不必要的,因此可以通过增加采样时间来避免内存问题1的军医

Tslow = 1E-4;wslow = 2 * PI / Tslow;inputlow = frest.createFixedTsSinestream(Tslow,wslow /轮(wslow./lowfreq)。);inputlow.Amplitude = 0.1;

为了使模型与较小的采样率兼容,使用一个速率转换块对输出数据点进行重新采样,如下面的修改模型所示:

modellow ='scdpwmharddrive_lowfreq';open_system(modellow)

运行低频通过运行下面的命令的分析:

sysfrdlow = frestimate (modellow getlinio (modellow) inputlow);

的频率响应估计可能需要几分钟。对于这个例子,加载估计结果。

负载scdpwmharddrive_lowfreqresults.mat

为了验证识别模型的低频响应,将估计结果与识别模型进行比较。

波德(sysid sysfrdlow,'R *')

关闭低频模型。

bdclose (modellow)

指定线性化PWM组件

为了使用验证过的识别模型来指定PWM驱动组件的线性化,指定PWM驱动变换器子系统的线性化。

pwmblock =“scdpwmharddrive / PWM驱动转换器”;set_param (pwmblock'SCDEnableBlockLinearizationSpecification',“上”);代表=结构('规格','SYSID',...“类型”,“表情”,...“ParameterNames”,,...'的parameterValues',);set_param (pwmblock“SCDBlockLinearizationSpecification”,代表);set_param (“scdpwmharddrive /占空比”,'采样时间',“Ts_plant”);

线性化模型。

set_param (SimscapeSolver“UseLocalSolver”,“关”) sys = linearize(model,io);set_param (SimscapeSolver“UseLocalSolver”,“上”)

可以使用频率响应估计,使用下列命令验证整体的线性化结果:

valinput = frest.Sinestream(系统);valinput = fselect (valinput 3 e3 1 e5);valinput。幅值= 0.1;sysval = frestimate(模型、io valinput);

的频率响应估计可能需要几分钟。对于这个例子,加载估计结果。

负载scdpwmharddrive_valfreqresults.matbodemag(SYS,SYSVAL,'R *')

线性化结果是准确的,所有的共振都存在于模型的实际动力学中。

关闭模式。

bdclose (“scdpwmharddrive”)

另请参阅

|

相关话题