Conversion Analogique-Numerique

CAN (ADC) - CNA (DAC) - Chaine d'Acquisition

S02 : Chaine d'acquisition et de restitution d'un signal analogique

🔢 CAN (ADC) 📈 CNA (DAC) 📋 Referentiel S02
🔗

Chapitre 1 : Chaine d'Acquisition

Structure generale du traitement numerique d'un signal

🎯 Objectifs du chapitre

  • Decrire la structure d'une chaine d'acquisition
  • Identifier les differents blocs fonctionnels
  • Comprendre le role de chaque element
  • Distinguer acquisition et restitution

1.1 Structure Generale

📖
Chaine d'acquisition Ensemble des dispositifs permettant de convertir une grandeur physique (temperature, pression, lumiere...) en une valeur numerique exploitable par un systeme de traitement.
    CHAÎNE D'ACQUISITION COMPLETE
    
    ┌─────────────────────────────────────────────────────────────────────────┐
    │                        MONDE ANALOGIQUE                                 │
    └─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
    ┌───────────┐   ┌───────────┐   ┌───────────┐   ┌───────────┐   ┌───────────┐
    │  CAPTEUR  │──▶│CONDITIONN.│──▶│  FILTRE   │──▶│   E/B     │──▶│    CAN    │
    │           │   │ (Ampli)   │   │ Anti-rep. │   │ (S&H)     │   │   (ADC)   │
    └───────────┘   └───────────┘   └───────────┘   └───────────┘   └───────────┘
     Temperature      Amplifier      Limiter la       Maintenir     Convertir
     Pression         Adapter        bande            la valeur     en nombre
     Lumiere          le niveau      passante         stable        binaire
                                    │
                                    ▼
    ┌─────────────────────────────────────────────────────────────────────────┐
    │                     TRAITEMENT NUMERIQUE (MCU/DSP)                      │
    └─────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
    ┌───────────┐   ┌───────────┐   ┌───────────┐   ┌───────────┐
    │    CNA    │──▶│  FILTRE   │──▶│   AMPLI   │──▶│ACTIONNEUR │
    │   (DAC)   │   │ Lissage   │   │ Puissance │   │           │
    └───────────┘   └───────────┘   └───────────┘   └───────────┘
     Convertir       Eliminer       Adapter          Moteur
     en tension      les marches    le niveau        Haut-parleur
                    d'escalier                       LED
    
    E/B = Echantillonneur-Bloqueur (Sample & Hold)
                    

1.2 Role de Chaque Bloc

BlocFonctionExemple
CapteurConvertit grandeur physique → signal electriqueThermocouple, LDR, Microphone
ConditionneurAmplifie, filtre, adapte l'impedanceAOP en amplificateur
Filtre anti-repliementLimite la bande passante avant echantillonnageFiltre passe-bas RC, Butterworth
Echantillonneur-BloqueurMaintient la tension stable pendant conversionCircuit S&H (condensateur)
CAN (ADC)Convertit tension analogique → code numeriqueADC 12 bits du STM32
CNA (DAC)Convertit code numerique → tension analogiqueDAC audio, PWM filtre

1.3 Theoreme d'Echantillonnage (Shannon)

⚠️
Theoreme de Shannon-Nyquist Pour reconstituer un signal sans perte d'information, la frequence d'echantillonnage doit etre au moins 2 fois superieure a la frequence maximale du signal.
Condition de Shannon fe ≥ 2 × fmax

Exemple : Audio CD

  • Frequence max audible : 20 kHz
  • Frequence d'echantillonnage : 44.1 kHz (> 2 × 20 kHz)
  • Resolution : 16 bits
⚠️
Repliement spectral (Aliasing) Si fe < 2×fmax, les hautes frequences se "replient" sur les basses frequences, creant des artefacts impossibles a eliminer. Le filtre anti-repliement est indispensable !

1.4 Echantillonneur-Bloqueur (E/B)

    ECHANTILLONNEUR-BLOQUEUR (Sample & Hold)
    
    Entree Ve ─────┬─────┐
                   │     │
                   │   ──┴──  Interrupteur commande
                   │   \   /
                   │    \ /
                   │     │
                   │    ═══  Condensateur C
                   │     │
                   └─────┼──────▶ Sortie Vs (vers CAN)
                         │
                        ─┴─
                         ─
    
    Phase ECHANTILLONNAGE : Interrupteur ferme → C se charge a Ve
    Phase BLOCAGE : Interrupteur ouvert → C maintient la tension
    
    Signal
    ┌───────────────────────────────────────────────────────
    │         ●                   ●
    │       ●   ●               ●   ●
    │     ●       ●    →      ●       ●
    │   ●           ●       ●───────────●
    │ ●               ●   ●               ●───────
    └───────────────────────────────────────────────────────
      Signal analogique    Signal echantillonne-bloque
                    
📐

Chapitre 2 : Concepts Fondamentaux

