0% ont trouvé ce document utile (0 vote)
50 vues15 pages

TP3 STM32

Ce document présente un travail pratique sur la génération de signaux PWM et la conversion analogique-numérique avec des microcontrôleurs STM32. Il décrit la configuration des timers pour générer des signaux PWM et l'utilisation de convertisseurs analogiques-numériques pour mesurer des tensions et des températures. Le TP inclut des instructions de programmation et des simulations pour illustrer le fonctionnement des systèmes étudiés.

Transféré par

Nourane Bellazreg
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
50 vues15 pages

TP3 STM32

Ce document présente un travail pratique sur la génération de signaux PWM et la conversion analogique-numérique avec des microcontrôleurs STM32. Il décrit la configuration des timers pour générer des signaux PWM et l'utilisation de convertisseurs analogiques-numériques pour mesurer des tensions et des températures. Le TP inclut des instructions de programmation et des simulations pour illustrer le fonctionnement des systèmes étudiés.

Transféré par

Nourane Bellazreg
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

République Tunisienne

Ministère de l’Enseignement Supérieur et de la Recherche Scientifique


Université de Monastir
École Nationale d’Ingénieurs de Monastir

TP3: Génération des signaux


PWM/Conversion analogique numérique

ELECT 2 GR 3

Elaboré par :
MAHFOUDH Yosra
ZAAG Jasser

2022-2023
I. Introduction
Contexte et objectifs du TP
La génération de signaux PWM (Pulse Width Modulation) et la conversion analogique-
numérique (CAN) sont deux fonctionnalités importantes des microcontrôleurs tels que le
STM32. Voici un aperçu de ces deux sujets :

Génération des signaux PWM : Le STM32 dispose de plusieurs timers et canaux de


capture qui peuvent être utilisés pour générer des signaux PWM. Les signaux PWM sont
généralement utilisés pour contrôler la vitesse d'un moteur, la luminosité d'une LED ou le
fonctionnement d'un servo-moteur. La configuration des timers et des canaux de capture
pour la génération de signaux PWM peut être effectuée via les registres correspondants
du microcontrôleur ou à l'aide de bibliothèques logicielles telles que STM32CubeMX et
STM32CubeIDE.

Conversion analogique-numérique : La conversion analogique-numérique est une


fonctionnalité qui permet de convertir des signaux analogiques en signaux numériques
exploitables par le microcontrôleur. Cette fonctionnalité est souvent utilisée pour
mesurer des tensions, des courants ou des températures.

Dans ce TP, nous allons explorer Le processus de configuration et de génération d'un signal
PWM à partir du Timer à l'aide de STM32CubeIDE, ainsi que l'utilisation du convertisseur
analogique/numérique, est important pour contrôler un servo-moteur.

Ce processus permet de réguler la vitesse et la position du servo-moteur en ajustant la durée


d'activation du signal PWM et en mesurant la tension analogique à l'aide du convertisseur
analogique/numérique.

STM32CubeIDE offre une interface conviviale pour configurer rapidement et facilement le


signal PWM, ce qui permet un contrôle précis et fiable du servo-moteur.

II. Génération des signaux PWM :


Timer en mode PWM :

Le Timer en mode PWM est une fonctionnalité des microcontrôleurs STM32 qui permet de
générer un signal de modulation de largeur d'impulsion (PWM) avec une fréquence et un
rapport cyclique spécifiques.

Le signal PWM est un signal périodique qui consiste en une succession d'impulsions de
durées variables. Le rapport cyclique est défini comme la durée de l'impulsion par rapport à
la durée totale de la période. Ainsi, un rapport cyclique de 50% signifie que la durée de
l'impulsion est égale à la moitié de la durée totale de la période.
Le Timer en mode PWM peut être configuré à l'aide d'un logiciel comme STM32CubeIDE.
Les paramètres tels que la fréquence, la période et le rapport cyclique du signal PWM
peuvent être définis dans le code. Les signaux PWM sont largement utilisés pour contrôler
des moteurs, des LED ou d'autres périphériques qui peuvent être contrôlés par un signal
PWM.

