test-bench-nano-hexapod/test-bench-nano-hexapod.html

270 lines
12 KiB
HTML
Raw Normal View History

2021-06-07 19:00:29 +02:00
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
2021-06-08 22:15:02 +02:00
<!-- 2021-06-08 mar. 22:15 -->
2021-06-07 19:00:29 +02:00
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Nano-Hexapod - Test Bench</title>
<meta name="author" content="Dehaeze Thomas" />
<meta name="generator" content="Org Mode" />
<link rel="stylesheet" type="text/css" href="https://research.tdehaeze.xyz/css/style.css"/>
<script type="text/javascript" src="https://research.tdehaeze.xyz/js/script.js"></script>
</head>
<body>
<div id="org-div-home-and-up">
<a accesskey="h" href="../index.html"> UP </a>
|
<a accesskey="H" href="../index.html"> HOME </a>
</div><div id="content">
<h1 class="title">Nano-Hexapod - Test Bench</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
2021-06-08 22:15:02 +02:00
<li><a href="#orge60a691">1. Encoders fixed to the Struts</a>
2021-06-08 22:14:48 +02:00
<ul>
2021-06-08 22:15:02 +02:00
<li><a href="#org7010817">1.1. Introduction</a></li>
<li><a href="#orga8cffa3">1.2. Load Data</a></li>
<li><a href="#org46d9ef0">1.3. Spectral Analysis - Setup</a></li>
<li><a href="#org8d17470">1.4. DVF Plant</a></li>
<li><a href="#org22119eb">1.5. IFF Plant</a></li>
<li><a href="#org9f943b4">1.6. Jacobian</a>
<ul>
<li><a href="#org31b15c3">1.6.1. DVF Plant</a></li>
<li><a href="#org6b0e225">1.6.2. IFF Plant</a></li>
</ul>
</li>
2021-06-08 22:14:48 +02:00
</ul>
</li>
2021-06-07 19:00:29 +02:00
</ul>
</div>
</div>
<hr>
<p>This report is also available as a <a href="./test-bench-nano-hexapod.pdf">pdf</a>.</p>
<hr>
2021-06-08 22:15:02 +02:00
<div class="note" id="org6b76075">
2021-06-07 19:00:29 +02:00
<p>
Here are the documentation of the equipment used for this test bench:
</p>
<ul class="org-ul">
<li>Voltage Amplifier: PiezoDrive <a href="doc/PD200-V7-R1.pdf">PD200</a></li>
<li>Amplified Piezoelectric Actuator: Cedrat <a href="doc/APA300ML.pdf">APA300ML</a></li>
<li>DAC/ADC: Speedgoat <a href="doc/IO131-OEM-Datasheet.pdf">IO313</a></li>
<li>Encoder: Renishaw <a href="doc/L-9517-9678-05-A_Data_sheet_VIONiC_series_en.pdf">Vionic</a> and used <a href="doc/L-9517-9862-01-C_Data_sheet_RKLC_EN.pdf">Ruler</a></li>
<li>Interferometers: Attocube</li>
</ul>
</div>
2021-06-08 22:14:48 +02:00
2021-06-08 22:15:02 +02:00
<div id="org6594005" class="figure">
2021-06-08 22:14:48 +02:00
<p><img src="figs/IMG_20210608_152917.jpg" alt="IMG_20210608_152917.jpg" />
</p>
<p><span class="figure-number">Figure 1: </span>Nano-Hexapod</p>
</div>
2021-06-08 22:15:02 +02:00
<div id="org0571a2e" class="figure">
2021-06-08 22:14:48 +02:00
<p><img src="figs/IMG_20210608_154722.jpg" alt="IMG_20210608_154722.jpg" />
</p>
<p><span class="figure-number">Figure 2: </span>Nano-Hexapod and the control electronics</p>
</div>
2021-06-08 22:15:02 +02:00
<div id="outline-container-orge60a691" class="outline-2">
<h2 id="orge60a691"><span class="section-number-2">1</span> Encoders fixed to the Struts</h2>
<div class="outline-text-2" id="text-1">
2021-06-08 22:14:48 +02:00
</div>
2021-06-08 22:15:02 +02:00
<div id="outline-container-org7010817" class="outline-3">
<h3 id="org7010817"><span class="section-number-3">1.1</span> Introduction</h3>
2021-06-08 22:14:48 +02:00
</div>
2021-06-08 22:15:02 +02:00
<div id="outline-container-orga8cffa3" class="outline-3">
<h3 id="orga8cffa3"><span class="section-number-3">1.2</span> Load Data</h3>
<div class="outline-text-3" id="text-1-2">
2021-06-08 22:14:48 +02:00
<div class="org-src-container">
<pre class="src src-matlab">meas_data_lf = {};
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:6</span>
meas_data_lf(<span class="org-constant">i</span>) = {load(sprintf(<span class="org-string">'mat/frf_data_exc_strut_%i_noise_lf.mat'</span>, <span class="org-constant">i</span>), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>)};
meas_data_hf(<span class="org-constant">i</span>) = {load(sprintf(<span class="org-string">'mat/frf_data_exc_strut_%i_noise_hf.mat'</span>, <span class="org-constant">i</span>), <span class="org-string">'t'</span>, <span class="org-string">'Va'</span>, <span class="org-string">'Vs'</span>, <span class="org-string">'de'</span>)};
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
2021-06-08 22:15:02 +02:00
<div id="outline-container-org46d9ef0" class="outline-3">
<h3 id="org46d9ef0"><span class="section-number-3">1.3</span> Spectral Analysis - Setup</h3>
<div class="outline-text-3" id="text-1-3">
2021-06-08 22:14:48 +02:00
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-comment">% Sampling Time [s]</span>
Ts = (meas_data_lf{1}.t(end) <span class="org-type">-</span> (meas_data_lf{1}.t(1)))<span class="org-type">/</span>(length(meas_data_lf{1}.t)<span class="org-type">-</span>1);
<span class="org-comment">% Sampling Frequency [Hz]</span>
Fs = 1<span class="org-type">/</span>Ts;
<span class="org-comment">% Hannning Windows</span>
win = hanning(ceil(1<span class="org-type">*</span>Fs));
</pre>
</div>
<p>
And we get the frequency vector.
</p>
<div class="org-src-container">
<pre class="src src-matlab">[<span class="org-type">~</span>, f] = tfestimate(meas_data_lf{1}.Va, meas_data_lf{1}.de, win, [], [], 1<span class="org-type">/</span>Ts);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">i_lf = f <span class="org-type">&lt;</span> 250; <span class="org-comment">% Points for low frequency excitation</span>
i_hf = f <span class="org-type">&gt;</span> 250; <span class="org-comment">% Points for high frequency excitation</span>
</pre>
</div>
</div>
</div>
2021-06-08 22:15:02 +02:00
<div id="outline-container-org8d17470" class="outline-3">
<h3 id="org8d17470"><span class="section-number-3">1.4</span> DVF Plant</h3>
<div class="outline-text-3" id="text-1-4">
2021-06-08 22:14:48 +02:00
<p>
2021-06-08 22:15:02 +02:00
First, let&rsquo;s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure <a href="#org67e2048">3</a>).
2021-06-08 22:14:48 +02:00
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Coherence</span></span>
coh_dvf_lf = zeros(length(f), 6, 6);
coh_dvf_hf = zeros(length(f), 6, 6);
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:6</span>
coh_dvf_lf(<span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span>) = mscohere(meas_data_lf{<span class="org-constant">i</span>}.Va, meas_data_lf{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
coh_dvf_hf(<span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span>) = mscohere(meas_data_hf{<span class="org-constant">i</span>}.Va, meas_data_hf{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
<span class="org-keyword">end</span>
</pre>
</div>
2021-06-08 22:15:02 +02:00
<div id="org67e2048" class="figure">
2021-06-08 22:14:48 +02:00
<p><img src="figs/enc_struts_dvf_coh.png" alt="enc_struts_dvf_coh.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Obtained coherence for the DVF plant</p>
</div>
<p>
2021-06-08 22:15:02 +02:00
Then the 6x6 transfer function matrix is estimated (Figure <a href="#org4e87d8b">4</a>).
2021-06-08 22:14:48 +02:00
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% DVF Plant</span></span>
G_dvf_lf = zeros(length(f), 6, 6);
G_dvf_hf = zeros(length(f), 6, 6);
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:6</span>
G_dvf_lf(<span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span>) = tfestimate(meas_data_lf{<span class="org-constant">i</span>}.Va, meas_data_lf{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
G_dvf_hf(<span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span>) = tfestimate(meas_data_hf{<span class="org-constant">i</span>}.Va, meas_data_hf{<span class="org-constant">i</span>}.de, win, [], [], 1<span class="org-type">/</span>Ts);
<span class="org-keyword">end</span>
</pre>
</div>
2021-06-08 22:15:02 +02:00
<div id="org4e87d8b" class="figure">
2021-06-08 22:14:48 +02:00
<p><img src="figs/enc_struts_dvf_frf.png" alt="enc_struts_dvf_frf.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Measured FRF for the DVF plant</p>
</div>
</div>
</div>
2021-06-08 22:15:02 +02:00
<div id="outline-container-org22119eb" class="outline-3">
<h3 id="org22119eb"><span class="section-number-3">1.5</span> IFF Plant</h3>
<div class="outline-text-3" id="text-1-5">
2021-06-08 22:14:48 +02:00
<p>
2021-06-08 22:15:02 +02:00
First, let&rsquo;s compute the coherence from the excitation voltage and the displacement as measured by the encoders (Figure <a href="#org38ac16f">5</a>).
2021-06-08 22:14:48 +02:00
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% Coherence</span></span>
coh_iff_lf = zeros(length(f), 6, 6);
coh_iff_hf = zeros(length(f), 6, 6);
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:6</span>
coh_iff_lf(<span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span>) = mscohere(meas_data_lf{<span class="org-constant">i</span>}.Va, meas_data_lf{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
coh_iff_hf(<span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span>) = mscohere(meas_data_hf{<span class="org-constant">i</span>}.Va, meas_data_hf{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
<span class="org-keyword">end</span>
</pre>
</div>
2021-06-08 22:15:02 +02:00
<div id="org38ac16f" class="figure">
2021-06-08 22:14:48 +02:00
<p><img src="figs/enc_struts_iff_coh.png" alt="enc_struts_iff_coh.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Obtained coherence for the IFF plant</p>
</div>
<p>
2021-06-08 22:15:02 +02:00
Then the 6x6 transfer function matrix is estimated (Figure <a href="#org0b97d99">6</a>).
2021-06-08 22:14:48 +02:00
</p>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-matlab-cellbreak"><span class="org-comment">%% IFF Plant</span></span>
G_iff_lf = zeros(length(f), 6, 6);
G_iff_hf = zeros(length(f), 6, 6);
<span class="org-keyword">for</span> <span class="org-variable-name"><span class="org-constant">i</span></span> = <span class="org-constant">1:6</span>
G_iff_lf(<span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span>) = tfestimate(meas_data_lf{<span class="org-constant">i</span>}.Va, meas_data_lf{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
G_iff_hf(<span class="org-type">:</span>, <span class="org-type">:</span>, <span class="org-constant">i</span>) = tfestimate(meas_data_hf{<span class="org-constant">i</span>}.Va, meas_data_hf{<span class="org-constant">i</span>}.Vs, win, [], [], 1<span class="org-type">/</span>Ts);
<span class="org-keyword">end</span>
</pre>
</div>
2021-06-08 22:15:02 +02:00
<div id="org0b97d99" class="figure">
2021-06-08 22:14:48 +02:00
<p><img src="figs/enc_struts_iff_frf.png" alt="enc_struts_iff_frf.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Measured FRF for the IFF plant</p>
</div>
</div>
</div>
2021-06-08 22:15:02 +02:00
<div id="outline-container-org9f943b4" class="outline-3">
<h3 id="org9f943b4"><span class="section-number-3">1.6</span> Jacobian</h3>
<div class="outline-text-3" id="text-1-6">
2021-06-08 22:14:48 +02:00
<div class="org-src-container">
<pre class="src src-matlab">load(<span class="org-string">'jacobian.mat'</span>, <span class="org-string">'J'</span>);
</pre>
</div>
2021-06-08 22:15:02 +02:00
</div>
<div id="outline-container-org31b15c3" class="outline-4">
<h4 id="org31b15c3"><span class="section-number-4">1.6.1</span> DVF Plant</h4>
<div class="outline-text-4" id="text-1-6-1">
2021-06-08 22:14:48 +02:00
<div class="org-src-container">
2021-06-08 22:15:02 +02:00
<pre class="src src-matlab">G_dvf_J_lf = permute(pagemtimes(inv(J), pagemtimes(permute(G_dvf_lf, [2 3 1]), inv(J<span class="org-type">'</span>))), [3 1 2]);
G_dvf_J_hf = permute(pagemtimes(inv(J), pagemtimes(permute(G_dvf_hf, [2 3 1]), inv(J<span class="org-type">'</span>))), [3 1 2]);
2021-06-08 22:14:48 +02:00
</pre>
</div>
2021-06-08 22:15:02 +02:00
</div>
</div>
2021-06-08 22:14:48 +02:00
2021-06-08 22:15:02 +02:00
<div id="outline-container-org6b0e225" class="outline-4">
<h4 id="org6b0e225"><span class="section-number-4">1.6.2</span> IFF Plant</h4>
<div class="outline-text-4" id="text-1-6-2">
<div class="org-src-container">
<pre class="src src-matlab">G_iff_J_lf = permute(pagemtimes(inv(J), pagemtimes(permute(G_iff_lf, [2 3 1]), inv(J<span class="org-type">'</span>))), [3 1 2]);
G_iff_J_hf = permute(pagemtimes(inv(J), pagemtimes(permute(G_iff_hf, [2 3 1]), inv(J<span class="org-type">'</span>))), [3 1 2]);
</pre>
</div>
</div>
2021-06-08 22:14:48 +02:00
</div>
2021-06-07 19:00:29 +02:00
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
2021-06-08 22:15:02 +02:00
<p class="date">Created: 2021-06-08 mar. 22:15</p>
2021-06-07 19:00:29 +02:00
</div>
</body>
</html>