Resolution, quantum, pleine echelle, erreurs

🎯 Objectifs du chapitre

  • Definir la resolution et le quantum
  • Calculer la pleine echelle
  • Comprendre les erreurs de conversion
  • Maitriser les calculs de conversion

2.1 Resolution (n bits)

📖
Resolution Nombre de bits du convertisseur. Definit le nombre de niveaux distincts que peut representer le convertisseur : 2n niveaux.
ResolutionNombre de niveauxPrecision theoriqueUsage typique
8 bits2560.39%Audio basique, video
10 bits10240.098%Arduino UNO
12 bits40960.024%STM32, ESP32
16 bits655360.0015%Audio CD, instrumentation
24 bits16 777 2160.000006%Audio pro, mesure precise
Nombre de niveaux N = 2n

2.2 Quantum (q) - Pas de Quantification

📖
Quantum (q) Plus petite variation de tension detectable par le convertisseur. Aussi appele LSB (Least Significant Bit) ou pas de quantification.
Calcul du quantum q = Vref / 2n = (Vmax - Vmin) / 2n

Exemple de calcul

Pour un CAN 12 bits avec Vref = 3.3V :

  • Nombre de niveaux : 212 = 4096
  • Quantum : q = 3.3V / 4096 = 0.806 mV
  • Une variation de 0.8 mV provoque un changement d'1 LSB
    QUANTIFICATION - CARACTERISTIQUE DE TRANSFERT
    
    Code numerique (sortie)
         │
       7 │                              ┌────
       6 │                         ┌────┘
       5 │                    ┌────┘
       4 │               ┌────┘
       3 │          ┌────┘
       2 │     ┌────┘
       1 │┌────┘
       0 ├┴────┴────┴────┴────┴────┴────┴────┴────▶ Tension d'entree
         0   q   2q   3q   4q   5q   6q   7q   8q
         
    q = quantum (1 LSB)
    Chaque marche = 1 quantum de largeur
    
    Erreur de quantification maximale = ±q/2
                    

2.3 Pleine Echelle (PE ou FSR)

📖
Pleine Echelle (Full Scale Range - FSR) Plage totale de tension d'entree du convertisseur. Pour un CAN : tension correspondant au code maximum (tous les bits a 1).
Pleine echelle PE = Vref - q = Vref × (2n - 1) / 2n

Formules de conversion

🔢

CAN : Tension → Code

N = (Vin / Vref) × 2n

📈

CNA : Code → Tension

Vout = (N / 2n) × Vref

Exemple complet

CAN 10 bits, Vref = 5V, entree = 2.5V :

  • Quantum : q = 5V / 1024 = 4.88 mV
  • Code numerique : N = (2.5 / 5) × 1024 = 512 (0x200)
  • Verification : V = (512 / 1024) × 5 = 2.5V ✓

2.4 Temps de Conversion

📖
Temps de conversion (Tconv) Duree necessaire pour effectuer une conversion complete. Depend de l'architecture du CAN et de la frequence d'horloge.
Type de CANTemps typiqueVitesse
Flash< 50 nsTres rapide
SAR (Approx. successives)1-10 µsRapide
Simple rampe~1 msLent
Double rampe10-100 msTres lent
Sigma-DeltaVariableTres precis

2.5 Erreurs de Conversion

Types d'erreurs

  • Erreur de quantification : Inherente a la conversion (±q/2 max)
  • Erreur d'offset : Decalage de la caracteristique (code ≠ 0 pour V=0)
  • Erreur de gain : Pente incorrecte de la caracteristique
  • Non-linearite differentielle (DNL) : Variation de la largeur des marches
  • Non-linearite integrale (INL) : Ecart par rapport a la droite ideale
    ERREURS DE CONVERSION
    
    OFFSET               GAIN                 NON-LINEARITE
    
    ↑                    ↑                    ↑
    │    /               │      /             │     /╱
    │   / /              │     /              │    / ╱
    │  / /               │    / /             │   /╱
    │ / /                │   / /              │  /╱
    │/ /                 │  / /               │ /
    │/                   │ /                  │/
    └──────▶             └──────▶             └──────▶
    Reel / Ideal         Reel / Ideal         Reel / Ideal
                    
📈

Chapitre 3 : CNA - Principes Generaux

Convertisseur Numerique-Analogique (DAC)

🎯 Objectifs du chapitre

  • Comprendre le principe du CNA
  • Connaitre les differentes architectures
  • Calculer la tension de sortie
  • Identifier les applications

3.1 Principe du CNA

📖
CNA (Convertisseur Numerique-Analogique) Aussi appele DAC (Digital to Analog Converter). Convertit un code numerique binaire en une tension (ou courant) analogique proportionnelle.
    PRINCIPE DU CNA
    
                    ┌─────────────┐
    bn-1 ───────────▶│             │
    bn-2 ───────────▶│             │
       ⋮            │     CNA     │───────▶ Vout
    b1  ───────────▶│   (DAC)    │
    b0  ───────────▶│             │
                    └─────────────┘
                          │
                         Vref
    
    Vout = Vref × (bn-1×2n-1 + bn-2×2n-2 + ... + b1×21 + b0×20) / 2n
    
    Simplifie : Vout = Vref × N / 2n
                    