Le Timer en mode PWM peut être utilisé pour réguler la vitesse et la direction des moteurs.
Par exemple, en ajustant le rapport cyclique du signal PWM, il est possible de contrôler la
vitesse du moteur. En utilisant une boucle de rétroaction, il est également possible de réguler
la position du moteur. Le signal PWM est également utilisé pour réguler la luminosité des
LED ou pour effectuer des opérations d'atténuation.

Figure 1 : Modes d'un signal PWM

La période d’un signal PWM est donnée par :


T_{PWM}=\left(TIMx_ARR\right)\times(TIMx_{PSC}+1)\times T_{cyc}

La durée T_{on} est :


T_{on}=(TIMx_CCRy)\times\ \times(TIMx_{PSC}+1)\times T_{cyc}
y : le numéro du channel (1,2)

Travail demandé :
1. Configuration du module TIM1 pour la génération d'un signal PWM de fréquence
5KHz et un rapport cyclique de 25% sur le channel 1 :
La fonction à utiliser pour initialiser le signal PWM est la suivante :
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);

2.3.4. Test du fonctionnement du signal sous Proteus :


Mode 1 :

Figure 2 : Mode 1 d'un signal PWM


On obtenu un rapport cyclique = 25%
Mode 2 :

Figure 3 : Mode 2 d'un signal PWM

On peut ajuster le rapport cyclique à 75% en utilisant le registre TIM1_CCR1 en utilisant


cette instruction :
TIM1 -> CCR1=1500 ;

III. Convertisseur Analogique numérique :


Les microcontrôleurs STM32 disposent de CAN 12 bits, 16 bits, 24 bits ou 32 bits en
fonction du modèle. Certains modèles peuvent également inclure plusieurs convertisseurs
CAN.

Figure 4 : CAN et CNA


Les CAN STM32 peuvent être configurés pour fonctionner en mode unique, continu,
discontinu, balayage de plusieurs canaux, ou en utilisant un trigger externe.
Ils peuvent également inclure des sources de tension interne (Vref, température, etc.) et des
options de filtrage numérique.
Les convertisseurs CAN dans les microcontrôleurs STM32 sont souvent utilisés dans les
applications de mesure de capteurs, de contrôle de moteurs, de surveillance de l'état de la
batterie, et de nombreux autres domaines.
Lorsqu'on utilise un convertisseur analogique-numérique (CAN) pour mesurer une tension
d'entrée V, il est important de choisir une tension de référence appropriée pour garantir une
mesure précise. La tension de référence (Vref) doit être supérieure à la tension d'entrée
maximale V que l'on souhaite mesurer, pour que la plage de tension d'entrée soit couverte par
la plage de la tension de référence.
Quand la tension d'entrée V est mesurée, elle est convertie en une valeur numérique par le
CAN. La valeur numérique de sortie est généralement comprise entre 0 et 2^N -1, où N est le
nombre de bits de résolution du convertisseur. Par exemple, si le convertisseur a une
résolution de 12 bits, la valeur numérique de sortie sera comprise entre 0 et 2^12 -1, soit entre
0 et 4095.
La valeur numérique de sortie est proportionnelle à la tension d'entrée V, selon la formule
suivante :
Valeur numérique de sortie = (V / Vref) x 2^N

Par conséquent, plus la tension d'entrée est proche de la tension de référence, plus la valeur
numérique de sortie sera élevée. Ainsi, pour une tension d'entrée de 3,3V et une tension de
référence de 3,3V, la valeur numérique de sortie sera de 2^N -1, soit 4095 pour une résolution
de 12 bits.

Figure 5 : Schéma fonctionnel d'un ADC du STM32F


