Catégories
Arduino Projets Arduino

Arduino #31: Introduction au convertisseur analogique numérique (ADC) avec Arduino

Objectifs

  1. Savoir les spécifications du CAN
  2. Connaitre les registres du CAN
  3. Savoir changer la fréquence du CAN
  4. Savoir changer la tension de référence
  5. Savoir configurer les modes d’acquisitions
  6. Tout savoir sur le CAN avec des exemples pratiques!
  7. Développement d’une nouvelle bibliothèque avancée pour le convertisseur ADC

Datasheet ICI

Synthèse des spécifications (voir la page 365 du datasheet)

  • Résolution 10 bits (0-1023)
  • Erreur absolue 2.5-3 LSB
  • Temps de conversion (Running Conversion) 13-260 µs (77-3.8 kHz)
  • Fréquence (Single Conversion) 50-1000 kHz!!
  • Bande passante analogique (entrée) 38.5 kHz

Les registres du convertisseur A/N

  • Adresse Registre Page Fonction
  • (0x7C) ADMUX 281 Contrôle
  • (0x7B) ADCSRB 266 Contrôle
  • (0x7A) ADCSRA 285 Contrôle
  • (0x79) ADCH (MSB) 286 Données // 10=8+2
  • (0x78) ADCL (LSB) 286 Données

Le registre ADMUX: Réf & Canal & Structure des données

Bit 7 6 5 4 3 2 1 0
REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

ADMUX[7:6]: Configuration de la tension de référence

REFS1 REFS0 Fonction

  • 0 0 AREF, Réf externe via le pin AREF
  • 0 1 AVCC with external capacitor at AREF pin (Réf interne 5V)
  • 1 0 Internal 1.1V Voltage Reference with external capacitor at AREF pin
  • 1 1 Internal 2.56V Voltage Reference with external capacitor at AREF pin

ADMUX[5] ADLAR

  • 0 ADCL <= données LSB (bits 0-7)&
    ADCH <= données MSB (bits 8-9)& (mode normale)
  • 1 ADCL <= données LSB (bits 0-1)& (bits 7 et 8 du registres)
    ADCH <= données MSB (bits 2-9)& (mode Anormale! A éviter)

ADMUX ADLAR arduino

ADMUX[0-4] 5 bits pour la Sélection du canal (A0, A1, …)

  • 00000 => canal 0 (A0)
  • 00001 => canal 1 (A1)
  • 00010 => canal 2 (A2)
  • 00011 => canal 3 (A3)

Le registre ADCSRB: Trig & Modes

Bit 7 6 5 4 3 2 1 0
– ACME – – MUX5 ADTS2 ADTS1 ADTS0

ADCSRB[6]-ACME: Analog Comparator Multiplexer Enable (voir p.265)

0 Mode comparateur entrée (-) (AIN1) [AIN0 (+)]
1 Mode ADC (Mode normale)!!!!!!!!!!!!!!!!

ADCSRB[3]-MUX5: bits 5 pour la sélection des canaux

ADCSRB[0-2]-ADTS0-ADTS2: ADC Auto Trigger Source Selections

  • 0 0 0 Free Running mode Mode par défaut, mode continu
  • 0 0 1 Analog Comparator Trig externe, comparateur (AIN0, AIN1)
  • 0 1 0 External Interrupt 0 Trig externe, pin
  • 0 1 1 Timer/Counter0 Match A Trig interne/externe
  • 1 0 0 Timer/Counter0 Overflow Trig interne/externe
  • 1 0 1 Timer/Counter1 Match B Trig interne/externe
  • 1 1 0 Timer/Counter1 Overflow Trig interne/externe
  • 1 1 1 Timer/Counter1 Capture Event Trig interne/externe

Le registre ADCSRA: Activation & Interruption & Fréquence

7 6 5 4 3 2 1 0
ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0

ADCSRA[7]-ADEN: ADC Enable

ADCSRA[6]-ADSC: ADC Start Conversion

  • Converssion unique: Il faut positionner le bit pour chaque lecture
  • Mode continu: Positionner le bit une seule fois (25 cycles init Vs 13 cycles)

ADCSRA[5]-ADATE: ADC Auto Trigger Enable

1 Prise en compte du trig configuré dans ADCSRB[0-2]
0 Pas de trig (ADC off, valeur par défaut)

ADCSRA[4]-ADIF: ADC Interrupt Flag

Indicateur de fin de converssion (données pretes)
& géneration d’une interruption

ADCSRA[3]-ADIE: ADC Interrupt Enable

Activation de l’interruption du CAN

ADCSRA[0-2]-ADPS: ADC Prescaler Select (diviseur / fréquence)

bits Rapport de division

  • 0 0 0 1/2
  • 0 0 1 1/2
  • 0 1 0 1/4
  • 0 1 1 1/8
  • 1 0 0 1/16
  • 1 0 1 1/32
  • 1 1 0 1/64
  • 1 1 1 1/128

F_ACC=F_XTAL*Rapport de division

Prescalaire ADC Arduino

Exemple: L’horloge de l’oscillateur = à 4MHz

bits Rapport de division Fréquence

  • 0 0 0 1/2 2 MHz (> 1MHz)
  • 0 0 1 1/2 2 MHz (> 1MHz)
  • 0 1 0 1/4 1 MHz (fréquence limite)
  • 0 1 1 1/8 500 kHz
  • 1 0 0 1/16 250 kHz
  • 1 0 1 1/32 125 kHz
  • 1 1 0 1/64 62 kHz
  • 1 1 1 1/128 31 kHz

Fréquence réelle d’acquisition: Il faut 13 cycles d’horloge pour une seule acquisition! => FmaxReal=1MHz/13= 76.92 KHz
=> Bande analogique de 76.92/2 = 38.46 Khz !!

1Mhz c’est bien mais la fréquence réelle est égale à 76.92 KHz!!Le registre ADCL & ADCH (voir la page 286)

ADCL (8 bits): LSB ANN

ADCH (8 bits): MSB

 

2 réponses sur « Arduino #31: Introduction au convertisseur analogique numérique (ADC) avec Arduino »

Laisser un commentaire