3.2 Caracteristique de Transfert CNA

    CARACTERISTIQUE CNA 3 BITS (8 niveaux)
    
    Vout
    7q │                              ●
    6q │                         ●
    5q │                    ●
    4q │               ●
    3q │          ●
    2q │     ●
    1q │●
     0 ├──●──┴────┴────┴────┴────┴────┴────▶ Code
       000  001  010  011  100  101  110  111
       
    q = Vref / 2n = Vref / 8
    
    Exemple : Code 101 (decimal 5)
    Vout = Vref × 5/8 = 5q
                    

3.3 Types de CNA

TypePrincipeAvantagesInconvenients
Resistances pondereesResistances R, 2R, 4R, 8R...Simple a comprendrePrecision des resistances
R-2RSeulement 2 valeurs de RFacile a realiserPlus de composants
Sources pondereesSources de courantRapide, precisComplexe
PWM + filtreRapport cyclique variableSimple (1 GPIO)Lent, filtrage requis
Sigma-DeltaSur-echantillonnageHaute resolutionLent

3.4 Applications des CNA

🔊

Audio

Generation de sons, lecture musique, synthetiseurs

📺

Video

Signal VGA, generation d'images

Controle

Commande moteur, regulation, asservissement

📡

Telecom

Modulation, generation de signaux RF

🔬

Instrumentation

Generateurs de fonctions, sources programmables

🎛️

Calibration

Tensions de reference variables

⚖️

Chapitre 4 : CNA a Resistances Ponderees

Architecture avec resistances R, 2R, 4R, 8R...

4.1 Principe

Chaque bit commande un interrupteur relie a une resistance de valeur ponderee. Le courant total est proportionnel au code binaire.

    CNA 4 BITS A RESISTANCES PONDEREES
    
    Vref ───┬───────────────────────────────────────────────┐
            │                                               │
           ─┴─ R (MSB b3)                                    │
            │                                               │
            ├──── SW3 ────┐                                 │
            │             │                                 │
           ─┴─ 2R (b2)   │                                 │
            │             │       ┌─────────┐               │
            ├──── SW2 ────┼───────│    -    │───────────────┘
            │             │       │   AOP   │──────▶ Vout
           ─┴─ 4R (b1)   │       │    +    │
            │             │       └────┬────┘
            ├──── SW1 ────┤            │
            │             │           ─┴─
           ─┴─ 8R (LSB b0) │            GND
            │             │
            └──── SW0 ────┘
    
    SW ferme si bit = 1
    
    Courants : I3 = Vref/R, I2 = Vref/2R, I1 = Vref/4R, I0 = Vref/8R
    
    Rapport : I3 : I2 : I1 : I0 = 8 : 4 : 2 : 1
                    

4.2 Calcul de la Tension de Sortie

Tension de sortie (CNA n bits) Vout = -Rf × Vref × (bn-1/R + bn-2/2R + ... + b0/2n-1R)

Avec Rf = R (resistance de contre-reaction) :

Formule simplifiee Vout = -Vref × (bn-1×2n-1 + bn-2×2n-2 + ... + b0) / 2n-1

Exemple : Code 1010 (decimal 10)

  • Vref = 10V, n = 4 bits
  • N = 1×8 + 0×4 + 1×2 + 0×1 = 10
  • Vout = -10 × 10/8 = -12.5V

4.3 Avantages et Inconvenients

Avantages

- Simple a comprendre
- Peu de composants
- Fonctionnement direct

Inconvenients

- Grande plage de resistances
- Precision difficile (ex: R et 128R)
- Limite a 8-10 bits max

⚠️
Probleme de precision Pour un CNA 8 bits : RMSB = R, RLSB = 128R. Il faut des resistances tres precises (0.1% ou mieux) pour que le LSB soit significatif.
🔀

Chapitre 5 : CNA R-2R

Architecture avec reseau en echelle R-2R

5.1 Principe du Reseau R-2R

📖
CNA R-2R Utilise seulement 2 valeurs de resistances (R et 2R) arrangees en echelle. Resout le probleme de precision du CNA a resistances ponderees.
    CNA R-2R 4 BITS
    
                    R           R           R           R
    ├─────────────────┼───────────┼───────────┼───────────┤
    │                 │           │           │           │
   2R                2R          2R          2R          2R
    │                 │           │           │           │
    │                 │           │           │           │
    ▼                 ▼           ▼           ▼           │
   GND               SW3         SW2         SW1         SW0
                    (b3)        (b2)        (b1)        (b0)
                     │           │           │           │
                     ▼           ▼           ▼           ▼
                   Vref ou GND (selon bit)
    
    Chaque interrupteur connecte la branche a Vref (bit=1) ou GND (bit=0)
    
    La sortie (a droite) voit toujours la meme impedance = R
                    

