Create Matlab file / Tangle scripts / Add CSS

This commit is contained in:
tdehaeze committed 2020-11-10 12:36:41 +01:00
1 parent 08cb2b8daa
commit ce10736dda
42 files changed
+803 -1753

No files matched your search

-45
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]);
-44
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]);
-43
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]);
-37
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]);
-34
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
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'; }
+26 -13
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{
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
+162 -147
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>
+79 -26
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
-1
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);
+2
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() {
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
View File
File renamed without changes.
View File
File renamed without changes.
File renamed without changes.
-236
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;
-1110
View File
File diff suppressed because it is too large. Load diff
-13
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';
-4
View File
@@ -1,4 +0,0 @@
function ri = piezoapari
ri = [];
+48
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]);
+112
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]);
+95
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
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
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]);