phd-nass-fem/index.org
2020-06-14 12:23:45 +02:00

14 KiB

Finite Element Model with Simscape

Amplified Piezoelectric Actuator - 3D elements

Introduction   ignore

The idea here is to:

  • export a FEM of an amplified piezoelectric actuator from Ansys to Matlab
  • import it into a Simscape model
  • compare the obtained dynamics
  • add 10kg mass on top of the actuator and identify the dynamics
  • compare with results from Ansys where 10kg are directly added to the FEM

Import Mass Matrix, Stiffness Matrix, and Interface Nodes Coordinates

We first extract the stiffness and mass matrices.

  K = extractMatrix('piezo_amplified_3d_K.txt');
  M = extractMatrix('piezo_amplified_3d_M.txt');

Then, we extract the coordinates of the interface nodes.

  [int_xyz, int_i, n_xyz, n_i, nodes] = extractNodes('piezo_amplified_3d.txt');
Total number of Nodes 168959
Number of interface Nodes 13
Number of Modes 30
Size of M and K matrices 108
/tdehaeze/phd-nass-fem/media/commit/ad93d4f1066f9a1d28ca544429c56d76f7783b3b/figs/amplified_piezo_interface_nodes.png
Interface Nodes for the Amplified Piezo Actuator
Node i Node Number x [m] y [m] z [m]
1.0 168947.0 0.0 0.03 0.0
2.0 168949.0 0.0 -0.03 0.0
3.0 168950.0 -0.035 0.0 0.0
4.0 168951.0 -0.028 0.0 0.0
5.0 168952.0 -0.021 0.0 0.0
6.0 168953.0 -0.014 0.0 0.0
7.0 168954.0 -0.007 0.0 0.0
8.0 168955.0 0.0 0.0 0.0
9.0 168956.0 0.007 0.0 0.0
10.0 168957.0 0.014 0.0 0.0
11.0 168958.0 0.021 0.0 0.0
12.0 168959.0 0.035 0.0 0.0
13.0 168960.0 0.028 0.0 0.0
Coordinates of the interface nodes
300000000.0 -30000.0 8000.0 -200.0 -30.0 -60000.0 20000000.0 -4000.0 500.0 8
-30000.0 100000000.0 400.0 30.0 200.0 -1 4000.0 -8000000.0 800.0 7
8000.0 400.0 50000000.0 -800000.0 -300.0 -40.0 300.0 100.0 5000000.0 40000.0
-200.0 30.0 -800000.0 20000.0 5 1 -10.0 -2 -40000.0 -300.0
-30.0 200.0 -300.0 5 40000.0 0.3 -4 -10.0 40.0 0.4
-60000.0 -1 -40.0 1 0.3 3000.0 7000.0 0.8 -1 0.0003
20000000.0 4000.0 300.0 -10.0 -4 7000.0 300000000.0 20000.0 3000.0 80.0
-4000.0 -8000000.0 100.0 -2 -10.0 0.8 20000.0 100000000.0 -4000.0 -100.0
500.0 800.0 5000000.0 -40000.0 40.0 -1 3000.0 -4000.0 50000000.0 800000.0
8 7 40000.0 -300.0 0.4 0.0003 80.0 -100.0 800000.0 20000.0
First 10x10 elements of the Stiffness matrix
0.03 2e-06 -2e-07 1e-08 2e-08 0.0002 -0.001 2e-07 -8e-08 -9e-10
2e-06 0.02 -5e-07 7e-09 3e-08 2e-08 -3e-07 0.0003 -1e-08 1e-10
-2e-07 -5e-07 0.02 -9e-05 4e-09 -1e-08 2e-07 -2e-08 -0.0006 -5e-06
1e-08 7e-09 -9e-05 1e-06 6e-11 4e-10 -1e-09 3e-11 5e-06 3e-08
2e-08 3e-08 4e-09 6e-11 1e-06 2e-10 -2e-09 2e-10 -7e-09 -4e-11
0.0002 2e-08 -1e-08 4e-10 2e-10 2e-06 -2e-06 -1e-09 -7e-10 -9e-12
-0.001 -3e-07 2e-07 -1e-09 -2e-09 -2e-06 0.03 -2e-06 -1e-07 -5e-09
2e-07 0.0003 -2e-08 3e-11 2e-10 -1e-09 -2e-06 0.02 -8e-07 -1e-08
-8e-08 -1e-08 -0.0006 5e-06 -7e-09 -7e-10 -1e-07 -8e-07 0.02 9e-05
-9e-10 1e-10 -5e-06 3e-08 -4e-11 -9e-12 -5e-09 -1e-08 9e-05 1e-06
First 10x10 elements of the Mass matrix