5.2 Fonctionnement

Le reseau R-2R divise la tension par 2 a chaque noeud :

    DIVISION DE TENSION DANS LE RESEAU R-2R
    
    Si seul b3 = 1 (code 1000) :
    
    Vref ──▶ Division par 2 ──▶ Vref/2 (contribution de b3)
    
    Si seul b2 = 1 (code 0100) :
    
    Vref ──▶ 2 divisions ──▶ Vref/4 (contribution de b2)
    
    Contribution de chaque bit :
    ┌───────┬──────────────────┐
    │ Bit   │ Contribution     │
    ├───────┼──────────────────┤
    │ b3    │ Vref/2          │
    │ b2    │ Vref/4          │
    │ b1    │ Vref/8          │
    │ b0    │ Vref/16         │
    └───────┴──────────────────┘
                    
Tension de sortie CNA R-2R n bits Vout = Vref × (bn-1/2 + bn-2/4 + ... + b0/2n)

Exemple : Code 1010 (decimal 10) avec Vref = 5V

  • b3=1 : contribution = 5/2 = 2.5V
  • b2=0 : contribution = 0V
  • b1=1 : contribution = 5/8 = 0.625V
  • b0=0 : contribution = 0V
  • Vout = 2.5 + 0.625 = 3.125V

5.3 Avantages du R-2R

Avantages

- Seulement 2 valeurs de R
- Facile a integrer (IC)
- Extensible a n bits
- Bonne precision
- Utilise dans la plupart des DAC

Inconvenients

- Plus de resistances
- Impedance de sortie variable
- Necessite un buffer en sortie

5.4 CNA R-2R avec AOP

    CNA R-2R AVEC AMPLIFICATEUR OPERATIONNEL
    
                         Rf
                    ┌──────────┐
                    │          │
    Sortie R-2R ────┤─    ┌────┴────┐
                    │     │    -    │
                   2R     │   AOP   │──────▶ Vout
                    │     │    +    │
                    │     └────┬────┘
                   GND        GND
    
    L'AOP fournit :
    - Haute impedance d'entree (pas de charge du reseau)
    - Basse impedance de sortie
    - Possibilite de gain (Rf/2R)
                    
〰️

Chapitre 6 : CNA PWM

Conversion par rapport cyclique variable

6.1 Principe du PWM

📖
PWM (Pulse Width Modulation) Signal carre dont le rapport cyclique (duty cycle) varie. La valeur moyenne du signal est proportionnelle au rapport cyclique. Un filtre passe-bas extrait cette valeur moyenne → tension analogique.
    PRINCIPE PWM
    
    Duty = 25%           Duty = 50%           Duty = 75%
    
    V ┌─┐                ┌───┐                ┌─────┐
      │ │                │   │                │     │
      │ │                │   │                │     │
    0 ┴─┴────────        ┴───┴────            ┴─────┴──
      |←── T ──→|        |←── T ──→|          |←── T ──→|
    
    Vmoy = V × 25%      Vmoy = V × 50%      Vmoy = V × 75%
         = 0.25 × V           = 0.5 × V           = 0.75 × V
    
    
    Apres filtrage passe-bas :
    
    PWM (carre) ────▶ [Filtre RC] ────▶ Tension continue
                                           (proportionnelle au duty)
                    

6.2 Formule du Rapport Cyclique

Rapport cyclique et tension moyenne α = Ton / T × 100%

Vmoy = Vmax × α = Vmax × Ton / T

Resolution PWM

La resolution depend du compteur du timer :

  • Timer 8 bits : 256 niveaux (resolution 8 bits)
  • Timer 16 bits : 65536 niveaux (resolution 16 bits)
  • Frequence PWM = fclock / (Prescaler × Periode)

6.3 Filtre Passe-Bas RC

    FILTRE RC POUR PWM
    
    PWM ────────[  R  ]────┬──────▶ Vout (tension lissee)
                           │
                          ═══ C
                           │
                          ─┴─
                           ─
    
    Frequence de coupure : fc = 1 / (2π × R × C)
    
    Conditions :
    - fc << fPWM (au moins 10× plus basse)
    - Plus fc est basse, meilleur est le lissage
    - Mais reponse plus lente aux changements
    
    Exemple : R = 10 kΩ, C = 1 µF
    fc = 1 / (2π × 10000 × 0.000001) = 15.9 Hz
    
    Pour fPWM = 1 kHz → bon lissage
                    

6.4 PWM sur Arduino et STM32

// PWM sur Arduino
#define PWM_PIN 9  // Pin avec Timer

void setup() {
    pinMode(PWM_PIN, OUTPUT);
}

