Retour à SIN (Info & Numérique)
SIN (Info & Numérique)

Algorithmique & Conversion CAN

Formules Clés & Définitions
Quantum (pas de résolution) : q=Vref+Vref-2Nq = \frac{V_{\text{ref+}} - V_{\text{ref-}}}{2^N} (V)
Code décimal converti : Nnum=E(Vinq)N_{\text{num}} = \text{E}\left(\frac{V_{\text{in}}}{q}\right)
Théorème de Shannon : fech>2fmaxf_{\text{ech}} > 2 \cdot f_{\text{max}} (évite le repliement de spectre)
Variables Arduino : `bool` (1 bit1\text{ bit}), `char` (8 bits8\text{ bits}), `int` (16 bits16\text{ bits})

1. 🔍 Problématique & Analogie Concrète

Comment notre smartphone, un ordinateur ou une carte Arduino peuvent-ils mesurer une grandeur physique réelle (comme une température, une pression sonore ou une vitesse) alors qu'un microprocesseur ne sait manipuler que des informations logiques sous forme de bits (0 et 1) ? Imaginez prendre des photographies à intervalles réguliers d'un coureur pour reconstituer sa course (c'est l'échantillonnage) et dessiner son trajet en utilisant un quadrillage de pixels de couleurs limitées (c'est la quantification). Le Convertisseur Analogique-Numérique (CAN) est la passerelle matérielle indispensable qui traduit les grandeurs physiques du monde analogique (qui sont continues) en valeurs numériques discrètes compréhensibles par les puces électroniques.

2. 📖 Cours Détaillé & Concepts Fondamentaux

💡 Définition : Structure d'un Programme Embarqué (C/C++ Arduino)
La programmation des microcontrôleurs obéit à une structure événementielle fixe composée de deux fonctions fondamentales : • void setup() : Exécutée une seule fois à la mise sous tension de la carte. Elle sert à configurer les registres d'entrées/sorties (ex: initialiser une broche en entrée ou sortie via pinMode()), lancer la communication série (Serial.begin()) ou activer des bibliothèques.
void loop() : Exécutée immédiatement après et de façon répétitive sous la forme d'une boucle infinie. C'est ici que l'on lit l'état des capteurs, exécute l'algorithme de contrôle et pilote les actionneurs.

⚙️ Loi : Échantillonnage Temporel & Théorème de Shannon
Pour numériser un signal analogique sans perdre d'information sur son évolution, il faut prélever des mesures à intervalles réguliers de durée TeT_e (période d'échantillonnage, exprimée en secondes). • **Théorème de Shannon (Nyquist-Shannon) :** Pour pouvoir reconstituer parfaitement le signal analogique d'origine sans distorsion, la fréquence d'échantillonnage fe=1Tef_e = \frac{1}{T_e} doit être strictement supérieure à deux fois la fréquence maximale fmaxf_{\text{max}} contenue dans le signal d'entrée : fe>2fmaxf_e > 2 \cdot f_{\text{max}} Si fe2fmaxf_e \le 2 \cdot f_{\text{max}}, il y a un phénomène de repliement de spectre (aliasing) : le signal numérisé est faussé et impossible à filtrer.

💡 Définition : Quantification et Résolution (Le Quantum qq)
Le convertisseur analogique-numérique (CAN) possède une résolution de NN bits. Il convertit la plage de tension utile (la dynamique s'étendant de Vref-V_{\text{ref-}} à Vref+V_{\text{ref+}}) en un nombre fini de valeurs possibles (2N2^N). Le quantum qq (aussi appelé pas de résolution) est la plus petite tension analogique détectable par le CAN : q=Vref+Vref-2Nq = \frac{V_{\text{ref+}} - V_{\text{ref-}}}{2^N}qq : Quantum exprimé en Volts (VV).
Vref+Vref-V_{\text{ref+}} - V_{\text{ref-}} : Plage de tension de référence (dynamique).
2N2^N : Nombre d'échelons de numérisation.
Pour une tension analogique d'entrée VinV_{\text{in}}, le code numérique entier NnumN_{\text{num}} généré par le CAN est la partie entière (E) du rapport : Nnum=E(Vinq)N_{\text{num}} = \text{E}\left(\frac{V_{\text{in}}}{q}\right)

3. 🧮 Méthode de Résolution & Exemples Rédigés

Exemple de numérisation d'une tension de capteur :
Une carte Arduino Uno possède un CAN de résolution N=10 bitsN = 10\text{ bits}. Les tensions de référence internes sont Vref-=0 VV_{\text{ref-}} = 0\text{ V} et Vref+=5 VV_{\text{ref+}} = 5\text{ V} (soit une dynamique de 5 V5\text{ V}). Un capteur analogique délivre une tension Vin=3,125 VV_{\text{in}} = 3{,}125\text{ V} à l'entrée A0.
Calculons le quantum et le code numérique généré.

Étape 1 : Calcul du nombre d'échelons du CAN 2N=210=1024 niveaux numeˊriques possibles (de 0 aˋ 1023)2^N = 2^{10} = 1024\text{ niveaux numériques possibles (de } 0 \text{ à } 1023\text{)}Étape 2 : Calcul du quantum qq du convertisseur q=Vref+Vref-2N=501024=510240,00488 V(soit 4,88 mV)q = \frac{V_{\text{ref+}} - V_{\text{ref-}}}{2^N} = \frac{5 - 0}{1024} = \frac{5}{1024} \approx 0{,}00488\text{ V} \quad (\text{soit } 4{,}88\text{ mV})Étape 3 : Calcul du code décimal numérique de sortie NnumN_{\text{num}} Nnum=E(Vinq)=E(3,1250,0048828)=E(640,01)=640N_{\text{num}} = \text{E}\left(\frac{V_{\text{in}}}{q}\right) = \text{E}\left(\frac{3{,}125}{0{,}0048828}\right) = \text{E}(640{,}01) = 640 Le processeur recevra la valeur décimale 640640, ce qui correspond à la chaîne binaire 101000000021010000000_2 codée sur 10 bits.

4. 🚀 Ce qu'il faut absolument retenir (Points Clés)

  • Structure logicielle : setup() configure les broches au démarrage, loop() exécute l'algorithme principal en boucle infinie.
  • Théorème de Shannon : Pour éviter la perte d'informations, la fréquence de numérisation fef_e doit être au moins double de la fréquence utile max du signal (fe>2fmaxf_e > 2 \cdot f_{\text{max}}).
  • Le pas élémentaire (quantum) : Formule q=ΔVref2Nq = \frac{\Delta V_{\text{ref}}}{2^N}. Plus la résolution NN (le nombre de bits) est grande, plus le quantum est petit, augmentant la précision de la mesure.
  • La valeur du code NnumN_{\text{num}} : C'est toujours un nombre entier naturel compris entre 00 et 2N12^N-1 (de 0 à 1023 pour un convertisseur 10 bits).