%% ABOUT THIS FILE % ---------------------------------------------------------------------- % SUSPENSION MODEL CONSTRUCTOR % This code constructs a state-space model of suspension system and % express it as a simulink model with a "state-space model" block. % ---------------------------------------------------------------------- % 3D rigid body model % Type-B1 prototype for KAGRA % Coded by T. Sekiguchi on 2015/05/31 % ---------------------------------------------------------------------- %% PRELIMINARY clear all; % Clear workspace close all; % Close plot windows addpath('../../utility'); % Add path to utilities %% PARAMETER addpath('parameter'); % Add path to parameter files TypeBptestparam_GndIRDmp; % Get parameters % Type-B1 prototype parameters version 150502 rmpath('parameter'); % Remove path from parameter files %% MAKE STRUCTURE % Make suspension structure sus = makesusstructure('typeBptest_GndIRDmp'); % Add grounds sus = addground(sus,'GND'); % Add rigid bodies %sus = addrigidbody(sus,'F0',mF0,moiF0); % filter 0 %sus = addrigidbody(sus,'MD',mMD,moiMD); % magnetic damper %sus = addrigidbody(sus,'F1',mF1,moiF1); % filter 1 sus = addrigidbody(sus,'F2',mF2,moiF2); % filter 2 sus = addrigidbody(sus,'IR',mIR,moiIR); % intermediate recoil mass sus = addrigidbody(sus,'IM',mIM,moiIM); % intermediate mass sus = addrigidbody(sus,'RM',mRM,moiRM); % recoil mass sus = addrigidbody(sus,'TM',mTM,moiTM); % test mass % Add suspension wires and springs % sus = addsuswire(sus,... % F1-MD % n_wF12MD,... % number of wires % {},... % OPTION % 'GND',... % upper body % 'MD',... % lower body % [... % GEOMETRIC PARAMETER % h1_wF12MD,... % vertical position of upper SP % h2_wF12MD,... % vertical position of lower SP % r1_wF12MD... % horizontal distance of upper SP from CoM % ],... % % l_wF12MD,... % length % d_wF12MD,... % diameter % m_wF12MD,... % total load % E_wF12MD,... % Young's modulus % G_wF12MD,... % shear modulus % Q_wF12MD... % Q factor % ); % sus = addsuswire(sus,... % F0-F1 % n_wF02F1,... % number of wires % {... % OPTION % 'spring',... % add spring % 'neck',... % wire with necks % },... % % 'F0',... % upper body % 'F1',... % lower body % [... % GEOMETRIC PARAMETER % h1_wF02F1,... % vertical position of upper SP % h2_wF02F1... % vertical position of lower SP % ],... % % [l_wF02F1,ln_wF02F1],... % length & neck length % [d_wF02F1,dn_wF02F1],... % diameter & neck diameter % m_wF02F1,... % total load % E_wF02F1,... % Young's modulus % G_wF02F1,... % shear modulus % Q_wF02F1,... % Q factor % {'spring',... % SPRING % fsp_wF02F1,... % resonant frequency % Bsp_wF02F1,... % saturation due to CoP % Qsp_wF02F1... % spring Q % }... % % ); sus = addsuswire(sus,... % F1-F2 n_wF12F2,... % number of wires {... % OPTION 'spring',... % add spring 'neck',... % wire with necks },... % 'GND',... % upper body 'F2',... % lower body [... % GEOMETRIC PARAMETER h1_wF12F2,... % vertical position of upper SP h2_wF12F2... % vertical position of lower SP ],... % [l_wF12F2,ln_wF12F2],... % length & neck length [d_wF12F2,dn_wF12F2],... % diameter & neck diameter m_wF12F2,... % total load E_wF12F2,... % Young's modulus G_wF12F2,... % shear modulus Q_wF12F2,... % Q factor {'spring',... % SPRING fsp_wF12F2,... % resonant frequency Bsp_wF12F2,... % saturation due to CoP Qsp_wF12F2... % spring Q }... % ); sus = addsuswire(sus,... % F2-IR n_wF22IR,... % number of wires {},... % OPTION 'F2',... % upper body 'IR',... % lower body [... % GEOMETRIC PARAMETER h1_wF22IR,... % vertical position of upper SP h2_wF22IR,... % vertical position of lower SP r1_wF22IR... % horizontal distance of upper SP from CoM ],... % l_wF22IR,... % length d_wF22IR,... % diameter m_wF22IR,... % total load E_wF22IR,... % Young's modulus G_wF22IR,... % shear modulus Q_wF22IR... % Q factor ); sus = addsuswire(sus,... % F2-IM n_wF22IM,... % number of wires {... % OPTION 'spring',... % add spring 'neck',... % wire with necks },... % 'F2',... % upper body 'IM',... % lower body [... % GEOMETRIC PARAMETER h1_wF22IM,... % vertical position of upper SP h2_wF22IM... % vertical position of lower SP ],... % [l_wF22IM,ln_wF22IM],... % length & neck length [d_wF22IM,dn_wF22IM],... % diameter & neck diameter m_wF22IM,... % total load E_wF22IM,... % Young's modulus G_wF22IM,... % shear modulus Q_wF22IM,... % Q factor {'spring',... % SPRING fsp_wF22IM,... % resonant frequency Bsp_wF22IM,... % saturation due to CoP Qsp_wF22IM... % spring Q }... % ); sus = addsuswire(sus,... % IM-RM n_wIM2RM,... % number of wires {},... % OPTIONS 'IM',... % upper body 'RM',... % lower body [... % GEOMETRIC PARAMETERS h1_wIM2RM,... % vertical position of upper SP h2_wIM2RM,... % vertical position of lower SP w1_wIM2RM,... % transversal position of upper SP d1_wIM2RM,... % longitudinal position of upper SP ],... l_wIM2RM,... % length d_wIM2RM,... % diameter m_wIM2RM,... % total load E_wIM2RM,... % Young's modulus G_wIM2RM,... % shear modulus Q_wIM2RM... % Q factor ); sus = addsuswire(sus,... % IM-TM n_wIM2TM,... % number of wires {},... % OPTIONS 'IM',... % upper body 'TM',... % lower body [... % GEOMETRIC PARAMETERS h1_wIM2TM,... % vertical position of upper SP h2_wIM2TM,... % vertical position of lower SP w1_wIM2TM,... % transversal position of upper SP d1_wIM2TM,... % longitudinal position of upper SP ],... l_wIM2TM,... % length d_wIM2TM,... % diameter m_wIM2TM,... % total load E_wIM2TM,... % Young's modulus G_wIM2TM,... % shear modulus Q_wIM2TM... % Q factor ); % Add damper sus = adddamper(sus,... % MD-F1 'GND',... % body1 'IR',... % body2 pos_dampGND,... % damping point at body1 pos_dampIR,... % damping point at body2 mat_dampGNDIR... % damping matrix ); % % Add inverted pendulum % sus = addinvpend(sus,... % GND-F0 % 'GND',... % base body % 'F0',... % supported body % m_ipGND2F0,... % total load [kg] % r_ipGND2F0,... % horizontal distance of leg from CoM [m] % l_ipGND2F0,... % leg length [m] % f_ipGND2F0,... % resonant frequency [Hz] % Q_ipGND2F0,... % quality factor of flexure % B_ipGND2F0,... % saturation level % kt_ipGND2F0... % additional torsion tiffness [Nm/rad] % ); %% BUILD SUSPENSION MODEL sus = buildsusmodel(sus); % make state-space matrix %% SIMULINK MODEL % input variables var_a_GND = {'accLGND','accTGND','accVGND','accRGND','accPGND','accYGND'}; % GND acceleration % var_d_GND = {'LGND','TGND','VGND','RGND','PGND','YGND'}; % GND displacement %var_a_F0 = {'actLF0','actTF0','actYF0'}; % F0 actuation var_a_IM = {'actLIM','actTIM','actVIM','actRIM','actPIM','actYIM'}; % IM actuation var_a_IR = {'actLIR','actTIR','actVIR','actRIR','actPIR','actYIR'}; % IR actuation var_a_RM = {'actLRM','actPRM','actYRM'}; % RM actuation var_a_TM = {'actLTM','actTTM','actVTM','actRTM','actPTM','actYTM'}; % TM actuation var_a_GAS = {'actVF1','actVF2'}; % GAS actuation % input variable list %invsim = [var_a_GND,var_a_F0,var_a_IM,var_a_IR,var_a_RM,var_a_TM,var_a_GAS]; invsim = [var_a_GND,var_a_IM,var_a_IR,var_a_RM,var_a_TM,var_a_GAS]; % output variables var_d_GND = {'LGND','TGND','VGND','YGND'}; % GND displacement %var_v_GND = {'velRGND','velPGND'}; % GND velocity %var_d_F0 = {'LF0','TF0','YF0'}; % F0 displacement %var_v_F0 = {'velLF0','velTF0','velYF0'}; % F0 velocity var_d_IM = {'LIM','TIM','VIM','RIM','PIM','YIM'}; % IM displacement var_d_IR = {'LIR','TIR','VIR','RIR','PIR','YIR'}; % IR displacement var_d_RM = {'LRM','PRM','YRM'}; % RM displacement var_d_TM = {'LTM','TTM','VTM','RTM','PTM','YTM'}; % TM displacement var_d_GAS = {'VF1','VF2','VIM'}; % GAS %% % output variable list %outvsim=[var_d_GND,var_v_GND,var_d_F0,var_v_F0,... % var_d_IM,var_d_IR,var_d_RM,var_d_TM,var_d_GAS]; outvsim=[var_d_GND,... var_d_IM,var_d_IR,var_d_RM,var_d_TM,var_d_GAS]; %% % simulink model sys1=sus.ss; % ss model constructsimmodel(... % CONSTRUCT SIMUKINK BLOCK MODEL 'typeBpsus_GndIRDmp',... % model name sys1,... % state-space model 'sys1',... % state-space model name invsim,... % input variables outvsim... % output variables ); % save('typeBpsusmdl_GndIRDmp','sys1','sus'); % save sus model %% Passive Calculation freq=logspace(-2,2,1001); bodesusplot(sys1,'actLIM','LIM',freq); %% Eigen eiglist=makeeigenlist(sus);