void loop() {
    // analogWrite : 0-255 (8 bits)
    analogWrite(PWM_PIN, 0);     // 0% → 0V
    delay(1000);
    
    analogWrite(PWM_PIN, 127);   // 50% → 2.5V
    delay(1000);
    
    analogWrite(PWM_PIN, 255);   // 100% → 5V
    delay(1000);
}

// Exemple : rampe de tension
for (int duty = 0; duty <= 255; duty++) {
    analogWrite(PWM_PIN, duty);
    delay(10);
}
// PWM sur STM32 (HAL)
// Configuration dans CubeMX : Timer en mode PWM

// Demarrer PWM
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);

// Modifier le rapport cyclique (0 a ARR)
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 500); // Duty cycle

// Avec periode ARR = 1000 :
// Compare = 500 → 50% duty
// Compare = 250 → 25% duty

// Fonction pour definir le duty en pourcentage
void PWM_SetDuty(uint8_t percent) {
    uint32_t compare = (htim2.Init.Period * percent) / 100;
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, compare);
}

6.5 Avantages et Inconvenients du PWM

Avantages

- Tres simple (1 GPIO)
- Haute resolution possible (16 bits)
- Pas de DAC externe
- Ideal pour LEDs, moteurs

Inconvenients

- Filtrage necessaire
- Reponse lente (RC)
- Ondulation residuelle
- Non adapte a l'audio haute qualite

🔢

Chapitre 7 : CAN - Principes Generaux

Convertisseur Analogique-Numerique (ADC)

🎯 Objectifs du chapitre

  • Comprendre le principe du CAN
  • Connaitre les differentes architectures
  • Identifier les signaux de dialogue
  • Choisir un CAN selon l'application

7.1 Principe du CAN

📖
CAN (Convertisseur Analogique-Numerique) Aussi appele ADC (Analog to Digital Converter). Convertit une tension analogique en un code numerique binaire proportionnel.
    PRINCIPE DU CAN
    
                         ┌─────────────┐
    Vin ────────────────▶│             │───────▶ bn-1 (MSB)
                         │     CAN     │───────▶ bn-2
    Vref ───────────────▶│    (ADC)    │───────▶ ⋮
                         │             │───────▶ b1
    START ──────────────▶│             │───────▶ b0 (LSB)
                         │             │
    EOC ◀────────────────│             │
                         └─────────────┘
    
    START : Signal de demarrage de conversion
    EOC   : End Of Conversion (fin de conversion)
    
    Code de sortie : N = (Vin / Vref) × 2n
                    

7.2 Signaux de Dialogue

SignalDirectionFonction
VinEntreeTension analogique a convertir
VrefEntreeTension de reference (pleine echelle)
START / SOCEntreeDemarre une conversion
CLKEntreeHorloge (pour certains types)
EOC / DRDYSortieSignale la fin de conversion
OEEntreeOutput Enable (active les sorties)
D0-Dn-1SortieCode numerique resultat
    CHRONOGRAMME DE CONVERSION
    
    START  ────┐     ┌─────────────────────────────────────
               └─────┘
    
    CLK    ────┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬────
               │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
    
    EOC    ────────────────────────────────────┐     ┌────
                                               └─────┘
               │←────── Temps de conversion ──────→│
    
    DATA   ─────────────────────────────────────┬─────────
                                                │ VALIDE
                    

7.3 Classification des CAN

TypeVitesseResolutionComplexiteUsage
Flash (parallele)Tres rapide6-8 bitsEleveeVideo, oscilloscopes
SARRapide8-18 bitsMoyenneMCU, acquisition
Simple rampeLente8-12 bitsFaiblePedagogique
Double rampeTres lente12-20 bitsMoyenneMultimetres
Sigma-DeltaLente16-24 bitsEleveeAudio, precision
PipelineTres rapide10-16 bitsEleveeTelecom, imagerie
💡
Compromis vitesse/resolution En general, plus un CAN est rapide, moins sa resolution est elevee. Les CAN Flash sont les plus rapides mais limites en bits. Les CAN Sigma-Delta sont tres precis mais lents.

Chapitre 8 : CAN Flash (Parallele)

Conversion instantanee par comparateurs

8.1 Principe du CAN Flash

