此示例显示如何为使用System Identification Toolbox™确定的线性模型不能很好地线性化的模型组件指定线性化。这个例子需要Simscape™Electrical™软件。
打开硬盘的simu金宝applink模型。
模型=“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)
sys = D =占空比位置err 0静态增益。
正如预期的那样,PWM元件使系统线性化为零。
打开本地解算器进行模拟。
set_param (SimscapeSolver“UseLocalSolver”,“上”)
你可以估计pwm驱动电流源的频率响应,并使用结果来确定它的线性模型。电流信号的离散采样时间为1 e -
.因此,您需要使用具有固定采样时间的正弦流信号作为估计输入信号。创建一个频率在2000到200000 rad/s之间的信号。
idinput = frest.createFixedTsSinestream (Ts,{2000、200000});idinput。幅值= 0.1;
定义pwm驱动电路的输入和输出点,并使用正弦流输入信号运行频率响应估计。
pwm_io (1) = linio (“scdpwmharddrive /责任周期”,1,“输入”);pwm_io (2) = linio (“scdpwmharddrive / PWM驱动转换器”,1,“openoutput”);sysfrd = frestimate(模型、pwm_io idinput);
使用频率响应数据来识别二阶模型,使用特遣部队
从系统识别工具箱。然后,将辨识出的模型与原始频响数据进行比较。
sysid = ss (tf (idfrd (sysfrd), 2));波德(sysid sysfrd,的r *)
我们使用频率在2000到200000 rad/s之间的频响数据。所识别的模型对于小于2000的频率具有平坦的幅度响应。然而,我们的估计没有包括这些频率。为了验证低频时频率响应是否平坦,使用频率为20和200 rad/s的正弦流输入信号估计响应。
Lowfreq = [20 200];lowfreq inputlow = frest.createFixedTsSinestream (Ts)
sinestream输入信号:Frequency: [20 200] (rad/s) Amplitude: 1e-05 SamplesPerPeriod: [3141593 314159] NumPeriods: 4 RampPeriods: 0 FreqUnits (rad/s,Hz): rad/s SettlingPeriods: 1 applyfilteringinfestimate (on/off): on SimulationOrder (Sequential/OneAtATime): Sequential
结合快速的采样时间1 e -
秒(10mhz采样频率),越低越高SamplesPerPeriod
值。在这种情况下,考虑到每个频率有四个周期,频率响应估计将记录大约1400万个样本的输出数据。
由于分析20和200 rad/s频率不需要如此高的采样率,因此可以通过增加采样时间来避免内存问题1的军医
.
Tslow = 1的军医;wslow = 2 *π/ Tslow;inputlow = frest.createFixedTsSinestream (Tslow wslow. /轮(wslow. / lowfreq));inputlow。幅值= 0.1;
为了使模型兼容较小的采样率,使用速率转换块对输出数据点进行重新采样,如修改后的模型所示:
modellow =“scdpwmharddrive_lowfreq”;open_system (modellow)
执行以下命令分析低频。
sysfrdlow = frestimate (modellow getlinio (modellow) inputlow);
频率响应估计可能需要几分钟。对于本例,加载估计结果。
负载scdpwmharddrive_lowfreqresults.mat
为了验证识别模型的低频响应,将估计结果与识别模型进行比较。
波德(sysid sysfrdlow,的r *)
关闭低频模型。
bdclose (modellow)
为了使用经过验证的辨识模型来指定PWM驱动元件的线性化,请指定PWM驱动变换器子系统的线性化。
pwmblock =“scdpwmharddrive / PWM驱动转换器”;set_param (pwmblock“SCDEnableBlockLinearizationSpecification”,“上”);代表=结构(“规范”,“sysid”,…“类型”,“表情”,…“ParameterNames”,'',…“ParameterValues”,'');set_param (pwmblock“SCDBlockLinearizationSpecification”,代表);set_param (“scdpwmharddrive /责任周期”,“SampleTime”,“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.matsysval bodemag (sys,的r *)
线性化结果是准确的,所有共振都存在于模型的实际动力学中。
关闭模式。
bdclose (“scdpwmharddrive”)
frestimate
|特遣部队
(系统辨识工具箱)