diff --git a/figs/test_bench_leg_coder.jpg b/figs/test_bench_leg_coder.jpg deleted file mode 100644 index f7ff942..0000000 Binary files a/figs/test_bench_leg_coder.jpg and /dev/null differ diff --git a/figs/test_bench_leg_front.jpg b/figs/test_bench_leg_front.jpg deleted file mode 100644 index 3e2e0cd..0000000 Binary files a/figs/test_bench_leg_front.jpg and /dev/null differ diff --git a/figs/test_bench_leg_overview.jpg b/figs/test_bench_leg_overview.jpg deleted file mode 100644 index 7e39fc3..0000000 Binary files a/figs/test_bench_leg_overview.jpg and /dev/null differ diff --git a/figs/test_bench_leg_side.jpg b/figs/test_bench_leg_side.jpg deleted file mode 100644 index e5f18d5..0000000 Binary files a/figs/test_bench_leg_side.jpg and /dev/null differ diff --git a/figs/test_struts_bench_leg_coder.jpg b/figs/test_struts_bench_leg_coder.jpg new file mode 100644 index 0000000..fd3349f Binary files /dev/null and b/figs/test_struts_bench_leg_coder.jpg differ diff --git a/figs/test_struts_bench_leg_front.jpg b/figs/test_struts_bench_leg_front.jpg new file mode 100644 index 0000000..c4b3335 Binary files /dev/null and b/figs/test_struts_bench_leg_front.jpg differ diff --git a/figs/test_struts_bench_leg_overview.jpg b/figs/test_struts_bench_leg_overview.jpg new file mode 100644 index 0000000..b0c882f Binary files /dev/null and b/figs/test_struts_bench_leg_overview.jpg differ diff --git a/figs/check_dimensions_bench.jpg b/figs/test_struts_check_dimensions_bench.jpg similarity index 100% rename from figs/check_dimensions_bench.jpg rename to figs/test_struts_check_dimensions_bench.jpg diff --git a/figs/cylindrical_mounting_part.jpg b/figs/test_struts_cylindrical_mounting_part.jpg similarity index 100% rename from figs/cylindrical_mounting_part.jpg rename to figs/test_struts_cylindrical_mounting_part.jpg diff --git a/figs/meas_spur_res_struts_1_enc.jpg b/figs/test_struts_meas_spur_res_struts_1_enc.jpg similarity index 100% rename from figs/meas_spur_res_struts_1_enc.jpg rename to figs/test_struts_meas_spur_res_struts_1_enc.jpg diff --git a/figs/meas_spur_res_struts_2.jpg b/figs/test_struts_meas_spur_res_struts_2.jpg similarity index 100% rename from figs/meas_spur_res_struts_2.jpg rename to figs/test_struts_meas_spur_res_struts_2.jpg diff --git a/figs/meas_spur_res_struts_2_encoder.jpg b/figs/test_struts_meas_spur_res_struts_2_encoder.jpg similarity index 100% rename from figs/meas_spur_res_struts_2_encoder.jpg rename to figs/test_struts_meas_spur_res_struts_2_encoder.jpg diff --git a/figs/meas_spur_res_struts_3.jpg b/figs/test_struts_meas_spur_res_struts_3.jpg similarity index 100% rename from figs/meas_spur_res_struts_3.jpg rename to figs/test_struts_meas_spur_res_struts_3.jpg diff --git a/figs/test_struts_mode_shapes.pdf b/figs/test_struts_mode_shapes.pdf new file mode 100644 index 0000000..717a0b5 Binary files /dev/null and b/figs/test_struts_mode_shapes.pdf differ diff --git a/figs/test_struts_mode_shapes.png b/figs/test_struts_mode_shapes.png new file mode 100644 index 0000000..bfccc20 Binary files /dev/null and b/figs/test_struts_mode_shapes.png differ diff --git a/figs/mounted_strut.jpg b/figs/test_struts_mounted_strut.jpg similarity index 100% rename from figs/mounted_strut.jpg rename to figs/test_struts_mounted_strut.jpg diff --git a/figs/mounted_strut.svg b/figs/test_struts_mounted_strut.svg similarity index 100% rename from figs/mounted_strut.svg rename to figs/test_struts_mounted_strut.svg diff --git a/figs/strut_mounting_bench_first_concept.pdf b/figs/test_struts_mounting_bench_first_concept.pdf similarity index 100% rename from figs/strut_mounting_bench_first_concept.pdf rename to figs/test_struts_mounting_bench_first_concept.pdf diff --git a/figs/strut_mounting_bench_first_concept.png b/figs/test_struts_mounting_bench_first_concept.png similarity index 100% rename from figs/strut_mounting_bench_first_concept.png rename to figs/test_struts_mounting_bench_first_concept.png diff --git a/figs/strut_mounting_step_0.jpg b/figs/test_struts_mounting_step_0.jpg similarity index 100% rename from figs/strut_mounting_step_0.jpg rename to figs/test_struts_mounting_step_0.jpg diff --git a/figs/strut_mounting_step_0.svg b/figs/test_struts_mounting_step_0.svg similarity index 100% rename from figs/strut_mounting_step_0.svg rename to figs/test_struts_mounting_step_0.svg diff --git a/figs/strut_mounting_step_1.jpg b/figs/test_struts_mounting_step_1.jpg similarity index 100% rename from figs/strut_mounting_step_1.jpg rename to figs/test_struts_mounting_step_1.jpg diff --git a/figs/strut_mounting_step_1.svg b/figs/test_struts_mounting_step_1.svg similarity index 100% rename from figs/strut_mounting_step_1.svg rename to figs/test_struts_mounting_step_1.svg diff --git a/figs/strut_mounting_step_2.jpg b/figs/test_struts_mounting_step_2.jpg similarity index 100% rename from figs/strut_mounting_step_2.jpg rename to figs/test_struts_mounting_step_2.jpg diff --git a/figs/strut_mounting_step_2.svg b/figs/test_struts_mounting_step_2.svg similarity index 100% rename from figs/strut_mounting_step_2.svg rename to figs/test_struts_mounting_step_2.svg diff --git a/figs/strut_mounting_step_3.jpg b/figs/test_struts_mounting_step_3.jpg similarity index 100% rename from figs/strut_mounting_step_3.jpg rename to figs/test_struts_mounting_step_3.jpg diff --git a/figs/strut_mounting_step_3.svg b/figs/test_struts_mounting_step_3.svg similarity index 100% rename from figs/strut_mounting_step_3.svg rename to figs/test_struts_mounting_step_3.svg diff --git a/figs/strut_mounting_step_4.jpg b/figs/test_struts_mounting_step_4.jpg similarity index 100% rename from figs/strut_mounting_step_4.jpg rename to figs/test_struts_mounting_step_4.jpg diff --git a/figs/strut_mounting_step_4.svg b/figs/test_struts_mounting_step_4.svg similarity index 100% rename from figs/strut_mounting_step_4.svg rename to figs/test_struts_mounting_step_4.svg diff --git a/figs/picture_strut_top_view.jpg b/figs/test_struts_picture_strut.jpg similarity index 100% rename from figs/picture_strut_top_view.jpg rename to figs/test_struts_picture_strut.jpg diff --git a/figs/test_struts_simscape_model.pdf b/figs/test_struts_simscape_model.pdf new file mode 100644 index 0000000..f1d1cdb Binary files /dev/null and b/figs/test_struts_simscape_model.pdf differ diff --git a/figs/test_struts_simscape_model.png b/figs/test_struts_simscape_model.png new file mode 100644 index 0000000..c48fe5f Binary files /dev/null and b/figs/test_struts_simscape_model.png differ diff --git a/figs/test_struts_spur_res_frf.pdf b/figs/test_struts_spur_res_frf.pdf new file mode 100644 index 0000000..78f6ec8 Binary files /dev/null and b/figs/test_struts_spur_res_frf.pdf differ diff --git a/figs/test_struts_spur_res_frf.png b/figs/test_struts_spur_res_frf.png new file mode 100644 index 0000000..b83bab8 Binary files /dev/null and b/figs/test_struts_spur_res_frf.png differ diff --git a/figs/test_struts_spur_res_frf_enc.pdf b/figs/test_struts_spur_res_frf_enc.pdf new file mode 100644 index 0000000..a685d17 Binary files /dev/null and b/figs/test_struts_spur_res_frf_enc.pdf differ diff --git a/figs/test_struts_spur_res_frf_enc.png b/figs/test_struts_spur_res_frf_enc.png new file mode 100644 index 0000000..9686cec Binary files /dev/null and b/figs/test_struts_spur_res_frf_enc.png differ diff --git a/test-bench-struts.org b/test-bench-struts.org index 16ac151..ce5adc0 100644 --- a/test-bench-struts.org +++ b/test-bench-struts.org @@ -97,7 +97,7 @@ * Notes :noexport: -- Prefix for figures/section/tables =test_bench_struts= +Prefix for figures/section/tables =test_struts= To integrate: - [X] [[file:~/Cloud/work-projects/ID31-NASS/matlab/test-bench-strut-mounting/test-bench-strut-mounting.org][test-bench-strut-mounting]] @@ -105,73 +105,79 @@ To integrate: - [X] Dynamical measurements (Section 5) - [X] Simscape model (Section 6) - [ ] Check what are the used Matlab functions -- [ ] check [[file:~/Cloud/work-projects/ID31-NASS/matlab/test-bench-apa300ml/test-bench-apa300ml.org::*Compare with the FEM/Simscape Model][Compare with the FEM/Simscape Model]] -- [ ] Check [[file:~/Cloud/work-projects/ID31-NASS/matlab/test-bench-apa300ml/test-bench-apa300ml.org::*New Measurements - IFF Root Locus][New Measurements - IFF Root Locus]] +- [X] check [[file:~/Cloud/work-projects/ID31-NASS/matlab/test-bench-apa300ml/test-bench-apa300ml.org::*Compare with the FEM/Simscape Model][Compare with the FEM/Simscape Model]] + *no, it is only for the APA and not the strut* +- [X] Check [[file:~/Cloud/work-projects/ID31-NASS/matlab/test-bench-apa300ml/test-bench-apa300ml.org::*New Measurements - IFF Root Locus][New Measurements - IFF Root Locus]] + *no, it is only for the APA and not the strut* + +** TODO [#B] Make the simscape model work * Introduction :ignore: In this document, a test-bench is used to characterize the struts of the nano-hexapod. -Each strut includes (Figure ref:fig:picture_strut_top_view): +Each strut includes (Figure ref:fig:test_struts_picture_strut): - 2 flexible joints at each ends. These flexible joints have been characterized in a separate test bench (see ...). - 1 Amplified Piezoelectric Actuator (APA300ML) (described in Section ...). Two stacks are used as an actuator and one stack as a (force) sensor. - 1 encoder (Renishaw Vionic) that has been characterized in a separate test bench (see ...). -#+name: fig:picture_strut_top_view +#+name: fig:test_struts_picture_strut #+caption: One strut including two flexible joints, an amplified piezoelectric actuator and an encoder #+attr_latex: :width 0.8\linewidth -[[file:figs/picture_strut_top_view.jpg]] +[[file:figs/test_struts_picture_strut.jpg]] -Then the struts are mounted (procedure described in Section ref:sec:test_bench_struts_mounting), and are fixed to the same measurement bench. +Then the struts are mounted (procedure described in Section ref:sec:test_struts_mounting), and are fixed to the same measurement bench. The goals are to: -- Section ref:sec:test_bench_struts_dynamical_meas: Identify the dynamics from the generated DAC voltage to: +- Section ref:sec:test_struts_dynamical_meas: Identify the dynamics from the generated DAC voltage to: - the sensors stack generated voltage - the measured displacement by the encoder - the measured displacement by the interferometer (representing encoders that would be fixed to the nano-hexapod's plates instead of the struts) -- Section ref:sec:test_bench_struts_simscape: Compare the measurements with the Simscape model of the struts and tune the models +- Section ref:sec:test_struts_simscape: Compare the measurements with the Simscape model of the struts and tune the models The final goal of the work presented in this document is to have an accurate Simscape model of the struts that can then be included in the Simscape model of the nano-hexapod. -#+name: tab:test_bench_struts_section_matlab_code +#+name: tab:test_struts_section_matlab_code #+caption: Report sections and corresponding Matlab files #+attr_latex: :environment tabularx :width 0.6\linewidth :align lX #+attr_latex: :center t :booktabs t -| *Sections* | *Matlab File* | -|----------------------------------+------------------------| -| Section ref:sec:test_bench_struts_ | =test_bench_struts_1_.m= | +| *Sections* | *Matlab File* | +|--------------------------------------------+----------------------------------| +| Section ref:sec:test_struts_flexible_modes | =test_struts_1_flexible_modes.m= | +| Section ref:sec:test_struts_dynamical_meas | =test_struts_2_dynamical_meas.m= | +| Section ref:sec:test_struts_mounting | =test_struts_3_simscape_model.m= | * Mounting Procedure -<> +<> ** Introduction :ignore: ** Mounting Bench A mounting bench is used to greatly simply the mounting of the struts as well as ensuring the correct strut length and coaxiality of the flexible joint's interfaces. This is very important in order to not loose any stroke when the struts will be mounted on the nano-hexapod. -A CAD view of the mounting bench is shown in Figure ref:fig:strut_mounting_bench_first_concept. +A CAD view of the mounting bench is shown in Figure ref:fig:test_struts_mounting_bench_first_concept. -#+name: fig:strut_mounting_bench_first_concept +#+name: fig:test_struts_mounting_bench_first_concept #+caption: CAD view of the mounting bench #+attr_latex: :width \linewidth -[[file:figs/strut_mounting_bench_first_concept.png]] +[[file:figs/test_struts_mounting_bench_first_concept.png]] -The main part of the bench is here to ensure both the correct strut length and strut coaxiality as shown in Figure ref:fig:strut_mounting_step_0. +The main part of the bench is here to ensure both the correct strut length and strut coaxiality as shown in Figure ref:fig:test_struts_mounting_step_0. -#+name: fig:strut_mounting_step_0 +#+name: fig:test_struts_mounting_step_0 #+caption: Useful features of the main mounting element #+attr_latex: :width \linewidth -[[file:figs/strut_mounting_step_0.jpg]] +[[file:figs/test_struts_mounting_step_0.jpg]] -The tight tolerances of this element has been verified as shown in Figure ref:fig:strut_mounting_bench_first_concept and were found to comply with the requirements. +The tight tolerances of this element has been verified as shown in Figure ref:fig:test_struts_mounting_bench_first_concept and were found to comply with the requirements. -#+name: fig:strut_mounting_bench_first_concept +#+name: fig:test_struts_mounting_bench_first_concept #+caption: Dimensional verifications of the mounting bench tolerances #+attr_latex: :width \linewidth [[file:figs/check_dimensions_bench.jpg]] -The flexible joints are rigidly fixed to cylindrical tools shown in Figure ref:fig:cylindrical_mounting_part which are then mounted on the mounting tool shown in Figure ref:fig:strut_mounting_step_0. +The flexible joints are rigidly fixed to cylindrical tools shown in Figure ref:fig:cylindrical_mounting_part which are then mounted on the mounting tool shown in Figure ref:fig:test_struts_mounting_step_0. This cylindrical tool is here to protect the flexible joints when tightening the screws and therefore applying large torque. #+name: fig:cylindrical_mounting_part @@ -182,59 +188,67 @@ This cylindrical tool is here to protect the flexible joints when tightening the ** Mounting Procedure The mounting procedure is as follows: -1. Screw flexible joints inside the cylindrical interface element shown in Figure ref:fig:cylindrical_mounting_part (Figure ref:fig:strut_mounting_step_1) +1. Screw flexible joints inside the cylindrical interface element shown in Figure ref:fig:cylindrical_mounting_part (Figure ref:fig:test_struts_mounting_step_1) 2. Fix the two interface elements. One of the two should be clamped, the other one should have its axial rotation free. - Visually align the clamped one horizontally. (Figure ref:fig:strut_mounting_step_2) -3. Put cylindrical washers, APA and interface pieces on top of the flexible joints (Figure ref:fig:strut_mounting_step_3) + Visually align the clamped one horizontally. (Figure ref:fig:test_struts_mounting_step_2) +3. Put cylindrical washers, APA and interface pieces on top of the flexible joints (Figure ref:fig:test_struts_mounting_step_3) 4. Put the 4 screws just in contact such that everything is correctly positioned and such that the "free" flexible joint is correctly oriented 5. Put the 8 lateral screws in contact 6. Tighten the 4 screws to fix the APA on the two flexible joints (using a torque screwdriver) 7. Remove the 4 laterals screws -8. (optional) Put the APA horizontally and fix the encoder and align it to maximize the contrast (Figure ref:fig:strut_mounting_step_4) +8. (optional) Put the APA horizontally and fix the encoder and align it to maximize the contrast (Figure ref:fig:test_struts_mounting_step_4) -#+name: fig:strut_mounting_step_1 +#+name: fig:test_struts_mounting_step_1 #+caption: Step 1 - Flexible joints fixed on the cylindrical interface elements #+attr_latex: :width 0.5\linewidth -[[file:figs/strut_mounting_step_1.jpg]] +[[file:figs/test_struts_mounting_step_1.jpg]] -#+name: fig:strut_mounting_step_2 +#+name: fig:test_struts_mounting_step_2 #+caption: Step 2 - Cylindrical elements fixed on the bench #+attr_latex: :width \linewidth -[[file:figs/strut_mounting_step_2.jpg]] +[[file:figs/test_struts_mounting_step_2.jpg]] -#+name: fig:strut_mounting_step_3 +#+name: fig:test_struts_mounting_step_3 #+caption: Step 3 - Mount the nuts, washers and APA #+attr_latex: :width \linewidth -[[file:figs/strut_mounting_step_3.jpg]] +[[file:figs/test_struts_mounting_step_3.jpg]] -#+name: fig:strut_mounting_step_4 +#+name: fig:test_struts_mounting_step_4 #+caption: Last step - Align the encoder on the strut #+attr_latex: :width \linewidth -[[file:figs/strut_mounting_step_4.jpg]] +[[file:figs/test_struts_mounting_step_4.jpg]] ** Mounted Struts -After removing the strut from the mounting bench, we obtain a strut with ensured coaxiality between the two flexible joint's interfaces (Figure ref:fig:mounted_strut). +After removing the strut from the mounting bench, we obtain a strut with ensured coaxiality between the two flexible joint's interfaces (Figure ref:fig:test_struts_mounted_strut). -#+name: fig:mounted_strut +#+name: fig:test_struts_mounted_strut #+caption: Mounted Strut with ensured coaxiality #+attr_latex: :width \linewidth -[[file:figs/mounted_strut.jpg]] +[[file:figs/test_struts_mounted_strut.jpg]] * Spurious resonances :PROPERTIES: -:header-args:matlab+: :tangle matlab/basic_meas_spurious_res_struts.m +:header-args:matlab+: :tangle matlab/test_struts_1_flexible_modes.m :END: -<> +<> ** Introduction -Similarly as in Section ref:sec:spurious_resonances, the spurious modes of the struts (Figure ref:fig:apa_mode_shapes_ter) are measured. - These modes are present when flexible joints are fixed to the ends of the APA300ML. To experimentally measure the frequency of these modes, the struts are mounted (both with and without the encoder). -Then, each end of the strut is fixed to a vertically guided stage as shown in Figure ref:fig:meas_spur_res_struts_1_enc. +Then, each end of the strut is fixed to a vertically guided stage as shown in Figure ref:fig:test_struts_meas_spur_res_struts_1_enc. -** Matlab Init :noexport:ignore: +From a Finite Element Model of the struts, it have been found that three main resonances are foreseen to be problematic for the control of the APA300ML (Figure ref:fig:test_struts_mode_shapes): +- Mode in X-bending at 189Hz +- Mode in Y-bending at 285Hz +- Mode in Z-torsion at 400Hz + +#+name: fig:test_struts_mode_shapes +#+caption: Spurious resonances of the struts estimated from a Finite Element Model. a) X-bending mode at 189Hz. b) Y-bending mode at 285Hz. c) Z-torsion mode at 400Hz +#+attr_latex: :width \linewidth +[[file:figs/test_struts_mode_shapes.png]] + +** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) <> #+end_src @@ -243,22 +257,21 @@ Then, each end of the strut is fixed to a vertically guided stage as shown in Fi <> #+end_src -#+begin_src matlab -colors = colororder; +#+begin_src matlab :tangle no :noweb yes +<> #+end_src -#+begin_src matlab :tangle no -addpath('matlab/'); -addpath('matlab/mat/'); +#+begin_src matlab :eval no :noweb yes +<> #+end_src -#+begin_src matlab :eval no -addpath('mat/'); +#+begin_src matlab :noweb yes +<> #+end_src ** Measurement Setup -A Laser vibrometer is measuring the difference of motion between two points (Figure ref:fig:meas_spur_res_struts_1_enc). +A Laser vibrometer is measuring the difference of motion between two points (Figure ref:fig:test_struts_meas_spur_res_struts_1_enc). The APA is excited with an instrumented hammer and the transfer function from the hammer to the measured rotation is computed. #+begin_note @@ -267,32 +280,32 @@ The instrumentation used are: - Instrumented hammer #+end_note -The "X-bending" mode is measured as shown in Figure ref:fig:meas_spur_res_struts_1_enc. -The "Y-bending" mode is measured as shown in Figure ref:fig:meas_spur_res_struts_2 with the encoder and in Figure ref:fig:meas_spur_res_struts_2_encoder with the encoder. -Finally, the "Z-torsion" is measured as shown in Figure ref:fig:meas_spur_res_struts_3. +The "X-bending" mode is measured as shown in Figure ref:fig:test_struts_meas_spur_res_struts_1_enc. +The "Y-bending" mode is measured as shown in Figure ref:fig:test_struts_meas_spur_res_struts_2 with the encoder and in Figure ref:fig:test_struts_meas_spur_res_struts_2_encoder with the encoder. +Finally, the "Z-torsion" is measured as shown in Figure ref:fig:test_struts_meas_spur_res_struts_3. -#+name: fig:meas_spur_res_struts_1_enc +#+name: fig:test_struts_meas_spur_res_struts_1_enc #+caption: Measurement setup for the X-Bending measurement (with the encoder) #+attr_latex: :width \linewidth -[[file:figs/meas_spur_res_struts_1_enc.jpg]] +[[file:figs/test_struts_meas_spur_res_struts_1_enc.jpg]] -#+name: fig:meas_spur_res_struts_2 +#+name: fig:test_struts_meas_spur_res_struts_2 #+caption: Measurement setup for the Y-Bending measurement #+attr_latex: :width \linewidth -[[file:figs/meas_spur_res_struts_2.jpg]] +[[file:figs/test_struts_meas_spur_res_struts_2.jpg]] -#+name: fig:meas_spur_res_struts_2_encoder +#+name: fig:test_struts_meas_spur_res_struts_2_encoder #+caption: Measurement setup for the Y-Bending measurement (with the encoder) #+attr_latex: :width \linewidth -[[file:figs/meas_spur_res_struts_2_encoder.jpg]] +[[file:figs/test_struts_meas_spur_res_struts_2_encoder.jpg]] -#+name: fig:meas_spur_res_struts_3 +#+name: fig:test_struts_meas_spur_res_struts_3 #+caption: Measurement setup for the Z-Torsion measurement #+attr_latex: :width 0.8\linewidth -[[file:figs/meas_spur_res_struts_3.jpg]] +[[file:figs/test_struts_meas_spur_res_struts_3.jpg]] ** Without Encoder -When the encoder is not fixed to the strut, the obtained FRF are shown in Figure ref:fig:struts_spur_res_without_enc. +When the encoder is not fixed to the strut, the obtained FRF are shown in Figure ref:fig:test_struts_spur_res_frf. #+begin_src matlab :exports none %% Load Data (without the encoder) @@ -322,16 +335,16 @@ legend('location', 'northwest'); #+end_src #+begin_src matlab :tangle no :exports results :results file replace -exportFig('figs/struts_spur_res_without_enc.pdf', 'width', 'wide', 'height', 'normal'); +exportFig('figs/test_struts_spur_res_frf.pdf', 'width', 'wide', 'height', 'normal'); #+end_src -#+name: fig:struts_spur_res_without_enc +#+name: fig:test_struts_spur_res_frf #+caption: Obtained FRF for the struts without the encoder #+RESULTS: -[[file:figs/struts_spur_res_without_enc.png]] +[[file:figs/test_struts_spur_res_frf.png]] ** With Encoder -Then, one encoder is fixed to the strut and the FRF are measured again and shown in Figure ref:fig:struts_spur_res_with_enc. +Then, one encoder is fixed to the strut and the FRF are measured again and shown in Figure ref:fig:test_struts_spur_res_frf_enc. #+begin_src matlab :exports none %% Load Data (with the encoder) bending_X_enc = load('strut_spur_res_x_bending_enc.mat'); @@ -360,25 +373,25 @@ legend('location', 'northwest'); #+end_src #+begin_src matlab :tangle no :exports results :results file replace -exportFig('figs/struts_spur_res_with_enc.pdf', 'width', 'wide', 'height', 'normal'); +exportFig('figs/test_struts_spur_res_frf_enc.pdf', 'width', 'wide', 'height', 'normal'); #+end_src -#+name: fig:struts_spur_res_with_enc +#+name: fig:test_struts_spur_res_frf_enc #+caption: Obtained FRF for the struts with encoder #+RESULTS: -[[file:figs/struts_spur_res_with_enc.png]] +[[file:figs/test_struts_spur_res_frf_enc.png]] ** Conclusion -Table ref:tab:strut_measured_modes_freq summarizes the measured resonance frequencies as well as the computed ones using the Finite Element Model. +Table ref:tab:test_struts_spur_mode_freqs summarizes the measured resonance frequencies as well as the computed ones using the Finite Element Model. #+begin_important -From the values in Table ref:tab:strut_measured_modes_freq, it is shown that: +From the values in Table ref:tab:test_struts_spur_mode_freqs, it is shown that: - the resonance frequencies of the 3 modes are only slightly increasing when the encoder is removed - the computed resonance frequencies from the FEM are very close to the measured one when the encoder is fixed to the strut #+end_important -#+name: tab:strut_measured_modes_freq +#+name: tab:test_struts_spur_mode_freqs #+caption: Measured frequency of the strut spurious modes #+attr_latex: :environment tabularx :width 0.45\linewidth :align cccc #+attr_latex: :center t :booktabs t :float t @@ -389,46 +402,40 @@ From the values in Table ref:tab:strut_measured_modes_freq, it is shown that: | Z-Torsion | 400Hz | 381Hz | 398Hz | * Dynamical measurements -<> -** Introduction :ignore: -The same bench used in Section ref:sec:dynamical_meas_apa is here used with the strut instead of only the APA. - -The bench is shown in Figure ref:fig:test_bench_leg_overview. -Measurements are performed either when no encoder is fixed to the strut (Figure ref:fig:test_bench_leg_front) or when one encoder is fixed to the strut (Figure ref:fig:test_bench_leg_coder). - -#+name: fig:test_bench_leg_overview -#+caption: Test Bench with Strut - Overview -#+attr_latex: :width 0.5\linewidth -[[file:figs/test_bench_leg_overview.jpg]] - -#+name: fig:test_bench_leg_front -#+caption: Test Bench with Strut - Zoom on the strut -#+attr_latex: :width 0.5\linewidth -[[file:figs/test_bench_leg_front.jpg]] - -#+name: fig:test_bench_leg_coder -#+caption: Test Bench with Strut - Zoom on the strut with the encoder -#+attr_latex: :width 0.5\linewidth -[[file:figs/test_bench_leg_coder.jpg]] - -Variables are named the same as in Section ref:sec:dynamical_meas_apa. - -First, only one strut is measured in details (Section ref:sec:meas_strut_1), and then all the struts are measured and compared (Section ref:sec:meas_all_struts). - -** Measurement on Strut 1 :PROPERTIES: -:header-args:matlab+: :tangle matlab/strut_meas_analysis_1.m +:header-args:matlab+: :tangle matlab/test_struts_2_dynamical_meas.m :END: -<> -*** Introduction :ignore: -Measurements are first performed on one of the strut that contains: -- the Amplified Piezoelectric Actuator (APA) number 1 -- flexible joints 1 and 2 +<> +** Introduction :ignore: +The bench is shown in Figure ref:fig:test_struts_bench_leg_overview. +Measurements are performed either when no encoder is fixed to the strut (Figure ref:fig:test_struts_bench_leg_front) or when one encoder is fixed to the strut (Figure ref:fig:test_struts_bench_leg_coder). -In Section ref:sec:meas_strut_1_no_encoder, the dynamics of the strut is measured without the encoder attached to it. -Then in Section ref:sec:meas_strut_1_encoder, the encoder is attached to the struts, and the dynamic is identified. +#+name: fig:test_struts_bench_leg +#+caption: Experimental setup to measured the dynamics of the struts. +#+begin_figure +#+attr_latex: :caption \subcaption{\label{fig:test_struts_bench_leg_overview}Overview} +#+attr_latex: :options {0.35\textwidth} +#+begin_subfigure +#+attr_latex: :width 0.99\linewidth +[[file:figs/test_struts_bench_leg_overview.jpg]] +#+end_subfigure +#+attr_latex: :caption \subcaption{\label{fig:test_struts_bench_leg_front}Strut without encoder} +#+attr_latex: :options {0.31\textwidth} +#+begin_subfigure +#+attr_latex: :width 0.99\linewidth +[[file:figs/test_struts_bench_leg_front.jpg]] +#+end_subfigure +#+attr_latex: :caption \subcaption{\label{fig:test_struts_bench_leg_coder}Strut with encoder} +#+attr_latex: :options {0.31\textwidth} +#+begin_subfigure +#+attr_latex: :width 0.99\linewidth +[[file:figs/test_struts_bench_leg_coder.jpg]] +#+end_subfigure +#+end_figure -*** Matlab Init :noexport:ignore: +First, only one strut is measured in details (Section ref:ssec:test_struts_meas_strut_1), and then all the struts are measured and compared (Section ref:ssec:test_struts_meas_all_struts). + +** Matlab Init :noexport:ignore: #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) <> #+end_src @@ -437,21 +444,28 @@ Then in Section ref:sec:meas_strut_1_encoder, the encoder is attached to the str <> #+end_src -#+begin_src matlab -colors = colororder; +#+begin_src matlab :tangle no :noweb yes +<> #+end_src -#+begin_src matlab :tangle no -addpath('./matlab/mat/'); -addpath('./matlab/src/'); -addpath('./matlab/'); +#+begin_src matlab :eval no :noweb yes +<> #+end_src -#+begin_src matlab :eval no -addpath('./mat/'); -addpath('./src/'); +#+begin_src matlab :noweb yes +<> #+end_src +** Measurement on Strut 1 +<> +*** Introduction :ignore: +Measurements are first performed on one of the strut that contains: +- the Amplified Piezoelectric Actuator (APA) number 1 +- flexible joints 1 and 2 + +In Section ref:sec:meas_strut_1_no_encoder, the dynamics of the strut is measured without the encoder attached to it. +Then in Section ref:sec:meas_strut_1_encoder, the encoder is attached to the struts, and the dynamic is identified. + *** Without Encoder <> **** FRF Identification - Setup @@ -467,8 +481,8 @@ Then, the result of the second identification is used between 10Hz and 350Hz and #+begin_src matlab %% Load Data -leg_sweep = load(sprintf('frf_data_leg_%i_sweep.mat', 1), 't', 'Va', 'Vs', 'de', 'da'); -leg_noise_hf = load(sprintf('frf_data_leg_%i_noise_hf.mat', 1), 't', 'Va', 'Vs', 'de', 'da'); +leg_sweep = load('frf_data_leg_1_sweep.mat', 't', 'Va', 'Vs', 'de', 'da'); +leg_noise_hf = load('frf_data_leg_1_noise_hf.mat', 't', 'Va', 'Vs', 'de', 'da'); #+end_src The time is the same for all measurements. @@ -477,19 +491,17 @@ The time is the same for all measurements. t = leg_sweep.t - leg_sweep.t(1) ; % Time vector [s] %% Sampling frequency/time -Ts = (t(end) - t(1))/(length(t)-1); % Sampling Time [s] +Ts = 1e-4; % Sampling Time [s] Fs = 1/Ts; % Sampling Frequency [Hz] -#+end_src - -Then we defined a "Hanning" windows that will be used for the spectral analysis: -#+begin_src matlab -win = hanning(ceil(0.5*Fs)); % Hannning Windows +Nfft = floor(1/Ts); +win = hanning(Nfft); +Noverlap = floor(Nfft/2); #+end_src We get the frequency vector that will be the same for all the frequency domain analysis. #+begin_src matlab % Only used to have the frequency vector "f" -[~, f] = tfestimate(leg_sweep.Va, leg_sweep.de, win, [], [], 1/Ts); +[~, f] = tfestimate(leg_sweep.Va, leg_sweep.de, win, Noverlap, Nfft, 1/Ts); i_lf = f <= 350; % Indices used for the low frequency i_hf = f > 350; % Indices used for the low frequency #+end_src @@ -500,8 +512,8 @@ In this section, the dynamics from the excitation voltage $V_a$ to the interfero We compute the coherence for 2nd and 3rd identification and combine them. #+begin_src matlab %% Compute the coherence for both excitation signals -[int_coh_sweep, ~] = mscohere(leg_sweep.Va, leg_sweep.da, win, [], [], 1/Ts); -[int_coh_noise_hf, ~] = mscohere(leg_noise_hf.Va, leg_noise_hf.da, win, [], [], 1/Ts); +[int_coh_sweep, ~] = mscohere(leg_sweep.Va, leg_sweep.da, win, Noverlap, Nfft, 1/Ts); +[int_coh_noise_hf, ~] = mscohere(leg_noise_hf.Va, leg_noise_hf.da, win, Noverlap, Nfft, 1/Ts); %% Combine the coherence int_coh = [int_coh_sweep(i_lf); int_coh_noise_hf(i_hf)]; @@ -532,8 +544,8 @@ exportFig('figs/strut_1_frf_dvf_plant_coh.pdf', 'width', 'wide', 'height', 'norm The transfer function from $V_a$ to the interferometer measured displacement $d_a$ is estimated and shown in Figure ref:fig:strut_1_frf_dvf_plant_tf. #+begin_src matlab %% Compute FRF function from Va to da -[frf_sweep, ~] = tfestimate(leg_sweep.Va, leg_sweep.da, win, [], [], 1/Ts); -[frf_noise_hf, ~] = tfestimate(leg_noise_hf.Va, leg_noise_hf.da, win, [], [], 1/Ts); +[frf_sweep, ~] = tfestimate(leg_sweep.Va, leg_sweep.da, win, Noverlap, Nfft, 1/Ts); +[frf_noise_hf, ~] = tfestimate(leg_noise_hf.Va, leg_noise_hf.da, win, Noverlap, Nfft, 1/Ts); %% Combine the FRF int_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; @@ -542,7 +554,7 @@ int_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; #+begin_src matlab :exports none %% Plot the measured FRF figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -584,8 +596,8 @@ It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the ex #+begin_src matlab %% Compute the coherence for both excitation signals -[iff_coh_sweep, ~] = mscohere(leg_sweep.Va, leg_sweep.Vs, win, [], [], 1/Ts); -[iff_coh_noise_hf, ~] = mscohere(leg_noise_hf.Va, leg_noise_hf.Vs, win, [], [], 1/Ts); +[iff_coh_sweep, ~] = mscohere(leg_sweep.Va, leg_sweep.Vs, win, Noverlap, Nfft, 1/Ts); +[iff_coh_noise_hf, ~] = mscohere(leg_noise_hf.Va, leg_noise_hf.Vs, win, Noverlap, Nfft, 1/Ts); %% Combine the coherence iff_coh = [iff_coh_sweep(i_lf); iff_coh_noise_hf(i_hf)]; @@ -614,8 +626,8 @@ exportFig('figs/strut_1_frf_iff_plant_coh.pdf', 'width', 'wide', 'height', 'norm Then the FRF are estimated and shown in Figure ref:fig:strut_1_frf_iff_plant_tf #+begin_src matlab %% Compute the FRF -[frf_sweep, ~] = tfestimate(leg_sweep.Va, leg_sweep.Vs, win, [], [], 1/Ts); -[frf_noise_hf, ~] = tfestimate(leg_noise_hf.Va, leg_noise_hf.Vs, win, [], [], 1/Ts); +[frf_sweep, ~] = tfestimate(leg_sweep.Va, leg_sweep.Vs, win, Noverlap, Nfft, 1/Ts); +[frf_noise_hf, ~] = tfestimate(leg_noise_hf.Va, leg_noise_hf.Vs, win, Noverlap, Nfft, 1/Ts); %% Combine the FRF iff_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; @@ -624,7 +636,7 @@ iff_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; #+begin_src matlab :exports none %% Plot the measured FRF figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -676,8 +688,8 @@ In this section, the dynamics from $V_a$ to $d_a$ is identified. First, the coherence is computed and shown in Figure ref:fig:strut_1_int_with_enc_frf_dvf_plant_coh. #+begin_src matlab %% Compute the coherence for both excitation signals -[int_coh_sweep, ~] = mscohere(leg_enc_sweep.Va, leg_enc_sweep.da, win, [], [], 1/Ts); -[int_coh_noise_hf, ~] = mscohere(leg_enc_noise_hf.Va, leg_enc_noise_hf.da, win, [], [], 1/Ts); +[int_coh_sweep, ~] = mscohere(leg_enc_sweep.Va, leg_enc_sweep.da, win, Noverlap, Nfft, 1/Ts); +[int_coh_noise_hf, ~] = mscohere(leg_enc_noise_hf.Va, leg_enc_noise_hf.da, win, Noverlap, Nfft, 1/Ts); %% Combine the coherinte int_coh = [int_coh_sweep(i_lf); int_coh_noise_hf(i_hf)]; @@ -706,8 +718,8 @@ exportFig('figs/strut_1_int_with_enc_frf_dvf_plant_coh.pdf', 'width', 'wide', 'h Then the FRF are computed and shown in Figure ref:fig:strut_1_int_with_enc_frf_dvf_plant_tf. #+begin_src matlab %% Compute FRF function from Va to da -[frf_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.da, win, [], [], 1/Ts); -[frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.da, win, [], [], 1/Ts); +[frf_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.da, win, Noverlap, Nfft, 1/Ts); +[frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.da, win, Noverlap, Nfft, 1/Ts); %% Combine the FRF int_with_enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; @@ -716,7 +728,7 @@ int_with_enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; #+begin_src matlab :exports none %% Plot the FRF from Va to de figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -754,7 +766,7 @@ The obtained FRF is very close to the one that was obtained when no encoder was #+begin_src matlab :exports none %% Plot the FRF from Va to da with and without the encoder figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -798,8 +810,8 @@ In this section, the dynamics from $V_a$ to $d_e$ (encoder) is identified. The coherence is computed and shown in Figure ref:fig:strut_1_enc_frf_dvf_plant_coh. #+begin_src matlab %% Compute the coherence for both excitation signals -[enc_coh_sweep, ~] = mscohere(leg_enc_sweep.Va, leg_enc_sweep.de, win, [], [], 1/Ts); -[enc_coh_noise_hf, ~] = mscohere(leg_enc_noise_hf.Va, leg_enc_noise_hf.de, win, [], [], 1/Ts); +[enc_coh_sweep, ~] = mscohere(leg_enc_sweep.Va, leg_enc_sweep.de, win, Noverlap, Nfft, 1/Ts); +[enc_coh_noise_hf, ~] = mscohere(leg_enc_noise_hf.Va, leg_enc_noise_hf.de, win, Noverlap, Nfft, 1/Ts); %% Combine the coherence enc_coh = [enc_coh_sweep(i_lf); enc_coh_noise_hf(i_hf)]; @@ -828,8 +840,8 @@ exportFig('figs/strut_1_enc_frf_dvf_plant_coh.pdf', 'width', 'wide', 'height', ' The FRF from $V_a$ to the encoder measured displacement $d_e$ is computed and shown in Figure ref:fig:strut_1_enc_frf_dvf_plant_tf. #+begin_src matlab %% Compute FRF function from Va to da -[frf_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.de, win, [], [], 1/Ts); -[frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.de, win, [], [], 1/Ts); +[frf_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.de, win, Noverlap, Nfft, 1/Ts); +[frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.de, win, Noverlap, Nfft, 1/Ts); %% Combine the FRF enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; @@ -838,7 +850,7 @@ enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; #+begin_src matlab :exports none %% Plot the FRF from Va to de figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -875,7 +887,7 @@ The transfer functions from $V_a$ to $d_e$ (encoder) and to $d_a$ (interferomete #+begin_src matlab :exports none figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -947,18 +959,13 @@ exportFig('figs/strut_1_spurious_resonances.pdf', 'width', 'wide', 'height', 'ta These resonances correspond to parasitic resonances of the strut itself. -They are very close to what was estimated using a finite element model of the strut (Figure ref:fig:apa_mode_shapes_bis): +They are very close to what was estimated using a finite element model of the strut (Figure ref:fig:test_struts_mode_shapes): - Mode in X-bending at 189Hz - Mode in Y-bending at 285Hz - Mode in Z-torsion at 400Hz -#+name: fig:apa_mode_shapes_bis -#+caption: Spurious resonances. a) X-bending mode at 189Hz. b) Y-bending mode at 285Hz. c) Z-torsion mode at 400Hz -#+attr_latex: :width \linewidth -[[file:figs/apa_mode_shapes.gif]] - #+begin_important -The resonances seen by the encoder in Figure ref:fig:strut_1_spurious_resonances are indeed corresponding to the modes of the strut as shown in Figure ref:fig:apa_mode_shapes_bis. +The resonances seen by the encoder in Figure ref:fig:strut_1_spurious_resonances are indeed corresponding to the modes of the strut as shown in Figure ref:fig:test_struts_mode_shapes. #+end_important **** FRF Identification - Force Sensor @@ -970,8 +977,8 @@ It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the ex #+begin_src matlab %% Compute the coherence for both excitation signals -[iff_coh_sweep, ~] = mscohere(leg_enc_sweep.Va, leg_enc_sweep.Vs, win, [], [], 1/Ts); -[iff_coh_noise_hf, ~] = mscohere(leg_enc_noise_hf.Va, leg_enc_noise_hf.Vs, win, [], [], 1/Ts); +[iff_coh_sweep, ~] = mscohere(leg_enc_sweep.Va, leg_enc_sweep.Vs, win, Noverlap, Nfft, 1/Ts); +[iff_coh_noise_hf, ~] = mscohere(leg_enc_noise_hf.Va, leg_enc_noise_hf.Vs, win, Noverlap, Nfft, 1/Ts); %% Combine the coherence iff_coh = [iff_coh_sweep(i_lf); iff_coh_noise_hf(i_hf)]; @@ -1000,8 +1007,8 @@ exportFig('figs/strut_1_frf_iff_with_enc_plant_coh.pdf', 'width', 'wide', 'heigh Then the FRF are estimated and shown in Figure ref:fig:strut_1_enc_frf_iff_plant_tf #+begin_src matlab %% Compute FRF function from Va to da -[frf_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.Vs, win, [], [], 1/Ts); -[frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.Vs, win, [], [], 1/Ts); +[frf_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.Vs, win, Noverlap, Nfft, 1/Ts); +[frf_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.Vs, win, Noverlap, Nfft, 1/Ts); %% Combine the FRF iff_with_enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; @@ -1010,7 +1017,7 @@ iff_with_enc_frf = [frf_sweep(i_lf); frf_noise_hf(i_hf)]; #+begin_src matlab :exports none %% Plot FRF of the transfer function from Va to Vs figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -1047,7 +1054,7 @@ Let's now compare the IFF plants whether the encoders are fixed to the APA or no #+begin_src matlab :exports none %% Compare the IFF plant with and without the encoders figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -1108,8 +1115,8 @@ win = hanning(ceil(50*Fs)); % Hannning Windows #+begin_src matlab %% Transfer function estimation -[coh_sweep, f] = mscohere(long_sweep.Va, long_sweep.Vs, win, [], [], 1/Ts); -[coh_noise, ~] = mscohere(long_noise.Va, long_noise.Vs, win, [], [], 1/Ts); +[coh_sweep, f] = mscohere(long_sweep.Va, long_sweep.Vs, win, Noverlap, Nfft, 1/Ts); +[coh_noise, ~] = mscohere(long_noise.Va, long_noise.Vs, win, Noverlap, Nfft, 1/Ts); #+end_src #+begin_src matlab :exports none @@ -1136,14 +1143,14 @@ long_noise.Vs(1) = []; #+begin_src matlab %% Transfer function estimation -[frf_sweep, f] = tfestimate(long_sweep.Va, long_sweep.Vs, win, [], [], 1/Ts); -[frf_noise, ~] = tfestimate(long_noise.Va, long_noise.Vs, win, [], [], 1/Ts); +[frf_sweep, f] = tfestimate(long_sweep.Va, long_sweep.Vs, win, Noverlap, Nfft, 1/Ts); +[frf_noise, ~] = tfestimate(long_noise.Va, long_noise.Vs, win, Noverlap, Nfft, 1/Ts); #+end_src #+begin_src matlab :exports none %% Bode plot of the FRF from Va to de figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -1170,37 +1177,10 @@ xlim([38, 45]); #+end_src ** Comparison of all the Struts -:PROPERTIES: -:header-args:matlab+: :tangle matlab/strut_meas_analysis_all.m -:END: -<> +<> *** Introduction :ignore: Now all struts are measured using the same procedure and test bench as in Section ref:sec:meas_strut_1. -*** Matlab Init :noexport:ignore: -#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) -<> -#+end_src - -#+begin_src matlab :exports none :results silent :noweb yes -<> -#+end_src - -#+begin_src matlab -colors = colororder; -#+end_src - -#+begin_src matlab :tangle no -addpath('./matlab/mat/'); -addpath('./matlab/src/'); -addpath('./matlab/'); -#+end_src - -#+begin_src matlab :eval no -addpath('./mat/'); -addpath('./src/'); -#+end_src - *** FRF Identification - Setup The identification of the struts dynamics is performed in two steps: 1. The excitation signal is a white noise with small amplitude. @@ -1248,7 +1228,7 @@ win = hanning(ceil(0.5*Fs)); % Hannning Windows We get the frequency vector that will be the same for all the frequency domain analysis. #+begin_src matlab % Only used to have the frequency vector "f" -[~, f] = tfestimate(leg_noise{1}.Va, leg_noise{1}.de, win, [], [], 1/Ts); +[~, f] = tfestimate(leg_noise{1}.Va, leg_noise{1}.de, win, Noverlap, Nfft, 1/Ts); i_lf = f <= 350; i_hf = f > 350; #+end_src @@ -1261,8 +1241,8 @@ The coherence is computed and shown in Figure ref:fig:struts_frf_dvf_plant_coh f %% Coherence computation coh_enc = zeros(length(f), length(leg_nums)); for i = 1:length(leg_nums) - [coh_lf, ~] = mscohere(leg_noise{i}.Va, leg_noise{i}.de, win, [], [], 1/Ts); - [coh_hf, ~] = mscohere(leg_noise_hf{i}.Va, leg_noise_hf{i}.de, win, [], [], 1/Ts); + [coh_lf, ~] = mscohere(leg_noise{i}.Va, leg_noise{i}.de, win, Noverlap, Nfft, 1/Ts); + [coh_hf, ~] = mscohere(leg_noise_hf{i}.Va, leg_noise_hf{i}.de, win, Noverlap, Nfft, 1/Ts); coh_enc(:, i) = [coh_lf(i_lf); coh_hf(i_hf)]; end #+end_src @@ -1296,8 +1276,8 @@ Then, the transfer function from the DAC output voltage $V_a$ to the measured di enc_frf = zeros(length(f), length(leg_nums)); for i = 1:length(leg_nums) - [frf_lf, ~] = tfestimate(leg_noise{i}.Va, leg_noise{i}.de, win, [], [], 1/Ts); - [frf_hf, ~] = tfestimate(leg_noise_hf{i}.Va, leg_noise_hf{i}.de, win, [], [], 1/Ts); + [frf_lf, ~] = tfestimate(leg_noise{i}.Va, leg_noise{i}.de, win, Noverlap, Nfft, 1/Ts); + [frf_hf, ~] = tfestimate(leg_noise_hf{i}.Va, leg_noise_hf{i}.de, win, Noverlap, Nfft, 1/Ts); enc_frf(:, i) = [frf_lf(i_lf); frf_hf(i_hf)]; end #+end_src @@ -1306,7 +1286,7 @@ The obtained transfer functions are shown in Figure ref:fig:struts_frf_dvf_plant #+begin_src matlab :exports none %% Bode plot of the FRF from Va to de figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -1361,8 +1341,8 @@ The coherence is computed and shown in Figure ref:fig:struts_frf_int_plant_coh. %% Coherence computation coh_int = zeros(length(f), length(leg_nums)); for i = 1:length(leg_nums) - [coh_lf, ~] = mscohere(leg_noise{i}.Va, leg_noise{i}.da, win, [], [], 1/Ts); - [coh_hf, ~] = mscohere(leg_noise_hf{i}.Va, leg_noise_hf{i}.da, win, [], [], 1/Ts); + [coh_lf, ~] = mscohere(leg_noise{i}.Va, leg_noise{i}.da, win, Noverlap, Nfft, 1/Ts); + [coh_hf, ~] = mscohere(leg_noise_hf{i}.Va, leg_noise_hf{i}.da, win, Noverlap, Nfft, 1/Ts); coh_int(:, i) = [coh_lf(i_lf); coh_hf(i_hf)]; end #+end_src @@ -1395,8 +1375,8 @@ All the struts are giving very similar FRF. %% Transfer function estimation int_frf = zeros(length(f), length(leg_nums)); for i = 1:length(leg_nums) - [frf_lf, ~] = tfestimate(leg_noise{i}.Va, leg_noise{i}.da, win, [], [], 1/Ts); - [frf_hf, ~] = tfestimate(leg_noise_hf{i}.Va, leg_noise_hf{i}.da, win, [], [], 1/Ts); + [frf_lf, ~] = tfestimate(leg_noise{i}.Va, leg_noise{i}.da, win, Noverlap, Nfft, 1/Ts); + [frf_hf, ~] = tfestimate(leg_noise_hf{i}.Va, leg_noise_hf{i}.da, win, Noverlap, Nfft, 1/Ts); int_frf(:, i) = [frf_lf(i_lf); frf_hf(i_hf)]; end #+end_src @@ -1404,7 +1384,7 @@ end #+begin_src matlab :exports none %% Plot the FRF from Va to de (interferometer) figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -1451,8 +1431,8 @@ First the coherence is computed and shown in Figure ref:fig:struts_frf_iff_plant %% Coherence coh_iff = zeros(length(f), length(leg_nums)); for i = 1:length(leg_nums) - [coh_lf, ~] = mscohere(leg_noise{i}.Va, leg_noise{i}.Vs, win, [], [], 1/Ts); - [coh_hf, ~] = mscohere(leg_noise_hf{i}.Va, leg_noise_hf{i}.Vs, win, [], [], 1/Ts); + [coh_lf, ~] = mscohere(leg_noise{i}.Va, leg_noise{i}.Vs, win, Noverlap, Nfft, 1/Ts); + [coh_hf, ~] = mscohere(leg_noise_hf{i}.Va, leg_noise_hf{i}.Vs, win, Noverlap, Nfft, 1/Ts); coh_iff(:, i) = [coh_lf(i_lf); coh_hf(i_hf)]; end #+end_src @@ -1485,8 +1465,8 @@ They are also shown all to be very similar. %% FRF estimation of the transfer function from Va to Vs iff_frf = zeros(length(f), length(leg_nums)); for i = 1:length(leg_nums) - [frf_lf, ~] = tfestimate(leg_noise{i}.Va, leg_noise{i}.Vs, win, [], [], 1/Ts); - [frf_hf, ~] = tfestimate(leg_noise_hf{i}.Va, leg_noise_hf{i}.Vs, win, [], [], 1/Ts); + [frf_lf, ~] = tfestimate(leg_noise{i}.Va, leg_noise{i}.Vs, win, Noverlap, Nfft, 1/Ts); + [frf_hf, ~] = tfestimate(leg_noise_hf{i}.Va, leg_noise_hf{i}.Vs, win, Noverlap, Nfft, 1/Ts); iff_frf(:, i) = [frf_lf(i_lf); frf_hf(i_hf)]; end #+end_src @@ -1494,7 +1474,7 @@ end #+begin_src matlab :exports none %% Plot the FRF from Va to Vs figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -1634,37 +1614,10 @@ save('mat/meas_struts_frf.mat', 'f', 'Ts', 'enc_frf', 'int_frf', 'iff_frf', 'leg #+end_src ** Comparison of all the (re-aligned) Struts -:PROPERTIES: -:header-args:matlab+: :tangle matlab/strut_aligned_meas_analysis_all.m -:END: -<> +<> *** Introduction :ignore: The struts are re-aligned and measured using the same test bench. -*** Matlab Init :noexport:ignore: -#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) -<> -#+end_src - -#+begin_src matlab :exports none :results silent :noweb yes -<> -#+end_src - -#+begin_src matlab -colors = colororder; -#+end_src - -#+begin_src matlab :tangle no -addpath('./matlab/mat/'); -addpath('./matlab/src/'); -addpath('./matlab/'); -#+end_src - -#+begin_src matlab :eval no -addpath('./mat/'); -addpath('./src/'); -#+end_src - *** Measured misalignment of the APA and flexible joints The misalignment between the APA and the flexible joints are measured. @@ -1779,7 +1732,7 @@ win = hanning(ceil(0.5*Fs)); % Hannning Windows We get the frequency vector that will be the same for all the frequency domain analysis. #+begin_src matlab % Only used to have the frequency vector "f" -[~, f] = tfestimate(leg_noise{1}.Va, leg_noise{1}.de, win, [], [], 1/Ts); +[~, f] = tfestimate(leg_noise{1}.Va, leg_noise{1}.de, win, Noverlap, Nfft, 1/Ts); #+end_src *** FRF Identification - Encoder @@ -1790,7 +1743,7 @@ The coherence is computed and shown in Figure ref:fig:struts_align_frf_dvf_plant %% Coherence computation coh_enc = zeros(length(f), length(leg_nums)); for i = 1:length(leg_nums) - coh_enc(:, i) = mscohere(leg_noise{i}.Va, leg_noise{i}.de, win, [], [], 1/Ts); + coh_enc(:, i) = mscohere(leg_noise{i}.Va, leg_noise{i}.de, win, Noverlap, Nfft, 1/Ts); end #+end_src @@ -1823,7 +1776,7 @@ Then, the transfer function from the DAC output voltage $V_a$ to the measured di enc_frf = zeros(length(f), length(leg_nums)); for i = 1:length(leg_nums) - enc_frf(:, i) = tfestimate(leg_noise{i}.Va, leg_noise{i}.de, win, [], [], 1/Ts); + enc_frf(:, i) = tfestimate(leg_noise{i}.Va, leg_noise{i}.de, win, Noverlap, Nfft, 1/Ts); end #+end_src @@ -1831,7 +1784,7 @@ The obtained transfer functions are shown in Figure ref:fig:struts_align_frf_dvf #+begin_src matlab :exports none %% Bode plot of the FRF from Va to de figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -1882,7 +1835,7 @@ First the coherence is computed and shown in Figure ref:fig:struts_frf_iff_plant %% Coherence coh_iff = zeros(length(f), length(leg_nums)); for i = 1:length(leg_nums) - coh_iff(:, i) = mscohere(leg_noise{i}.Va, leg_noise{i}.Vs, win, [], [], 1/Ts); + coh_iff(:, i) = mscohere(leg_noise{i}.Va, leg_noise{i}.Vs, win, Noverlap, Nfft, 1/Ts); end #+end_src @@ -1914,14 +1867,14 @@ They are also shown all to be very similar. %% FRF estimation of the transfer function from Va to Vs iff_frf = zeros(length(f), length(leg_nums)); for i = 1:length(leg_nums) - iff_frf(:, i) = tfestimate(leg_noise{i}.Va, leg_noise{i}.Vs, win, [], [], 1/Ts); + iff_frf(:, i) = tfestimate(leg_noise{i}.Va, leg_noise{i}.Vs, win, Noverlap, Nfft, 1/Ts); end #+end_src #+begin_src matlab :exports none %% Plot the FRF from Va to Vs figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -2049,18 +2002,17 @@ legend('location', 'northeast'); * Simscape Model :PROPERTIES: -:header-args:matlab+: :tangle matlab/test_bench_struts_1_simscape_model_comp.m +:header-args:matlab+: :tangle matlab/test_struts_3_simscape_model.m :END: -<> +<> ** Introduction :ignore: -The same simscape model that was presented in Section ref:sec:simscape_bench_apa is here used. -However, now the full strut is put instead of only the APA (see Figure ref:fig:simscape_model_bench_struts). +However, now the full strut is put instead of only the APA (see Figure ref:fig:test_struts_simscape_model). -#+name: fig:simscape_model_bench_struts +#+name: fig:test_struts_simscape_model #+caption: Screenshot of the Simscape model of the strut fixed to the bench #+attr_latex: :width \linewidth -[[file:figs/simscape_model_bench_struts.png]] +[[file:figs/test_struts_simscape_model.png]] This Simscape model is used to: - compare the measured FRF with the modelled FRF @@ -2086,7 +2038,7 @@ This study is structured as follow: #+begin_src matlab :tangle no %% Add useful folders to the path addpath('matlab/'); -addpath('matlab/test_bench_struts/'); +addpath('matlab/test_struts/'); addpath('matlab/mat/'); addpath('matlab/src/'); addpath('matlab/png/'); @@ -2094,7 +2046,7 @@ addpath('matlab/png/'); #+begin_src matlab :eval no %% Add useful folders to the path -addpath('test_bench_struts/'); +addpath('test_struts/'); addpath('png/'); addpath('mat/'); addpath('src/'); @@ -2111,7 +2063,7 @@ options = linearizeOptions; options.SampleTime = 0; %% Name of the Simulink File -mdl = 'test_bench_struts'; +mdl = 'test_struts'; %% Open the Simulink File open(mdl) @@ -2298,7 +2250,7 @@ The measured FRF from $V_a$ to $d_e$ (encoder) is compared with the model in Fig #+begin_src matlab :exports none %% Compare the FRF and identified dynamics from Va to de figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -2480,10 +2432,6 @@ exportFig('figs/strut_meas_frf_model_int_force.pdf', 'width', 1500, 'height', 't #+RESULTS: [[file:figs/strut_meas_frf_model_int_force.png]] - -#+begin_src matlab -#+end_src - ** Effect of a misalignment of the APA and flexible joints on the transfer function from actuator to encoder <> *** Introduction :ignore: @@ -2492,12 +2440,7 @@ As shown in Figure ref:fig:struts_frf_dvf_plant_tf, the dynamics from actuator t This could be explained by a large variability in the alignment of the flexible joints and the APA (at the time, the alignment pins were not used). -Depending on the alignment, the spurious resonances of the struts (Figure ref:fig:apa_mode_shapes) can be excited differently. - -#+name: fig:apa_mode_shapes -#+caption: Spurious resonances. a) X-bending mode at 189Hz. b) Y-bending mode at 285Hz. c) Z-torsion mode at 400Hz -#+attr_latex: :width \linewidth -[[file:figs/apa_mode_shapes.gif]] +Depending on the alignment, the spurious resonances of the struts (Figure ref:fig:test_struts_mode_shapes) can be excited differently. For instance, consider Figure ref:fig:strut_misalign_schematic where there is a misalignment in the $y$ direction. In such case, the mode at 200Hz is foreseen to be more excited as the misalignment $d_y$ increases and therefore the dynamics from the actuator to the encoder should also change around 200Hz. @@ -2555,7 +2498,7 @@ From Figure ref:fig:comp_enc_frf_align_perfect, it is clear that: freqs = 2*logspace(0, 3, 1000); figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -2637,7 +2580,7 @@ The obtained dynamics are shown in Figure ref:fig:effect_misalignment_y. freqs = 2*logspace(0, 3, 1000); figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -2715,7 +2658,7 @@ The obtained dynamics are shown in Figure ref:fig:effect_misalignment_x. freqs = 2*logspace(0, 3, 1000); figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -2866,7 +2809,7 @@ freqs = 2*logspace(0, 3, 1000); colors = colororder; figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; plot(f, abs(enc_frf(:,1)), 'color', [colors(1,:),0.2], ... @@ -3030,7 +2973,7 @@ The obtained dynamics from DAC voltage to encoder measurements are compared in F freqs = 2*logspace(1, 3, 1000); figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -3109,7 +3052,7 @@ The obtained dynamics from DAC voltage to encoder measurements are compared in F freqs = 2*logspace(1, 3, 1000); figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -3196,7 +3139,7 @@ The results are shown in Figure ref:fig:effect_enc_bending_damp. freqs = 2*logspace(1, 3, 1000); figure; -tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None'); +tiledlayout(3, 1, 'TileSpace', 'Compact', 'Padding', 'None'); ax1 = nexttile([2,1]); hold on; @@ -3333,7 +3276,7 @@ xlim([20, 2e3]); ylim([1e-8, 1e-3]); #+end_src * Conclusion -<> +<> * Bibliography :ignore: #+latex: \printbibliography[heading=bibintoc,title={Bibliography}] @@ -3344,6 +3287,7 @@ xlim([20, 2e3]); ylim([1e-8, 1e-3]); #+BEGIN_SRC matlab %% Path for functions, data and scripts addpath('./matlab/mat/'); % Path for data +addpath('./matlab/src/'); % Path for functions addpath('./matlab/'); % Path for scripts #+END_SRC @@ -3351,6 +3295,7 @@ addpath('./matlab/'); % Path for scripts #+BEGIN_SRC matlab %% Path for functions, data and scripts addpath('./mat/'); % Path for data +addpath('./src/'); % Path for functions #+END_SRC ** Initialize other elements @@ -3704,327 +3649,3 @@ actuator.ks = args.ks; % Stiffness of one stack [N/m] actuator.cs = args.cs; % Damping of one stack [N/m] #+end_src -** =generateSweepExc=: Generate sweep sinus excitation -:PROPERTIES: -:header-args:matlab: :tangle ./matlab/src/generateSweepExc.m -:header-args:matlab+: :comments none :mkdirp yes :eval no -:END: -<> - -*** Function description -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -function [U_exc] = generateSweepExc(args) -% generateSweepExc - Generate a Sweep Sine excitation signal -% -% Syntax: [U_exc] = generateSweepExc(args) -% -% Inputs: -% - args - Optinal arguments: -% - Ts - Sampling Time - [s] -% - f_start - Start frequency of the sweep - [Hz] -% - f_end - End frequency of the sweep - [Hz] -% - V_mean - Mean value of the excitation voltage - [V] -% - V_exc - Excitation Amplitude for the Sweep, could be numeric or TF - [V] -% - t_start - Time at which the sweep begins - [s] -% - exc_duration - Duration of the sweep - [s] -% - sweep_type - 'logarithmic' or 'linear' - [-] -% - smooth_ends - 'true' or 'false': smooth transition between 0 and V_mean - [-] -#+end_src - -*** Optional Parameters -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -arguments - args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-4 - args.f_start (1,1) double {mustBeNumeric, mustBePositive} = 1 - args.f_end (1,1) double {mustBeNumeric, mustBePositive} = 1e3 - args.V_mean (1,1) double {mustBeNumeric} = 0 - args.V_exc = 1 - args.t_start (1,1) double {mustBeNumeric, mustBeNonnegative} = 5 - args.exc_duration (1,1) double {mustBeNumeric, mustBePositive} = 10 - args.sweep_type char {mustBeMember(args.sweep_type,{'log', 'lin'})} = 'lin' - args.smooth_ends logical {mustBeNumericOrLogical} = true -end -#+end_src - -*** Sweep Sine part -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -t_sweep = 0:args.Ts:args.exc_duration; - -if strcmp(args.sweep_type, 'log') - V_exc = sin(2*pi*args.f_start * args.exc_duration/log(args.f_end/args.f_start) * (exp(log(args.f_end/args.f_start)*t_sweep/args.exc_duration) - 1)); -elseif strcmp(args.sweep_type, 'lin') - V_exc = sin(2*pi*(args.f_start + (args.f_end - args.f_start)/2/args.exc_duration*t_sweep).*t_sweep); -else - error('sweep_type should either be equal to "log" or to "lin"'); -end -#+end_src - -#+begin_src matlab -if isnumeric(args.V_exc) - V_sweep = args.V_mean + args.V_exc*V_exc; -elseif isct(args.V_exc) - if strcmp(args.sweep_type, 'log') - V_sweep = args.V_mean + abs(squeeze(freqresp(args.V_exc, args.f_start*(args.f_end/args.f_start).^(t_sweep/args.exc_duration), 'Hz')))'.*V_exc; - elseif strcmp(args.sweep_type, 'lin') - V_sweep = args.V_mean + abs(squeeze(freqresp(args.V_exc, args.f_start+(args.f_end-args.f_start)/args.exc_duration*t_sweep, 'Hz')))'.*V_exc; - end -end -#+end_src - -*** Smooth Ends -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -if args.t_start > 0 - t_smooth_start = args.Ts:args.Ts:args.t_start; - - V_smooth_start = zeros(size(t_smooth_start)); - V_smooth_end = zeros(size(t_smooth_start)); - - if args.smooth_ends - Vd_max = args.V_mean/(0.7*args.t_start); - - V_d = zeros(size(t_smooth_start)); - V_d(t_smooth_start < 0.2*args.t_start) = t_smooth_start(t_smooth_start < 0.2*args.t_start)*Vd_max/(0.2*args.t_start); - V_d(t_smooth_start > 0.2*args.t_start & t_smooth_start < 0.7*args.t_start) = Vd_max; - V_d(t_smooth_start > 0.7*args.t_start & t_smooth_start < 0.9*args.t_start) = Vd_max - (t_smooth_start(t_smooth_start > 0.7*args.t_start & t_smooth_start < 0.9*args.t_start) - 0.7*args.t_start)*Vd_max/(0.2*args.t_start); - - V_smooth_start = cumtrapz(V_d)*args.Ts; - - V_smooth_end = args.V_mean - V_smooth_start; - end -else - V_smooth_start = []; - V_smooth_end = []; -end -#+end_src - -*** Combine Excitation signals -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -V_exc = [V_smooth_start, V_sweep, V_smooth_end]; -t_exc = args.Ts*[0:1:length(V_exc)-1]; -#+end_src - -#+begin_src matlab -U_exc = [t_exc; V_exc]; -#+end_src - -** =generateShapedNoise=: Generate Shaped Noise excitation -:PROPERTIES: -:header-args:matlab: :tangle ./matlab/src/generateShapedNoise.m -:header-args:matlab+: :comments none :mkdirp yes :eval no -:END: -<> - -*** Function description -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -function [U_exc] = generateShapedNoise(args) -% generateShapedNoise - Generate a Shaped Noise excitation signal -% -% Syntax: [U_exc] = generateShapedNoise(args) -% -% Inputs: -% - args - Optinal arguments: -% - Ts - Sampling Time - [s] -% - V_mean - Mean value of the excitation voltage - [V] -% - V_exc - Excitation Amplitude, could be numeric or TF - [V rms] -% - t_start - Time at which the noise begins - [s] -% - exc_duration - Duration of the noise - [s] -% - smooth_ends - 'true' or 'false': smooth transition between 0 and V_mean - [-] -#+end_src - -*** Optional Parameters -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -arguments - args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-4 - args.V_mean (1,1) double {mustBeNumeric} = 0 - args.V_exc = 1 - args.t_start (1,1) double {mustBeNumeric, mustBePositive} = 5 - args.exc_duration (1,1) double {mustBeNumeric, mustBePositive} = 10 - args.smooth_ends logical {mustBeNumericOrLogical} = true -end -#+end_src - -*** Shaped Noise -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -t_noise = 0:args.Ts:args.exc_duration; - -#+end_src - -#+begin_src matlab -if isnumeric(args.V_exc) - V_noise = args.V_mean + args.V_exc*sqrt(1/args.Ts/2)*randn(length(t_noise), 1)'; -elseif isct(args.V_exc) - V_noise = args.V_mean + lsim(args.V_exc, sqrt(1/args.Ts/2)*randn(length(t_noise), 1), t_noise)'; -end -#+end_src - -*** Smooth Ends -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -t_smooth_start = args.Ts:args.Ts:args.t_start; - -V_smooth_start = zeros(size(t_smooth_start)); -V_smooth_end = zeros(size(t_smooth_start)); - -if args.smooth_ends - Vd_max = args.V_mean/(0.7*args.t_start); - - V_d = zeros(size(t_smooth_start)); - V_d(t_smooth_start < 0.2*args.t_start) = t_smooth_start(t_smooth_start < 0.2*args.t_start)*Vd_max/(0.2*args.t_start); - V_d(t_smooth_start > 0.2*args.t_start & t_smooth_start < 0.7*args.t_start) = Vd_max; - V_d(t_smooth_start > 0.7*args.t_start & t_smooth_start < 0.9*args.t_start) = Vd_max - (t_smooth_start(t_smooth_start > 0.7*args.t_start & t_smooth_start < 0.9*args.t_start) - 0.7*args.t_start)*Vd_max/(0.2*args.t_start); - - V_smooth_start = cumtrapz(V_d)*args.Ts; - - V_smooth_end = args.V_mean - V_smooth_start; -end -#+end_src - -*** Combine Excitation signals -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -V_exc = [V_smooth_start, V_noise, V_smooth_end]; -t_exc = args.Ts*[0:1:length(V_exc)-1]; -#+end_src - -#+begin_src matlab -U_exc = [t_exc; V_exc]; -#+end_src - -** =generateSinIncreasingAmpl=: Generate Sinus with increasing amplitude -:PROPERTIES: -:header-args:matlab: :tangle ./matlab/src/generateSinIncreasingAmpl.m -:header-args:matlab+: :comments none :mkdirp yes :eval no -:END: -<> - -*** Function description -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -function [U_exc] = generateSinIncreasingAmpl(args) -% generateSinIncreasingAmpl - Generate Sinus with increasing amplitude -% -% Syntax: [U_exc] = generateSinIncreasingAmpl(args) -% -% Inputs: -% - args - Optinal arguments: -% - Ts - Sampling Time - [s] -% - V_mean - Mean value of the excitation voltage - [V] -% - sin_ampls - Excitation Amplitudes - [V] -% - sin_freq - Excitation Frequency - [Hz] -% - sin_num - Number of period for each amplitude - [-] -% - t_start - Time at which the excitation begins - [s] -% - smooth_ends - 'true' or 'false': smooth transition between 0 and V_mean - [-] -#+end_src - -*** Optional Parameters -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -arguments - args.Ts (1,1) double {mustBeNumeric, mustBePositive} = 1e-4 - args.V_mean (1,1) double {mustBeNumeric} = 0 - args.sin_ampls double {mustBeNumeric, mustBePositive} = [0.1, 0.2, 0.3] - args.sin_period (1,1) double {mustBeNumeric, mustBePositive} = 1 - args.sin_num (1,1) double {mustBeNumeric, mustBePositive, mustBeInteger} = 3 - args.t_start (1,1) double {mustBeNumeric, mustBePositive} = 5 - args.smooth_ends logical {mustBeNumericOrLogical} = true -end -#+end_src - -*** Sinus excitation -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -t_noise = 0:args.Ts:args.sin_period*args.sin_num; -sin_exc = []; -#+end_src - -#+begin_src matlab -for sin_ampl = args.sin_ampls - sin_exc = [sin_exc, args.V_mean + sin_ampl*sin(2*pi/args.sin_period*t_noise)]; -end -#+end_src - -*** Smooth Ends -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -t_smooth_start = args.Ts:args.Ts:args.t_start; - -V_smooth_start = zeros(size(t_smooth_start)); -V_smooth_end = zeros(size(t_smooth_start)); - -if args.smooth_ends - Vd_max = args.V_mean/(0.7*args.t_start); - - V_d = zeros(size(t_smooth_start)); - V_d(t_smooth_start < 0.2*args.t_start) = t_smooth_start(t_smooth_start < 0.2*args.t_start)*Vd_max/(0.2*args.t_start); - V_d(t_smooth_start > 0.2*args.t_start & t_smooth_start < 0.7*args.t_start) = Vd_max; - V_d(t_smooth_start > 0.7*args.t_start & t_smooth_start < 0.9*args.t_start) = Vd_max - (t_smooth_start(t_smooth_start > 0.7*args.t_start & t_smooth_start < 0.9*args.t_start) - 0.7*args.t_start)*Vd_max/(0.2*args.t_start); - - V_smooth_start = cumtrapz(V_d)*args.Ts; - - V_smooth_end = args.V_mean - V_smooth_start; -end -#+end_src - -*** Combine Excitation signals -:PROPERTIES: -:UNNUMBERED: t -:END: - -#+begin_src matlab -V_exc = [V_smooth_start, sin_exc, V_smooth_end]; -t_exc = args.Ts*[0:1:length(V_exc)-1]; -#+end_src - -#+begin_src matlab -U_exc = [t_exc; V_exc]; -#+end_src diff --git a/test-bench-struts.pdf b/test-bench-struts.pdf index e7ee65d..ea6c3b3 100644 Binary files a/test-bench-struts.pdf and b/test-bench-struts.pdf differ diff --git a/test-bench-struts.tex b/test-bench-struts.tex index 67b76a2..a5e1cc5 100644 --- a/test-bench-struts.tex +++ b/test-bench-struts.tex @@ -1,4 +1,4 @@ -% Created 2024-03-19 Tue 17:29 +% Created 2024-03-25 Mon 10:54 % Intended LaTeX compiler: pdflatex \documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt} @@ -24,7 +24,7 @@ \clearpage In this document, a test-bench is used to characterize the struts of the nano-hexapod. -Each strut includes (Figure \ref{fig:picture_strut_top_view}): +Each strut includes (Figure \ref{fig:test_struts_picture_strut}): \begin{itemize} \item 2 flexible joints at each ends. These flexible joints have been characterized in a separate test bench (see \ldots{}). @@ -35,67 +35,69 @@ Two stacks are used as an actuator and one stack as a (force) sensor. \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=0.8\linewidth]{figs/picture_strut_top_view.jpg} -\caption{\label{fig:picture_strut_top_view}One strut including two flexible joints, an amplified piezoelectric actuator and an encoder} +\includegraphics[scale=1,width=0.8\linewidth]{figs/test_struts_picture_strut.jpg} +\caption{\label{fig:test_struts_picture_strut}One strut including two flexible joints, an amplified piezoelectric actuator and an encoder} \end{figure} -Then the struts are mounted (procedure described in Section \ref{sec:test_bench_struts_mounting}), and are fixed to the same measurement bench. +Then the struts are mounted (procedure described in Section \ref{sec:test_struts_mounting}), and are fixed to the same measurement bench. The goals are to: \begin{itemize} -\item Section \ref{sec:test_bench_struts_dynamical_meas}: Identify the dynamics from the generated DAC voltage to: +\item Section \ref{sec:test_struts_dynamical_meas}: Identify the dynamics from the generated DAC voltage to: \begin{itemize} \item the sensors stack generated voltage \item the measured displacement by the encoder \item the measured displacement by the interferometer (representing encoders that would be fixed to the nano-hexapod's plates instead of the struts) \end{itemize} -\item Section \ref{sec:test_bench_struts_simscape}: Compare the measurements with the Simscape model of the struts and tune the models +\item Section \ref{sec:test_struts_simscape}: Compare the measurements with the Simscape model of the struts and tune the models \end{itemize} The final goal of the work presented in this document is to have an accurate Simscape model of the struts that can then be included in the Simscape model of the nano-hexapod. \begin{table}[htbp] -\caption{\label{tab:test_bench_struts_section_matlab_code}Report sections and corresponding Matlab files} +\caption{\label{tab:test_struts_section_matlab_code}Report sections and corresponding Matlab files} \centering \begin{tabularx}{0.6\linewidth}{lX} \toprule \textbf{Sections} & \textbf{Matlab File}\\ \midrule -Section \ref{sec:test_bench_struts}\_ & \texttt{test\_bench\_struts\_1\_.m}\\ +Section \ref{sec:test_struts_flexible_modes} & \texttt{test\_struts\_1\_flexible\_modes.m}\\ +Section \ref{sec:test_struts_dynamical_meas} & \texttt{test\_struts\_2\_dynamical\_meas.m}\\ +Section \ref{sec:test_struts_mounting} & \texttt{test\_struts\_3\_simscape\_model.m}\\ \bottomrule \end{tabularx} \end{table} \chapter{Mounting Procedure} -\label{sec:test_bench_struts_mounting} +\label{sec:test_struts_mounting} \section{Mounting Bench} A mounting bench is used to greatly simply the mounting of the struts as well as ensuring the correct strut length and coaxiality of the flexible joint's interfaces. This is very important in order to not loose any stroke when the struts will be mounted on the nano-hexapod. -A CAD view of the mounting bench is shown in Figure \ref{fig:strut_mounting_bench_first_concept}. +A CAD view of the mounting bench is shown in Figure \ref{fig:test_struts_mounting_bench_first_concept}. \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=\linewidth]{figs/strut_mounting_bench_first_concept.png} -\caption{\label{fig:strut_mounting_bench_first_concept}CAD view of the mounting bench} +\includegraphics[scale=1,width=\linewidth]{figs/test_struts_mounting_bench_first_concept.png} +\caption{\label{fig:test_struts_mounting_bench_first_concept}CAD view of the mounting bench} \end{figure} -The main part of the bench is here to ensure both the correct strut length and strut coaxiality as shown in Figure \ref{fig:strut_mounting_step_0}. +The main part of the bench is here to ensure both the correct strut length and strut coaxiality as shown in Figure \ref{fig:test_struts_mounting_step_0}. \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=\linewidth]{figs/strut_mounting_step_0.jpg} -\caption{\label{fig:strut_mounting_step_0}Useful features of the main mounting element} +\includegraphics[scale=1,width=\linewidth]{figs/test_struts_mounting_step_0.jpg} +\caption{\label{fig:test_struts_mounting_step_0}Useful features of the main mounting element} \end{figure} -The tight tolerances of this element has been verified as shown in Figure \ref{fig:strut_mounting_bench_first_concept} and were found to comply with the requirements. +The tight tolerances of this element has been verified as shown in Figure \ref{fig:test_struts_mounting_bench_first_concept} and were found to comply with the requirements. \begin{figure}[htbp] \centering \includegraphics[scale=1,width=\linewidth]{figs/check_dimensions_bench.jpg} -\caption{\label{fig:strut_mounting_bench_first_concept}Dimensional verifications of the mounting bench tolerances} +\caption{\label{fig:test_struts_mounting_bench_first_concept}Dimensional verifications of the mounting bench tolerances} \end{figure} -The flexible joints are rigidly fixed to cylindrical tools shown in Figure \ref{fig:cylindrical_mounting_part} which are then mounted on the mounting tool shown in Figure \ref{fig:strut_mounting_step_0}. +The flexible joints are rigidly fixed to cylindrical tools shown in Figure \ref{fig:cylindrical_mounting_part} which are then mounted on the mounting tool shown in Figure \ref{fig:test_struts_mounting_step_0}. This cylindrical tool is here to protect the flexible joints when tightening the screws and therefore applying large torque. \begin{figure}[htbp] @@ -107,61 +109,72 @@ This cylindrical tool is here to protect the flexible joints when tightening the The mounting procedure is as follows: \begin{enumerate} -\item Screw flexible joints inside the cylindrical interface element shown in Figure \ref{fig:cylindrical_mounting_part} (Figure \ref{fig:strut_mounting_step_1}) +\item Screw flexible joints inside the cylindrical interface element shown in Figure \ref{fig:cylindrical_mounting_part} (Figure \ref{fig:test_struts_mounting_step_1}) \item Fix the two interface elements. One of the two should be clamped, the other one should have its axial rotation free. -Visually align the clamped one horizontally. (Figure \ref{fig:strut_mounting_step_2}) -\item Put cylindrical washers, APA and interface pieces on top of the flexible joints (Figure \ref{fig:strut_mounting_step_3}) +Visually align the clamped one horizontally. (Figure \ref{fig:test_struts_mounting_step_2}) +\item Put cylindrical washers, APA and interface pieces on top of the flexible joints (Figure \ref{fig:test_struts_mounting_step_3}) \item Put the 4 screws just in contact such that everything is correctly positioned and such that the ``free'' flexible joint is correctly oriented \item Put the 8 lateral screws in contact \item Tighten the 4 screws to fix the APA on the two flexible joints (using a torque screwdriver) \item Remove the 4 laterals screws -\item (optional) Put the APA horizontally and fix the encoder and align it to maximize the contrast (Figure \ref{fig:strut_mounting_step_4}) +\item (optional) Put the APA horizontally and fix the encoder and align it to maximize the contrast (Figure \ref{fig:test_struts_mounting_step_4}) \end{enumerate} \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=0.5\linewidth]{figs/strut_mounting_step_1.jpg} -\caption{\label{fig:strut_mounting_step_1}Step 1 - Flexible joints fixed on the cylindrical interface elements} +\includegraphics[scale=1,width=0.5\linewidth]{figs/test_struts_mounting_step_1.jpg} +\caption{\label{fig:test_struts_mounting_step_1}Step 1 - Flexible joints fixed on the cylindrical interface elements} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=\linewidth]{figs/strut_mounting_step_2.jpg} -\caption{\label{fig:strut_mounting_step_2}Step 2 - Cylindrical elements fixed on the bench} +\includegraphics[scale=1,width=\linewidth]{figs/test_struts_mounting_step_2.jpg} +\caption{\label{fig:test_struts_mounting_step_2}Step 2 - Cylindrical elements fixed on the bench} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=\linewidth]{figs/strut_mounting_step_3.jpg} -\caption{\label{fig:strut_mounting_step_3}Step 3 - Mount the nuts, washers and APA} +\includegraphics[scale=1,width=\linewidth]{figs/test_struts_mounting_step_3.jpg} +\caption{\label{fig:test_struts_mounting_step_3}Step 3 - Mount the nuts, washers and APA} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=\linewidth]{figs/strut_mounting_step_4.jpg} -\caption{\label{fig:strut_mounting_step_4}Last step - Align the encoder on the strut} +\includegraphics[scale=1,width=\linewidth]{figs/test_struts_mounting_step_4.jpg} +\caption{\label{fig:test_struts_mounting_step_4}Last step - Align the encoder on the strut} \end{figure} \section{Mounted Struts} -After removing the strut from the mounting bench, we obtain a strut with ensured coaxiality between the two flexible joint's interfaces (Figure \ref{fig:mounted_strut}). +After removing the strut from the mounting bench, we obtain a strut with ensured coaxiality between the two flexible joint's interfaces (Figure \ref{fig:test_struts_mounted_strut}). \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=\linewidth]{figs/mounted_strut.jpg} -\caption{\label{fig:mounted_strut}Mounted Strut with ensured coaxiality} +\includegraphics[scale=1,width=\linewidth]{figs/test_struts_mounted_strut.jpg} +\caption{\label{fig:test_struts_mounted_strut}Mounted Strut with ensured coaxiality} \end{figure} \chapter{Spurious resonances} -\label{sec:spurious_resonances_struts} +\label{sec:test_struts_flexible_modes} \section{Introduction} -Similarly as in Section \ref{sec:spurious_resonances}, the spurious modes of the struts (Figure \ref{fig:apa_mode_shapes_ter}) are measured. - These modes are present when flexible joints are fixed to the ends of the APA300ML. To experimentally measure the frequency of these modes, the struts are mounted (both with and without the encoder). -Then, each end of the strut is fixed to a vertically guided stage as shown in Figure \ref{fig:meas_spur_res_struts_1_enc}. +Then, each end of the strut is fixed to a vertically guided stage as shown in Figure \ref{fig:test_struts_meas_spur_res_struts_1_enc}. + +From a Finite Element Model of the struts, it have been found that three main resonances are foreseen to be problematic for the control of the APA300ML (Figure \ref{fig:test_struts_mode_shapes}): +\begin{itemize} +\item Mode in X-bending at 189Hz +\item Mode in Y-bending at 285Hz +\item Mode in Z-torsion at 400Hz +\end{itemize} + +\begin{figure}[htbp] +\centering +\includegraphics[scale=1,width=\linewidth]{figs/test_struts_mode_shapes.png} +\caption{\label{fig:test_struts_mode_shapes}Spurious resonances of the struts estimated from a Finite Element Model. a) X-bending mode at 189Hz. b) Y-bending mode at 285Hz. c) Z-torsion mode at 400Hz} +\end{figure} \section{Measurement Setup} -A Laser vibrometer is measuring the difference of motion between two points (Figure \ref{fig:meas_spur_res_struts_1_enc}). +A Laser vibrometer is measuring the difference of motion between two points (Figure \ref{fig:test_struts_meas_spur_res_struts_1_enc}). The APA is excited with an instrumented hammer and the transfer function from the hammer to the measured rotation is computed. \begin{note} @@ -172,54 +185,54 @@ The instrumentation used are: \end{itemize} \end{note} -The ``X-bending'' mode is measured as shown in Figure \ref{fig:meas_spur_res_struts_1_enc}. -The ``Y-bending'' mode is measured as shown in Figure \ref{fig:meas_spur_res_struts_2} with the encoder and in Figure \ref{fig:meas_spur_res_struts_2_encoder} with the encoder. -Finally, the ``Z-torsion'' is measured as shown in Figure \ref{fig:meas_spur_res_struts_3}. +The ``X-bending'' mode is measured as shown in Figure \ref{fig:test_struts_meas_spur_res_struts_1_enc}. +The ``Y-bending'' mode is measured as shown in Figure \ref{fig:test_struts_meas_spur_res_struts_2} with the encoder and in Figure \ref{fig:test_struts_meas_spur_res_struts_2_encoder} with the encoder. +Finally, the ``Z-torsion'' is measured as shown in Figure \ref{fig:test_struts_meas_spur_res_struts_3}. \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=\linewidth]{figs/meas_spur_res_struts_1_enc.jpg} -\caption{\label{fig:meas_spur_res_struts_1_enc}Measurement setup for the X-Bending measurement (with the encoder)} +\includegraphics[scale=1,width=\linewidth]{figs/test_struts_meas_spur_res_struts_1_enc.jpg} +\caption{\label{fig:test_struts_meas_spur_res_struts_1_enc}Measurement setup for the X-Bending measurement (with the encoder)} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=\linewidth]{figs/meas_spur_res_struts_2.jpg} -\caption{\label{fig:meas_spur_res_struts_2}Measurement setup for the Y-Bending measurement} +\includegraphics[scale=1,width=\linewidth]{figs/test_struts_meas_spur_res_struts_2.jpg} +\caption{\label{fig:test_struts_meas_spur_res_struts_2}Measurement setup for the Y-Bending measurement} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=\linewidth]{figs/meas_spur_res_struts_2_encoder.jpg} -\caption{\label{fig:meas_spur_res_struts_2_encoder}Measurement setup for the Y-Bending measurement (with the encoder)} +\includegraphics[scale=1,width=\linewidth]{figs/test_struts_meas_spur_res_struts_2_encoder.jpg} +\caption{\label{fig:test_struts_meas_spur_res_struts_2_encoder}Measurement setup for the Y-Bending measurement (with the encoder)} \end{figure} \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=0.8\linewidth]{figs/meas_spur_res_struts_3.jpg} -\caption{\label{fig:meas_spur_res_struts_3}Measurement setup for the Z-Torsion measurement} +\includegraphics[scale=1,width=0.8\linewidth]{figs/test_struts_meas_spur_res_struts_3.jpg} +\caption{\label{fig:test_struts_meas_spur_res_struts_3}Measurement setup for the Z-Torsion measurement} \end{figure} \section{Without Encoder} -When the encoder is not fixed to the strut, the obtained FRF are shown in Figure \ref{fig:struts_spur_res_without_enc}. +When the encoder is not fixed to the strut, the obtained FRF are shown in Figure \ref{fig:test_struts_spur_res_frf}. \begin{figure}[htbp] \centering -\includegraphics[scale=1]{figs/struts_spur_res_without_enc.png} -\caption{\label{fig:struts_spur_res_without_enc}Obtained FRF for the struts without the encoder} +\includegraphics[scale=1]{figs/test_struts_spur_res_frf.png} +\caption{\label{fig:test_struts_spur_res_frf}Obtained FRF for the struts without the encoder} \end{figure} \section{With Encoder} -Then, one encoder is fixed to the strut and the FRF are measured again and shown in Figure \ref{fig:struts_spur_res_with_enc}. +Then, one encoder is fixed to the strut and the FRF are measured again and shown in Figure \ref{fig:test_struts_spur_res_frf_enc}. \begin{figure}[htbp] \centering -\includegraphics[scale=1]{figs/struts_spur_res_with_enc.png} -\caption{\label{fig:struts_spur_res_with_enc}Obtained FRF for the struts with encoder} +\includegraphics[scale=1]{figs/test_struts_spur_res_frf_enc.png} +\caption{\label{fig:test_struts_spur_res_frf_enc}Obtained FRF for the struts with encoder} \end{figure} \section{Conclusion} -Table \ref{tab:strut_measured_modes_freq} summarizes the measured resonance frequencies as well as the computed ones using the Finite Element Model. +Table \ref{tab:test_struts_spur_mode_freqs} summarizes the measured resonance frequencies as well as the computed ones using the Finite Element Model. \begin{important} -From the values in Table \ref{tab:strut_measured_modes_freq}, it is shown that: +From the values in Table \ref{tab:test_struts_spur_mode_freqs}, it is shown that: \begin{itemize} \item the resonance frequencies of the 3 modes are only slightly increasing when the encoder is removed \item the computed resonance frequencies from the FEM are very close to the measured one when the encoder is fixed to the strut @@ -227,7 +240,7 @@ From the values in Table \ref{tab:strut_measured_modes_freq}, it is shown that: \end{important} \begin{table}[htbp] -\caption{\label{tab:strut_measured_modes_freq}Measured frequency of the strut spurious modes} +\caption{\label{tab:test_struts_spur_mode_freqs}Measured frequency of the strut spurious modes} \centering \begin{tabularx}{0.45\linewidth}{cccc} \toprule @@ -240,35 +253,35 @@ Z-Torsion & 400Hz & 381Hz & 398Hz\\ \end{tabularx} \end{table} \chapter{Dynamical measurements} -\label{sec:test_bench_struts_dynamical_meas} -The same bench used in Section \ref{sec:dynamical_meas_apa} is here used with the strut instead of only the APA. +\label{sec:test_struts_dynamical_meas} +The bench is shown in Figure \ref{fig:test_struts_bench_leg_overview}. +Measurements are performed either when no encoder is fixed to the strut (Figure \ref{fig:test_struts_bench_leg_front}) or when one encoder is fixed to the strut (Figure \ref{fig:test_struts_bench_leg_coder}). -The bench is shown in Figure \ref{fig:test_bench_leg_overview}. -Measurements are performed either when no encoder is fixed to the strut (Figure \ref{fig:test_bench_leg_front}) or when one encoder is fixed to the strut (Figure \ref{fig:test_bench_leg_coder}). - -\begin{figure}[htbp] -\centering -\includegraphics[scale=1,width=0.5\linewidth]{figs/test_bench_leg_overview.jpg} -\caption{\label{fig:test_bench_leg_overview}Test Bench with Strut - Overview} +\begin{figure} +\begin{subfigure}{0.35\textwidth} +\begin{center} +\includegraphics[scale=1,width=0.99\linewidth]{figs/test_struts_bench_leg_overview.jpg} +\end{center} +\subcaption{\label{fig:test_struts_bench_leg_overview}Overview} +\end{subfigure} +\begin{subfigure}{0.31\textwidth} +\begin{center} +\includegraphics[scale=1,width=0.99\linewidth]{figs/test_struts_bench_leg_front.jpg} +\end{center} +\subcaption{\label{fig:test_struts_bench_leg_front}Strut without encoder} +\end{subfigure} +\begin{subfigure}{0.31\textwidth} +\begin{center} +\includegraphics[scale=1,width=0.99\linewidth]{figs/test_struts_bench_leg_coder.jpg} +\end{center} +\subcaption{\label{fig:test_struts_bench_leg_coder}Strut with encoder} +\end{subfigure} +\caption{\label{fig:test_struts_bench_leg}Experimental setup to measured the dynamics of the struts.} \end{figure} -\begin{figure}[htbp] -\centering -\includegraphics[scale=1,width=0.5\linewidth]{figs/test_bench_leg_front.jpg} -\caption{\label{fig:test_bench_leg_front}Test Bench with Strut - Zoom on the strut} -\end{figure} - -\begin{figure}[htbp] -\centering -\includegraphics[scale=1,width=0.5\linewidth]{figs/test_bench_leg_coder.jpg} -\caption{\label{fig:test_bench_leg_coder}Test Bench with Strut - Zoom on the strut with the encoder} -\end{figure} - -Variables are named the same as in Section \ref{sec:dynamical_meas_apa}. - -First, only one strut is measured in details (Section \ref{sec:meas_strut_1}), and then all the struts are measured and compared (Section \ref{sec:meas_all_struts}). +First, only one strut is measured in details (Section \ref{ssec:test_struts_meas_strut_1}), and then all the struts are measured and compared (Section \ref{ssec:test_struts_meas_all_struts}). \section{Measurement on Strut 1} -\label{sec:meas_strut_1} +\label{ssec:test_struts_meas_strut_1} Measurements are first performed on one of the strut that contains: \begin{itemize} \item the Amplified Piezoelectric Actuator (APA) number 1 @@ -293,7 +306,6 @@ The noise is band-passed between 300Hz and 2kHz. Then, the result of the second identification is used between 10Hz and 350Hz and the result of the third identification if used between 350Hz and 2kHz. The time is the same for all measurements. -Then we defined a ``Hanning'' windows that will be used for the spectral analysis: We get the frequency vector that will be the same for all the frequency domain analysis. \paragraph{FRF Identification - Interferometer} In this section, the dynamics from the excitation voltage \(V_a\) to the interferometer \(d_a\) is identified. @@ -402,21 +414,15 @@ As shown in Figure \ref{fig:strut_1_spurious_resonances}, we can clearly see thr These resonances correspond to parasitic resonances of the strut itself. -They are very close to what was estimated using a finite element model of the strut (Figure \ref{fig:apa_mode_shapes_bis}): +They are very close to what was estimated using a finite element model of the strut (Figure \ref{fig:test_struts_mode_shapes}): \begin{itemize} \item Mode in X-bending at 189Hz \item Mode in Y-bending at 285Hz \item Mode in Z-torsion at 400Hz \end{itemize} -\begin{figure}[htbp] -\centering -\includegraphics[scale=1,width=\linewidth]{figs/apa_mode_shapes.gif} -\caption{\label{fig:apa_mode_shapes_bis}Spurious resonances. a) X-bending mode at 189Hz. b) Y-bending mode at 285Hz. c) Z-torsion mode at 400Hz} -\end{figure} - \begin{important} -The resonances seen by the encoder in Figure \ref{fig:strut_1_spurious_resonances} are indeed corresponding to the modes of the strut as shown in Figure \ref{fig:apa_mode_shapes_bis}. +The resonances seen by the encoder in Figure \ref{fig:strut_1_spurious_resonances} are indeed corresponding to the modes of the strut as shown in Figure \ref{fig:test_struts_mode_shapes}. \end{important} \paragraph{FRF Identification - Force Sensor} In this section, the dynamics from \(V_a\) to \(V_s\) is identified. @@ -455,7 +461,7 @@ In order to determine if the complex conjugate zero of Figure \ref{fig:strut_1_e Remove time delay \section{Comparison of all the Struts} -\label{sec:meas_all_struts} +\label{ssec:test_struts_meas_all_struts} Now all struts are measured using the same procedure and test bench as in Section \ref{sec:meas_strut_1}. \subsection{FRF Identification - Setup} The identification of the struts dynamics is performed in two steps: @@ -610,7 +616,7 @@ However, the dynamics from \(V_a\) to the encoder measurement \(d_e\) is much mo The measured FRF are now saved for further use. \section{Comparison of all the (re-aligned) Struts} -\label{sec:meas_all_aligned_struts} +\label{sec:test_struts_meas_all_aligned_struts} The struts are re-aligned and measured using the same test bench. \subsection{Measured misalignment of the APA and flexible joints} The misalignment between the APA and the flexible joints are measured. @@ -731,14 +737,13 @@ Having the struts well aligned does not change significantly the obtained dynami The measured FRF are now saved for further use. \chapter{Simscape Model} -\label{sec:test_bench_struts_simscape} -The same simscape model that was presented in Section \ref{sec:simscape_bench_apa} is here used. -However, now the full strut is put instead of only the APA (see Figure \ref{fig:simscape_model_bench_struts}). +\label{sec:test_struts_simscape} +However, now the full strut is put instead of only the APA (see Figure \ref{fig:test_struts_simscape_model}). \begin{figure}[htbp] \centering -\includegraphics[scale=1,width=\linewidth]{figs/simscape_model_bench_struts.png} -\caption{\label{fig:simscape_model_bench_struts}Screenshot of the Simscape model of the strut fixed to the bench} +\includegraphics[scale=1,width=\linewidth]{figs/test_struts_simscape_model.png} +\caption{\label{fig:test_struts_simscape_model}Screenshot of the Simscape model of the strut fixed to the bench} \end{figure} This Simscape model is used to: @@ -813,13 +818,7 @@ As shown in Figure \ref{fig:struts_frf_dvf_plant_tf}, the dynamics from actuator This could be explained by a large variability in the alignment of the flexible joints and the APA (at the time, the alignment pins were not used). -Depending on the alignment, the spurious resonances of the struts (Figure \ref{fig:apa_mode_shapes}) can be excited differently. - -\begin{figure}[htbp] -\centering -\includegraphics[scale=1,width=\linewidth]{figs/apa_mode_shapes.gif} -\caption{\label{fig:apa_mode_shapes}Spurious resonances. a) X-bending mode at 189Hz. b) Y-bending mode at 285Hz. c) Z-torsion mode at 400Hz} -\end{figure} +Depending on the alignment, the spurious resonances of the struts (Figure \ref{fig:test_struts_mode_shapes}) can be excited differently. For instance, consider Figure \ref{fig:strut_misalign_schematic} where there is a misalignment in the \(y\) direction. In such case, the mode at 200Hz is foreseen to be more excited as the misalignment \(d_y\) increases and therefore the dynamics from the actuator to the encoder should also change around 200Hz. @@ -991,6 +990,6 @@ Not sure is would be effect though. \end{question} \section{Comparison with identified misalignment} \chapter{Conclusion} -\label{sec:test_bench_struts_conclusion} +\label{sec:test_struts_conclusion} \printbibliography[heading=bibintoc,title={Bibliography}] \end{document}