📖
CAN Flash (ou parallele) Utilise 2n-1 comparateurs en parallele pour comparer simultanement la tension d'entree a toutes les tensions de reference. Conversion en un seul cycle d'horloge.
    CAN FLASH 3 BITS (7 comparateurs)
    
    Vref
     │
    ─┴─ R
     ├──────────▶ V7 = 7/8 Vref ──▶ [+─] C7 ──┐
    ─┴─ R                          [-]      │
     ├──────────▶ V6 = 6/8 Vref ──▶ [+─] C6 ──┤
    ─┴─ R                          [-]      │
     ├──────────▶ V5 = 5/8 Vref ──▶ [+─] C5 ──┤   ┌────────────┐
    ─┴─ R                          [-]      ├──▶│  ENCODEUR  │──▶ b2 b1 b0
     ├──────────▶ V4 = 4/8 Vref ──▶ [+─] C4 ──┤   │ PRIORITE   │
    ─┴─ R                          [-]      │   └────────────┘
     ├──────────▶ V3 = 3/8 Vref ──▶ [+─] C3 ──┤
    ─┴─ R                          [-]      │
     ├──────────▶ V2 = 2/8 Vref ──▶ [+─] C2 ──┤
    ─┴─ R                          [-]      │
     ├──────────▶ V1 = 1/8 Vref ──▶ [+─] C1 ──┘
    ─┴─ R                          [-]
     │                              │
    GND                            Vin
    
    Tous les comparateurs ont Vin sur l'entree (-)
    Sortie = 1 si Vin > Vseuil
                    

8.2 Fonctionnement

Exemple : Vin = 0.6 × Vref

ComparateurSeuilVin > Seuil ?Sortie
C77/8 = 0.8750.6 > 0.875 ?0
C66/8 = 0.7500.6 > 0.750 ?0
C55/8 = 0.6250.6 > 0.625 ?0
C44/8 = 0.5000.6 > 0.500 ?1
C33/8 = 0.3750.6 > 0.375 ?1
C22/8 = 0.2500.6 > 0.250 ?1
C11/8 = 0.1250.6 > 0.125 ?1

Code thermometre : 0001111 → L'encodeur convertit en binaire : 100 (decimal 4)

8.3 Avantages et Inconvenients

Avantages

- Tres rapide (1 cycle)
- Frequences > 1 GHz possibles
- Pas de S&H necessaire
- Ideal pour oscilloscopes

Inconvenients

- 2n-1 comparateurs !
- Cout eleve
- Consommation importante
- Limite a 6-8 bits
- 8 bits = 255 comparateurs

⚠️
Croissance exponentielle Le nombre de comparateurs double a chaque bit supplementaire : 6 bits = 63, 8 bits = 255, 10 bits = 1023 comparateurs ! C'est pourquoi le CAN Flash est limite en resolution.
📈

Chapitre 9 : CAN a Rampe (Comptage)

Simple rampe et comptage d'impulsions

9.1 Principe du CAN Simple Rampe

📖
CAN a simple rampe Genere une tension en rampe croissante et compte les impulsions d'horloge jusqu'a ce que la rampe atteigne Vin. Le compteur contient alors le code numerique.
    CAN A SIMPLE RAMPE
    
                          ┌───────────┐
    START ───────────────▶│ Generateur│────▶ Vrampe
                          │  de rampe │
                          └───────────┘
                                │
                                ▼ (+)
    Vin ────────────────────────▶[COMP]────▶ STOP
                               (-)         │
                                           │
                          ┌───────────┐    │
    CLK ─────────────────▶│ COMPTEUR  │◀───┘
                          │  n bits   │
                          └─────┬─────┘
                                │
                                ▼
                          Dn-1...D0
    
    
    CHRONOGRAMME :
    
    V
    │        Vin ─────────────────●────────────────
    │                          ╱│
    │                        ╱  │
    │    Vrampe            ╱    │
    │                    ╱      │
    │                  ╱        │
    │                ╱          │
    │              ╱            │
    └────────────╱──────────────┴─────────────────▶ t
                 │← Tconv →│
                 
    Compteur : 0, 1, 2, 3, ... N (quand Vrampe = Vin)
                    

9.2 Fonctionnement Detaille

  1. START : RAZ du compteur, demarrage de la rampe
  2. Rampe : Vrampe augmente lineairement (integrateur)
  3. Comptage : Le compteur s'incremente a chaque coup d'horloge
  4. Comparaison : Quand Vrampe ≥ Vin, le comparateur bascule
  5. STOP : Le compteur s'arrete, sa valeur = code numerique
Temps de conversion (simple rampe) Tconv = N × Tclk (proportionnel a Vin)
⚠️
Temps variable Le temps de conversion depend de Vin : pour pleine echelle, il faut compter jusqu'a 2n-1. Pour un CAN 12 bits a 1 MHz : Tmax = 4095 µs ≈ 4 ms !

9.3 Avantages et Inconvenients

Avantages

- Tres simple
- Peu de composants
- Bon pour l'enseignement
- Monotone (pas de codes manquants)

Inconvenients

- Tres lent
- Temps variable
- Sensible aux derives
- Peu utilise en pratique

🎯

Chapitre 10 : CAN SAR (Approximations Successives)

Le plus utilise dans les microcontroleurs

10.1 Principe du SAR

