Create Matlab file / Tangle scripts / Add CSS
This commit is contained in:
parent
08cb2b8daa
commit
ce10736dda
@ -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]);
|
|
@ -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]);
|
|
@ -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]);
|
|
@ -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]);
|
|
@ -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
49
css/custom.css
Normal 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'; }
|
@ -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
data/apa95ml.dat
BIN
data/apa95ml.dat
Binary file not shown.
BIN
doc/APA95ML.pdf
Normal file
BIN
doc/APA95ML.pdf
Normal file
Binary file not shown.
BIN
doc/E-505-Datasheet.pdf
Normal file
BIN
doc/E-505-Datasheet.pdf
Normal file
Binary file not shown.
BIN
doc/LA75B.pdf
Normal file
BIN
doc/LA75B.pdf
Normal file
Binary file not shown.
309
index.html
309
index.html
@ -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
105
index.org
@ -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
js/jquery.stickytableheaders.min.js
vendored
1
js/jquery.stickytableheaders.min.js
vendored
@ -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);
|
|
@ -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() {
|
||||||
|
236
piezoapabio.m
236
piezoapabio.m
@ -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
piezoapapt.m
1110
piezoapapt.m
File diff suppressed because it is too large
Load Diff
@ -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';
|
|
@ -1,4 +0,0 @@
|
|||||||
function ri = piezoapari
|
|
||||||
|
|
||||||
ri = [];
|
|
||||||
|
|
48
src/comp_pi_cedrat.m
Normal file
48
src/comp_pi_cedrat.m
Normal 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
src/effect_change_capacitance.m
Normal file
112
src/effect_change_capacitance.m
Normal 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
src/effect_change_voltage.m
Normal file
95
src/effect_change_voltage.m
Normal 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
112
src/impedance_meas.m
Normal 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
118
src/pi_e505_filters.m
Normal 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]);
|
Loading…
Reference in New Issue
Block a user