Le convertisseur analogique-numérique (CAN) basé sur la technologie SAR (Registre à
Approximations Successives) est un type de CAN qui utilise une technique de conversion en
plusieurs étapes pour convertir une tension d'entrée en une valeur numérique. Le temps de
conversion dépend du nombre de bits de résolution du convertisseur, car chaque bit doit être
converti séparément.

Ainsi, pour une résolution de 12 bits, le temps de conversion sera de 12 cycles d'horloge au
sein du DAC. Le temps total de conversion est déterminé par la formule suivante :
Ttotal conversion = Sampling time + 12 cycles.

Le temps de sampling est le temps nécessaire pour prélever l'échantillon de tension d'entrée et
le stabiliser avant de le convertir en valeur numérique. Il dépend de la fréquence de l'horloge
de la partie analogique du CAN, qui est réglable par l'intermédiaire d'un prescaler (2, 4, 6, 8).

Figure 6 : ADC sample time register 1 (ADC_SMPR1)

Lorsqu'une conversion est terminée, il est possible de déclencher une interruption à chaque
fin de conversion en utilisant le flag EOC (End of Conversion). Cette interruption peut être
utilisée pour démarrer une autre conversion ou pour effectuer un traitement sur la valeur
numérique de sortie.
Pour tester le fonctionnement d'un convertisseur analogique-numérique, on peut utiliser les
instructions suivantes après la phase de configuration :
HAL_ADC_Start(&hadc1) : permet de démarrer la conversion.
HAL_ADC_PollForConversion(&hadc1, 100) : attend la fin de la conversion ou jusqu'à
ce que le temps d'attente soit écoulé (ici 100ms).
HAL_ADC_GetValue(&hadc1) : permet de lire la valeur numérique de sortie.
printf("value of ADC is: %d\r\n", Num) : affiche la valeur numérique de sortie sur la
console.
Travail demandé :
1. Aquisition d'une tension issue d'un potemiomètre :

Après avoir faire la configuration on exécute ce code STM32CubeIDE suivant :


/* USER CODE BEGIN 2 */

//configuration pins lcd


Lcd_PortType ports[] = {D4_GPIO_Port,D5_GPIO_Port,D6_GPIO_Port,D7_GPIO_Port };
Lcd_PinType pins[] = {D4_Pin,D5_Pin,D6_Pin,D7_Pin};
lcd=Lcd_create(ports , pins , RS_GPIO_Port , RS_Pin , E_GPIO_Port , E_Pin, LCD_4_BIT_MODE) ;
Lcd_cursor(&lcd, 0,2);
Lcd_string(&lcd, "readVal");

HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
TIM1-> CCR1=5;
/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
readVal=HAL_ADC_GetValue(&hadc1);

HAL_Delay(200);
Lcd_cursor(&lcd, 1,0);
Lcd_int(&lcd, readVal );

}
/* USER CODE END WHILE */
Simulation du code :

Figure 7 : Simulation pour une valeur minimale

Figure 8 : Simulation pour une valeur maximale


Pour obtenir et afficher la valeur analogique de la tension on exécute ce code
STM32CubeIDE suivant :
/* USER CODE BEGIN WHILE */
while (1)
{

HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
readVal=HAL_ADC_GetValue(&hadc1);

HAL_Delay(200);

voltage = (3.6 * readVal) / 4095.0; // conversion de la valeur de l'ADC en tension


HAL_Delay(200);
Lcd_cursor(&lcd, 0,2);
Lcd_string(&lcd, "volt");
Lcd_cursor(&lcd, 1,0);
Lcd_float(&lcd, voltage );
}

/* USER CODE END WHILE */

Simulation du code :

Figure 9 : Simulation du valeur analogique de la tension pour une valeur maximale


On visualise ensuite la tension maximale à l'oscilloscope :

Figure 10 : Visualisation de la tension maximale à l'oscilloscope

[Link] de la température avec le capteur LM35 :