📖
CAN SAR (Successive Approximation Register) Utilise une recherche dichotomique : teste bit par bit en commencant par le MSB. Comme chercher un mot dans un dictionnaire en divisant par 2 a chaque etape. Conversion en n cycles pour n bits.
    ARCHITECTURE CAN SAR
    
                                    ┌─────────────┐
    Vin ──────────────────────────▶│     (+)     │
                                    │   COMPAR.   │────▶ Resultat
    ┌─────────────┐   ┌─────────┐   │     (-)     │       comparaison
    │   REGISTRE  │──▶│   CNA   │──▶│             │
    │     SAR     │   │  (DAC)  │   └─────────────┘
    │             │   └─────────┘          │
    │             │◀───────────────────────┘
    └─────────────┘
          │
          ▼
    Dn-1 Dn-2 ... D1 D0
    
    Le registre SAR genere des codes a tester
    Le CNA convertit le code en tension
    Le comparateur indique si Vin > ou < Vtest
    Le SAR ajuste le code en consequence
                    

10.2 Algorithme de Conversion

Exemple : CAN 4 bits, Vref = 16V, Vin = 10.2V

EtapeCode testVtestVin > Vtest ?ActionCode final
1 (MSB)10008V10.2 > 8 → OUIGarder b3=11---
2110012V10.2 > 12 → NONMettre b2=010--
3101010V10.2 > 10 → OUIGarder b1=1101-
4 (LSB)101111V10.2 > 11 → NONMettre b0=01010

Resultat : 1010 (decimal 10) → V = 10V (erreur = 0.2V < 1 quantum)

    RECHERCHE DICHOTOMIQUE (comme dans un dictionnaire)
    
    Vref = 16V
    Vin = 10.2V
    
    16V ┬───────────────────────────────────────────────┐
        │                                               │
        │           Vin > 8V ?                           │
    12V │───────────────────┬───────────────────────────┤
        │        OUI        │         NON               │
        │      ┌────────────┤                           │
        │      │ Vin > 12V ? │                           │
     8V │──────┼───────┬────┼───────────────────────────┤
        │      │  NON  │OUI │                           │
        │   ┌──┤───────┤    │                           │
        │   │Vin>10?│    │                           │
     4V │───┼──┼───┬───┼────┼───────────────────────────┤
        │   │OUI│   │NON│    │                           │
        │   │  ●│   │   │    │                           │
     0V └───┴──┴───┴───┴────┴───────────────────────────┘
              ↑
        Resultat = 10V = 1010
                    

10.3 Temps de Conversion

Temps de conversion SAR Tconv = n × Tclk + Tacquisition

Pour un CAN 12 bits avec horloge 1 MHz :

  • Tconv ≈ 12-15 µs (compare a 4 ms pour simple rampe !)
  • Frequence d'echantillonnage : ~66 kSPS (kilo-samples per second)

10.4 Avantages du SAR

Avantages

- Temps de conversion fixe
- Bon compromis vitesse/resolution
- Faible consommation
- Le plus utilise dans les MCU
- 8 a 18 bits typique

Inconvenients

- Necessite un DAC interne
- Necessite un S&H
- Codes manquants possibles
- Moins rapide que Flash

💡
Utilisation dans les MCU Le CAN SAR est integre dans la quasi-totalite des microcontroleurs : Arduino (10 bits), STM32 (12-16 bits), ESP32 (12 bits). C'est le meilleur compromis performance/cout/consommation.
🔄

Chapitre 11 : CAN Double Rampe (Integration)

Haute precision pour instruments de mesure

11.1 Principe de la Double Rampe

📖
CAN Double Rampe (Dual Slope) Convertit la tension en temps. Phase 1 : integre Vin pendant un temps fixe T1. Phase 2 : integre -Vref jusqu'a retour a zero (temps T2). T2 est proportionnel a Vin.
    PRINCIPE DOUBLE RAMPE
    
                                  ┌──────────────┐
    Vin ──────────┬──────────────▶│              │
                 SW1              │  INTEGRATEUR │───▶ Vint
    -Vref ─────────┴──────────────▶│     (RC)     │
                 SW2              └──────────────┘
                                         │
                                         ▼
                                  ┌──────────────┐
                              ───▶│  COMPARATEUR │───▶ STOP
                                  │    (V=0?)    │
                                  └──────────────┘
    
    
    CHRONOGRAMME :
    
    Vint
      │
      │         ╱╲                         ← Pente = Vin/RC
      │       ╱    ╲
      │     ╱        ╲                     ← Pente = Vref/RC
      │   ╱            ╲
      │ ╱                ╲
    0 ├─────────────────────────────────────────▶ t
      │←───── T1 ─────→│←───── T2 ─────→│
            (fixe)         (variable)
    
    Phase 1 : Integration de Vin pendant T1 (fixe)
    Phase 2 : Integration de -Vref jusqu'a Vint = 0
    
    Resultat : T2/T1 = Vin/Vref  →  N = (T2/T1) × 2n
                    

11.2 Calcul

Pendant T1 (integration de Vin) :

Vmax = (Vin × T1) / (R × C)

Pendant T2 (integration de -Vref) :

