7/22/2019 chap7_MikroC_ADC_V2
1/38
ANALOG-TO-DIGITALCONVERTER (ADC)
Chapitre 7
7/22/2019 chap7_MikroC_ADC_V2
2/38
Principe de fonctionnement dun
priphrique ADC
7/22/2019 chap7_MikroC_ADC_V2
3/38
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:
7/22/2019 chap7_MikroC_ADC_V2
4/38
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, notV 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
7/22/2019 chap7_MikroC_ADC_V2
5/38
Structure gnrale d'un priphrique ADC
Le chemin en rouge reprsente le flow d'information,analogique au dpart, numris la fin.
7/22/2019 chap7_MikroC_ADC_V2
6/38
Reprsentations des tensions et duresimportantes dans la conversion A/N
Temps d'acquisition : tacq
Temps de conversion: tconv
chantillonneur-Bloqueur
7/22/2019 chap7_MikroC_ADC_V2
7/38
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 doncncessaire, suivant la valeur de cette rsistance, de tenirl'chantillonneur ferm un certain temps, tacq.
Temps de conversion, tconv : Ds lors quel'chantillonneur est ouvert, la tension e(t) resteconstante, 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, sonthabituellement paramtrables via un registre deconfiguration de l'ADC.
Reprsentations des tensions et duresimportantes dans la conversion A/N
7/22/2019 chap7_MikroC_ADC_V2
8/38
Temps de conversion total : Ce terme, traduitsimplement le temps ncessaire une conversiontotale, 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.
Suite
7/22/2019 chap7_MikroC_ADC_V2
9/38
Description des fonctionnalitsde lADC
7/22/2019 chap7_MikroC_ADC_V2
10/38
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)
7/22/2019 chap7_MikroC_ADC_V2
11/38
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.
7/22/2019 chap7_MikroC_ADC_V2
12/38
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)
7/22/2019 chap7_MikroC_ADC_V2
13/38
Diagramme block de lADC du STM32F4
StartTrigger
(injectedgroup)
TIM1_CC1
TIM1_CC2
TIM1_CC3
TIM2_CC2
TIM3_TRGO
TIM4_CC4
TIM1_TRGO
TIM1_CC4
TIM1_TRGO
TIM2_CC1
TIM3_CC4
TIM4_TRGO
ANALOG
MUX
GPIOPorts
Temp Sensor
VREFINT
ADC
Up to4
Up to16
Injected Channels
Regular Channels
JEXTRIG bit
VREF+
VREF-
VDDA
VSSA
ADC_IN0
ADC_IN1
ADC_IN15
.
.
.
Ext_IT_15
Ext_IT_11
EXTRIG bit
Start Trigger(regular group)
JEXTSEL[2:0] bits
EXTSEL[2:0] bits
Injected data registers(4x12bits)
Address/data
bus
Regular data register
(12bits)
DMA Request
ADCCLKADC Prescalers:
Div2, Div4, Div6 and Div8
PCLK2
Analog Watchdog
High Threshold register(12bits)
Low Threshold register(12bits) AWD EOC JEOC
AWDIE EOCIE JEOCIE
Flags
Interrupt enable bits
Analog watchdogevent
End of injectedconversionEnd of conversion
ADC interrupt toNVIC
7/22/2019 chap7_MikroC_ADC_V2
14/38
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
7/22/2019 chap7_MikroC_ADC_V2
15/38
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.
1.5 cycles
7.5 cycles 13.5 cycles
28.5 cycles
41.5 cycles
55.5 cycles
71.5 cycles
239.5 cycles
ADC
ADCCLKADC Prescalers:
2, 4, 6 and 8
PCLK2
55.5 cycles
7.5 cycles
71.5 cycles
41.5 cycles
13.5 cycles
28.5 cycles
1.5 cycles
239.5 cycles
SampleTimeSele
ction
SMPx[2:0]
7/22/2019 chap7_MikroC_ADC_V2
16/38
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
13.5 cycles 28.5 cycles7.5 cycles7.5 cycles1.5 cycles 1.5 cycles71.5 cycles
7/22/2019 chap7_MikroC_ADC_V2
17/38
Modes de conversions de lADC(1/2)
4 Modes sont possibles:
CHx
Start
Stop
CHx
Start
Stop
...
CHn
CHx
Start
CHx
Start
...
CHn
Single channelsingle conversion mode
Multi-channels (Scan)single conversion
mode
Multi-channels (Scan)continuous conversion mode
Single channelcontinuous conversion
mode
7/22/2019 chap7_MikroC_ADC_V2
18/38
Modes de conversions de lADC(2/2)
Mode single conversion : l'utilisateur lance une
conversion et rcupre le rsultat dans le registreassoci, soit en scrutant le drapeau EOC, soit enattendant l'entre en interruption.
Mode auto conversion : l'utilisateur lance une
conversion, et ds que l'ADC finit sa conversion, il enlance une autre, ventuellement sur un autre canal, etce de manire cyclique. Les rsultats sont donc lire rgulirement, sinon ils sont
perdus.
Les rsultats peuvent tre stocks dans une table de registresinternes au priphrique, ou directement en utilisant lecontrleur DMA (Direct Memory Access).
7/22/2019 chap7_MikroC_ADC_V2
19/38
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.
Status Register
Analog Watchdog
Low Threshold
Temp Sensor
VREFINT
ADC_IN0
ADC_IN1
ADC_IN15
..
.AWD
High Threshold
7/22/2019 chap7_MikroC_ADC_V2
20/38
Les registres de lADC
7/22/2019 chap7_MikroC_ADC_V2
21/38
ADC status register (ADC_SR)
Bits 31:5Reserved, must be clearedBit 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 conversionThis bit is set by hardware at the end of a group channel conversion (regular or injected). It iscleared by software or by reading the ADC_DR.
0: Conversion is not complete
1: Conversion completeBit 0: AWD: Analog watchdog flag
This bit is set by hardware when the converted voltage crosses the values programmed in theADC_LTR and ADC_HTR registers. It is cleared by software.
0: No Analog watchdog event occurred
1: Analog watchdog event occurred
20
7/22/2019 chap7_MikroC_ADC_V2
22/38
ADC control register 1 (ADC_CR1)
21
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
7/22/2019 chap7_MikroC_ADC_V2
23/38
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
7/22/2019 chap7_MikroC_ADC_V2
24/38
ADC sample time register 1 et 2(ADC_SMPR1 et ADC_SMPR2 )
Bits 23:0 SMPx[2:0]: Channel x Sample time selection
23
ADC_SMPR1
Bits 29:0 SMPx[2:0]: Channel x Sample time selection
ADC_SMPR2
ADC t hd hi h th h ld i t
7/22/2019 chap7_MikroC_ADC_V2
25/38
ADC watchdog high threshold register(ADC_HTR)
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.
24
ADC_HTR High threshold register
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.
ADC l q i t
7/22/2019 chap7_MikroC_ADC_V2
26/38
ADC regular sequence register(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_SQR1
ADC_SQR2
ADC_SQR3
7/22/2019 chap7_MikroC_ADC_V2
27/38
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.
Bits 15:0 DATA[15:0]: Regular data
These bits are read only. They contain the conversion result from the regularchannels.
The data is left or right-aligned
26
7/22/2019 chap7_MikroC_ADC_V2
28/38
A D C X _ I N I T
A D C X _ I N I T _ A D V A N C E D
A D C _ S E T _ I N P U T _ C H A N N E L
A D C X _ G E T _ S A M P L E
A D C X _ R E A D
Les APIs de lADC (MicroC)
7/22/2019 chap7_MikroC_ADC_V2
29/38
ADCx_Init
Prototype void ADCx_Init();
Description This routines configures ADC module.
The internal ADC module is set to:
single channel conversion12-bit resolution for ST devices.unsigned integer data formatVRef+ : AVdd, VRef- : AVss
Example ADC1_Init(); // Initialize ADC module with default settings
7/22/2019 chap7_MikroC_ADC_V2
30/38
ADCx_Init_Advanced
Prototype voidADCx_Init_Advanced(unsigned short_external_reference, unsignedshort_adc_resolution);
Description This routine configures the internal ADC module to work with user definedsettings.
Parameters
Example ADC1_Init_Advanced(_ADC_INTERNAL_REF);// set internal reference used
7/22/2019 chap7_MikroC_ADC_V2
31/38
ADC_Set_Input_Channel
Prototype voidADC_Set_Input_Channel(unsignedinput_mask);
Description The function sets appropriate ADC channel as an analog input.
Parameters 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);
7/22/2019 chap7_MikroC_ADC_V2
32/38
ADCx_Get_Sample
Prototype unsignedADCx_Get_Sample(unsignedchannel);
Description The function enables ADC module and reads the specified analogchannel input.
Parameters 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
Returns 10-bit unsigned value from the specified channel.
Example unsigned adc_value;...ADC_Set_Input_Channel(_ADC_CHANNEL_10); // Set ADC channel 10 as an
analog inputADC1_Init(); // Initialize ADC moduleadc_value = ADC1_Get_Sample(10); // read analog value from ADC
module Channel 10
7/22/2019 chap7_MikroC_ADC_V2
33/38
ADCx_Read
Prototype unsignedADCx_Read(unsignedchannel, unsigned short
_external_reference);Description The function sets appropriate ADC channel as an analog input,
enables ADC module, initializes ADC module and reads the specifiedanalog channel input.
Parameters 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
Returns 10-bit unsigned value from the specified channel.
Example unsignedadc_value;adc_value = ADC1_Read(10);// read analog value from ADC1 module
channel 10
7/22/2019 chap7_MikroC_ADC_V2
34/38
Exemple 10Relier lentre PA3 une tension analogique,
selon la valeur lue une des diodes 3,4,5 ou 6
est allume
7/22/2019 chap7_MikroC_ADC_V2
35/38
Spcifications
1) plateforme: STM32 F4 discovery
2) CPU: STM32F407VG 8Mhz
3) entres: PA3 entre analogique; mappe surchannel3 ( _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)
7/22/2019 chap7_MikroC_ADC_V2
36/38
Gnration de tension analogique
Dans le but de gnrer une tension analogique variableentre 0 et 5v, raliser le montage suivant:
Masse
5V
Tension
Analogique
variable
7/22/2019 chap7_MikroC_ADC_V2
37/38
Code
Partie 1 :Configuration
7/22/2019 chap7_MikroC_ADC_V2
38/38
Code
Partie 2 : Lecture de la valeur convertieCommande des sorties selon la valeur convertie