Compare commits
2 commits
5691023d0c
...
5d9d2e0ea0
Author | SHA1 | Date | |
---|---|---|---|
5d9d2e0ea0 | |||
8acd77664b |
3 changed files with 150 additions and 9 deletions
cours/SIN
|
@ -29,7 +29,7 @@ Un interrupteur (@inter) ou un détecteur de mouvement PIR (@pir) sont des capte
|
||||||
tout ou rien.
|
tout ou rien.
|
||||||
|
|
||||||
::::{figure}
|
::::{figure}
|
||||||
:label: tor
|
:label: fig:capteur-tor
|
||||||
:::{figure} https://upload.wikimedia.org/wikipedia/commons/3/3a/Switches-electrical.agr.jpg
|
:::{figure} https://upload.wikimedia.org/wikipedia/commons/3/3a/Switches-electrical.agr.jpg
|
||||||
:label: inter
|
:label: inter
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ Une thermistance (@thermistance) ou une jauge de déformation (@jauge) sont des
|
||||||
capteurs analogiques.
|
capteurs analogiques.
|
||||||
|
|
||||||
::::{figure}
|
::::{figure}
|
||||||
:label: analogique
|
:label: fig:capteur-analogique
|
||||||
:::{figure} https://upload.wikimedia.org/wikipedia/commons/3/3b/NTC_bead.jpg
|
:::{figure} https://upload.wikimedia.org/wikipedia/commons/3/3b/NTC_bead.jpg
|
||||||
:label: thermistance
|
:label: thermistance
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ Un capteur numérique génère un signal de sortie ne pouvant prendre qu'un cert
|
||||||
Une caméra (@camera) ou un codeur absolu (@codeur) sont des capteurs numériques.
|
Une caméra (@camera) ou un codeur absolu (@codeur) sont des capteurs numériques.
|
||||||
|
|
||||||
::::{figure}
|
::::{figure}
|
||||||
:label: numeriques
|
:label: fig:capteur-numerique
|
||||||
:::{figure} https://upload.wikimedia.org/wikipedia/commons/0/02/S4000_Image_Sensor_%28Colorful%29.jpg
|
:::{figure} https://upload.wikimedia.org/wikipedia/commons/0/02/S4000_Image_Sensor_%28Colorful%29.jpg
|
||||||
:label: camera
|
:label: camera
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ Un signal logique ne peut prendre que deux valeurs : un niveau **haut** ("High")
|
||||||
et un niveau **bas** ("Low").
|
et un niveau **bas** ("Low").
|
||||||
|
|
||||||
````{figure}
|
````{figure}
|
||||||
:label: logique
|
:label: fig:sig-logique
|
||||||
```{code-cell} python
|
```{code-cell} python
|
||||||
:tags: [remove-input]
|
:tags: [remove-input]
|
||||||
import altair as alt
|
import altair as alt
|
||||||
|
@ -62,7 +62,7 @@ alt.Chart(
|
||||||
Exemple de signal logique
|
Exemple de signal logique
|
||||||
````
|
````
|
||||||
|
|
||||||
Le signal logique en @logique est par exemple à l'état haut entre 2 s et 3 s,
|
Le signal logique en @fig:sig-logique est par exemple à l'état haut entre 2 s et 3 s,
|
||||||
et à l'état bas entre 3 s et 6 s.
|
et à l'état bas entre 3 s et 6 s.
|
||||||
Lorsque le signal passe de l'état bas à l'état haut (comme à 2 s),
|
Lorsque le signal passe de l'état bas à l'état haut (comme à 2 s),
|
||||||
on parle de **front montant**.
|
on parle de **front montant**.
|
||||||
|
@ -71,10 +71,10 @@ Dans le cas contraire (comme à 3 s), on parle de **front descendant**.
|
||||||
## Les signaux analogiques
|
## Les signaux analogiques
|
||||||
|
|
||||||
Un signal analogique est un signal qui peut prendre un ensemble continu de valeurs.
|
Un signal analogique est un signal qui peut prendre un ensemble continu de valeurs.
|
||||||
Un exemple de signal analogique est donné en @analogique.
|
Un exemple de signal analogique est donné en @fig:sig-analogique.
|
||||||
|
|
||||||
````{figure}
|
````{figure}
|
||||||
:label: analogique
|
:label: fig:sig-analogique
|
||||||
```{code-cell} python
|
```{code-cell} python
|
||||||
:tags: [remove-input]
|
:tags: [remove-input]
|
||||||
import altair as alt
|
import altair as alt
|
||||||
|
@ -113,10 +113,10 @@ Exemple de signal analogique
|
||||||
## Les signaux numériques
|
## Les signaux numériques
|
||||||
Un signal numérique est un signal qui peut prendre un ensemble discret de valeur,
|
Un signal numérique est un signal qui peut prendre un ensemble discret de valeur,
|
||||||
c'est-à-dire un ensemble précis de valeurs distinctes (généralement des nombres entiers).
|
c'est-à-dire un ensemble précis de valeurs distinctes (généralement des nombres entiers).
|
||||||
Un exemple de signal analogique est donné en @numerique.
|
Un exemple de signal analogique est donné en @fig:sig-numerique.
|
||||||
|
|
||||||
````{figure}
|
````{figure}
|
||||||
:label: numerique
|
:label: fig:sig-numerique
|
||||||
```{code-cell} python
|
```{code-cell} python
|
||||||
:tags: [remove-input]
|
:tags: [remove-input]
|
||||||
import altair as alt
|
import altair as alt
|
||||||
|
|
141
cours/SIN/03-can.md
Normal file
141
cours/SIN/03-can.md
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
---
|
||||||
|
title: Le CAN
|
||||||
|
subject: Cours
|
||||||
|
kernelspec:
|
||||||
|
name: python3
|
||||||
|
display_name: Python 3
|
||||||
|
abbreviations:
|
||||||
|
CAN: Convertisseur Analogique Numérique
|
||||||
|
---
|
||||||
|
|
||||||
|
# Définition
|
||||||
|
|
||||||
|
:::{prf:definition} CAN
|
||||||
|
:nonumber: true
|
||||||
|
Un convertisseur analogique-numérique est un dispositif électronique dont la fonction est de traduire une grandeur analogique en une valeur numérique codée sur plusieurs bits. Le signal converti est généralement une tension électrique.
|
||||||
|
|
||||||
|
Source : Article _[Convertisseur analogique-numérique](http://fr.wikipedia.org/wiki/Convertisseur_analogique-num%C3%A9rique)_ de [Wikipédia en français](https://fr.wikipedia.org/) ([auteurs](http://fr.wikipedia.org/w/index.php?title=Convertisseur_analogique-num%C3%A9rique&action=history))
|
||||||
|
:::
|
||||||
|
|
||||||
|
# L'échantillonage du signal
|
||||||
|
L'échantillonage du signal est la prise d'une valeur à un intervalle régulier de temps. L'intervalle entre deux valeurs s'appelle **période d'échantillonage**. On la note $T_e$ (en secondes). On parle aussi de **fréquence d'échantillonage** $f_e=\frac{1}{T_e}$ (en Hertz), qui correspond au nombre de valeurs prises chaque seconde.
|
||||||
|
|
||||||
|
Le **quantum** correspond au plus petit écart quantifiable (la "hauteur d'une marche"). On le note $q$ et son unité est celle du signal d'entrée (généralement le Volt).
|
||||||
|
|
||||||
|
La **tension de pleine échelle** ou **tension de référence** est la tension maximale quantifiable par le CAN. On la note $V_\text{pe}$ ou $V_\text{ref}$.
|
||||||
|
|
||||||
|
Le nombre de valeurs que peut générer le convertisseur se note $N$ et dépend du nombre de bits $n$ du convertisseur. Ainsi : $N=2^n$.
|
||||||
|
|
||||||
|
On obtient la relation suivante : $q=\frac{V_\text{pe}}{N}=\frac{V_\text{pe}}{2^n}$.
|
||||||
|
|
||||||
|
# Exemple de conversion
|
||||||
|
On donne en @fig:exemple-can l'exemple d'un CAN de tension de référence 5 V fonctionnant sur 3 bits avec une fréquence d'échantillonage de 2 Hz.
|
||||||
|
|
||||||
|
La **caractéristique** du CAN est la courbe représentant la valeur numérique en sortie en fonction de la valeur analogique en entrée (@fig:carac-can).
|
||||||
|
|
||||||
|
````{figure}
|
||||||
|
:label: fig:exemple-can
|
||||||
|
```{code-cell} python
|
||||||
|
:tags: [remove-input]
|
||||||
|
import altair as alt
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
from scipy import interpolate
|
||||||
|
|
||||||
|
rng = np.random.default_rng(25)
|
||||||
|
|
||||||
|
n = 20
|
||||||
|
t_max = 16
|
||||||
|
|
||||||
|
T = np.linspace(0, t_max, 1601)
|
||||||
|
y = np.clip(
|
||||||
|
interpolate.BSpline(np.linspace(0, t_max, n), 5 * rng.random(n), 2)(T),
|
||||||
|
0,
|
||||||
|
5,
|
||||||
|
)
|
||||||
|
y_n = np.full([1601], np.nan)
|
||||||
|
y_n[::50] = np.floor(y[::50] * 8 / 5)
|
||||||
|
y_n[y_n == 8] = 7
|
||||||
|
|
||||||
|
|
||||||
|
data = pd.DataFrame({
|
||||||
|
"t": T,
|
||||||
|
"s": y,
|
||||||
|
"s_n": y_n,
|
||||||
|
})
|
||||||
|
|
||||||
|
base = alt.Chart(
|
||||||
|
data
|
||||||
|
).encode(
|
||||||
|
alt.X("t:Q").axis(title="Temps (s)").scale(domain=(0,t_max)),
|
||||||
|
)
|
||||||
|
|
||||||
|
ch = base.mark_line(
|
||||||
|
interpolate="basis",
|
||||||
|
strokeWidth=3,
|
||||||
|
color="#6666cc",
|
||||||
|
).encode(
|
||||||
|
alt.Y("s:Q", axis=alt.Axis(title="Signal analogique", titleColor="#6666cc")).scale(domain=(0,5)),
|
||||||
|
)
|
||||||
|
|
||||||
|
ch_n = base.mark_point(
|
||||||
|
filled=True,
|
||||||
|
color="#ff6600",
|
||||||
|
).encode(
|
||||||
|
alt.Y(
|
||||||
|
"s_n:Q",
|
||||||
|
axis=alt.Axis(
|
||||||
|
title="Signal numérisé",
|
||||||
|
titleColor="#ff6600",
|
||||||
|
values=np.arange(8),
|
||||||
|
)
|
||||||
|
).scale(domain=(0,8)),
|
||||||
|
)
|
||||||
|
|
||||||
|
alt.layer(ch_n, ch).resolve_scale(
|
||||||
|
y="independent",
|
||||||
|
).properties(
|
||||||
|
width="container",
|
||||||
|
height=200,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
Signal analogique et signal numérisé.
|
||||||
|
````
|
||||||
|
|
||||||
|
````{figure}
|
||||||
|
:label: fig:carac-can
|
||||||
|
```{code-cell} python
|
||||||
|
:tags: [remove-input]
|
||||||
|
import altair as alt
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
from scipy import interpolate
|
||||||
|
|
||||||
|
N = 8
|
||||||
|
s_n = np.arange(N+1)
|
||||||
|
s_n[-1] = s_n[-2]
|
||||||
|
data = pd.DataFrame({
|
||||||
|
"s_n": s_n,
|
||||||
|
"s_a": np.linspace(0, 5, N+1),
|
||||||
|
})
|
||||||
|
|
||||||
|
alt.Chart(
|
||||||
|
data
|
||||||
|
).mark_line(
|
||||||
|
interpolate="step-after",
|
||||||
|
strokeWidth=3,
|
||||||
|
color="#ff6600",
|
||||||
|
).encode(
|
||||||
|
alt.X("s_a:Q").axis(title="Signal Analogique").scale(domain=(0,5)),
|
||||||
|
alt.Y("s_n:Q", axis=alt.Axis(title="Signal numérique", values=np.arange(N))).scale(domain=(0,N)),
|
||||||
|
).properties(
|
||||||
|
width=200,
|
||||||
|
height=200,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
Caractéristique du CAN.
|
||||||
|
````
|
Loading…
Add table
Add a link
Reference in a new issue