Vous êtes sur la page 1sur 38

Chapitre 7

ANALOG-TO-DIGITAL CONVERTER (ADC)

Principe de fonctionnement dun priphrique ADC

Description, vocabulaire
Un ADC a pour rle de fournir un nombre entier

l'image d'une tension.


Une tension possde par dfinition une infinit de valeurs possibles (grandeur analogique) le nombre entier fourni, est forcment limit en quantit de valeurs.

Exemple ADC 3 bits:

Description, vocabulaire
Le quantum (ou rsolution) d'un ADC est l'incrment

de tension q, qui fait voluer le nombre entier d'une valeur la suivante. + = 2

O n est le nombre de bits de lADC

L'tendue de mesure est la plage d'entre de l'ADC, not

V sur la caractristique. V=+ Exemple :


ADC 1024 points ADC 10 bits ADC dont l'tendue de mesure est 5V et le quantum vaut 4,883mV

Structure gnrale d'un priphrique ADC

Le chemin en rouge reprsente le flow d'information,

analogique au dpart, numris la fin.

Reprsentations des tensions et dures importantes dans la conversion A/N

chantillonneur-Bloqueur

Temps d'acquisition : tacq Temps de conversion: tconv

Reprsentations des tensions et dures importantes dans la conversion A/N


Temps d'acquisition, tacq : c'est la dure pendant laquelle

l'chantillonneur est ferm.

La tension e(t) volue de manire exponentielle cause du condensateur et de la rsistance quivalente du circuit. Il est donc ncessaire, suivant la valeur de cette rsistance, de tenir l'chantillonneur ferm un certain temps, tacq.

Temps

de conversion, tconv : Ds lors que l'chantillonneur est ouvert, la tension e(t) reste constante, et la conversion peut commencer.

Elle dure un temps li l'horloge d'entre de l'ADC et la technologie de l'ADC.

Ces deux grandeurs temporelles, tacq et tconv, sont

habituellement paramtrables configuration de l'ADC.

via

un

registre

de

Suite

Temps de conversion total : Ce terme, traduit

simplement le temps ncessaire une conversion totale, depuis la demande de conversion, jusqu' l'criture du rsultat dans le registre associ.
Priode d'chantillonnage, Te : C'est l'intervalle de

temps entre deux prises d'chantillons successifs.

Description des fonctionnalits de lADC

Fonctionnalits ADC (1/3)


Frquence de conversion de lADC est de 1 MHz Rsolution configurable 6, 8, 10 ou 12-bit Plage de conversion VREF : 0 3.6 V telque : VREF- VIN VREF+ (VREF+ and VREF- valables uniquement
dans les packages LQFP100 )

Alimentation de fonctionnement : 2.4V 3.6 V 18 canaux multiplexs:


16 voies externes

2 voies internes: connectes au capteur de temprature intgr dans le STM32F4 et une rfrence interne (VREFINT = 1.2V)

Fonctionnalits ADC(2/3)
2 groupes de conversion :

Conversion rgulire : jusqu 16 voies


Conversion injecte : jusqu 4 voies 2 modes de conversion : Single : une seule conversion est effectue Continue : Lensemble des voies configures de lADC sont converties sans arrt. Squenceur : Permet de dfinir lordre de conversion des diffrentes voies. Mode discontinu : Un sous ensemble des voies configures n 8 est converti suite chaque ordre de conversion.

Fonctionnalits ADC(3/3)
Alignement droite et gauche des donnes converties
Un Watchdog analogique selon deux seuils high et low Gnration dinterruption :
La fin de la conversion La fin dune conversion injecte Activation du Watchdog analogique

Activation du contrleur DMA (seulement pour ADC1)

Diagramme block de lADC du STM32F4


VREF+ VREFVDDA VSSA

ADCCLK

ADC Prescalers: Div2, Div4, Div6 and Div8

PCLK2

ADC_IN0 ADC_IN1

ADC GPIO Ports


ANALOG MUX
Up to 4

DMA Request
Injected data registers (4x12bits) Regular data register (12bits)
End of conversion End of injected conversion

Address/data bus

. . .
ADC_IN15

Injected Channels
Up to 16

Regular Channels

Temp Sensor VREFINT

Analog Watchdog
TIM1_TRGO TIM1_CC4 TIM1_TRGO TIM2_CC1 TIM3_CC4 TIM4_TRGO Ext_IT_15 JEXTSEL[2:0] bits Start Trigger (injected group) JEXTRIG bit

High Threshold register (12bits)

Analog watchdog event

Low Threshold register (12bits)

AWD

EOC

JEOC

Flags

AWDIE
TIM1_CC1 TIM1_CC2 TIM1_CC3 TIM2_CC2 TIM3_TRGO TIM4_CC4 Ext_IT_11 EXTSEL[2:0] bits EXTRIG bit Start Trigger (regular group)

EOCIE

JEOCIE

Interrupt enable bits

ADC interrupt to NVIC

Voies rgulires de lADC (Regular channel)


Nombre de voies programmable allant jusqu 16 Temps dchantillonnage configurable