Vmax = (Vref × T2) / (R × C)

En egalisant :

Relation fondamentale Vin / Vref = T2 / T1 → N = (T2 / T1) × 2n

11.3 Avantages Remarquables

Rejection du bruit 50/60 Hz Si T1 = multiple de 20 ms (50 Hz) ou 16.67 ms (60 Hz), l'integration moyenne le bruit secteur a zero ! Parfait pour les multimetres.

Avantages

- Tres haute precision
- Insensible aux derives RC
- Rejection du bruit secteur
- Resolution 16-24 bits
- Linearite excellente

Inconvenients

- Tres lent (20-200 ms)
- Non adapte aux signaux rapides
- 2-50 conversions/seconde max

Applications

  • Multimetres numeriques (DMM)
  • Balances de precision
  • Instrumentation de laboratoire
  • Mesures lentes mais precises
💻

Chapitre 12 : Applications Pratiques

CAN/CNA sur Arduino et STM32

12.1 ADC sur Arduino

// ADC Arduino - 10 bits (0-1023), Vref = 5V

void setup() {
    Serial.begin(115200);
    // ADC configure par defaut
}

void loop() {
    // Lecture simple (10 bits)
    int valeur = analogRead(A0);  // 0-1023
    
    // Conversion en tension
    float tension = valeur * (5.0 / 1023.0);
    
    Serial.print("ADC: ");
    Serial.print(valeur);
    Serial.print(" → ");
    Serial.print(tension, 3);
    Serial.println(" V");
    
    delay(500);
}

// Changer la reference de tension
analogReference(INTERNAL);  // 1.1V interne
analogReference(EXTERNAL);  // AREF externe
analogReference(DEFAULT);   // VCC (5V ou 3.3V)

// Moyennage pour reduire le bruit
int analogReadAverage(int pin, int samples) {
    long sum = 0;
    for (int i = 0; i < samples; i++) {
        sum += analogRead(pin);
    }
    return sum / samples;
}

12.2 ADC sur STM32 (HAL)

// ADC STM32 - 12 bits (0-4095), Vref = 3.3V

ADC_HandleTypeDef hadc1;
uint32_t adcValue;

// Lecture bloquante (polling)
uint32_t ADC_Read(void) {
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1, 100);
    return HAL_ADC_GetValue(&hadc1);
}

// Conversion en tension
float ADC_ToVoltage(uint32_t value) {
    return value * 3.3 / 4095.0;
}

// Lecture par interruption
void ADC_StartIT(void) {
    HAL_ADC_Start_IT(&hadc1);
}

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
    if (hadc == &hadc1) {
        adcValue = HAL_ADC_GetValue(&hadc1);
        // Traiter la valeur
    }
}

// Lecture par DMA (haute performance)
uint32_t adcBuffer[100];

void ADC_StartDMA(void) {
    HAL_ADC_Start_DMA(&hadc1, adcBuffer, 100);
}

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
    // Buffer complet, traiter adcBuffer[0..99]
}

12.3 DAC sur STM32

// DAC STM32 - 12 bits (0-4095) → 0-3.3V

DAC_HandleTypeDef hdac;

// Sortie simple
void DAC_SetValue(uint32_t value) {
    HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, value);
}

// Conversion tension → code
uint32_t DAC_VoltageToCode(float voltage) {
    return (uint32_t)(voltage * 4095.0 / 3.3);
}

// Exemple : sortir 1.65V (milieu de l'echelle)
HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
DAC_SetValue(2048);  // 2048/4095 × 3.3V = 1.65V

// Generation de signal sinusoidal
const uint16_t sineTable[100] = { /* valeurs precalculees */ };
volatile uint8_t index = 0;

// Dans le callback du timer
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
    HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, sineTable[index]);
    index = (index + 1) % 100;
}

12.4 Tableau Recapitulatif des CAN

TypeResolutionVitesseComplexiteApplication
Flash6-8 bits> 1 GSPS2n-1 comparateursOscilloscopes, video
SAR8-18 bits10 kSPS - 5 MSPSMoyenneMCU, acquisition generale
Simple rampe8-12 bits~1 kSPSFaiblePedagogique
Double rampe12-24 bits2-50 SPSMoyenneMultimetres
Sigma-Delta16-32 bits10-1000 SPSEleveeAudio, precision
Pipeline10-16 bits10-250 MSPSEleveeCommunications, imagerie
📝
A retenir pour l'examen
  • Quantum : q = Vref / 2n
  • Flash : Le plus rapide, mais 2n-1 comparateurs
  • SAR : Le plus utilise dans les MCU (n cycles)
  • Double rampe : Le plus precis, rejection bruit secteur
  • R-2R : CNA avec seulement 2 valeurs de resistances

Cours Conversion Analogique-Numerique - Referentiel S02

12 Chapitres | CNA (DAC) - CAN (ADC) - Applications STM32