Using K, M and int_xyz, we can use the Reduced Order Flexible Solid simscape block.

Identification of the Dynamics

The flexible element is imported using the Reduced Order Flexible Solid simscape block.

To model the actuator, an Internal Force block is added between the first and second nodes. To model the sensors, a Relative Motion Sensor block is added between the second and the third nodes.

Two masses are fixed at the ends of the piezo-electric stack actuator.

We first set the mass to be zero.

  m = 0;

The dynamics is identified from the applied force to the measured relative displacement.

  %% Name of the Simulink File
  mdl = 'piezo_amplified_3d';

  %% Input/Output definition
  clear io; io_i = 1;
  io(io_i) = linio([mdl, '/F'], 1, 'openinput');  io_i = io_i + 1;
  io(io_i) = linio([mdl, '/y'], 1, 'openoutput'); io_i = io_i + 1;

  Gh = linearize(mdl, io);

Then, we add 10Kg of mass:

  m = 10;

And the dynamics is identified.

The two identified dynamics are compared in Figure fig:dynamics_act_disp_comp_mass.

  %% Name of the Simulink File
  mdl = 'piezo_amplified_3d';

  %% Input/Output definition
  clear io; io_i = 1;
  io(io_i) = linio([mdl, '/F'], 1, 'openinput');  io_i = io_i + 1;
  io(io_i) = linio([mdl, '/y'], 1, 'openoutput'); io_i = io_i + 1;

  Ghm = linearize(mdl, io);

/tdehaeze/phd-nass-fem/media/commit/ad93d4f1066f9a1d28ca544429c56d76f7783b3b/figs/dynamics_act_disp_comp_mass.png

Dynamics from $F$ to $d$ without a payload and with a 10kg payload

Comparison with Ansys

Let's import the results from an Harmonic response analysis in Ansys.

  Gresp0 = readtable('FEA_HarmResponse_00kg.txt');
  Gresp10 = readtable('FEA_HarmResponse_10kg.txt');

/tdehaeze/phd-nass-fem/media/commit/ad93d4f1066f9a1d28ca544429c56d76f7783b3b/figs/dynamics_force_disp_comp_anasys.png

Comparison of the obtained dynamics using Simscape with the harmonic response analysis using Ansys

Force Sensor

  m = 0;
  %% Name of the Simulink File
  mdl = 'piezo_amplified_3d';

  %% Input/Output definition
  clear io; io_i = 1;
  io(io_i) = linio([mdl, '/Fa'], 1, 'openinput');  io_i = io_i + 1;
  io(io_i) = linio([mdl, '/Fs'], 1, 'openoutput'); io_i = io_i + 1;

  Gf = linearize(mdl, io);
  m = 10;
  %% Name of the Simulink File
  mdl = 'piezo_amplified_3d';

  %% Input/Output definition
  clear io; io_i = 1;
  io(io_i) = linio([mdl, '/Fa'], 1, 'openinput');  io_i = io_i + 1;
  io(io_i) = linio([mdl, '/Fs'], 1, 'openoutput'); io_i = io_i + 1;

  Gfm = linearize(mdl, io);

/tdehaeze/phd-nass-fem/media/commit/ad93d4f1066f9a1d28ca544429c56d76f7783b3b/figs/dynamics_force_force_sensor_comp_mass.png

Dynamics from $F$ to $F_m$ for $m=0$ and $m = 10kg$