Squence de conversion configurable


Lancement de la conversion par:

Programmation (Mise 1 du START bit : ADON du ADC_CR2) Un trigger externe gnr par :

Timer1 CC1 Timer1 CC2 Timer1 CC3 Timer2 CC2 Timer3 TRGO Timer4 CC4 EXTI Line11

NB: Ltude des voies injectes de lADC (Injected channel) ne fait pas partie de ce cours

Priode dchantillonnage de lentre analogique


ADCCLK, jusqu 14MHz, prise du PCLK2 travers un pr-diviseur

(Div2, Div4, Div6 et Div8)


Trois bits configurables, permettant de dfinir la priode

dchantillonnage pour chaque entre.


ADC
1.5 cycles 7.5 cycles

1.5 cycles 7.5 cycles 13.5 cycles 28.5 cycles 41.5 cycles 55.5 cycles 71.5 cycles 239.5 cycles
PCLK2
ADC Prescalers: 2, 4, 6 and 8

Sample Time Selection

13.5 cycles

ADCCLK

28.5 cycles

41.5 cycles
55.5 cycles 71.5 cycles 239.5 cycles

SMPx[2:0]

Squenceur
Squenceur : Permet de dfinir Ordre de conversion des entres La priode dchantillonnage de chaque entre Possibilit de sur-chantillonnage dune ou plusieurs entres
Exemple: - Conversion des voies: 1, 2, 8, 4, 7, 3 et 11

- Diffrentes priodes dchantillonnages


- Sur-chantillonnage de la voie 7.
Channel1 Channel2 Channel8 Channel4 Channel7 Channel7 Channel7 Channel3 Channel11

1.5 cycles

13.5 cycles

7.5 cycles

7.5 cycles

71.5 cycles

28.5 cycles

1.5 cycles

Modes de conversions de lADC (1/2)

4 Modes sont possibles:


Start Start CHx CHx Stop
. . .

Start

Start
CHx

CHx
Single channel continuous conversion mode

Single channel single conversion mode

. . .

CHn

CHn

Stop

Multi-channels (Scan) single conversion mode

Multi-channels (Scan) continuous conversion mode

Modes de conversions de lADC (2/2)


Mode single conversion : l'utilisateur lance une

conversion et rcupre le rsultat dans le registre associ, soit en scrutant le drapeau EOC, soit en attendant l'entre en interruption. Mode auto conversion : l'utilisateur lance une conversion, et ds que l'ADC finit sa conversion, il en lance une autre, ventuellement sur un autre canal, et ce de manire cyclique.

Les rsultats sont donc lire rgulirement, sinon ils sont perdus. Les rsultats peuvent tre stocks dans une table de registres internes au priphrique, ou directement en utilisant le contrleur DMA (Direct Memory Access).

Watchdogs Analogique de lADC


Cest un Watchdog analogique 12-bits programmable selon

deux seuils low threshold et high threshold.


Cette fonctionnalit peut tre active pour une ou plusieurs entres. Gnration dinterruption suite la dtection du seuil minimal ou maximal.
ADC_IN0 ADC_IN1

. . .
ADC_IN15 Temp Sensor VREFINT

Analog Watchdog

AWD

Low Threshold High Threshold

Status Register

Les registres de lADC

ADC status register (ADC_SR)

Bits 31:5 Reserved, must be cleared Bit 4 : STRT: Regular channel Start flag
This

bit is set by hardware when regular channel conversion starts. It is cleared by software. 0: No regular channel conversion started 1: Regular channel conversion has started

Bit 1: EOC: End of conversion


This

bit is set by hardware at the end of a group channel conversion (regular or injected). It is cleared by software or by reading the ADC_DR. 0: Conversion is not complete 1: Conversion complete

Bit 0: AWD: Analog watchdog flag


This

bit is set by hardware when the converted voltage crosses the values programmed in the ADC_LTR and ADC_HTR registers. It is cleared by software. 0: No Analog watchdog event occurred 1: Analog watchdog event occurred

20

ADC control register 1 (ADC_CR1)

Bits 31:24 Reserved, must be kept cleared. Bit 23 AWDEN: Analog watchdog enable on regular channels Bits 15:13 DISCNUM[2:0]: Discontinuous mode channel count Bit 11 DISCEN: Discontinuous mode on regular channels Bit 9 AWDSGL: Enable the watchdog on a single channel in scan mode

Bit 8 SCAN: Scan mode


Bit 6 AWDIE: Analog watchdog interrupt enable Bit 5 EOCIE: Interrupt enable for EOC Bits 4:0 AWDCH[4:0]: Analog watchdog channel select bits
21

ADC control register 2 (ADC_CR2)

Bits 31:24 Reserved, must be kept cleared. Bit 23 TSVREFE: Temperature sensor and VREFINT enable

Bit 22 SWSTART: Start conversion of regular channels


Bit 20 EXTTRIG: External trigger conversion mode for regular channels Bits 19:17 EXTSEL[2:0]: External event select for regular group Bit 16 Reserved, must be kept cleared. Bit 11 ALIGN: Data alignment Bit 8 DMA: Direct memory access mode Bits 7:4 Reserved, must be kept cleared. Bit 1 CONT: Continuous conversion Bit 0 ADON: A/D converter ON / OFF

