Conversion Analogique-Numerique
CAN (ADC) - CNA (DAC) - Chaine d'Acquisition
S02 : Chaine d'acquisition et de restitution d'un signal analogique
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
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
| Bloc | Fonction | Exemple |
|---|---|---|
| Capteur | Convertit grandeur physique → signal electrique | Thermocouple, LDR, Microphone |
| Conditionneur | Amplifie, filtre, adapte l'impedance | AOP en amplificateur |
| Filtre anti-repliement | Limite la bande passante avant echantillonnage | Filtre passe-bas RC, Butterworth |
| Echantillonneur-Bloqueur | Maintient la tension stable pendant conversion | Circuit S&H (condensateur) |
| CAN (ADC) | Convertit tension analogique → code numerique | ADC 12 bits du STM32 |
| CNA (DAC) | Convertit code numerique → tension analogique | DAC audio, PWM filtre |
1.3 Theoreme d'Echantillonnage (Shannon)
Exemple : Audio CD
- Frequence max audible : 20 kHz
- Frequence d'echantillonnage : 44.1 kHz (> 2 × 20 kHz)
- Resolution : 16 bits
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 niveaux | Precision theorique | Usage typique |
|---|---|---|---|
| 8 bits | 256 | 0.39% | Audio basique, video |
| 10 bits | 1024 | 0.098% | Arduino UNO |
| 12 bits | 4096 | 0.024% | STM32, ESP32 |
| 16 bits | 65536 | 0.0015% | Audio CD, instrumentation |
| 24 bits | 16 777 216 | 0.000006% | Audio pro, mesure precise |
2.2 Quantum (q) - Pas de Quantification
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)
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
| Type de CAN | Temps typique | Vitesse |
|---|---|---|
| Flash | < 50 ns | Tres rapide |
| SAR (Approx. successives) | 1-10 µs | Rapide |
| Simple rampe | ~1 ms | Lent |
| Double rampe | 10-100 ms | Tres lent |
| Sigma-Delta | Variable | Tres 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
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
| Type | Principe | Avantages | Inconvenients |
|---|---|---|---|
| Resistances ponderees | Resistances R, 2R, 4R, 8R... | Simple a comprendre | Precision des resistances |
| R-2R | Seulement 2 valeurs de R | Facile a realiser | Plus de composants |
| Sources ponderees | Sources de courant | Rapide, precis | Complexe |
| PWM + filtre | Rapport cyclique variable | Simple (1 GPIO) | Lent, filtrage requis |
| Sigma-Delta | Sur-echantillonnage | Haute resolution | Lent |
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
Avec Rf = R (resistance de contre-reaction) :
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
Chapitre 5 : CNA R-2R
Architecture avec reseau en echelle R-2R
5.1 Principe du Reseau R-2R
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 │
└───────┴──────────────────┘
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
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
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
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
| Signal | Direction | Fonction |
|---|---|---|
| Vin | Entree | Tension analogique a convertir |
| Vref | Entree | Tension de reference (pleine echelle) |
| START / SOC | Entree | Demarre une conversion |
| CLK | Entree | Horloge (pour certains types) |
| EOC / DRDY | Sortie | Signale la fin de conversion |
| OE | Entree | Output Enable (active les sorties) |
| D0-Dn-1 | Sortie | Code numerique resultat |
CHRONOGRAMME DE CONVERSION
START ────┐ ┌─────────────────────────────────────
└─────┘
CLK ────┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬────
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
EOC ────────────────────────────────────┐ ┌────
└─────┘
│←────── Temps de conversion ──────→│
DATA ─────────────────────────────────────┬─────────
│ VALIDE
7.3 Classification des CAN
| Type | Vitesse | Resolution | Complexite | Usage |
|---|---|---|---|---|
| Flash (parallele) | Tres rapide | 6-8 bits | Elevee | Video, oscilloscopes |
| SAR | Rapide | 8-18 bits | Moyenne | MCU, acquisition |
| Simple rampe | Lente | 8-12 bits | Faible | Pedagogique |
| Double rampe | Tres lente | 12-20 bits | Moyenne | Multimetres |
| Sigma-Delta | Lente | 16-24 bits | Elevee | Audio, precision |
| Pipeline | Tres rapide | 10-16 bits | Elevee | Telecom, imagerie |
Chapitre 8 : CAN Flash (Parallele)
Conversion instantanee par comparateurs
8.1 Principe du CAN Flash
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
| Comparateur | Seuil | Vin > Seuil ? | Sortie |
|---|---|---|---|
| C7 | 7/8 = 0.875 | 0.6 > 0.875 ? | 0 |
| C6 | 6/8 = 0.750 | 0.6 > 0.750 ? | 0 |
| C5 | 5/8 = 0.625 | 0.6 > 0.625 ? | 0 |
| C4 | 4/8 = 0.500 | 0.6 > 0.500 ? | 1 |
| C3 | 3/8 = 0.375 | 0.6 > 0.375 ? | 1 |
| C2 | 2/8 = 0.250 | 0.6 > 0.250 ? | 1 |
| C1 | 1/8 = 0.125 | 0.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
Chapitre 9 : CAN a Rampe (Comptage)
Simple rampe et comptage d'impulsions
9.1 Principe du CAN Simple Rampe
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
- START : RAZ du compteur, demarrage de la rampe
- Rampe : Vrampe augmente lineairement (integrateur)
- Comptage : Le compteur s'incremente a chaque coup d'horloge
- Comparaison : Quand Vrampe ≥ Vin, le comparateur bascule
- STOP : Le compteur s'arrete, sa valeur = code numerique
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
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
| Etape | Code test | Vtest | Vin > Vtest ? | Action | Code final |
|---|---|---|---|---|---|
| 1 (MSB) | 1000 | 8V | 10.2 > 8 → OUI | Garder b3=1 | 1--- |
| 2 | 1100 | 12V | 10.2 > 12 → NON | Mettre b2=0 | 10-- |
| 3 | 1010 | 10V | 10.2 > 10 → OUI | Garder b1=1 | 101- |
| 4 (LSB) | 1011 | 11V | 10.2 > 11 → NON | Mettre b0=0 | 1010 |
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
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
Chapitre 11 : CAN Double Rampe (Integration)
Haute precision pour instruments de mesure
11.1 Principe de la Double Rampe
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) :
Pendant T2 (integration de -Vref) :
En egalisant :
11.3 Avantages Remarquables
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
| Type | Resolution | Vitesse | Complexite | Application |
|---|---|---|---|---|
| Flash | 6-8 bits | > 1 GSPS | 2n-1 comparateurs | Oscilloscopes, video |
| SAR | 8-18 bits | 10 kSPS - 5 MSPS | Moyenne | MCU, acquisition generale |
| Simple rampe | 8-12 bits | ~1 kSPS | Faible | Pedagogique |
| Double rampe | 12-24 bits | 2-50 SPS | Moyenne | Multimetres |
| Sigma-Delta | 16-32 bits | 10-1000 SPS | Elevee | Audio, precision |
| Pipeline | 10-16 bits | 10-250 MSPS | Elevee | Communications, imagerie |
- 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