Create Matlab file / Tangle scripts / Add CSS

This commit is contained in:
Thomas Dehaeze 2020-11-10 12:36:41 +01:00
parent 08cb2b8daa
commit ce10736dda
42 changed files with 803 additions and 1753 deletions

View File

@ -1,45 +0,0 @@
piezo1 = load('mat/cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out');
piezo2 = load('mat/cedrat_la75b_med_2_stack.mat', 't', 'V_in', 'V_out');
piezo3 = load('mat/cedrat_la75b_med_3_stack.mat', 't', 'V_in', 'V_out');
%%
run setup;
win = hann(ceil(0.1/Ts));
[tf_1, f_1] = tfestimate(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts);
[co_1, ~] = mscohere(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts);
[tf_2, f_2] = tfestimate(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts);
[co_2, ~] = mscohere(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts);
[tf_3, f_3] = tfestimate(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts);
[co_3, ~] = mscohere(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts);
%%
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f_1, abs(tf_1), 'DisplayName', '1 stack')
plot(f_2, abs(tf_2), 'DisplayName', '2 stacks')
plot(f_3, abs(tf_3), 'DisplayName', '3 stacks')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ylim([0.1, 20]);
ax2 = subplot(2, 1, 2);
hold on;
plot(f_1, 180/pi*unwrap(angle(tf_1)))
plot(f_2, 180/pi*unwrap(angle(tf_2)))
plot(f_3, 180/pi*unwrap(angle(tf_3)))
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-360, 0]);
linkaxes([ax1,ax2], 'x');
xlim([10, 5000]);

View File

@ -1,44 +0,0 @@
piezo1 = load('mat/pi_505_high.mat', 't', 'V_in', 'V_out');
piezo2 = load('mat/pi_505_high_2_stacks.mat', 't', 'V_in', 'V_out');
piezo3 = load('mat/pi_505_high_3_stacks.mat', 't', 'V_in', 'V_out');
%%
run setup;
win = hann(ceil(0.1/Ts));
[tf_1, f_1] = tfestimate(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts);
[co_1, ~] = mscohere(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts);
[tf_2, f_2] = tfestimate(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts);
[co_2, ~] = mscohere(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts);
[tf_3, f_3] = tfestimate(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts);
[co_3, ~] = mscohere(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts);
%%
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f_1, abs(tf_1), 'DisplayName', '1 stack')
plot(f_2, abs(tf_2), 'DisplayName', '2 stacks')
plot(f_3, abs(tf_3), 'DisplayName', '3 stacks')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ylim([0.1, 50]);
ax2 = subplot(2, 1, 2);
hold on;
plot(f_1, 180/pi*unwrap(angle(tf_1)))
plot(f_2, 180/pi*unwrap(angle(tf_2)))
plot(f_3, 180/pi*unwrap(angle(tf_3)))
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
linkaxes([ax1,ax2], 'x');
xlim([10, 5000]);

View File

@ -1,43 +0,0 @@
hi = load('mat/cedrat_la75b_high_1_stack.mat', 't', 'V_in', 'V_out');
me = load('mat/cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out');
lo = load('mat/cedrat_la75b_low_1_stack.mat', 't', 'V_in', 'V_out');
%%
run setup;
win = hann(ceil(0.1/Ts));
[tf_hi, f_hi] = tfestimate(hi.V_in, hi.V_out, win, [], [], 1/Ts);
[co_hi, ~] = mscohere(hi.V_in, hi.V_out, win, [], [], 1/Ts);
[tf_me, f_me] = tfestimate(me.V_in, me.V_out, win, [], [], 1/Ts);
[co_me, ~] = mscohere(me.V_in, me.V_out, win, [], [], 1/Ts);
[tf_lo, f_lo] = tfestimate(lo.V_in, lo.V_out, win, [], [], 1/Ts);
[co_lo, ~] = mscohere(lo.V_in, lo.V_out, win, [], [], 1/Ts);
%%
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f_lo, abs(tf_lo), 'DisplayName', 'low')
plot(f_me, abs(tf_me), 'DisplayName', 'med')
plot(f_hi, abs(tf_hi), 'DisplayName', 'high')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ylim([0.1, 50]);
ax2 = subplot(2, 1, 2);
hold on;
plot(f_lo, 180/pi*unwrap(angle(tf_lo)))
plot(f_me, 180/pi*unwrap(angle(tf_me)))
plot(f_hi, 180/pi*unwrap(angle(tf_hi)))
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-360, 0]);
linkaxes([ax1,ax2], 'x');
xlim([10, 5000]);

View File

@ -1,37 +0,0 @@
hi = load('mat/pi_505_high.mat', 't', 'V_in', 'V_out');
lo = load('mat/pi_505_low.mat', 't', 'V_in', 'V_out');
%%
run setup;
win = hann(ceil(0.1/Ts));
[tf_hi, f_hi] = tfestimate(hi.V_in, hi.V_out, win, [], [], 1/Ts);
[co_hi, ~] = mscohere(hi.V_in, hi.V_out, win, [], [], 1/Ts);
[tf_lo, f_lo] = tfestimate(lo.V_in, lo.V_out, win, [], [], 1/Ts);
[co_lo, ~] = mscohere(lo.V_in, lo.V_out, win, [], [], 1/Ts);
%%
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f_hi, abs(tf_hi), 'DisplayName', 'high')
plot(f_lo, abs(tf_lo), 'DisplayName', 'low')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ylim([0.1, 20]);
ax2 = subplot(2, 1, 2);
hold on;
plot(f_hi, 180/pi*unwrap(angle(tf_hi)))
plot(f_lo, 180/pi*unwrap(angle(tf_lo)))
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-360, 0]);
linkaxes([ax1,ax2], 'x');
xlim([10, 5000]);

View File

@ -1,34 +0,0 @@
ce_results = load('mat/cedrat_la75b_high_1_stack.mat', 't', 'V_in', 'V_out');
pi_results = load('mat/pi_505_high.mat', 't', 'V_in', 'V_out');
%%
run setup;
win = hann(ceil(0.1/Ts));
[tf_ce, f_ce] = tfestimate(ce_results.V_in, ce_results.V_out, win, [], [], 1/Ts);
[tf_pi, f_pi] = tfestimate(pi_results.V_in, pi_results.V_out, win, [], [], 1/Ts);
%%
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f_pi, abs(tf_pi), 'DisplayName', 'PI')
plot(f_ce, abs(tf_ce), 'DisplayName', 'Cedrat')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ylim([0.1, 50]);
ax2 = subplot(2, 1, 2);
hold on;
plot(f_pi, 180/pi*unwrap(angle(tf_pi)))
plot(f_ce, 180/pi*unwrap(angle(tf_ce)))
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-360, 0]);
linkaxes([ax1,ax2], 'x');
xlim([10, 5000]);

49
css/custom.css Normal file
View File

@ -0,0 +1,49 @@
.figure p{
text-align: center;
}
.figure img{
max-width:100%;
display: block;
margin: auto;
}
table {
margin-left: auto;
margin-right: auto;
}
.org-src-container > pre.src:before {
display: inline;
position: absolute;
color: #808080;
background-color: white;
top: -10px;
left: 10px;
padding: 0px 4px;
border: 1px solid #d0d0d0;
font-size: 80%;
}
.org-src-container > pre {
margin-top: 1.5em;
position: relative;
overflow: visible;
}
.org-src-container > pre > code.src:before {
display: inline;
position: absolute;
color: #808080;
background-color: white;
top: -10px;
left: 10px;
padding: 0px 4px;
border: 1px solid #d0d0d0;
font-size: 80%;
}
.org-src-container > pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
.org-src-container > pre.src-elisp:before { content: 'Emacs Lisp'; }
.org-src-container > pre.src-sh:before { content: 'shell'; }
.org-src-container > pre.src-bash:before { content: 'bash'; }
.org-src-container > pre.src-org:before { content: 'Org mode'; }
.org-src-container > pre.src-python:before { content: 'Python'; }
.org-src-container > pre.src-matlab:before { content: 'Matlab'; }

View File