Le capteur de température LM35 est un capteur analogique qui utilise la variation de tension
en fonction de la température pour mesurer la température ambiante. Il est constitué d'une
sonde en silicium qui génère une tension de sortie proportionnelle à la température en degrés
Celsius (°C). La tension de sortie du capteur varie de 10 mV par degré Celsius, ce qui le rend
très précis et adapté à une large gamme d'applications.

Figure 11 : Capteur LM35

Le capteur LM35 peut mesurer des températures allant de -55°C à +150°C, ce qui en fait un
capteur polyvalent pour la mesure de température. La tension de sortie du capteur peut être
directement lue et convertie en température en utilisant un convertisseur analogique-
numérique (CAN) d'un microcontrôleur, comme le STM32F4 dans cet exemple.

Figure 12 : Capteur LM35 sous ISIS


La première étape consiste à sélectionner l'ADC (IN0 et IN1) comme indiqué dans
l'illustration ci-dessous, puis à modifier le prédiviseur d'horloge 'PCLK2 divisé par 4' :

Le nombre de conversions est fixé à 2, comme illustré dans la figure ci-dessous :

Fixer le Rank 1 : channel 1 et le simpling time =480 cycle


et Rank 2 : channel0 et le simpling time =480 cycle
Enable le ADC1 global interrupt :

Puis on exécute le code suivant :


/* USER CODE BEGIN 0 */
void ADC_select_CH1 (void){
ADC_ChannelConfTypeDef sConfig = {0};
[Link] = ADC_CHANNEL_1;
[Link] = 1;
[Link] = ADC_SAMPLETIME_480CYCLES;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
}
void ADC_select_CH0(void){
ADC_ChannelConfTypeDef sConfig = {0};
[Link] = 1;
[Link] = ADC_SAMPLETIME_480CYCLES;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
}

GPIO_InitTypeDef GPIO_InitStructPrivate={0};
uint32_t previousMillis;
uint32_t currentMillis ;
Lcd_HandleTypeDef lcd;
uint32_t adc_val1,adc_val2;
float cnt;
float pas=3.6/4095;
float temp;
float voltage ;
}
/* USER CODE END 0 */
/* USER CODE BEGIN 2 */

HAL_TIM_PWM_start(&htim1,TIM_channel_1);
//configuration pins lcd
Lcd_PortType ports[] = {D4_GPIO_Port,D5_GPIO_Port,D6_GPIO_Port,D7_GPIO_Port };
Lcd_PinType pins[] = {D4_Pin,D5_Pin,D6_Pin,D7_Pin};
lcd=Lcd_create(ports , pins , RS_GPIO_Port , RS_Pin , E_GPIO_Port , E_Pin, LCD_4_BIT_MODE) ;
Lcd_cursor(&lcd, 0,2);
Lcd_string(&lcd, "volt");
//HAL_TIM_Base_Start_IT(&htim1);
//TIM1->CNT=1;

Lcd_cursor(&lcd,0,0);
Lcd_string(&lcd,"Voltage");
Lcd_cursor(&lcd,2,0);
Lcd_string(&lcd,"Temperature");

/* USER CODE END 2 */


/* USER CODE BEGIN 3 */
ADC_select_CH1();
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
adc_val1= HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
Voltage=adc_val1*pas;
Lcd_cursor(&lcd, 1,7);
Lcd_float(&lcd, Voltage );
TIM1->CCR1=adc_val1*0.4884;

ADC_select_CH0();
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
adc_val2= HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
Voltage=adc_val2*pas;
Lcd_cursor(&lcd, 2,7);
Lcd_float(&lcd, temp );

/* USER CODE END 3 */


Simulation du code :

Figure 13 : Affichage de la tension et la température par Capteur LM35 sous ISIS

IV. Conclusion:
En conclusion, ce travail pratique a abordé deux aspects importants de l'utilisation des
microcontrôleurs STM32F4 : la configuration et la génération d'un signal PWM à partir d'un
Timer, ainsi que la configuration et l'utilisation d'un convertisseur analogique/numérique
(CAN).

Vous aimerez peut-être aussi