Ministère de l’Enseignement Supérieur et de la Recherche
Scientifique
Université de Carthage
Institut Supérieur des Technologies de l’Information et de la Communication
Classe : Examen TP Nombre de pages : 3
M1_Infotronique
Matière : Informatique embarquée Date : 07/12/2023 Durée : 1H
Nom: Enseignante: Rais Ghofran
Prénom:
Gestion température ambiante
Présentation
On souhaite afficher la température ambiante, sur un afficheur LCD, en utilisant un capteur
analogique «LM35 » et un convertisseur analogique numérique du microcontrôleur STM32F4.
Le capteur LM35 fournit à sa sortie une tension proportionnelle à la température
(10mV/°C), soit T (°C)= (V (mV))/10
Le microcontrôleur STM32F4 admet trois convertisseur analogique/numérique de 12- bit
permettant de convertir un signal analogique entre 0 - 3.3V en une valeur numérique.
En appliquant la règle de 3 on obtient :
T (°C) = (V_num*330)/4096
Le but de cette application est de développer une application sur Coocox CoIDE qui assure
l’acquisition une tension proportionnelle à la température à partir un capteur LM35, la conversion
de cette valeur à travers le convertisseur analogique numérique du microcontrôleur ADC2 et la
visualisation du résultat sur un afficheur LCD.
Le signal analogique sorti de l’LM35 sera branché sur l’entrée analogique AN6 (PA6) du
microcontrôleur.
1) Créer un nouveau projet avec un model Chip et choisir STM32F407VG.
2) Ajouter le Driver « ADC » dans votre projet.
3) Inclure le Driver « lcd » dans votre projet.
4) Afin de configurer le convertisseur analogique numérique ADC, créer les différentes fonctions
suivantes dans le fichier « adc.c ».
a. Créer une fonction «RCC_config » pour la configuration de l’horloge et le bus du multiplexage.
void RCC_Config (void)
{
RCC_AHBxPeriphClockCmd(RCC_AHBxPeriph_GPIOx, ENABLE);
RCC_APBxPeriphClockCmd(RCC_APBxPeriph_ADCx, ENABLE);
}
b. Créer une fonction « GPIO_config » pour la configuration des entrées/sorties.
void GPIO_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_x;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_x;
GPIO_Init(GPIOx, &GPIO_InitStructure);
}
c. Créer une fonction « ADC_config » pour la configuration de l’ADC2.
void ADC_config(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Resolution = ADC_Resolution_xb;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADCx, &ADC_InitStructure);
ADC_RegularChannelConfig(ADCx, ADC_Channel_x, 1, ADC_SampleTime_xCycles);
ADC_Cmd(ADCx, ENABLE);
}
5) Dans le programme principal « main.c », créer les fonctions suivantes.
a. Créer une fonction «Get_ADCValue» qui retourne la valeur de conversion.
int Get_ADCValue(void)
{
ADC_SoftwareStartConv(ADCx); //Démarrer la conversion
while(ADC_GetFlagStatus(ADCx, ADC_FLAG_EOC)==RESET);//Procéder la conversion
return ADC_GetConversionValue(ADCx);//retourner le résultat de la conversion
}
b. Créer une fonction «mesure_voltage» qui retourne la valeur de conversion.
void mesure_voltage(void)
{
float V_num;
char msg[100]
V_num = Get_ADCValue();
Temp = (V_num /4096)*330;
sprintf(msg, "Temperature=%1.3fV", Temp);
LCD_Goto(2, 1);
LCD_Puts(msg);
DelayMs(100);
}
6) Ajouter la configuration nécessaire de l’affichage LCD et compléter votre programme.
LCD_InitTypeDef LCD_InitStruct;
LCD_InitStruct.CharacterFont = LCD_CharacterFont_5xXDots;
LCD_InitStruct.DataLength = LCD_DataLength_XBit;
LCD_InitStruct.LineNumber = LCD_LineNumber_XLines;
LCD_Init(&LCD_InitStruct);
7) Compiler votre programme puis tester le sous ISIS suivant le schéma ci-dessous.