@ -513,7 +513,7 @@ legend{
padding:0; padding:0;
white-space:normal} white-space:normal}
.fa:before,#content .admonition-title:before,#content h1 .headerlink:before,#content h2 .headerlink:before,#content h3 .headerlink:before,#content h4 .headerlink:before,#content h5 .headerlink:before,#content h6 .headerlink:before,#content dl dt .headerlink:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,#content .note,#content .attention,#content .caution,#content .danger,#content .error,#content .hint,#content .important,#content .tip,#content .warning,#content .seealso,#content .admonitiontodo,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,#table-of-contents li.on a,#table-of-contents li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{ .fa:before,#content .admonition-title:before,#content h1 .headerlink:before,#content h2 .headerlink:before,#content h3 .headerlink:before,#content h4 .headerlink:before,#content h5 .headerlink:before,#content h6 .headerlink:before,#content dl dt .headerlink:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,#content .note,#content .attention,#content .caution,#content .danger,#content .error,#content .summary,#content .hint,#content .important,#content .tip,#content .warning,#content .question,#content .seealso,#content .admonitiontodo,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,#table-of-contents li.on a,#table-of-contents li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{
-webkit-font-smoothing:antialiased} -webkit-font-smoothing:antialiased}
/*! /*!
@ -576,7 +576,7 @@ a .fa,a #content .admonition-title,#content a .admonition-title{
.nav #content .admonition-title,#content .nav .admonition-title,.nav .icon{ .nav #content .admonition-title,#content .nav .admonition-title,.nav .icon{
display:inline} display:inline}
.wy-alert,#content .note,#content .attention,#content .caution,#content .danger,#content .error,#content .hint,#content .important,#content .tip,#content .warning,#content .seealso,#content .admonitiontodo{ .wy-alert,#content .note,#content .attention,#content .caution,#content .danger,#content .error,#content .summary,#content .hint,#content .important,#content .tip,#content .warning,#content .question,#content .seealso,#content .admonitiontodo{
padding:12px; padding:12px;
line-height:24px; line-height:24px;
margin-bottom:24px; margin-bottom:24px;
@ -596,32 +596,45 @@ a .fa,a #content .admonition-title,#content a .admonition-title{
#content .danger,#content .error{ #content .danger,#content .error{
background:#fdf3f2} background:#fdf3f2}
.wy-alert.wy-alert-warning,#content .wy-alert-warning.note,#content .attention,#content .caution,#content .wy-alert-warning.danger,#content .wy-alert-warning.error,#content .wy-alert-warning.hint,#content .wy-alert-warning.important,#content .wy-alert-warning.tip,#content .warning,#content .wy-alert-warning.seealso,#content .admonitiontodo{ .wy-alert.wy-alert-warning,#content .wy-alert-warning.note,#content .attention,#content .caution,#content .wy-alert-warning.danger,#content .wy-alert-warning.error,#content .wy-alert-warning.summary,#content .wy-alert-warning.hint,#content .wy-alert-warning.important,#content .wy-alert-warning.tip,#content .warning,#content .wy-alert-warning.seealso,#content .admonitiontodo{
background:#ffedcc} background:#ffedcc}
#content .admonition-title.note:before, #content .admonition-title.seealso:before, #content .admonition-title.warning:before,
#content .admonition-title.warning:before, #content .admonition-title.caution:before, #content .admonition-title.caution:before,
#content .admonition-title.attention:before, #content .admonition-title.attention:before,
#content .admonition-title.tip:before, #content .admonition-title.hint:before,
#content .admonition-title.important:before, #content .admonition-title.important:before,
#content .admonition-title.error:before, #content .admonition-title.danger:before{ #content .admonition-title.error:before,
#content .admonition-title.danger:before{
font-family:FontAwesome; font-family:FontAwesome;
content: "";} content: "";}
#content .note,#content .seealso{ #content .admonition-title.question:before{
font-family:FontAwesome;
content: "";}
#content .admonition-title.note:before,
#content .admonition-title.seealso:before,
#content .admonition-title.tip:before,
#content .admonition-title.summary:before,
#content .admonition-title.hint:before{
font-family:FontAwesome;
content: "";}
#content .note,#content .question,#content .seealso{
background:#e7f2fa} background:#e7f2fa}
.wy-alert p:last-child,#content .note p:last-child,#content .attention p:last-child,#content .caution p:last-child,#content .danger p:last-child,#content .error p:last-child,#content .hint p:last-child,#content .important p:last-child,#content .tip p:last-child,#content .warning p:last-child,#content .seealso p:last-child,#content .admonitiontodo p:last-child{ .wy-alert p:last-child,#content .note p:last-child,#content .attention p:last-child,#content .caution p:last-child,#content .danger p:last-child,#content .error p:last-child,#content .summary p:last-child,#content .hint p:last-child,#content .important p:last-child,#content .tip p:last-child,#content .warning p:last-child,#content .question p:last-child,#content .seealso p:last-child,#content .admonitiontodo p:last-child{
margin-bottom:0} margin-bottom:0}
#content .admonition-title.tip,#content .admonition-title.important,#content .admonition-title.hint{ #content .admonition-title.tip,#content .admonition-title.important,#content .admonition-title.summary,#content .admonition-title.hint{
line-height: 1; line-height: 1;
background:#1abc9c} background:#1abc9c}
#content .important,#content .tip,#content .hint{ #content .important,#content .tip,#content .summary,#content .hint{
background:#dbfaf4} background:#dbfaf4}
#content .admonition-title.note,#content .admonition-title.seealso{ #content .admonition-title.note,#content .admonition-title.question,#content .admonition-title.seealso{
line-height: 1; line-height: 1;
background:#6ab0de} background:#6ab0de}
@ -938,7 +951,7 @@ footer p{
font-style:italic; font-style:italic;
} }
#content .note .last,#content .attention .last,#content .caution .last,#content .danger .last,#content .error .last,#content .hint .last,#content .important .last,#content .tip .last,#content .warning .last,#content .seealso .last,#content .admonitiontodo .last{ #content .note .last,#content .attention .last,#content .caution .last,#content .danger .last,#content .error .last,#content .hint .summary,#content .hint .last,#content .important .last,#content .tip .last,#content .warning .last,#content .question .last,#content .seealso .last,#content .admonitiontodo .last{
margin-bottom:0} margin-bottom:0}
#content .admonition-title:before{ #content .admonition-title:before{

Binary file not shown.

BIN
doc/APA95ML.pdf Normal file

Binary file not shown.

BIN
doc/E-505-Datasheet.pdf Normal file

Binary file not shown.

BIN
doc/LA75B.pdf Normal file

Binary file not shown.

View File

@ -3,17 +3,16 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <head>
<!-- 2020-09-03 jeu. 14:08 --> <!-- 2020-11-10 mar. 12:34 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Measurement of Piezoelectric Amplifiers</title> <title>Measurement of Piezoelectric Amplifiers</title>
<meta name="generator" content="Org mode" /> <meta name="generator" content="Org mode" />
<meta name="author" content="Dehaeze Thomas" /> <meta name="author" content="Dehaeze Thomas" />
<link rel="stylesheet" type="text/css" href="./css/htmlize.css"/> <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/> <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
<link rel="stylesheet" type="text/css" href="./css/zenburn.css"/> <link rel="stylesheet" type="text/css" href="./css/custom.css"/>
<script type="text/javascript" src="./js/jquery.min.js"></script> <script type="text/javascript" src="./js/jquery.min.js"></script>
<script type="text/javascript" src="./js/bootstrap.min.js"></script> <script type="text/javascript" src="./js/bootstrap.min.js"></script>
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script> <script type="text/javascript" src="./js/readtheorg.js"></script>
<script>MathJax = { <script>MathJax = {
tex: { tex: {
@ -31,38 +30,39 @@
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#org38c98dd">1. Effect of a change of capacitance</a> <li><a href="#orgbf340db">1. Effect of a change of capacitance</a>
<ul> <ul>
<li><a href="#orgd444b8f">1.1. Cedrat Technology</a></li> <li><a href="#org641e8fa">1.1. Cedrat Technology</a></li>
<li><a href="#orgc284cd7">1.2. PI</a></li> <li><a href="#org1418126">1.2. PI</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org8e51ecb">2. Effect of a change in Voltage level</a> <li><a href="#org759da67">2. Effect of a change in Voltage level</a>
<ul> <ul>
<li><a href="#org78c90ac">2.1. Cedrat Technology</a></li> <li><a href="#org6a05198">2.1. Cedrat Technology</a></li>
<li><a href="#org34fdac0">2.2. PI</a></li> <li><a href="#orga82864e">2.2. PI</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org51adef6">3. Comparison PI / Cedrat</a> <li><a href="#orgda5e46f">3. Comparison PI / Cedrat</a>
<ul> <ul>
<li><a href="#org8b66dbb">3.1. Results</a></li> <li><a href="#orgf81af9e">3.1. Results</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgbaa04fd">4. Impedance Measurement</a> <li><a href="#org2ac1966">4. Impedance Measurement</a>
<ul> <ul>
<li><a href="#org9225a6f">4.1. Cedrat Technology</a> <li><a href="#orgabf5b9a">4.1. Cedrat Technology</a>
<ul> <ul>
<li><a href="#orgf9c6ba6">4.1.1. Compute Impedance</a></li> <li><a href="#org373f123">4.1.1. Compute Impedance</a></li>
<li><a href="#orgde9b8ca">4.1.2. Effect of Impedance on the phase drop</a></li> <li><a href="#orgc9002d7">4.1.2. Effect of Impedance on the phase drop</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org7d1ffb3">4.2. PI</a></li> <li><a href="#org3134308">4.2. PI</a></li>
</ul> </ul>
</li> </li>
<li><a href="#org224f00f">5. New PI amplifier measurements</a> <li><a href="#org84728eb">5. New PI amplifier measurements</a>
<ul> <ul>
<li><a href="#orgeba0bc7">5.1. PI</a></li> <li><a href="#org5ca1305">5.1. PI</a></li>
<li><a href="#org08c572e">5.2. Transfer function of the Voltage Amplifier</a></li> <li><a href="#org091ce77">5.2. Transfer function of the Voltage Amplifier</a></li>
<li><a href="#org78406e1">5.3. With Load</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
@ -73,29 +73,29 @@
Two voltage amplifiers are tested: Two voltage amplifiers are tested:
</p> </p>
<ul class="org-ul"> <ul class="org-ul">
<li>PI E-505.00 (<a href="https://www.pi-usa.us/en/products/controllers-drivers-motion-control-software/piezo-drivers-controllers-power-supplies-high-voltage-amplifiers/e-505-piezo-amplifier-module-602300/">link</a>)</li> <li>PI E-505.00 (<a href="doc/E-505-Datasheet.pdf">doc</a>)</li>
<li>Cedrat Technology LA75B (<a href="https://www.cedrat-technologies.com/en/products/piezo-controllers/electronic-amplifier-boards.html">link</a>)</li> <li>Cedrat Technology LA75B (<a href="doc/LA75B.pdf">doc</a>)</li>
</ul> </ul>
<p> <p>
The piezoelectric actuator under test is an APA95ML from Cedrat technology. The piezoelectric actuator under test is an APA95ML from Cedrat technology (<a href="doc/APA95ML.pdf">doc</a>).
It contains three stacks with a capacitance of \(5 \mu F\) each that can be connected independently to the amplifier. It contains three stacks with a capacitance of \(5 \mu F\) each that can be connected independently to the amplifier.
</p> </p>
<div id="outline-container-org38c98dd" class="outline-2"> <div id="outline-container-orgbf340db" class="outline-2">
<h2 id="org38c98dd"><span class="section-number-2">1</span> Effect of a change of capacitance</h2> <h2 id="orgbf340db"><span class="section-number-2">1</span> Effect of a change of capacitance</h2>
<div class="outline-text-2" id="text-1"> <div class="outline-text-2" id="text-1">
</div> </div>
<div id="outline-container-orgd444b8f" class="outline-3"> <div id="outline-container-org641e8fa" class="outline-3">
<h3 id="orgd444b8f"><span class="section-number-3">1.1</span> Cedrat Technology</h3> <h3 id="org641e8fa"><span class="section-number-3">1.1</span> Cedrat Technology</h3>
<div class="outline-text-3" id="text-1-1"> <div class="outline-text-3" id="text-1-1">
<p> <p>
Load Data Load Data
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">piezo1 = load('mat/cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out'); <pre class="src src-matlab">piezo1 = load(<span class="org-string">'cedrat_la75b_med_1_stack.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
piezo2 = load('mat/cedrat_la75b_med_2_stack.mat', 't', 'V_in', 'V_out'); piezo2 = load(<span class="org-string">'cedrat_la75b_med_2_stack.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
piezo3 = load('mat/cedrat_la75b_med_3_stack.mat', 't', 'V_in', 'V_out'); piezo3 = load(<span class="org-string">'cedrat_la75b_med_3_stack.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
</pre> </pre>
</div> </div>
@ -103,17 +103,17 @@ piezo3 = load('mat/cedrat_la75b_med_3_stack.mat', 't', 'V_in', 'V_out');
Compute Coherence and Transfer functions Compute Coherence and Transfer functions
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Ts = 1e-4; <pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4;
win = hann(ceil(0.1/Ts)); win = hann(ceil(0.1<span class="org-type">/</span>Ts));
[tf_1, f] = tfestimate(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts); [tf_1, f] = tfestimate(piezo1.V_in, piezo1.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[co_1, ~] = mscohere(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts); [co_1, <span class="org-type">~</span>] = mscohere(piezo1.V_in, piezo1.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[tf_2, ~] = tfestimate(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts); [tf_2, <span class="org-type">~</span>] = tfestimate(piezo2.V_in, piezo2.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[co_2, ~] = mscohere(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts); [co_2, <span class="org-type">~</span>] = mscohere(piezo2.V_in, piezo2.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[tf_3, ~] = tfestimate(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts); [tf_3, <span class="org-type">~</span>] = tfestimate(piezo3.V_in, piezo3.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[co_3, ~] = mscohere(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts); [co_3, <span class="org-type">~</span>] = mscohere(piezo3.V_in, piezo3.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
</pre> </pre>
</div> </div>
@ -121,12 +121,12 @@ win = hann(ceil(0.1/Ts));
We remove the phase delay due to the time delay of the ADC/DAC: We remove the phase delay due to the time delay of the ADC/DAC:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">angle_delay = 180/pi*angle(squeeze(freqresp(exp(-s*Ts), f, 'Hz'))); <pre class="src src-matlab">angle_delay = 180<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>angle(squeeze(freqresp(exp(<span class="org-type">-</span>s<span class="org-type">*</span>Ts), f, <span class="org-string">'Hz'</span>)));
</pre> </pre>
</div> </div>
<div id="org0777d11" class="figure"> <div id="org51f0c1d" class="figure">
<p><img src="figs/change_capa_cedrat.png" alt="change_capa_cedrat.png" /> <p><img src="figs/change_capa_cedrat.png" alt="change_capa_cedrat.png" />
</p> </p>
<p><span class="figure-number">Figure 1: </span>Effect of a change of the piezo capacitance on the Amplifier transfer function</p> <p><span class="figure-number">Figure 1: </span>Effect of a change of the piezo capacitance on the Amplifier transfer function</p>
@ -134,28 +134,28 @@ We remove the phase delay due to the time delay of the ADC/DAC:
</div> </div>
</div> </div>
<div id="outline-container-orgc284cd7" class="outline-3"> <div id="outline-container-org1418126" class="outline-3">
<h3 id="orgc284cd7"><span class="section-number-3">1.2</span> PI</h3> <h3 id="org1418126"><span class="section-number-3">1.2</span> PI</h3>
<div class="outline-text-3" id="text-1-2"> <div class="outline-text-3" id="text-1-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">piezo1 = load('mat/pi_505_high.mat', 't', 'V_in', 'V_out'); <pre class="src src-matlab">piezo1 = load(<span class="org-string">'pi_505_high.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
piezo2 = load('mat/pi_505_high_2_stacks.mat', 't', 'V_in', 'V_out'); piezo2 = load(<span class="org-string">'pi_505_high_2_stacks.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
piezo3 = load('mat/pi_505_high_3_stacks.mat', 't', 'V_in', 'V_out'); piezo3 = load(<span class="org-string">'pi_505_high_3_stacks.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Ts = 1e-4; <pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4;
win = hann(ceil(0.1/Ts)); win = hann(ceil(0.1<span class="org-type">/</span>Ts));
[tf_1, f] = tfestimate(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts); [tf_1, f] = tfestimate(piezo1.V_in, piezo1.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[co_1, ~] = mscohere(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts); [co_1, <span class="org-type">~</span>] = mscohere(piezo1.V_in, piezo1.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[tf_2, ~] = tfestimate(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts); [tf_2, <span class="org-type">~</span>] = tfestimate(piezo2.V_in, piezo2.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[co_2, ~] = mscohere(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts); [co_2, <span class="org-type">~</span>] = mscohere(piezo2.V_in, piezo2.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[tf_3, ~] = tfestimate(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts); [tf_3, <span class="org-type">~</span>] = tfestimate(piezo3.V_in, piezo3.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[co_3, ~] = mscohere(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts); [co_3, <span class="org-type">~</span>] = mscohere(piezo3.V_in, piezo3.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
</pre> </pre>
</div> </div>
@ -163,12 +163,12 @@ win = hann(ceil(0.1/Ts));
We remove the phase delay due to the time delay of the ADC/DAC: We remove the phase delay due to the time delay of the ADC/DAC:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">angle_delay = 180/pi*angle(squeeze(freqresp(exp(-s*Ts), f, 'Hz'))); <pre class="src src-matlab">angle_delay = 180<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>angle(squeeze(freqresp(exp(<span class="org-type">-</span>s<span class="org-type">*</span>Ts), f, <span class="org-string">'Hz'</span>)));
</pre> </pre>
</div> </div>
<div id="orgd6b252a" class="figure"> <div id="org94c038d" class="figure">
<p><img src="figs/change_capa_pi.png" alt="change_capa_pi.png" /> <p><img src="figs/change_capa_pi.png" alt="change_capa_pi.png" />
</p> </p>
<p><span class="figure-number">Figure 2: </span>Effect of a change of the piezo capacitance on the Amplifier transfer function</p> <p><span class="figure-number">Figure 2: </span>Effect of a change of the piezo capacitance on the Amplifier transfer function</p>
@ -177,32 +177,32 @@ We remove the phase delay due to the time delay of the ADC/DAC:
</div> </div>
</div> </div>
<div id="outline-container-org8e51ecb" class="outline-2"> <div id="outline-container-org759da67" class="outline-2">
<h2 id="org8e51ecb"><span class="section-number-2">2</span> Effect of a change in Voltage level</h2> <h2 id="org759da67"><span class="section-number-2">2</span> Effect of a change in Voltage level</h2>
<div class="outline-text-2" id="text-2"> <div class="outline-text-2" id="text-2">
</div> </div>
<div id="outline-container-org78c90ac" class="outline-3"> <div id="outline-container-org6a05198" class="outline-3">
<h3 id="org78c90ac"><span class="section-number-3">2.1</span> Cedrat Technology</h3> <h3 id="org6a05198"><span class="section-number-3">2.1</span> Cedrat Technology</h3>
<div class="outline-text-3" id="text-2-1"> <div class="outline-text-3" id="text-2-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">hi = load('mat/cedrat_la75b_high_1_stack.mat', 't', 'V_in', 'V_out'); <pre class="src src-matlab">hi = load(<span class="org-string">'cedrat_la75b_high_1_stack.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
me = load('mat/cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out'); me = load(<span class="org-string">'cedrat_la75b_med_1_stack.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
lo = load('mat/cedrat_la75b_low_1_stack.mat', 't', 'V_in', 'V_out'); lo = load(<span class="org-string">'cedrat_la75b_low_1_stack.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Ts = 1e-4; <pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4;
win = hann(ceil(0.1/Ts)); win = hann(ceil(0.1<span class="org-type">/</span>Ts));
[tf_hi, f] = tfestimate(hi.V_in, hi.V_out, win, [], [], 1/Ts); [tf_hi, f] = tfestimate(hi.V_in, hi.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[co_hi, ~] = mscohere(hi.V_in, hi.V_out, win, [], [], 1/Ts); [co_hi, <span class="org-type">~</span>] = mscohere(hi.V_in, hi.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[tf_me, ~] = tfestimate(me.V_in, me.V_out, win, [], [], 1/Ts); [tf_me, <span class="org-type">~</span>] = tfestimate(me.V_in, me.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[co_me, ~] = mscohere(me.V_in, me.V_out, win, [], [], 1/Ts); [co_me, <span class="org-type">~</span>] = mscohere(me.V_in, me.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[tf_lo, ~] = tfestimate(lo.V_in, lo.V_out, win, [], [], 1/Ts); [tf_lo, <span class="org-type">~</span>] = tfestimate(lo.V_in, lo.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[co_lo, ~] = mscohere(lo.V_in, lo.V_out, win, [], [], 1/Ts); [co_lo, <span class="org-type">~</span>] = mscohere(lo.V_in, lo.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
</pre> </pre>
</div> </div>
@ -210,12 +210,12 @@ win = hann(ceil(0.1/Ts));
We remove the phase delay due to the time delay of the ADC/DAC: We remove the phase delay due to the time delay of the ADC/DAC:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">angle_delay = 180/pi*angle(squeeze(freqresp(exp(-s*Ts), f, 'Hz'))); <pre class="src src-matlab">angle_delay = 180<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>angle(squeeze(freqresp(exp(<span class="org-type">-</span>s<span class="org-type">*</span>Ts), f, <span class="org-string">'Hz'</span>)));
</pre> </pre>
</div> </div>
<div id="org3fcbc82" class="figure"> <div id="org413319b" class="figure">
<p><img src="figs/change_level_cedrat.png" alt="change_level_cedrat.png" /> <p><img src="figs/change_level_cedrat.png" alt="change_level_cedrat.png" />
</p> </p>
<p><span class="figure-number">Figure 3: </span>Effect of a change of voltage level on the Amplifier transfer function</p> <p><span class="figure-number">Figure 3: </span>Effect of a change of voltage level on the Amplifier transfer function</p>
@ -223,29 +223,29 @@ We remove the phase delay due to the time delay of the ADC/DAC:
</div> </div>
</div> </div>
<div id="outline-container-org34fdac0" class="outline-3"> <div id="outline-container-orga82864e" class="outline-3">
<h3 id="org34fdac0"><span class="section-number-3">2.2</span> PI</h3> <h3 id="orga82864e"><span class="section-number-3">2.2</span> PI</h3>
<div class="outline-text-3" id="text-2-2"> <div class="outline-text-3" id="text-2-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">hi = load('mat/pi_505_high.mat', 't', 'V_in', 'V_out'); <pre class="src src-matlab">hi = load(<span class="org-string">'pi_505_high.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
lo = load('mat/pi_505_low.mat', 't', 'V_in', 'V_out'); lo = load(<span class="org-string">'pi_505_low.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Ts = 1e-4; <pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4;
win = hann(ceil(0.1/Ts)); win = hann(ceil(0.1<span class="org-type">/</span>Ts));
[tf_hi, f] = tfestimate(hi.V_in, hi.V_out, win, [], [], 1/Ts); [tf_hi, f] = tfestimate(hi.V_in, hi.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[co_hi, ~] = mscohere(hi.V_in, hi.V_out, win, [], [], 1/Ts); [co_hi, <span class="org-type">~</span>] = mscohere(hi.V_in, hi.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[tf_lo, ~] = tfestimate(lo.V_in, lo.V_out, win, [], [], 1/Ts); [tf_lo, <span class="org-type">~</span>] = tfestimate(lo.V_in, lo.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[co_lo, ~] = mscohere(lo.V_in, lo.V_out, win, [], [], 1/Ts); [co_lo, <span class="org-type">~</span>] = mscohere(lo.V_in, lo.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
</pre> </pre>
</div> </div>
<div id="orgf3a50ce" class="figure"> <div id="orgfdd759e" class="figure">
<p><img src="figs/change_level_pi.png" alt="change_level_pi.png" /> <p><img src="figs/change_level_pi.png" alt="change_level_pi.png" />
</p> </p>
<p><span class="figure-number">Figure 4: </span>Effect of a change of voltage level on the Amplifier transfer function</p> <p><span class="figure-number">Figure 4: </span>Effect of a change of voltage level on the Amplifier transfer function</p>
@ -254,25 +254,25 @@ win = hann(ceil(0.1/Ts));
</div> </div>
</div> </div>
<div id="outline-container-org51adef6" class="outline-2"> <div id="outline-container-orgda5e46f" class="outline-2">
<h2 id="org51adef6"><span class="section-number-2">3</span> Comparison PI / Cedrat</h2> <h2 id="orgda5e46f"><span class="section-number-2">3</span> Comparison PI / Cedrat</h2>
<div class="outline-text-2" id="text-3"> <div class="outline-text-2" id="text-3">
</div> </div>
<div id="outline-container-org8b66dbb" class="outline-3"> <div id="outline-container-orgf81af9e" class="outline-3">
<h3 id="org8b66dbb"><span class="section-number-3">3.1</span> Results</h3> <h3 id="orgf81af9e"><span class="section-number-3">3.1</span> Results</h3>
<div class="outline-text-3" id="text-3-1"> <div class="outline-text-3" id="text-3-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">ce_results = load('mat/cedrat_la75b_high_1_stack.mat', 't', 'V_in', 'V_out'); <pre class="src src-matlab">ce_results = load(<span class="org-string">'cedrat_la75b_high_1_stack.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
pi_results = load('mat/pi_505_high.mat', 't', 'V_in', 'V_out'); pi_results = load(<span class="org-string">'pi_505_high.mat'</span>, <span class="org-string">'t'</span>, <span class="org-string">'V_in'</span>, <span class="org-string">'V_out'</span>);
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Ts = 1e-4; <pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4;
win = hann(ceil(0.1/Ts)); win = hann(ceil(0.1<span class="org-type">/</span>Ts));
[tf_ce, f] = tfestimate(ce_results.V_in, ce_results.V_out, win, [], [], 1/Ts); [tf_ce, f] = tfestimate(ce_results.V_in, ce_results.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[tf_pi, ~] = tfestimate(pi_results.V_in, pi_results.V_out, win, [], [], 1/Ts); [tf_pi, <span class="org-type">~</span>] = tfestimate(pi_results.V_in, pi_results.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
</pre> </pre>
</div> </div>
@ -280,12 +280,12 @@ win = hann(ceil(0.1/Ts));
We remove the phase delay due to the time delay of the ADC/DAC: We remove the phase delay due to the time delay of the ADC/DAC:
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">angle_delay = 180/pi*angle(squeeze(freqresp(exp(-s*Ts), f, 'Hz'))); <pre class="src src-matlab">angle_delay = 180<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>angle(squeeze(freqresp(exp(<span class="org-type">-</span>s<span class="org-type">*</span>Ts), f, <span class="org-string">'Hz'</span>)));
</pre> </pre>
</div> </div>
<div id="org2e2f88d" class="figure"> <div id="orga60ef1b" class="figure">
<p><img src="figs/tf_amplifiers_comp.png" alt="tf_amplifiers_comp.png" /> <p><img src="figs/tf_amplifiers_comp.png" alt="tf_amplifiers_comp.png" />
</p> </p>
<p><span class="figure-number">Figure 5: </span>Comparison of the two Amplifier transfer functions</p> <p><span class="figure-number">Figure 5: </span>Comparison of the two Amplifier transfer functions</p>
@ -294,8 +294,8 @@ We remove the phase delay due to the time delay of the ADC/DAC:
</div> </div>
</div> </div>
<div id="outline-container-orgbaa04fd" class="outline-2"> <div id="outline-container-org2ac1966" class="outline-2">
<h2 id="orgbaa04fd"><span class="section-number-2">4</span> Impedance Measurement</h2> <h2 id="org2ac1966"><span class="section-number-2">4</span> Impedance Measurement</h2>
<div class="outline-text-2" id="text-4"> <div class="outline-text-2" id="text-4">
<p> <p>
The goal is to experimentally measure the output impedance of the voltage amplifiers. The goal is to experimentally measure the output impedance of the voltage amplifiers.
@ -317,22 +317,22 @@ From the two values of voltage, the internal resistor value can be computed:
</p> </p>
</div> </div>
<div id="outline-container-org9225a6f" class="outline-3"> <div id="outline-container-orgabf5b9a" class="outline-3">
<h3 id="org9225a6f"><span class="section-number-3">4.1</span> Cedrat Technology</h3> <h3 id="orgabf5b9a"><span class="section-number-3">4.1</span> Cedrat Technology</h3>
<div class="outline-text-3" id="text-4-1"> <div class="outline-text-3" id="text-4-1">
</div> </div>
<div id="outline-container-orgf9c6ba6" class="outline-4"> <div id="outline-container-org373f123" class="outline-4">
<h4 id="orgf9c6ba6"><span class="section-number-4">4.1.1</span> Compute Impedance</h4> <h4 id="org373f123"><span class="section-number-4">4.1.1</span> Compute Impedance</h4>
<div class="outline-text-4" id="text-4-1-1"> <div class="outline-text-4" id="text-4-1-1">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">R = 10; % Resistive Load used [Ohm] <pre class="src src-matlab">R = 10; <span class="org-comment">% Resistive Load used [Ohm]</span>
V = 0.998; % Output Voltage without any load [V] V = 0.998; <span class="org-comment">% Output Voltage without any load [V]</span>
Vp = 0.912; % Output Voltage with resistice load [V] Vp = 0.912; <span class="org-comment">% Output Voltage with resistice load [V]</span>
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">R * (V - Vp)/Vp; <pre class="src src-matlab">R <span class="org-type">*</span> (V <span class="org-type">-</span> Vp)<span class="org-type">/</span>Vp;
</pre> </pre>
</div> </div>
@ -342,14 +342,14 @@ Vp = 0.912; % Output Voltage with resistice load [V]
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">R = 47; % Resistive Load used [Ohm] <pre class="src src-matlab">R = 47; <span class="org-comment">% Resistive Load used [Ohm]</span>
V = 4.960; % Output Voltage without any load [V] V = 4.960; <span class="org-comment">% Output Voltage without any load [V]</span>
Vp = 4.874; % Output Voltage with resistice load [V] Vp = 4.874; <span class="org-comment">% Output Voltage with resistice load [V]</span>
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">R * (V - Vp)/Vp; <pre class="src src-matlab">R <span class="org-type">*</span> (V <span class="org-type">-</span> Vp)<span class="org-type">/</span>Vp;
</pre> </pre>
</div> </div>
@ -359,25 +359,25 @@ Vp = 4.874; % Output Voltage with resistice load [V]
</div> </div>
</div> </div>
<div id="outline-container-orgde9b8ca" class="outline-4"> <div id="outline-container-orgc9002d7" class="outline-4">
<h4 id="orgde9b8ca"><span class="section-number-4">4.1.2</span> Effect of Impedance on the phase drop</h4> <h4 id="orgc9002d7"><span class="section-number-4">4.1.2</span> Effect of Impedance on the phase drop</h4>
<div class="outline-text-4" id="text-4-1-2"> <div class="outline-text-4" id="text-4-1-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">C_1 = 5e-6; % Capacitance in [F] <pre class="src src-matlab">C_1 = 5e<span class="org-type">-</span>6; <span class="org-comment">% Capacitance in [F]</span>
C_2 = 10e-6; % Capacitance in [F] C_2 = 10e<span class="org-type">-</span>6; <span class="org-comment">% Capacitance in [F]</span>
C_3 = 15e-6; % Capacitance in [F] C_3 = 15e<span class="org-type">-</span>6; <span class="org-comment">% Capacitance in [F]</span>
Ri = R * (V - Vp)/Vp; % Internal resistance [Ohm] Ri = R <span class="org-type">*</span> (V <span class="org-type">-</span> Vp)<span class="org-type">/</span>Vp; <span class="org-comment">% Internal resistance [Ohm]</span>
G0 = 20; G0 = 20;
G_1 = G0/(1+Ri*C_1*s); G_1 = G0<span class="org-type">/</span>(1<span class="org-type">+</span>Ri<span class="org-type">*</span>C_1<span class="org-type">*</span>s);
G_2 = G0/(1+Ri*C_2*s); G_2 = G0<span class="org-type">/</span>(1<span class="org-type">+</span>Ri<span class="org-type">*</span>C_2<span class="org-type">*</span>s);
G_3 = G0/(1+Ri*C_3*s); G_3 = G0<span class="org-type">/</span>(1<span class="org-type">+</span>Ri<span class="org-type">*</span>C_3<span class="org-type">*</span>s);
</pre> </pre>
</div> </div>
<div id="orge30d566" class="figure"> <div id="orgcbac798" class="figure">
<p><img src="figs/change_capa_cedrat.png" alt="change_capa_cedrat.png" /> <p><img src="figs/change_capa_cedrat.png" alt="change_capa_cedrat.png" />
</p> </p>
<p><span class="figure-number">Figure 6: </span>Effect of a change of the piezo capacitance on the Amplifier transfer function</p> <p><span class="figure-number">Figure 6: </span>Effect of a change of the piezo capacitance on the Amplifier transfer function</p>
@ -386,18 +386,18 @@ G_3 = G0/(1+Ri*C_3*s);
</div> </div>
</div> </div>
<div id="outline-container-org7d1ffb3" class="outline-3"> <div id="outline-container-org3134308" class="outline-3">
<h3 id="org7d1ffb3"><span class="section-number-3">4.2</span> PI</h3> <h3 id="org3134308"><span class="section-number-3">4.2</span> PI</h3>
<div class="outline-text-3" id="text-4-2"> <div class="outline-text-3" id="text-4-2">
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">R = 10; % Resistive Load used [Ohm] <pre class="src src-matlab">R = 10; <span class="org-comment">% Resistive Load used [Ohm]</span>
V = 1.059; % Output Voltage without any load [V] V = 1.059; <span class="org-comment">% Output Voltage without any load [V]</span>
Vp = 0.828; % Output Voltage with resistice load [V] Vp = 0.828; <span class="org-comment">% Output Voltage with resistice load [V]</span>
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">R * (V - Vp)/Vp <pre class="src src-matlab">R <span class="org-type">*</span> (V <span class="org-type">-</span> Vp)<span class="org-type">/</span>Vp
</pre> </pre>
</div> </div>
@ -407,14 +407,14 @@ Vp = 0.828; % Output Voltage with resistice load [V]
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">R = 10; % Resistive Load used [Ohm] <pre class="src src-matlab">R = 10; <span class="org-comment">% Resistive Load used [Ohm]</span>
V = 2.092; % Output Voltage without any load [V] V = 2.092; <span class="org-comment">% Output Voltage without any load [V]</span>
Vp = 1.637; % Output Voltage with resistice load [V] Vp = 1.637; <span class="org-comment">% Output Voltage with resistice load [V]</span>
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">R * (V - Vp)/Vp <pre class="src src-matlab">R <span class="org-type">*</span> (V <span class="org-type">-</span> Vp)<span class="org-type">/</span>Vp
</pre> </pre>
</div> </div>
@ -425,12 +425,12 @@ Vp = 1.637; % Output Voltage with resistice load [V]
</div> </div>
</div> </div>
<div id="outline-container-org224f00f" class="outline-2"> <div id="outline-container-org84728eb" class="outline-2">
<h2 id="org224f00f"><span class="section-number-2">5</span> New PI amplifier measurements</h2> <h2 id="org84728eb"><span class="section-number-2">5</span> New PI amplifier measurements</h2>
<div class="outline-text-2" id="text-5"> <div class="outline-text-2" id="text-5">
</div> </div>
<div id="outline-container-orgeba0bc7" class="outline-3"> <div id="outline-container-org5ca1305" class="outline-3">
<h3 id="orgeba0bc7"><span class="section-number-3">5.1</span> PI</h3> <h3 id="org5ca1305"><span class="section-number-3">5.1</span> PI</h3>
<div class="outline-text-3" id="text-5-1"> <div class="outline-text-3" id="text-5-1">
<p> <p>
Three measurements are done: Three measurements are done:
@ -442,29 +442,31 @@ Three measurements are done:
</ul> </ul>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">pi_sr_min = load('mat/pi_slew_rate_min.mat'); <pre class="src src-matlab">pi_sr_min = load(<span class="org-string">'pi_slew_rate_min.mat'</span>);
pi_sr_max = load('mat/pi_slew_rate_max.mat'); pi_sr_max = load(<span class="org-string">'pi_slew_rate_max.mat'</span>);
pi_sr_max_notch = load('mat/pi_slew_rate_max_notch_high.mat'); pi_sr_max_notch = load(<span class="org-string">'pi_slew_rate_max_notch_high.mat'</span>);
pi_sr_load = load(<span class="org-string">'pi_slew_rate_max_notch_high_2stacks.mat'</span>);
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">Ts = 1e-4; <pre class="src src-matlab">Ts = 1e<span class="org-type">-</span>4;
win = hann(ceil(0.1/Ts)); win = hann(ceil(0.1<span class="org-type">/</span>Ts));
[tf_sr_min, f] = tfestimate(pi_sr_min.V_in, pi_sr_min.V_out, win, [], [], 1/Ts); [tf_sr_min, f] = tfestimate(pi_sr_min.V_in, pi_sr_min.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[tf_sr_max, ~] = tfestimate(pi_sr_max.V_in, pi_sr_max.V_out, win, [], [], 1/Ts); [tf_sr_max, <span class="org-type">~</span>] = tfestimate(pi_sr_max.V_in, pi_sr_max.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[tf_sr_max_notch, ~] = tfestimate(pi_sr_max_notch.V_in, pi_sr_max_notch.V_out, win, [], [], 1/Ts); [tf_sr_max_notch, <span class="org-type">~</span>] = tfestimate(pi_sr_max_notch.V_in, pi_sr_max_notch.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
[tf_sr_load, <span class="org-type">~</span>] = tfestimate(pi_sr_load.V_in, pi_sr_load.V_out, win, [], [], 1<span class="org-type">/</span>Ts);
</pre> </pre>
</div> </div>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">angle_delay = 180/pi*angle(squeeze(freqresp(exp(-s*Ts), f, 'Hz'))); <pre class="src src-matlab">angle_delay = 180<span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>angle(squeeze(freqresp(exp(<span class="org-type">-</span>s<span class="org-type">*</span>Ts), f, <span class="org-string">'Hz'</span>)));
</pre> </pre>
</div> </div>
<div id="orga46f3c0" class="figure"> <div id="org431d6ed" class="figure">
<p><img src="figs/pi_slew_rate_notch.png" alt="pi_slew_rate_notch.png" /> <p><img src="figs/pi_slew_rate_notch.png" alt="pi_slew_rate_notch.png" />
</p> </p>
<p><span class="figure-number">Figure 7: </span>Effect of a change in the slew rate limitation and notch filter</p> <p><span class="figure-number">Figure 7: </span>Effect of a change in the slew rate limitation and notch filter</p>
@ -472,16 +474,29 @@ win = hann(ceil(0.1/Ts));
</div> </div>
</div> </div>
<div id="outline-container-org08c572e" class="outline-3"> <div id="outline-container-org091ce77" class="outline-3">
<h3 id="org08c572e"><span class="section-number-3">5.2</span> Transfer function of the Voltage Amplifier</h3> <h3 id="org091ce77"><span class="section-number-3">5.2</span> Transfer function of the Voltage Amplifier</h3>
<div class="outline-text-3" id="text-5-2"> <div class="outline-text-3" id="text-5-2">
<p> <p>
The identified transfer function still seems to match the one of a notch filter at 5kHz. The identified transfer function still seems to match the one of a notch filter at 5kHz.
</p> </p>
<div class="org-src-container"> <div class="org-src-container">
<pre class="src src-matlab">w_nf = 2*pi*5e3; % Notch Filter Frequency [rad/s] <pre class="src src-matlab">w_nf = 2<span class="org-type">*</span><span class="org-constant">pi</span><span class="org-type">*</span>5e3; <span class="org-comment">% Notch Filter Frequency [rad/s]</span>
G = 10.5*(s^2 + 2*w_nf*0.12*s + w_nf^2)/(s^2 + 2*w_nf*s + w_nf^2); G = 10.5<span class="org-type">*</span>(s<span class="org-type">^</span>2 <span class="org-type">+</span> 2<span class="org-type">*</span>w_nf<span class="org-type">*</span>0.12<span class="org-type">*</span>s <span class="org-type">+</span> w_nf<span class="org-type">^</span>2)<span class="org-type">/</span>(s<span class="org-type">^</span>2 <span class="org-type">+</span> 2<span class="org-type">*</span>w_nf<span class="org-type">*</span>s <span class="org-type">+</span> w_nf<span class="org-type">^</span>2);
</pre>
</div>
</div>
</div>
<div id="outline-container-org78406e1" class="outline-3">
<h3 id="org78406e1"><span class="section-number-3">5.3</span> With Load</h3>
<div class="outline-text-3" id="text-5-3">
<div class="org-src-container">
<pre class="src src-matlab">R = 2.78; <span class="org-comment">% Output Impedance [Ohm]</span>
C = 9e<span class="org-type">-</span>6; <span class="org-comment">% Load capacitance [F]</span>
G_amp = 10<span class="org-type">/</span>(1 <span class="org-type">+</span> s<span class="org-type">*</span>R<span class="org-type">*</span>C);
</pre> </pre>
</div> </div>
</div> </div>
@ -490,7 +505,7 @@ G = 10.5*(s^2 + 2*w_nf*0.12*s + w_nf^2)/(s^2 + 2*w_nf*s + w_nf^2);
</div> </div>
<div id="postamble" class="status"> <div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p> <p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-09-03 jeu. 14:08</p> <p class="date">Created: 2020-11-10 mar. 12:34</p>
</div> </div>
</body> </body>
</html> </html>

105
index.org
View File

@ -6,10 +6,9 @@
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/> #+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/> #+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/readtheorg.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/zenburn.css"/> #+HTML_HEAD: <link rel="stylesheet" type="text/css" href="./css/custom.css"/>
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.min.js"></script> #+HTML_HEAD: <script type="text/javascript" src="./js/jquery.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="./js/bootstrap.min.js"></script> #+HTML_HEAD: <script type="text/javascript" src="./js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="./js/readtheorg.js"></script> #+HTML_HEAD: <script type="text/javascript" src="./js/readtheorg.js"></script>
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/tikz/org/}{config.tex}") #+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/tikz/org/}{config.tex}")
@ -24,7 +23,6 @@
#+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png") #+PROPERTY: header-args:latex+ :post pdf2svg(file=*this*, ext="png")
#+PROPERTY: header-args:matlab :session *MATLAB* #+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :tangle filters.m
#+PROPERTY: header-args:matlab+ :comments org #+PROPERTY: header-args:matlab+ :comments org
#+PROPERTY: header-args:matlab+ :exports both #+PROPERTY: header-args:matlab+ :exports both
#+PROPERTY: header-args:matlab+ :results none #+PROPERTY: header-args:matlab+ :results none
@ -37,13 +35,16 @@
* Introduction :ignore: * Introduction :ignore:
Two voltage amplifiers are tested: Two voltage amplifiers are tested:
- PI E-505.00 ([[https://www.pi-usa.us/en/products/controllers-drivers-motion-control-software/piezo-drivers-controllers-power-supplies-high-voltage-amplifiers/e-505-piezo-amplifier-module-602300/][link]]) - PI E-505.00 ([[file:doc/E-505-Datasheet.pdf][doc]])
- Cedrat Technology LA75B ([[https://www.cedrat-technologies.com/en/products/piezo-controllers/electronic-amplifier-boards.html][link]]) - Cedrat Technology LA75B ([[file:doc/LA75B.pdf][doc]])
The piezoelectric actuator under test is an APA95ML from Cedrat technology. The piezoelectric actuator under test is an APA95ML from Cedrat technology ([[file:doc/APA95ML.pdf][doc]]).
It contains three stacks with a capacitance of $5 \mu F$ each that can be connected independently to the amplifier. It contains three stacks with a capacitance of $5 \mu F$ each that can be connected independently to the amplifier.
* Effect of a change of capacitance * Effect of a change of capacitance
:PROPERTIES:
:header-args:matlab+: :tangle src/effect_change_capacitance.m
:END:
** Matlab Init :noexport:ignore: ** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
@ -53,12 +54,20 @@ It contains three stacks with a capacitance of $5 \mu F$ each that can be connec
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
** Cedrat Technology ** Cedrat Technology
Load Data Load Data
#+begin_src matlab #+begin_src matlab
piezo1 = load('mat/cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out'); piezo1 = load('cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out');
piezo2 = load('mat/cedrat_la75b_med_2_stack.mat', 't', 'V_in', 'V_out'); piezo2 = load('cedrat_la75b_med_2_stack.mat', 't', 'V_in', 'V_out');
piezo3 = load('mat/cedrat_la75b_med_3_stack.mat', 't', 'V_in', 'V_out'); piezo3 = load('cedrat_la75b_med_3_stack.mat', 't', 'V_in', 'V_out');
#+end_src #+end_src
Compute Coherence and Transfer functions Compute Coherence and Transfer functions
@ -120,9 +129,9 @@ We remove the phase delay due to the time delay of the ADC/DAC:
** PI ** PI
#+begin_src matlab #+begin_src matlab
piezo1 = load('mat/pi_505_high.mat', 't', 'V_in', 'V_out'); piezo1 = load('pi_505_high.mat', 't', 'V_in', 'V_out');
piezo2 = load('mat/pi_505_high_2_stacks.mat', 't', 'V_in', 'V_out'); piezo2 = load('pi_505_high_2_stacks.mat', 't', 'V_in', 'V_out');
piezo3 = load('mat/pi_505_high_3_stacks.mat', 't', 'V_in', 'V_out'); piezo3 = load('pi_505_high_3_stacks.mat', 't', 'V_in', 'V_out');
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab
@ -182,6 +191,9 @@ We remove the phase delay due to the time delay of the ADC/DAC:
[[file:figs/change_capa_pi.png]] [[file:figs/change_capa_pi.png]]
* Effect of a change in Voltage level * Effect of a change in Voltage level
:PROPERTIES:
:header-args:matlab+: :tangle src/effect_change_voltage.m
:END:
** Matlab Init :noexport:ignore: ** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
@ -191,11 +203,19 @@ We remove the phase delay due to the time delay of the ADC/DAC:
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
** Cedrat Technology ** Cedrat Technology
#+begin_src matlab #+begin_src matlab
hi = load('mat/cedrat_la75b_high_1_stack.mat', 't', 'V_in', 'V_out'); hi = load('cedrat_la75b_high_1_stack.mat', 't', 'V_in', 'V_out');
me = load('mat/cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out'); me = load('cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out');
lo = load('mat/cedrat_la75b_low_1_stack.mat', 't', 'V_in', 'V_out'); lo = load('cedrat_la75b_low_1_stack.mat', 't', 'V_in', 'V_out');
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab
@ -256,8 +276,8 @@ We remove the phase delay due to the time delay of the ADC/DAC:
** PI ** PI
#+begin_src matlab #+begin_src matlab
hi = load('mat/pi_505_high.mat', 't', 'V_in', 'V_out'); hi = load('pi_505_high.mat', 't', 'V_in', 'V_out');
lo = load('mat/pi_505_low.mat', 't', 'V_in', 'V_out'); lo = load('pi_505_low.mat', 't', 'V_in', 'V_out');
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab
@ -307,6 +327,9 @@ We remove the phase delay due to the time delay of the ADC/DAC:
[[file:figs/change_level_pi.png]] [[file:figs/change_level_pi.png]]
* Comparison PI / Cedrat * Comparison PI / Cedrat
:PROPERTIES:
:header-args:matlab+: :tangle src/comp_pi_cedrat.m
:END:
** Matlab Init :noexport:ignore: ** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
@ -316,10 +339,18 @@ We remove the phase delay due to the time delay of the ADC/DAC:
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
** Results ** Results
#+begin_src matlab #+begin_src matlab
ce_results = load('mat/cedrat_la75b_high_1_stack.mat', 't', 'V_in', 'V_out'); ce_results = load('cedrat_la75b_high_1_stack.mat', 't', 'V_in', 'V_out');
pi_results = load('mat/pi_505_high.mat', 't', 'V_in', 'V_out'); pi_results = load('pi_505_high.mat', 't', 'V_in', 'V_out');
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab
@ -371,6 +402,9 @@ We remove the phase delay due to the time delay of the ADC/DAC:
[[file:figs/tf_amplifiers_comp.png]] [[file:figs/tf_amplifiers_comp.png]]
* Impedance Measurement * Impedance Measurement
:PROPERTIES:
:header-args:matlab+: :tangle src/impedance_meas.m
:END:
** Introduction :ignore: ** Introduction :ignore:
The goal is to experimentally measure the output impedance of the voltage amplifiers. The goal is to experimentally measure the output impedance of the voltage amplifiers.
@ -392,6 +426,14 @@ From the two values of voltage, the internal resistor value can be computed:
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
** Cedrat Technology ** Cedrat Technology
*** Compute Impedance *** Compute Impedance
#+begin_src matlab #+begin_src matlab
@ -435,9 +477,9 @@ From the two values of voltage, the internal resistor value can be computed:
#+end_src #+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
piezo1 = load('mat/cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out'); piezo1 = load('cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out');
piezo2 = load('mat/cedrat_la75b_med_2_stack.mat', 't', 'V_in', 'V_out'); piezo2 = load('cedrat_la75b_med_2_stack.mat', 't', 'V_in', 'V_out');
piezo3 = load('mat/cedrat_la75b_med_3_stack.mat', 't', 'V_in', 'V_out'); piezo3 = load('cedrat_la75b_med_3_stack.mat', 't', 'V_in', 'V_out');
Ts = 1e-4; Ts = 1e-4;
win = hann(ceil(0.1/Ts)); win = hann(ceil(0.1/Ts));
@ -528,6 +570,9 @@ From the two values of voltage, the internal resistor value can be computed:
: 2.7795 : 2.7795
* New PI amplifier measurements * New PI amplifier measurements
:PROPERTIES:
:header-args:matlab+: :tangle src/pi_e505_filters.m
:END:
** Matlab Init :noexport:ignore: ** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<<matlab-dir>> <<matlab-dir>>
@ -537,6 +582,14 @@ From the two values of voltage, the internal resistor value can be computed:
<<matlab-init>> <<matlab-init>>
#+end_src #+end_src
#+begin_src matlab :tangle no
addpath('./matlab/mat/');
#+end_src
#+begin_src matlab :eval no
addpath('./mat/');
#+end_src
** PI ** PI
Three measurements are done: Three measurements are done:
- Slew Rate limitation at maximum - Slew Rate limitation at maximum
@ -544,10 +597,10 @@ Three measurements are done:
- Notch Filter at maximum frequency - Notch Filter at maximum frequency
#+begin_src matlab #+begin_src matlab
pi_sr_min = load('mat/pi_slew_rate_min.mat'); pi_sr_min = load('pi_slew_rate_min.mat');
pi_sr_max = load('mat/pi_slew_rate_max.mat'); pi_sr_max = load('pi_slew_rate_max.mat');
pi_sr_max_notch = load('mat/pi_slew_rate_max_notch_high.mat'); pi_sr_max_notch = load('pi_slew_rate_max_notch_high.mat');
pi_sr_load = load('mat/pi_slew_rate_max_notch_high_2stacks.mat'); pi_sr_load = load('pi_slew_rate_max_notch_high_2stacks.mat');
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab

View File

@ -1 +0,0 @@
!function(a,b){"use strict";function c(c,g){var h=this;h.$el=a(c),h.el=c,h.id=e++,h.$window=a(b),h.$document=a(document),h.$el.bind("destroyed",a.proxy(h.teardown,h)),h.$clonedHeader=null,h.$originalHeader=null,h.isSticky=!1,h.hasBeenSticky=!1,h.leftOffset=null,h.topOffset=null,h.init=function(){h.$el.each(function(){var b=a(this);b.css("padding",0),h.$originalHeader=a("thead:first",this),h.$clonedHeader=h.$originalHeader.clone(),b.trigger("clonedHeader."+d,[h.$clonedHeader]),h.$clonedHeader.addClass("tableFloatingHeader"),h.$clonedHeader.css("display","none"),h.$originalHeader.addClass("tableFloatingHeaderOriginal"),h.$originalHeader.after(h.$clonedHeader),h.$printStyle=a('<style type="text/css" media="print">.tableFloatingHeader{display:none !important;}.tableFloatingHeaderOriginal{position:static !important;}</style>'),a("head").append(h.$printStyle)}),h.setOptions(g),h.updateWidth(),h.toggleHeaders(),h.bind()},h.destroy=function(){h.$el.unbind("destroyed",h.teardown),h.teardown()},h.teardown=function(){h.isSticky&&h.$originalHeader.css("position","static"),a.removeData(h.el,"plugin_"+d),h.unbind(),h.$clonedHeader.remove(),h.$originalHeader.removeClass("tableFloatingHeaderOriginal"),h.$originalHeader.css("visibility","visible"),h.$printStyle.remove(),h.el=null,h.$el=null},h.bind=function(){h.$scrollableArea.on("scroll."+d,h.toggleHeaders),h.isWindowScrolling||(h.$window.on("scroll."+d+h.id,h.setPositionValues),h.$window.on("resize."+d+h.id,h.toggleHeaders)),h.$scrollableArea.on("resize."+d,h.toggleHeaders),h.$scrollableArea.on("resize."+d,h.updateWidth)},h.unbind=function(){h.$scrollableArea.off("."+d,h.toggleHeaders),h.isWindowScrolling||(h.$window.off("."+d+h.id,h.setPositionValues),h.$window.off("."+d+h.id,h.toggleHeaders)),h.$scrollableArea.off("."+d,h.updateWidth)},h.toggleHeaders=function(){h.$el&&h.$el.each(function(){var b,c=a(this),d=h.isWindowScrolling?isNaN(h.options.fixedOffset)?h.options.fixedOffset.outerHeight():h.options.fixedOffset:h.$scrollableArea.offset().top+(isNaN(h.options.fixedOffset)?0:h.options.fixedOffset),e=c.offset(),f=h.$scrollableArea.scrollTop()+d,g=h.$scrollableArea.scrollLeft(),i=h.isWindowScrolling?f>e.top:d>e.top,j=(h.isWindowScrolling?f:0)<e.top+c.height()-h.$clonedHeader.height()-(h.isWindowScrolling?0:d);i&&j?(b=e.left-g+h.options.leftOffset,h.$originalHeader.css({position:"fixed","margin-top":h.options.marginTop,left:b,"z-index":3}),h.leftOffset=b,h.topOffset=d,h.$clonedHeader.css("display",""),h.isSticky||(h.isSticky=!0,h.updateWidth()),h.setPositionValues()):h.isSticky&&(h.$originalHeader.css("position","static"),h.$clonedHeader.css("display","none"),h.isSticky=!1,h.resetWidth(a("td,th",h.$clonedHeader),a("td,th",h.$originalHeader)))})},h.setPositionValues=function(){var a=h.$window.scrollTop(),b=h.$window.scrollLeft();!h.isSticky||0>a||a+h.$window.height()>h.$document.height()||0>b||b+h.$window.width()>h.$document.width()||h.$originalHeader.css({top:h.topOffset-(h.isWindowScrolling?0:a),left:h.leftOffset-(h.isWindowScrolling?0:b)})},h.updateWidth=function(){if(h.isSticky){h.$originalHeaderCells||(h.$originalHeaderCells=a("th,td",h.$originalHeader)),h.$clonedHeaderCells||(h.$clonedHeaderCells=a("th,td",h.$clonedHeader));var b=h.getWidth(h.$clonedHeaderCells);h.setWidth(b,h.$clonedHeaderCells,h.$originalHeaderCells),h.$originalHeader.css("width",h.$clonedHeader.width())}},h.getWidth=function(c){var d=[];return c.each(function(c){var e,f=a(this);if("border-box"===f.css("box-sizing"))e=f[0].getBoundingClientRect().width;else{var g=a("th",h.$originalHeader);if("collapse"===g.css("border-collapse"))if(b.getComputedStyle)e=parseFloat(b.getComputedStyle(this,null).width);else{var i=parseFloat(f.css("padding-left")),j=parseFloat(f.css("padding-right")),k=parseFloat(f.css("border-width"));e=f.outerWidth()-i-j-k}else e=f.width()}d[c]=e}),d},h.setWidth=function(a,b,c){b.each(function(b){var d=a[b];c.eq(b).css({"min-width":d,"max-width":d})})},h.resetWidth=function(b,c){b.each(function(b){var d=a(this);c.eq(b).css({"min-width":d.css("min-width"),"max-width":d.css("max-width")})})},h.setOptions=function(c){h.options=a.extend({},f,c),h.$scrollableArea=a(h.options.scrollableArea),h.isWindowScrolling=h.$scrollableArea[0]===b},h.updateOptions=function(a){h.setOptions(a),h.unbind(),h.bind(),h.updateWidth(),h.toggleHeaders()},h.init()}var d="stickyTableHeaders",e=0,f={fixedOffset:0,leftOffset:0,marginTop:0,scrollableArea:b};a.fn[d]=function(b){return this.each(function(){var e=a.data(this,"plugin_"+d);e?"string"==typeof b?e[b].apply(e):e.updateOptions(b):"destroy"!==b&&a.data(this,"plugin_"+d,new c(this,b))})}}(jQuery,window);

View File

@ -9,6 +9,8 @@ $(function() {
$('.hint').before("<p class='admonition-title hint'>Hint</p>"); $('.hint').before("<p class='admonition-title hint'>Hint</p>");
$('.error').before("<p class='admonition-title error'>Error</p>"); $('.error').before("<p class='admonition-title error'>Error</p>");
$('.danger').before("<p class='admonition-title danger'>Danger</p>"); $('.danger').before("<p class='admonition-title danger'>Danger</p>");
$('.question').before("<p class='admonition-title question'>Question</p>");
$('.summary').before("<p class='admonition-title hint'>Summary</p>");
}); });
$( document ).ready(function() { $( document ).ready(function() {

View File

@ -1,236 +0,0 @@
function bio=piezoapabio
bio = [];
bio(1).blkName='Data Type Conversion1';
bio(1).sigName='';
bio(1).portIdx=0;
bio(1).dim=[1,1];
bio(1).sigWidth=1;
bio(1).sigAddress='&piezoapa_B.DataTypeConversion1';
bio(1).ndims=2;
bio(1).size=[];
bio(1).isStruct=false;
bio(getlenBIO) = bio(1);
bio(2).blkName='bit to m';
bio(2).sigName='Va [m]';
bio(2).portIdx=0;
bio(2).dim=[1,1];
bio(2).sigWidth=1;
bio(2).sigAddress='&piezoapa_B.Vam';
bio(2).ndims=2;
bio(2).size=[];
bio(2).isStruct=false;
bio(3).blkName='Random Number';
bio(3).sigName='';
bio(3).portIdx=0;
bio(3).dim=[1,1];
bio(3).sigWidth=1;
bio(3).sigAddress='&piezoapa_B.RandomNumber';
bio(3).ndims=2;
bio(3).size=[];
bio(3).isStruct=false;
bio(4).blkName='Saturation1';
bio(4).sigName='Uch [V]';
bio(4).portIdx=0;
bio(4).dim=[1,1];
bio(4).sigWidth=1;
bio(4).sigAddress='&piezoapa_B.UchV';
bio(4).ndims=2;
bio(4).size=[];
bio(4).isStruct=false;
bio(5).blkName='Analog input /p1';
bio(5).sigName='';
bio(5).portIdx=0;
bio(5).dim=[1,1];
bio(5).sigWidth=1;
bio(5).sigAddress='&piezoapa_B.Analoginput_o1';
bio(5).ndims=2;
bio(5).size=[];
bio(5).isStruct=false;
bio(6).blkName='Analog input /p2';
bio(6).sigName='';
bio(6).portIdx=1;
bio(6).dim=[1,1];
bio(6).sigWidth=1;
bio(6).sigAddress='&piezoapa_B.Analoginput_o2';
bio(6).ndims=2;
bio(6).size=[];
bio(6).isStruct=false;
bio(7).blkName='Analog input /p3';
bio(7).sigName='';
bio(7).portIdx=2;
bio(7).dim=[1,1];
bio(7).sigWidth=1;
bio(7).sigAddress='&piezoapa_B.Analoginput_o3';
bio(7).ndims=2;
bio(7).size=[];
bio(7).isStruct=false;
bio(8).blkName='Analog input /p4';
bio(8).sigName='V monitor';
bio(8).portIdx=3;
bio(8).dim=[1,1];
bio(8).sigWidth=1;
bio(8).sigAddress='&piezoapa_B.Vmonitor';
bio(8).ndims=2;
bio(8).size=[];
bio(8).isStruct=false;
bio(9).blkName='Analog input /p5';
bio(9).sigName='';
bio(9).portIdx=4;
bio(9).dim=[1,1];
bio(9).sigWidth=1;
bio(9).sigAddress='&piezoapa_B.Analoginput_o5';
bio(9).ndims=2;
bio(9).size=[];
bio(9).isStruct=false;
bio(10).blkName='Analog input /p6';
bio(10).sigName='';
bio(10).portIdx=5;
bio(10).dim=[1,1];
bio(10).sigWidth=1;
bio(10).sigAddress='&piezoapa_B.Analoginput_o6';
bio(10).ndims=2;
bio(10).size=[];
bio(10).isStruct=false;
bio(11).blkName='Analog input /p7';
bio(11).sigName='';
bio(11).portIdx=6;
bio(11).dim=[1,1];
bio(11).sigWidth=1;
bio(11).sigAddress='&piezoapa_B.Analoginput_o7';
bio(11).ndims=2;
bio(11).size=[];
bio(11).isStruct=false;
bio(12).blkName='Analog input /p8';
bio(12).sigName='';
bio(12).portIdx=7;
bio(12).dim=[1,1];
bio(12).sigWidth=1;
bio(12).sigAddress='&piezoapa_B.Analoginput_o8';
bio(12).ndims=2;
bio(12).size=[];
bio(12).isStruct=false;
bio(13).blkName='Analog input /p9';
bio(13).sigName='';
bio(13).portIdx=8;
bio(13).dim=[1,1];
bio(13).sigWidth=1;
bio(13).sigAddress='&piezoapa_B.Analoginput_o9';
bio(13).ndims=2;
bio(13).size=[];
bio(13).isStruct=false;
bio(14).blkName='Analog input /p10';
bio(14).sigName='';
bio(14).portIdx=9;
bio(14).dim=[1,1];
bio(14).sigWidth=1;
bio(14).sigAddress='&piezoapa_B.Analoginput_o10';
bio(14).ndims=2;
bio(14).size=[];
bio(14).isStruct=false;
bio(15).blkName='Analog input /p11';
bio(15).sigName='';
bio(15).portIdx=10;
bio(15).dim=[1,1];
bio(15).sigWidth=1;
bio(15).sigAddress='&piezoapa_B.Analoginput_o11';
bio(15).ndims=2;
bio(15).size=[];
bio(15).isStruct=false;
bio(16).blkName='Analog input /p12';
bio(16).sigName='';
bio(16).portIdx=11;
bio(16).dim=[1,1];
bio(16).sigWidth=1;
bio(16).sigAddress='&piezoapa_B.Analoginput_o12';
bio(16).ndims=2;
bio(16).size=[];
bio(16).isStruct=false;
bio(17).blkName='Analog input /p13';
bio(17).sigName='';
bio(17).portIdx=12;
bio(17).dim=[1,1];
bio(17).sigWidth=1;
bio(17).sigAddress='&piezoapa_B.Analoginput_o13';
bio(17).ndims=2;
bio(17).size=[];
bio(17).isStruct=false;
bio(18).blkName='Analog input /p14';
bio(18).sigName='';
bio(18).portIdx=13;
bio(18).dim=[1,1];
bio(18).sigWidth=1;
bio(18).sigAddress='&piezoapa_B.Analoginput_o14';
bio(18).ndims=2;
bio(18).size=[];
bio(18).isStruct=false;
bio(19).blkName='Analog input /p15';
bio(19).sigName='';
bio(19).portIdx=14;
bio(19).dim=[1,1];
bio(19).sigWidth=1;
bio(19).sigAddress='&piezoapa_B.Analoginput_o15';
bio(19).ndims=2;
bio(19).size=[];
bio(19).isStruct=false;
bio(20).blkName='Analog input /p16';
bio(20).sigName='';
bio(20).portIdx=15;
bio(20).dim=[1,1];
bio(20).sigWidth=1;
bio(20).sigAddress='&piezoapa_B.Analoginput_o16';
bio(20).ndims=2;
bio(20).size=[];
bio(20).isStruct=false;
bio(21).blkName='SSIM (2)1';
bio(21).sigName='';
bio(21).portIdx=0;
bio(21).dim=[1,1];
bio(21).sigWidth=1;
bio(21).sigAddress='&piezoapa_B.SSIM21';
bio(21).ndims=2;
bio(21).size=[];
bio(21).isStruct=false;
bio(22).blkName='Manual Switch';
bio(22).sigName='';
bio(22).portIdx=0;
bio(22).dim=[1,1];
bio(22).sigWidth=1;
bio(22).sigAddress='&piezoapa_B.ManualSwitch';
bio(22).ndims=2;
bio(22).size=[];
bio(22).isStruct=false;
bio(23).blkName='Discrete Transfer Fcn';
bio(23).sigName='';
bio(23).portIdx=0;
bio(23).dim=[1,1];
bio(23).sigWidth=1;
bio(23).sigAddress='&piezoapa_B.DiscreteTransferFcn';
bio(23).ndims=2;
bio(23).size=[];
bio(23).isStruct=false;
function len = getlenBIO
len = 23;

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +0,0 @@
function sys=piezoaparef
sys = [];
sys.child = [];
sys.NumDataTypes = 4;
sys.DataTypes = [];
temp.EnumNames='';
temp.EnumValues = [];
temp.Name = '';
sys.DataTypes = repmat(temp,1,4);
sys.DataTypes(1).Name = 'int32_T';
sys.DataTypes(2).Name = 'real_T';
sys.DataTypes(3).Name = 'uint32_T';
sys.DataTypes(4).Name = 'uint8_T';

View File

@ -1,4 +0,0 @@
function ri = piezoapari
ri = [];

48
src/comp_pi_cedrat.m Normal file
View File

@ -0,0 +1,48 @@
%% Clear Workspace and Close figures
clear; close all; clc;
%% Intialize Laplace variable
s = zpk('s');
addpath('./mat/');
% Results
ce_results = load('cedrat_la75b_high_1_stack.mat', 't', 'V_in', 'V_out');
pi_results = load('pi_505_high.mat', 't', 'V_in', 'V_out');
Ts = 1e-4;
win = hann(ceil(0.1/Ts));
[tf_ce, f] = tfestimate(ce_results.V_in, ce_results.V_out, win, [], [], 1/Ts);
[tf_pi, ~] = tfestimate(pi_results.V_in, pi_results.V_out, win, [], [], 1/Ts);
% We remove the phase delay due to the time delay of the ADC/DAC:
angle_delay = 180/pi*angle(squeeze(freqresp(exp(-s*Ts), f, 'Hz')));
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f, abs(tf_pi), 'DisplayName', 'PI')
plot(f, abs(tf_ce), 'DisplayName', 'Cedrat')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ylim([0.1, 50]);
ax2 = subplot(2, 1, 2);
hold on;
plot(f, 180/pi*unwrap(angle(tf_pi))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_ce))-angle_delay)
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-270, 90]);
yticks(-360:90:90)
linkaxes([ax1,ax2], 'x');
xlim([10, 5000]);

View File

@ -0,0 +1,112 @@
%% Clear Workspace and Close figures
clear; close all; clc;
%% Intialize Laplace variable
s = zpk('s');
addpath('./mat/');
% Cedrat Technology
% Load Data
piezo1 = load('cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out');
piezo2 = load('cedrat_la75b_med_2_stack.mat', 't', 'V_in', 'V_out');
piezo3 = load('cedrat_la75b_med_3_stack.mat', 't', 'V_in', 'V_out');
% Compute Coherence and Transfer functions
Ts = 1e-4;
win = hann(ceil(0.1/Ts));
[tf_1, f] = tfestimate(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts);
[co_1, ~] = mscohere(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts);
[tf_2, ~] = tfestimate(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts);
[co_2, ~] = mscohere(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts);
[tf_3, ~] = tfestimate(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts);
[co_3, ~] = mscohere(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts);
% We remove the phase delay due to the time delay of the ADC/DAC:
angle_delay = 180/pi*angle(squeeze(freqresp(exp(-s*Ts), f, 'Hz')));
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f, abs(tf_1), 'DisplayName', '1 stack')
plot(f, abs(tf_2), 'DisplayName', '2 stacks')
plot(f, abs(tf_3), 'DisplayName', '3 stacks')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ylim([1, 40]);
ax2 = subplot(2, 1, 2);
hold on;
plot(f, 180/pi*unwrap(angle(tf_1))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_2))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_3))-angle_delay)
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-270, 90]);
yticks(-360:90:90)
linkaxes([ax1,ax2], 'x');
xlim([10, 5000]);
% PI
piezo1 = load('pi_505_high.mat', 't', 'V_in', 'V_out');
piezo2 = load('pi_505_high_2_stacks.mat', 't', 'V_in', 'V_out');
piezo3 = load('pi_505_high_3_stacks.mat', 't', 'V_in', 'V_out');
Ts = 1e-4;
win = hann(ceil(0.1/Ts));
[tf_1, f] = tfestimate(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts);
[co_1, ~] = mscohere(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts);
[tf_2, ~] = tfestimate(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts);
[co_2, ~] = mscohere(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts);
[tf_3, ~] = tfestimate(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts);
[co_3, ~] = mscohere(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts);
% We remove the phase delay due to the time delay of the ADC/DAC:
angle_delay = 180/pi*angle(squeeze(freqresp(exp(-s*Ts), f, 'Hz')));
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f, abs(tf_1), 'DisplayName', '1 stack')
plot(f, abs(tf_2), 'DisplayName', '2 stacks')
plot(f, abs(tf_3), 'DisplayName', '3 stacks')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ylim([0.05, 11]);
ax2 = subplot(2, 1, 2);
hold on;
plot(f, 180/pi*unwrap(angle(tf_1))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_2))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_3))-angle_delay)
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-360, 0]);
yticks(-360:90:90)
linkaxes([ax1,ax2], 'x');
xlim([10, 5000]);

View File

@ -0,0 +1,95 @@
%% Clear Workspace and Close figures
clear; close all; clc;
%% Intialize Laplace variable
s = zpk('s');
addpath('./mat/');
% Cedrat Technology
hi = load('cedrat_la75b_high_1_stack.mat', 't', 'V_in', 'V_out');
me = load('cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out');
lo = load('cedrat_la75b_low_1_stack.mat', 't', 'V_in', 'V_out');
Ts = 1e-4;
win = hann(ceil(0.1/Ts));
[tf_hi, f] = tfestimate(hi.V_in, hi.V_out, win, [], [], 1/Ts);
[co_hi, ~] = mscohere(hi.V_in, hi.V_out, win, [], [], 1/Ts);
[tf_me, ~] = tfestimate(me.V_in, me.V_out, win, [], [], 1/Ts);
[co_me, ~] = mscohere(me.V_in, me.V_out, win, [], [], 1/Ts);
[tf_lo, ~] = tfestimate(lo.V_in, lo.V_out, win, [], [], 1/Ts);
[co_lo, ~] = mscohere(lo.V_in, lo.V_out, win, [], [], 1/Ts);
% We remove the phase delay due to the time delay of the ADC/DAC:
angle_delay = 180/pi*angle(squeeze(freqresp(exp(-s*Ts), f, 'Hz')));
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f, abs(tf_lo), 'DisplayName', 'low')
plot(f, abs(tf_me), 'DisplayName', 'med')
plot(f, abs(tf_hi), 'DisplayName', 'high')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ylim([1, 50]);
ax2 = subplot(2, 1, 2);
hold on;
plot(f, 180/pi*unwrap(angle(tf_lo))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_me))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_hi))-angle_delay)
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-360, 0]);
yticks(-360:90:90)
linkaxes([ax1,ax2], 'x');
xlim([10, 5000]);
% PI
hi = load('pi_505_high.mat', 't', 'V_in', 'V_out');
lo = load('pi_505_low.mat', 't', 'V_in', 'V_out');
Ts = 1e-4;
win = hann(ceil(0.1/Ts));
[tf_hi, f] = tfestimate(hi.V_in, hi.V_out, win, [], [], 1/Ts);
[co_hi, ~] = mscohere(hi.V_in, hi.V_out, win, [], [], 1/Ts);
[tf_lo, ~] = tfestimate(lo.V_in, lo.V_out, win, [], [], 1/Ts);
[co_lo, ~] = mscohere(lo.V_in, lo.V_out, win, [], [], 1/Ts);
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f, abs(tf_hi), 'DisplayName', 'high')
plot(f, abs(tf_lo), 'DisplayName', 'low')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ylim([0.1, 20]);
ax2 = subplot(2, 1, 2);
hold on;
plot(f, 180/pi*unwrap(angle(tf_hi))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_lo))-angle_delay)
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-360, 0]);
yticks(-360:90:90)
linkaxes([ax1,ax2], 'x');
xlim([10, 5000]);

112
src/impedance_meas.m Normal file
View File

@ -0,0 +1,112 @@
%% Clear Workspace and Close figures
clear; close all; clc;
%% Intialize Laplace variable
s = zpk('s');
addpath('./mat/');
% Compute Impedance
R = 10; % Resistive Load used [Ohm]
V = 0.998; % Output Voltage without any load [V]
Vp = 0.912; % Output Voltage with resistice load [V]
R * (V - Vp)/Vp;
% #+RESULTS:
% : 0.94298
R = 47; % Resistive Load used [Ohm]
V = 4.960; % Output Voltage without any load [V]
Vp = 4.874; % Output Voltage with resistice load [V]
R * (V - Vp)/Vp;
% Effect of Impedance on the phase drop
C_1 = 5e-6; % Capacitance in [F]
C_2 = 10e-6; % Capacitance in [F]
C_3 = 15e-6; % Capacitance in [F]
Ri = R * (V - Vp)/Vp; % Internal resistance [Ohm]
G0 = 20;
G_1 = G0/(1+Ri*C_1*s);
G_2 = G0/(1+Ri*C_2*s);
G_3 = G0/(1+Ri*C_3*s);
piezo1 = load('cedrat_la75b_med_1_stack.mat', 't', 'V_in', 'V_out');
piezo2 = load('cedrat_la75b_med_2_stack.mat', 't', 'V_in', 'V_out');
piezo3 = load('cedrat_la75b_med_3_stack.mat', 't', 'V_in', 'V_out');
Ts = 1e-4;
win = hann(ceil(0.1/Ts));
[tf_1, f] = tfestimate(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts);
[co_1, ~] = mscohere(piezo1.V_in, piezo1.V_out, win, [], [], 1/Ts);
[tf_2, ~] = tfestimate(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts);
[co_2, ~] = mscohere(piezo2.V_in, piezo2.V_out, win, [], [], 1/Ts);
[tf_3, ~] = tfestimate(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts);
[co_3, ~] = mscohere(piezo3.V_in, piezo3.V_out, win, [], [], 1/Ts);
angle_delay = 180/pi*angle(squeeze(freqresp(exp(-s*Ts), f, 'Hz')));
freqs = logspace(1, 4, 1000);
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(freqs, abs(squeeze(freqresp(G_1, freqs, 'Hz'))));
plot(freqs, abs(squeeze(freqresp(G_2, freqs, 'Hz'))));
plot(freqs, abs(squeeze(freqresp(G_3, freqs, 'Hz'))));
set(gca,'ColorOrderIndex',1);
plot(f, abs(tf_1), '--')
plot(f, abs(tf_2), '--')
plot(f, abs(tf_3), '--')
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
ax2 = subplot(2, 1, 2);
hold on;
plot(freqs, 180/pi*angle(squeeze(freqresp(G_1, freqs, 'Hz'))));
plot(freqs, 180/pi*angle(squeeze(freqresp(G_2, freqs, 'Hz'))));
plot(freqs, 180/pi*angle(squeeze(freqresp(G_3, freqs, 'Hz'))));
set(gca,'ColorOrderIndex',1);
plot(f, 180/pi*unwrap(angle(tf_1))-angle_delay, '--')
plot(f, 180/pi*unwrap(angle(tf_2))-angle_delay, '--')
plot(f, 180/pi*unwrap(angle(tf_3))-angle_delay, '--')
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
ylabel('Phase [deg]'); xlabel('Frequency [Hz]');
ylim([-90, 45]);
yticks([-90:15:45]);
linkaxes([ax1,ax2],'x');
% PI
R = 10; % Resistive Load used [Ohm]
V = 1.059; % Output Voltage without any load [V]
Vp = 0.828; % Output Voltage with resistice load [V]
R * (V - Vp)/Vp
% #+RESULTS:
% : 2.7899
R = 10; % Resistive Load used [Ohm]
V = 2.092; % Output Voltage without any load [V]
Vp = 1.637; % Output Voltage with resistice load [V]
R * (V - Vp)/Vp

118
src/pi_e505_filters.m Normal file
View File

@ -0,0 +1,118 @@
%% Clear Workspace and Close figures
clear; close all; clc;
%% Intialize Laplace variable
s = zpk('s');
addpath('./mat/');
% PI
% Three measurements are done:
% - Slew Rate limitation at maximum
% - Slew Rate limitation at minimum
% - Notch Filter at maximum frequency
pi_sr_min = load('pi_slew_rate_min.mat');
pi_sr_max = load('pi_slew_rate_max.mat');
pi_sr_max_notch = load('pi_slew_rate_max_notch_high.mat');
pi_sr_load = load('pi_slew_rate_max_notch_high_2stacks.mat');
Ts = 1e-4;
win = hann(ceil(0.1/Ts));
[tf_sr_min, f] = tfestimate(pi_sr_min.V_in, pi_sr_min.V_out, win, [], [], 1/Ts);
[tf_sr_max, ~] = tfestimate(pi_sr_max.V_in, pi_sr_max.V_out, win, [], [], 1/Ts);
[tf_sr_max_notch, ~] = tfestimate(pi_sr_max_notch.V_in, pi_sr_max_notch.V_out, win, [], [], 1/Ts);
[tf_sr_load, ~] = tfestimate(pi_sr_load.V_in, pi_sr_load.V_out, win, [], [], 1/Ts);
angle_delay = 180/pi*angle(squeeze(freqresp(exp(-s*Ts), f, 'Hz')));
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f, abs(tf_sr_min), 'DisplayName', 'Slew Rate - Min')
plot(f, abs(tf_sr_max), 'DisplayName', 'Slew Rate - Max')
plot(f, abs(tf_sr_max_notch), 'DisplayName', 'Remove Notch')
plot(f, abs(tf_sr_load), 'DisplayName', 'With Load')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ax2 = subplot(2, 1, 2);
hold on;
plot(f, 180/pi*unwrap(angle(tf_sr_min))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_sr_max))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_sr_max_notch))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_sr_load))-angle_delay)
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-180, 45]);
yticks(-360:45:90)
linkaxes([ax1,ax2], 'x');
xlim([10, 5e3]);
% Transfer function of the Voltage Amplifier
% The identified transfer function still seems to match the one of a notch filter at 5kHz.
w_nf = 2*pi*5e3; % Notch Filter Frequency [rad/s]
G = 10.5*(s^2 + 2*w_nf*0.12*s + w_nf^2)/(s^2 + 2*w_nf*s + w_nf^2);
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f, abs(tf_sr_max_notch), 'DisplayName', 'Remove Notch')
plot(f, abs(squeeze(freqresp(G, f, 'Hz'))), 'DisplayName', 'Remove Notch')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ax2 = subplot(2, 1, 2);
hold on;
plot(f, 180/pi*unwrap(angle(tf_sr_max_notch))-angle_delay)
plot(f, 180/pi*angle(squeeze(freqresp(G, f, 'Hz'))), 'DisplayName', 'Remove Notch')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-180, 45]);
yticks(-360:45:90)
linkaxes([ax1,ax2], 'x');
xlim([10, 5e3]);
% With Load
R = 2.78; % Output Impedance [Ohm]
C = 9e-6; % Load capacitance [F]
G_amp = 10/(1 + s*R*C);
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f, abs(tf_sr_max_notch), 'DisplayName', 'No load')
plot(f, abs(tf_sr_load), 'DisplayName', '$10\mu F$ load')
plot(f, abs(squeeze(freqresp(G_amp, f, 'Hz'))), 'k--', 'DisplayName', 'Model')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('Amplitude'); xlabel('Frequency [Hz]');
hold off;
legend('location', 'southwest');
ax2 = subplot(2, 1, 2);
hold on;
plot(f, 180/pi*unwrap(angle(tf_sr_max_notch))-angle_delay)
plot(f, 180/pi*unwrap(angle(tf_sr_load))-angle_delay)
plot(f, 180/pi*unwrap(angle(squeeze(freqresp(G_amp, f, 'Hz')))), 'k--')
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'lin');
ylabel('Phase'); xlabel('Frequency [Hz]');
hold off;
ylim([-180, 45]);
yticks(-360:45:90)
linkaxes([ax1,ax2], 'x');
xlim([10, 5e3]);