diff --git a/cours/SIN/01-capteurs.md b/cours/SIN/01-capteurs.md
index 77bd675..fbffa9b 100644
--- a/cours/SIN/01-capteurs.md
+++ b/cours/SIN/01-capteurs.md
@@ -29,7 +29,7 @@ Un interrupteur (@inter) ou un détecteur de mouvement PIR (@pir) sont des capte
 tout ou rien.
 
 ::::{figure}
-:label: tor
+:label: fig:capteur-tor
 :::{figure} https://upload.wikimedia.org/wikipedia/commons/3/3a/Switches-electrical.agr.jpg 
 :label: inter
 
@@ -60,7 +60,7 @@ Une thermistance (@thermistance) ou une jauge de déformation (@jauge) sont des
 capteurs analogiques.
 
 ::::{figure}
-:label: cap_analogique
+:label: fig:capteur-analogique
 :::{figure} https://upload.wikimedia.org/wikipedia/commons/3/3b/NTC_bead.jpg
 :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.
 
 ::::{figure}
-:label: numeriques
+:label: fig:capteur-numerique
 :::{figure} https://upload.wikimedia.org/wikipedia/commons/0/02/S4000_Image_Sensor_%28Colorful%29.jpg
 :label: camera
 
diff --git a/cours/SIN/02-signaux.md b/cours/SIN/02-signaux.md
index 039f085..49288b0 100644
--- a/cours/SIN/02-signaux.md
+++ b/cours/SIN/02-signaux.md
@@ -29,7 +29,7 @@ Un signal logique ne peut prendre que deux valeurs : un niveau **haut** ("High")
 et un niveau **bas** ("Low").
 
 ````{figure}
-:label: logique
+:label: fig:sig-logique
 ```{code-cell} python
 :tags: [remove-input]
 import matplotlib.pyplot as plt
@@ -43,7 +43,7 @@ t = np.arange(n+1)
 s = rng.choice([0, 1], n)
 
 fig, ax = plt.subplots()
-ax.stairs(s, t, lw=3)
+ax.stairs(s, t, lw=3, baseline=None)
 ax.set(
   xlim=(0, n),
   ylim=(-.5, 1.5),
@@ -56,7 +56,7 @@ ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
 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.
 Lorsque le signal passe de l'état bas à l'état haut (comme à 2 s),
 on parle de **front montant**.
@@ -65,10 +65,10 @@ Dans le cas contraire (comme à 3 s), on parle de **front descendant**.
 ## Les signaux analogiques
 
 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}
-:label: analogique
+:label: fig:sig-analogique
 ```{code-cell} python
 :tags: [remove-input]
 import matplotlib.pyplot as plt
@@ -88,7 +88,6 @@ lhs = (qmc.LatinHypercube(d=n-2, rng=rng).random(1)[0] - .5) * t_max/n
 t = t_base + np.concatenate(([0], lhs, [0]))
 t = t_base
 s = 5 * rng.random(n)
-s[-1] = s[-2]
 
 t_interp = np.linspace(0, t_max, 1024)
 s_interp = np.clip(CubicSpline(t, s)(t_interp), 0, 5)
@@ -110,10 +109,10 @@ Exemple de signal analogique
 ## Les signaux numériques
 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).
-Un exemple de signal analogique est donné en @numerique.
+Un exemple de signal analogique est donné en @fig:sig-numerique.
 
 ````{figure}
-:label: numerique
+:label: fig:sig-numerique
 ```{code-cell} python
 :tags: [remove-input]
 import matplotlib.pyplot as plt
@@ -127,7 +126,7 @@ t = np.arange(n+1)
 s = rng.integers(0, 16, n)
 
 fig, ax = plt.subplots()
-ax.stairs(s, t, lw=3)
+ax.stairs(s, t, lw=3, baseline=None)
 ax.set(
   xlim=(0, n),
   ylim=(-.5, 16.5),
@@ -136,18 +135,6 @@ ax.set(
 )
 ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
 ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
-# alt.Chart(
-#   data
-# ).mark_line(
-#   interpolate="step-after",
-#   strokeWidth=3,
-# ).encode(
-#   alt.X("t:Q").axis(title="Temps (s)").scale(domain=(0,n)),
-#   alt.Y("s:Q", axis=alt.Axis(title="Signal numérique", values=np.arange(0, 16))).# scale(domain=(0,15)),
-# ).properties(
-#   width="container",
-#   height=200,
-# )
 ```
 Exemple de signal numérique
 ````