22

ADC sample time register 1 et 2 (ADC_SMPR1 et ADC_SMPR2 )


ADC_SMPR1

Bits 23:0 SMPx[2:0]: Channel x Sample time selection

ADC_SMPR2

Bits 29:0 SMPx[2:0]: Channel x Sample time selection


23

ADC watchdog high threshold register (ADC_HTR)


ADC_HTR High threshold register

Bits 11:0 HT[11:0]: Analog watchdog high threshold

These bits are written by software to define the high threshold for the analog watchdog.

ADC_HTR High threshold register

Bits 11:0 LT[11:0]: Analog watchdog low threshold

These bits are written by software to define the low threshold for the analog watchdog.

24

ADC regular sequence register (ADC_SQR1, ADC_SQR2, ADC_SQR3


ADC_SQR1

ADC_SQR2

ADC_SQR3

Bits 23:20 L[3:0]: Regular channel sequence length These bits are written by software to define the total number of conversions in the regular channel conversion sequence. SQx[4:0]: xth conversion in regular sequence These bits are written by software with the channel number (0..17) assigned as the xth in the conversion sequence.

25

ADC regular data register (ADC_DR)

Bits 31:16 ADC2DATA[15:0]: ADC2 data


In ADC1: In dual mode, these bits contain the regular data of ADC2. In ADC2 and ADC3: these bits are not used. These bits are read only. They contain the conversion result from the regular channels. The data is left or right-aligned

Bits 15:0 DATA[15:0]: Regular data

26

Les APIs de lADC (MicroC)


ADCX_INIT ADCX_INIT_ADVANCED ADC_SET_INPUT_CHANNEL ADCX_GET_SAMPLE

ADCX_READ

ADCx_Init
Prototype void ADCx_Init();

Description

This routines configures ADC module. The internal ADC module is set to: single channel conversion 12-bit resolution for ST devices. unsigned integer data format VRef+ : AVdd, VRef- : AVss

Example

ADC1_Init(); // Initialize ADC module with default settings

ADCx_Init_Advanced
Prototype void ADCx_Init_Advanced(unsigned short _external_reference, unsigned short _adc_resolution);

Description Parameters

This routine configures the internal ADC module to work with user defined settings.

Example

ADC1_Init_Advanced(_ADC_INTERNAL_REF); // set internal reference used

ADC_Set_Input_Channel
Prototype Description Parameters void ADC_Set_Input_Channel(unsigned input_mask); The function sets appropriate ADC channel as an analog input. Input_mask : represents the channel which will be set as an analog input: Can be : _ADC_CHANNEL_x, where x :[0..15] Or _ADC_CHANNEL_ALL

Example

ADC_Set_Input_Channel(_ADC_CHANNEL_0 | _ADC_CHANNEL_1);

ADCx_Get_Sample
Prototype Description

unsigned ADCx_Get_Sample(unsigned channel); The function enables ADC module and reads the specified analog channel input.
channel: represents the channel which will be set as an analog input: Can be : _ADC_CHANNEL_x, where x :[0..15] Or _ADC_CHANNEL_ALL 10-bit unsigned value from the specified channel. unsigned adc_value; ... ADC_Set_Input_Channel(_ADC_CHANNEL_10); // Set ADC channel 10 as an analog input ADC1_Init(); // Initialize ADC module adc_value = ADC1_Get_Sample(10); // read analog value from ADC module Channel 10

Parameters

Returns Example

ADCx_Read
Prototype Description

unsigned ADCx_Read(unsigned channel, unsigned short _external_reference); The function sets appropriate ADC channel as an analog input, enables ADC module, initializes ADC module and reads the specified analog channel input.
channel: represents the channel which will be set as an analog input: Can be : _ADC_CHANNEL_x, where x :[0..15] Or _ADC_CHANNEL_ALL

Parameters

Returns Example

10-bit unsigned value from the specified channel. unsigned adc_value; adc_value = ADC1_Read(10); // read analog value from ADC1 module channel 10

Exemple 10
Relier lentre PA3 une tension analogique, selon la valeur lue une des diodes 3,4,5 ou 6 est allume

Spcifications
1) plateforme: STM32 F4 discovery 2) CPU: STM32F407VG 8Mhz 3) entres: PA3 entre analogique; mappe sur channel3 ( _ADC_CHANNEL_3) 4) sorties: PD12, PD13, PD14 et PD15 - PD12 vers LD4 (LED Verte) - PD13 vers LD3 (LED Orange) - PD14 vers LD5 (LED Rouge) - PD15 vers LD6 (LED Bleue)

Gnration de tension analogique


Dans le but de gnrer une tension analogique variable

entre 0 et 5v, raliser le montage suivant:

Masse 5V

Tension Analogique variable

Code
Partie 1 :Configuration

Code
Partie 2 :

Lecture de la valeur convertie Commande des sorties selon la valeur convertie