Update Content - 2023-10-13

This commit is contained in:
Thomas Dehaeze 2023-10-13 11:57:17 +02:00
parent dd52c29167
commit 780896000f
15 changed files with 394 additions and 10 deletions

View File

@ -1,5 +1,6 @@
+++
title = "Acquisition Systems"
author = ["Dehaeze Thomas"]
draft = false
category = "equipment"
+++
@ -17,9 +18,9 @@ Tags
| [Dewesoft](https://dewesoft.com/) | Slovenia |
| [Oros](https://www.oros.com/) | France |
| [National Instruments](https://www.ni.com/fr-fr/shop/pc-based-measurement-and-control-system.html) | USA |
| [Gantner](https://www.gantner-instruments.com/products/daq-systems/) | Austria |
## Bibliography {#bibliography}
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><div class="csl-bib-body">
</div>
<./biblio/references.bib>

View File

@ -97,9 +97,26 @@ Also see (<a href="#citeproc_bib_item_2">Kester 2005</a>).
## Oversampling {#oversampling}
## Sigma Delta ADC {#sigma-delta-adc}
From (<a href="#citeproc_bib_item_3">Schmidt, Schitter, and Rankers 2020</a>):
> The low cost and excellent linearity properties of the Sigma-Delta ADC have replaced other ADC types in many measurement and registration systems, especially where storage of data is more important than real-time measurement.
> This has typically been the case in audio recording and reproduction.
> The reason why this principle is less applied with real-time measurements is the time delay between the bitstream representing the actual value and the availability of the corresponding value after the decimation filter.
> The resulting **latency** amounts with a low cost sigma-delta ADC approximately **twenty times the sampling period of the decimated digital output**.
Therefore, even though there are sigma-delta ADC with high precision and sampling rate, they add large latency (i.e. time delay) that are very problematic for feedback systems.
> The SAR-ADC (Successive approximation ADCs) is still the mostly applied type for data-acquisition and feedback systems because of its single sample latency.
<https://www.crystalinstruments.com/antialiasing-filter-and-phase-match>
## Bibliography {#bibliography}
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><div class="csl-bib-body">
<div class="csl-entry"><a id="citeproc_bib_item_1"></a>Baker, Bonnie. 2011. “How Delta-Sigma Adcs Work, Part.” <i>Analog Applications</i> 7.</div>
<div class="csl-entry"><a id="citeproc_bib_item_2"></a>Kester, Walt. 2005. “Taking the Mystery out of the Infamous Formula, $snr = 6.02 N + 1.76 Db$, and Why You Should Care.”</div>
<div class="csl-entry"><a id="citeproc_bib_item_3"></a>Schmidt, R Munnig, Georg Schitter, and Adrian Rankers. 2020. <i>The Design of High Performance Mechatronics - Third Revised Edition</i>. Ios Press.</div>
</div>

View File

@ -27,7 +27,7 @@ Tags
| [Fogale](http://www.fogale.fr/brochures.html) | USA |
| [Queensgate](https://www.nanopositioning.com/product-category/nanopositioning/nanopositioning-sensors) | UK |
| [Capacitec](https://www.capacitec.com/Displacement-Sensing-Systems) | USA |
| [MTIinstruments](https://www.mtiinstruments.com/products/non-contact-measurement/capacitance-sensors/) | USA |
| [MTIinstruments](https://vitrek.com/mti-instruments/non-contact-measurement/) | USA |
| [Althen](https://www.althensensors.com/sensors/linear-position-sensors/capacitive-position-sensors/) | Netherlands |

View File

@ -153,6 +153,61 @@ den = 1 + (2*Ts^2*wn^2 - 8) * z^-1 + (Ts^2*wn^2 - 4*Ts*wn*xi + 4) * z^-2
And the transfer function is equal to `gain * num/den`.
### Second Order Low Pass Filter {#second-order-low-pass-filter}
Let's consider a second order low pass filter:
\begin{equation}
G(s) = \frac{g}{ms^2 + cs + k}
\end{equation}
First the symbolic variables are declared (`Ts` is the sampling time, `s` the Laplace variable and `z` the "z-transform" variable).
```matlab
%% Declaration of the symbolic variables
syms Ts g m c k s z
```
Then the bi-linear transformation is performed to go from continuous to discrete:
```matlab
%% Bilinear Transform
s = 2/Ts*(z - 1)/(z + 1);
```
The symbolic formula of the notch filter is defined:
```matlab
%% Second Order Low Pass Filter - Symbolic representation
Ga = g/(m*s^2 + c*s + k)
```
Finally, the numerator and denominator coefficients can be extracted:
```matlab
%% Get numerator and denominator
[N,D] = numden(Ga);
%% Extract coefficients (from z^0 to z^n)
num = coeffs(N, z);
den = coeffs(D, z);
```
```text
gain = 1/(4*m + 2*Ts*c + Ts^2*k)
```
```text
num = (Ts^2*g) + (2*Ts^2*g) * z^-1 + (Ts^2*g) * z^-2
```
```text
den = 1 + (2*Ts^2*k - 8*m) * z^-1 + (4*m - 2*Ts*c + Ts^2*k) * z^-2
```
And the transfer function is equal to `gain * num/den`.
### Second Order High Pass Filter {#second-order-high-pass-filter}
Let's consider a second order low pass filter:

View File

@ -28,6 +28,17 @@ There are two main types of encoders: optical encoders, and magnetic encoders.
| [Lika](https://www.lika.it/eng/) | Italy |
## Incremental vs Absolute {#incremental-vs-absolute}
Incremental:
- Less delay
Absolute:
- No problem of "missed" steps
## Bibliography {#bibliography}
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><div class="csl-bib-body">

View File

@ -0,0 +1,194 @@
+++
title = "Extremum Seeking Control"
author = ["Dehaeze Thomas"]
draft = false
+++
Tags
: [Nonlinear Control]({{< relref "nonlinear_control.md" >}})
The idea behind "Extremum Seeking Control" is to use a controlled signal \\(u\\) to explore the relation \\(y(u)\\), estimate its gradient and find its minimum or maximum.
This relation should be convex or concave for the architecture to work properly.
See (<a href="#citeproc_bib_item_1">Tan et al. 2010</a>) for a good overview.
## Control Architecture {#control-architecture}
There are many extremum seeking control architectures.
One of the simplest one is shown in Figure [1](#figure--fig:extremum-seeking-control-architecture).
```latex
\begin{tikzpicture}[
triangle/.style = {regular polygon, regular polygon sides=3},
right/.style = {shape border rotate=-90},
left/.style = {shape border rotate=90},
top/.style = {shape border rotate=0}
bottom/.style = {shape border rotate=180}
]
% Extremum Seeking
\node[draw, minimum width=10cm,minimum height=4.2cm, dashed, label=Extremum Seeking Control] (extremum) at (0, 0) {};
\begin{scope}[shift={(-2.3, 0.7)}]
\node[draw, label=Adapt] (Adapt) at (0, 0) {$\displaystyle\frac{1}{A_p}\frac{K_I}{s}$};
\node[draw, label=LPF] (LPF) at (2, 0) {$\displaystyle\frac{1}{s/\omega_{L} + 1}$};
\node[addb={\times}{}{}{}{}] (multiply) at (4, 0) {};
\node[draw, label=HPF] (HPF) at (6, 0) {$\displaystyle\frac{s/\omega_{H}}{s/\omega_{H} + 1}$};
\node[addb={+}{}{}{}{}] (add) at (-2, 0) {};
\node[draw, triangle, left, inner sep=0pt] (gain_a) at (1, -2) {$A_p$};
\node[] (sinus) at (4, -2) {$\sin(\omega_p t)$};
\draw[<-] (add) -- node[above]{$\overline{u}$} (Adapt);
\draw[<-] (Adapt) -- node[above left]{} (LPF);
\draw[<-] (LPF) -- node[above left]{} (multiply);
\draw[<-] (multiply) -- node[above left]{} (HPF);
\draw[<-] (multiply) -- node[above right]{} (sinus);
\draw[<-] (gain_a) -- node[above left]{} (sinus);
\draw[<-] (add) -- node[above right]{$du$} (-2, -2) -- (gain_a);
\end{scope}
% Système
\node[draw, fill=black!20!white, minimum width=10cm,minimum height=3cm, label=System] (system) at (0, 4.5) {};
\begin{scope}[shift={(-2.5, 0.6)}]
% AC function of C_phi
\draw[domain=-1.5:1.5, shift={(2.5, 3)}] plot (2*\x, 0.8*\x*\x);
% Axes of plot
\draw[->] (-1, 2.8) -- (6, 2.8) node[above right]{$u$};
\draw[->] (-0.9, 2.7) -- (-0.9, 5) node[below left]{$y$};
\end{scope}
% Connections
\draw[<-] (system.west) node[above left](command){$u$} -- ++(-0.7, 0) |- (add);
\draw[->] (system.east) node[above right](measure){$y$} -- ++(0.7, 0) |- (HPF);
\end{tikzpicture}
```
<a id="figure--fig:extremum-seeking-control-architecture"></a>
{{< figure src="/ox-hugo/extremum_seeking_control_architecture.png" caption="<span class=\"figure-number\">Figure 1: </span>Extremum seeking control algorithm" >}}
Its working principle is schematically shown in Figures [2](#figure--fig:extremum-seeking-control-non-minimum) and [3](#figure--fig:extremum-seeking-control-minimum).
```latex
\begin{tikzpicture}
% AC function of phi0
\draw[domain=-2:2] plot (\x, \x*\x);
% Axes of plot
\draw[->, >=latex] (-2.5 ,-0.5) -- (2.5, -0.5) node[below]{$u$};
\draw[->, >=latex] (-2.4 ,-0.6) -- (-2.4, 4.5) node[left]{$y$};
% Perturbation Signal
\draw[domain=-pi/2:pi/2, shift={(1, -1.5)}, rotate=90, samples=200] plot (\x,{0.5*sin(4*deg(\x))});
% Legend of perturbation Signal
\node[align=center] (pert_signal) at (-2, -1.8) {$\overline{u}$\\[-0.4em]+\\[-0.4em]$A_p\sin(\omega_p t)$};
\draw[<-, >=latex, dashed] ($(pert_signal.east)+(1.0, 0)$) -- ++(-1.5, 0);
% Dashed lines to show limits of the signals
\draw[dashed] (1.0, -3.2) -- ($(1.0, 1.0*1.0)$) -- ($(4.0, 1.0*1.0)$);
\draw[dashed] (0.5, -3.2) -- ($(0.5, 0.5*0.5)$) -- ($(8.0, 0.5*0.5)$);
\draw[dashed] (1.5, -3.2) -- ($(1.5, 1.5*1.5)$) -- ($(8.0, 1.5*1.5)$);
\begin{scope}[shift={(-0.5, 0)}]
% Image of the perturbation signal on AC
\draw[domain=-pi/2:pi/2, shift={(6, 0)}, samples=200] plot (\x,{(1+0.5*sin(4*deg(\x)))^2});
\draw[->, >=latex] (4, 1) -- (8, 1) node[below]{$t$};
\draw[->, >=latex] (4.1, 0.9) -- (4.1, 1.5*1.5+0.4) node[left]{$y$};
% Sinus omega_p
\draw[domain=-pi/2:pi/2, shift={(6, 4)}, samples=200] plot (\x,{0.5*sin(4*deg(\x))});
\draw[->, >=latex] (4, 4) -- (8, 4) node[below]{$t$};
\draw[->, >=latex] (4.1, 3.75) -- (4.1, 4.5) node[left]{$\sin(\omega_p t)$};
% Product of the sinus and the AC Command
\draw[domain=-pi/2:pi/2, shift={(6, -2.5)}, samples=200] plot (\x,{0.5*sin(4*deg(\x))*(1+0.5*sin(4*deg(\x)))^2});
\draw[->, >=latex] (4,-2.5) -- (8, -2.5) node[below]{$t$};
\filldraw[fill=gray!20] (4,-2.5) -- plot [domain=-pi/2:pi/2, shift={(6, -2.5)}, samples=200] (\x,{0.5*sin(4*deg(\x))*(1+0.5*sin(4*deg(\x)))^2}) -- cycle;
\draw[->, >=latex] (4.1,-2.6) -- (4.1, -1.0) node[left]{$ $};
% Multiply and equal signs
\node[addb={\times}{}{}{}{}] at (6, 3) {};
\node[addb={=}{}{}{}{}] at (6, -0.6) {};
\end{scope}
\end{tikzpicture}
```
<a id="figure--fig:extremum-seeking-control-non-minimum"></a>
{{< figure src="/ox-hugo/extremum_seeking_control_non_minimum.png" caption="<span class=\"figure-number\">Figure 2: </span>\\(\bar{u}\\) is not at the minimum of the \\(y(u)\\) relation. In that case the integral of the product between the sinusoidal excitation and the measured \\(y\\) is the image of the local gradient of the \\(y(u)\\) relationship." >}}
```latex
\begin{tikzpicture}
% AC function of phi0
\draw[domain=-2:2] plot (\x, \x*\x);
% Axes of plot
\draw[->, >=latex] (-2.5 ,-0.5) -- (2.5, -0.5) node[below]{$u$};
\draw[->, >=latex] (-2.4 ,-0.6) -- (-2.4, 4.5) node[left]{$y$};
% Perturbation Signal
\draw[domain=-pi/2:pi/2, shift={(0, -1.5)}, rotate=90, samples=200] plot (\x,{0.5*sin(4*deg(\x))});
% Legend of perturbation Signal
\node[] (pert_signal) at (-2, -1.0) {};
% Dashed lines to show limits of the signals
\draw[dashed] (0.0, -3.2) -- ($(0, 0)$) -- ($(4.0, 0)$);
\draw[dashed] (-0.5, -3.2) -- ($(-0.5, 0.5*0.5)$) -- ($(8.0, 0.5*0.5)$);
\draw[dashed] (0.5, -3.2) -- ($(0.5, 0.5*0.5)$);
\begin{scope}[shift={(-0.5, 0)}]
% Image of the perturbation signal on AC
\draw[domain=-pi/2:pi/2, shift={(6, 0)}, samples=200] plot (\x,{(0.5*sin(4*deg(\x)))^2});
\draw[->, >=latex] (4, 0) -- (8, 0) node[below]{$t$};
\draw[->, >=latex] (4.1, -0.1) -- (4.1, 1.0) node[left]{$y$};
% Sinus omega_p
\draw[domain=-pi/2:pi/2, shift={(6, 2.5)}, samples=200] plot (\x,{0.5*sin(4*deg(\x))});
\draw[->, >=latex] (4, 2.5) -- (8, 2.5) node[below]{$t$};
\draw[->, >=latex] (4.1, 2.25) -- (4.1, 3.0) node[above]{$\sin(\omega_p t)$};
% Product of the sinus and the AC Command
\draw[domain=-pi/2:pi/2, shift={(6, -2.5)}, samples=200] plot (\x,{0.7*(sin(4*deg(\x)))^3});
\draw[->, >=latex] (4,-2.5) -- (8, -2.5) node[below]{$t$};
\filldraw[fill=gray!20] (4,-2.5) -- plot [domain=-pi/2:pi/2, shift={(6, -2.5)}, samples=200] (\x,{0.7*(sin(4*deg(\x))^3}) -- cycle;
\draw[->, >=latex] (4.1,-2.6) -- (4.1, -1.0) node[left]{$ $};
% Multiply and equal signs
\node[addb={\times}{}{}{}{}] at (6, 1.2) {};
\node[addb={=}{}{}{}{}] at (6, -1.0) {};
\end{scope}
\end{tikzpicture}
```
<a id="figure--fig:extremum-seeking-control-minimum"></a>
{{< figure src="/ox-hugo/extremum_seeking_control_minimum.png" caption="<span class=\"figure-number\">Figure 3: </span>\\(\bar{u}\\) is at the minimum of the \\(y(u)\\) relation. In that case the integral of the product between the sinusoidal excitation and the measured \\(y\\) is null." >}}
## Tuning of the Extremum Seeking Control {#tuning-of-the-extremum-seeking-control}
The \\(y(u)\\) relationship should be static compared to \\(\omega\_p\\) the frequency of the sinusoidal excitation.
When this architecture is to be applied the following two signals have to be properly chosen:
- what is the controlled signal \\(u\\)
- what is the measured signal to be minimized \\(y\\)
Then, the following parameters should be tuned:
- \\(\omega\_p\\): the frequency of the perturbation, that should be small compared to the system dynamics
- \\(A\_p\\): amplitude of the sinusoidal perturbation, that should be small compared to the allowed deviation from the minimum
- \\(\omega\_H\\) and \\(\omega\_L\\): cut-off frequency of the high pass and low pass filters. As \\(\omega\_p\\) should be in the pass band of both filters, \\(\omega\_H\\) and \\(\omega\_L\\) should be chosen such that:
\\[ \omega\_H \ll \omega\_p \quad \text{and} \quad \omega\_L \gg \omega\_p \\]
- \\(K\_I\\): gain for the integrator that should be tuned such that the control loop is stable and converges to the minimum as fast as wanted.
There are three time scales present in this control algorithm:
- Fast time scale that corresponds to the system variations (\\(y(u)\\) relationship)
- Medium time scale that corresponds to the perturbations on \\(u\\) (frequency \\(\omega\_p\\))
- Slow time scale that corresponds to the variations of \\(\bar{u}\\)
## Bibliography {#bibliography}
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><div class="csl-bib-body">
<div class="csl-entry"><a id="citeproc_bib_item_1"></a>Tan, Y, WH Moase, C Manzie, D Nešić, and IMY Mareels. 2010. “Extremum Seeking from 1922 to 2010.” In <i>Control Conference (CCC), 2010 29th Chinese</i>, 1426. IEEE.</div>
</div>

View File

@ -0,0 +1,19 @@
+++
title = "Permanent Magnets"
author = ["Dehaeze Thomas"]
draft = false
+++
Tags
:
## Neodymium Magnets {#neodymium-magnets}
<https://www.kjmagnetics.com/>
## Bibliography {#bibliography}
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><div class="csl-bib-body">
</div>

View File

@ -12,9 +12,11 @@ Tags
## Manufacturers {#manufacturers}
| Manufacturers | Country |
|--------------------------------------------------------|---------|
|-----------------------------------------------------------|---------|
| [Huber](https://www.xhuber.com/en/) | Germany |
| [LAB Motion System](http://www.leuvenairbearings.com/) | Belgium |
| [New Way Air Bearing](https://www.newwayairbearings.com/) | USA |
| [PIC](https://www.airbearings.com/) | USA |
## Bibliography {#bibliography}

View File

@ -103,10 +103,10 @@ A rotation of 1 turn per second will induce vibrations at 200Hz with an amplitud
</div>
Note that this error is not a pure sine, it also has some harmonics with corresponding periods of 1/100 revolution and 1/50 revolution.
Note that this error is not a pure sine, it also has some harmonics.
One way to reduce these errors is to use a ball-screw mechanism with a smaller pitch.
The price to pay is smaller velocity.
One way to reduce these errors is to use a ball-screw mechanism with a smaller pitch (or a reduction gearbox).
The price to pay is smaller velocity (and even high vibration frequencies for the same velocity).
### Load Dependent Error {#load-dependent-error}

View File

@ -0,0 +1,83 @@
+++
title = "Time Delay"
author = ["Dehaeze Thomas"]
draft = false
+++
Tags
:
## Phase induced by a time delay {#phase-induced-by-a-time-delay}
Having some time delay can be modelled by a transfer function having constant amplitude but a phase lag increasing with frequency.
Such phase lag is linearly proportional to the time delay and to the frequency:
\begin{equation}
\phi(\omega) = -\omega \cdot T\_s
\end{equation}
with:
- \\(\phi(\omega)\\) the phase lag in rad
- \\(\omega\\) the frequency in rad/s
- \\(T\_s\\) the time delay in s
## Estimation of phase delay induced in sampled systems {#estimation-of-phase-delay-induced-in-sampled-systems}
Consider a feedback controller implemented numerically on a system with a sampling frequency \\(F\_s\\).
The time delay associated with the limited sampling frequency \\(F\_s\\) is:
\begin{equation}
\phi(\omega) = -\frac{\omega}{F\_s}
\end{equation}
with:
- \\(\phi(\omega)\\) the phase lag in rad
- \\(\omega\\) the frequency in rad/s
- \\(F\_s\\) the sampling frequency in Hz
Some values are summarized in Table [1](#table--tab:time-delay-phase-lag).
<a id="table--tab:time-delay-phase-lag"></a>
<div class="table-caption">
<span class="table-number"><a href="#table--tab:time-delay-phase-lag">Table 1</a>:</span>
Phase lag as a function of the frequency (relative to the sampling frequency )
</div>
| Frequency | Phase Delay [deg] |
|----------------|-------------------|
| \\(F\_s/100\\) | -3.6 |
| \\(F\_s/10\\) | -36.0 |
| \\(F\_s/2\\) | -180.0 |
This is the main reason to have a sampling frequency much higher than the wanted feedback bandwidth is to limit the phase delay at the crossover frequency induced by the time delay.
Having a sampling frequency a 100 times larger than the crossover frequency is a good objective.
<div class="exampl">
Take the example of a controller implemented with a sampling time of 0.1ms (10kHz sampling frequency).
```matlab
t_delay = 1e-4; % Delay [s]
G_delay = exp(-t_delay*s);
```
The induced phase delay as a function of frequency is shown in Figure [1](#figure--fig:time-delay-induced-phase-lag).
At the Nyquist frequency (5 kHz), the phase lag is 180 degrees.
<a id="figure--fig:time-delay-induced-phase-lag"></a>
{{< figure src="/ox-hugo/time_delay_induced_phase_lag.png" caption="<span class=\"figure-number\">Figure 1: </span>Phase lag induced by a time delay" >}}
</div>
## Bibliography {#bibliography}
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><div class="csl-bib-body">
</div>

View File

@ -7,6 +7,8 @@ draft = false
Tags
: [Motors]({{< relref "motors.md" >}})
Nice tutorial: <https://www.youtube.com/watch?v=3XcvjC2anM8&list=PLmklAQtFT_ZKcaI21UHgi0cm2Y3Yxu90p&index=3>
## Manufacturers {#manufacturers}

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB