Acquisition et Traitement du Signal
Chaîne d'acquisition, conversion CAN/CNA, échantillonnage et traitement numérique
Objectifs pédagogiques
- Identifier les éléments d'une chaîne d'acquisition de données
- Comprendre le principe de la conversion analogique-numérique (CAN) et numérique-analogique (CNA)
- Appliquer le théorème de Shannon pour dimensionner un système d'acquisition
- Calculer la résolution et la plage de mesure d'un convertisseur
- Mettre en oeuvre un traitement numérique simple (moyenne, filtrage)
1. Chaîne d'acquisition
Une chaîne d'acquisition est l'ensemble des éléments qui permettent de mesurer une grandeur physique et de la convertir en données numériques exploitables par un système informatique. Elle constitue l'interface entre le monde physique (analogique) et le monde numérique.
Structure d'une chaîne d'acquisition
Rôle de chaque élément
Capteur (transducteur)
Convertit la grandeur physique en signal électrique (tension ou courant). Exemple : une thermistance convertit la température en variation de résistance, qui produit une variation de tension dans un pont diviseur.
Conditionneur de signal
Adapte le signal du capteur pour le CAN : amplification (augmente l'amplitude), filtrage (élimine le bruit), adaptation d'impédance (assure un bon transfert d'énergie).
Convertisseur Analogique-Numérique (CAN)
Transforme le signal analogique continu en valeurs numériques discrètes. Caractérisé par sa résolution (nombre de bits) et sa fréquence d'échantillonnage.
L'inverse d'une chaîne d'acquisition est une chaîne de restitution : données numériques → CNA → conditionneur → actionneur → grandeur physique. Exemple : fichier audio → CNA → amplificateur → haut-parleur → son.
2. Échantillonnage et théorème de Shannon
L'échantillonnage consiste à prélever des valeurs d'un signal analogique à intervalles réguliers. La fréquence d'échantillonnage (Fe) détermine combien de mesures sont effectuées par seconde.
Théorème de Shannon-Nyquist
Pour reconstituer fidèlement un signal, la fréquence d'échantillonnage doit être au moins deux fois supérieure à la fréquence maximale du signal :
Fe ≥ 2 × Fmax
Fe : fréquence d'échantillonnage | Fmax : fréquence maximale du signal
Exemple : Numérisation audio
L'oreille humaine perçoit des sons jusqu'à environ 20 kHz. Pour numériser de la musique, on utilise une fréquence d'échantillonnage de :
Fe ≥ 2 × 20 000 Hz = 40 000 Hz
CD Audio : Fe = 44 100 Hz (44,1 kHz) → respecte Shannon avec marge
DVD Audio : Fe = 96 000 Hz (96 kHz) → haute fidélité
Repliement spectral (aliasing)
Si Fe < 2×Fmax, le signal numérisé sera déformé : des fréquences parasites apparaissent, c'est le repliement spectral. Pour l'éviter, on place un filtre anti-repliement (passe-bas) avant le CAN.
Un signal de 15 kHz échantillonné à 20 kHz (Fe < 2×15) produira un signal parasite à 5 kHz (20-15). C'est pourquoi les convertisseurs audio utilisent toujours un filtre anti-aliasing.
3. Conversion Analogique-Numérique (CAN)
Le CAN (ADC en anglais) convertit une tension analogique en un nombre binaire. Il est caractérisé par sa résolution (nombre de bits n), sa plage d'entrée (Vref) et sa vitesse (fréquence max).
Caractéristiques d'un CAN
| Paramètre | Formule | Description |
|---|---|---|
| Résolution (n bits) | 2ⁿ niveaux | Nombre de valeurs distinctes possibles |
| Quantum (q) | q = Vref / 2ⁿ | Plus petite variation détectable |
| Plage de mesure | 0 à Vref | Étendue des tensions convertibles |
| Valeur numérique | N = Vin / q | Code numérique de sortie |
Exemple de calcul
Données : CAN 10 bits, Vref = 5V, tension d'entrée Vin = 2.5V
Nombre de niveaux : 2¹⁰ = 1024 niveaux
Quantum : q = 5V / 1024 = 4.88 mV
Valeur numérique : N = 2.5V / 4.88mV = 512
Code binaire : 512 = 0b1000000000
La résolution de 4.88 mV signifie qu'on ne peut pas distinguer deux tensions séparées de moins de 4.88 mV. C'est l'erreur de quantification.
CAN de l'Arduino et ESP32
Arduino Uno (ATmega328P)
- • Résolution : 10 bits (0-1023)
- • Vref : 5V (ou 1.1V interne)
- • Quantum : 4.88 mV
- • 6 entrées analogiques (A0-A5)
- • Vitesse : ~10 000 éch./s
ESP32
- • Résolution : 12 bits (0-4095)
- • Vref : 3.3V
- • Quantum : 0.8 mV
- • 18 entrées analogiques
- • Vitesse : ~100 000 éch./s
// Lecture analogique sur Arduino
int valeur_brute = analogRead(A0); // 0-1023
// Conversion en tension
float tension = valeur_brute * (5.0 / 1023.0);
// Exemple : capteur de température LM35 (10mV/°C)
float temperature = tension / 0.01; // en °C4. Conversion Numérique-Analogique (CNA)
Le CNA (DAC en anglais) effectue l'opération inverse du CAN : il convertit un nombre binaire en tension analogique. Il est utilisé pour générer des signaux audio, commander des actionneurs, ou créer des tensions de référence.
Formule de conversion
Vout = N × (Vref / 2ⁿ) = N × q
N : valeur numérique | Vref : tension de référence | n : nombre de bits
Alternative : PWM (Modulation de Largeur d'Impulsion)
L'Arduino ne possède pas de vrai CNA, mais utilise la PWM pour simuler une tension analogique. Le signal alterne rapidement entre 0V et 5V, et le rapport cyclique détermine la tension moyenne.
Principe de la PWM
Formule : Vmoy = (Rapport cyclique / 100) × Vmax
// PWM sur Arduino (8 bits : 0-255)
analogWrite(9, 127); // 50% → ~2.5V moyen
analogWrite(9, 255); // 100% → 5V
analogWrite(9, 0); // 0% → 0V
// Variation progressive de luminosité LED
for (int i = 0; i <= 255; i++) {
analogWrite(9, i);
delay(10);
}5. Traitement numérique du signal
Une fois le signal numérisé, on peut appliquer des traitements numériquespour améliorer la qualité des mesures, extraire des informations ou détecter des événements. Ces traitements sont réalisés par le microcontrôleur.
Moyenne glissante (lissage)
La moyenne glissante réduit le bruit en calculant la moyenne des N dernières mesures. Plus N est grand, plus le signal est lissé, mais plus la réponse est lente.
// Moyenne glissante sur 10 échantillons
#define N_SAMPLES 10
int mesures[N_SAMPLES];
int index_mesure = 0;
int moyenneGlissante(int nouvelle_valeur) {
mesures[index_mesure] = nouvelle_valeur;
index_mesure = (index_mesure + 1) % N_SAMPLES;
long somme = 0;
for (int i = 0; i < N_SAMPLES; i++) {
somme += mesures[i];
}
return somme / N_SAMPLES;
}
// Utilisation
int brute = analogRead(A0);
int filtree = moyenneGlissante(brute);Détection de seuil
Déclencher une action quand le signal dépasse un seuil. Pour éviter les fausses détections dues au bruit, on utilise un hystérésis (deux seuils différents pour le déclenchement et le retour).
// Détection avec hystérésis
#define SEUIL_HAUT 700
#define SEUIL_BAS 600
bool alarme_active = false;
void loop() {
int valeur = analogRead(A0);
if (!alarme_active && valeur > SEUIL_HAUT) {
alarme_active = true;
digitalWrite(LED, HIGH);
}
else if (alarme_active && valeur < SEUIL_BAS) {
alarme_active = false;
digitalWrite(LED, LOW);
}
}Calcul de valeurs statistiques
Valeurs extrêmes sur une période
Mesure de la dispersion (bruit)
Détection de variations rapides
- • FFT (Fast Fourier Transform) : analyse fréquentielle du signal
- • Filtres IIR/FIR : filtrage numérique avancé
- • PID : régulation en boucle fermée
- • Machine Learning : classification de signaux (TinyML)
À retenir
•Chaîne : Capteur → Conditionneur → CAN → Traitement
•Shannon : Fe ≥ 2 × Fmax (évite l'aliasing)
•CAN : n bits → 2ⁿ niveaux, q = Vref/2ⁿ
•Arduino : CAN 10 bits (0-1023), PWM 8 bits
•PWM : Vmoy = rapport cyclique × Vmax
•Filtrage : moyenne glissante pour réduire le bruit