\ No newline at end of file
diff --git a/cours/SIN/03-can.md b/cours/SIN/03-can.md
new file mode 100644
index 0000000..ff412e3
--- /dev/null
+++ b/cours/SIN/03-can.md
@@ -0,0 +1,139 @@
+---
+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 matplotlib.pyplot as plt
+from matplotlib import ticker
+import numpy as np
+from scipy.interpolate import CubicSpline
+from scipy.stats import qmc
+
+rng = np.random.default_rng(50)
+
+n = 20
+t_max = 8
+n_interp = t_max * 100 + 1
+
+t_base = np.linspace(0, t_max, n)
+lhs = (qmc.LatinHypercube(d=n-2, rng=rng).random(1)[0] - .5) * t_max/n
+t = t_base + np.concatenate(([0], lhs, [0]))
+t = t_base
+s = 5 * rng.random(n)
+
+t_interp = np.linspace(0, t_max, n_interp)
+s_interp = np.clip(CubicSpline(t, s)(t_interp), 0, 5)
+s_n = np.full_like(t_interp[::50], np.nan)
+s_n = np.floor(s_interp[::50] * 8 / 5)
+s_n[s_n == 8] = 7
+
+fig, ax = plt.subplots()
+ax2 = ax.twinx()
+
+ax.plot(t_interp, s_interp, lw=3)
+ax2.scatter(t_interp[::50], s_n, color="C1")
+
+ax.grid(False, axis="y")
+ax.grid(True, axis="x", which="both")
+ax2.grid(True)
+
+ax.set(
+  xlim=(0, t_max),
+  ylim=(-.5, 5.5),
+  xlabel="Temps (s)",
+)
+ax.set_ylabel("Signal analogique (V)", color="C0")
+ax2.set(
+  ylim=(-8/5*.5, 8/5*5.5),
+)
+ax2.set_ylabel("Signal numérique", color="C1")
+
+ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
+ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
+ax.xaxis.set_minor_locator(ticker.MultipleLocator(.5))
+ax2.set_yticks(np.arange(9), np.concatenate((np.arange(8), [""])))
+
+arr = ax2.annotate("", xy=(0, 0), xytext=(0.5, 0), arrowprops=dict(arrowstyle="<->"))
+ax2.annotate("$T_e$", (0.5, 1), xycoords=arr, ha="center", va="bottom")
+
+arr2 = ax2.annotate("", xy=(0.5, 0), xytext=(0.5, 1), arrowprops=dict(arrowstyle="<->"))
+ax2.annotate("$q$", (1, 0.5), xycoords=arr2, ha="left", va="center")
+
+arr3 = ax2.annotate("", xy=(1, 0), xytext=(1, 8), arrowprops=dict(arrowstyle="<->"))
+ax2.annotate("$V_{pe}$", (1, 0.5), xycoords=arr3, ha="left", va="center")
+```
+Signal analogique et signal numérisé.
+````
+
+````{figure}
+:label: fig:carac-can
+```{code-cell} python
+:tags: [remove-input]
+import matplotlib.pyplot as plt
+from matplotlib import ticker
+import numpy as np
+
+N = 8
+s_n = np.arange(N)
+s_a = np.linspace(0, 5, N+1)
+
+fig, ax = plt.subplots()
+
+ax.stairs(s_n, s_a, color="C1", lw=3, baseline=None)
+
+ax.set(
+  xlim=(0, 5),
+  ylim=(-1, N),
+  yticks=s_n,
+  xlabel="Signal analogique (V)",
+  ylabel="Signal numérique",
+)
+ax.set_xticks(s_a, [f"{v:.3f}" for v in s_a], rotation=45, ha="right", rotation_mode="anchor")
+ax.set_aspect(5/8, 'box')
+
+arr4 = ax.annotate(
+    "", xy=(s_a[0], 0), xytext=(s_a[1], 0), arrowprops=dict(arrowstyle="<->")
+)
+ax.annotate("$q$", (0.5, 1), xycoords=arr4, ha="center", va="bottom")
+
+arr5 = ax.annotate(
+    "", xy=(s_a[0], 1.5), xytext=(s_a[-1], 1.5), arrowprops=dict(arrowstyle="<->")
+)
+ax.annotate("$V_{pe}$", (0.5, 1), xycoords=arr5, ha="center", va="bottom")
+```
+Caractéristique du CAN.
+````
\ No newline at end of file