0% ont trouvé ce document utile (0 vote)
9 vues9 pages

TP4 Cpa

Ce TP vise à implémenter la commande GPC sur la carte STM32H743VIT6 pour contrôler la vitesse d'un moteur à courant continu en temps réel, avec un échantillonnage de 10 ms. Les étudiants apprendront à utiliser divers modules de la carte, tels que les Timers et le module QEP, ainsi qu'à configurer une communication USB pour transmettre les données à un PC. Le TP inclut des étapes détaillées pour la création de projet, la configuration matérielle et l'écriture de code en C.

Transféré par

assildehiles794
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)
9 vues9 pages

TP4 Cpa

Ce TP vise à implémenter la commande GPC sur la carte STM32H743VIT6 pour contrôler la vitesse d'un moteur à courant continu en temps réel, avec un échantillonnage de 10 ms. Les étudiants apprendront à utiliser divers modules de la carte, tels que les Timers et le module QEP, ainsi qu'à configurer une communication USB pour transmettre les données à un PC. Le TP inclut des étapes détaillées pour la création de projet, la configuration matérielle et l'écriture de code en C.

Transféré par

assildehiles794
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

U.S.T.H.B/F.G.

E 2eme année Master AS


Département d’Automatique Année universitaire 2025- 2026

Commande prédictive et adaptative


TP 4 : Implémentation de la commande GPC sur la carte de
développement STM32H743VIT6
Objectif du TP :

Le but de ce TP est d’implémenter la commande GPC (Generalized Predictive Control) sur la


carte de développement STM32H743VIT6 afin de contrôler en temps réel la vitesse de
rotation d'un moteur à courant continu (MCC), avec un temps d'échantillonnage fixé à 10 ms.

Les données seront transmises à chaque période d'échantillonnage à un PC via le bus de


communication USB. Cela permettra de tracer la vitesse et la position de rotation du MCC ainsi
que la commande calculée par la GPC, et d’évaluer les performances du contrôle obtenu.

Pour atteindre cet objectif, les quatre modules de la carte de développement seront utilisés :
QEP, Timers, PWM, et USB. Les fonctions de la bibliothèque HAL seront exploitées pour
faciliter l’implémentation.

A l'issue de ce TP, l'étudiant sera capable de :

• Utiliser la carte de développement basée sur le processeur STM32H743VIT6 pour


programmer des applications de commande en temps réel.
• Exploiter les « Timers » de la carte utilisée afin de déterminer précisément le temps et
de générer différents signaux PWM et leurs compléments.
• Utiliser le module « QEP » de la STM32H743VIT6 afin de compter les impulsions d'un
signal et de traiter les signaux d'un codeur incrémental pour déterminer l'angle et la
vitesse de rotation.

Préparation :
La première étape de ce TP consiste à créer un compte sur le site officiel de
STMicroelectronics: https://www.st.com/. Une fois le compte créé et confirmé, vous devez
installer le logiciel STM32CubeIDE, que vous pouvez télécharger directement depuis le site
officiel. Si nécessaire, vous pouvez également utiliser le lien suivant :
https://drive.google.com/file/d/18OHT1ha21pP-4YhXpwW_ZMeZpS57LB8W/view?usp=sharing

Après avoir installé STM32CubeIDE, ouvrez-le, puis cliquez sur la rubrique "MyST"
(située dans la même barre que "Fichier" ou "File"). Connectez-vous dans la rubrique "MyST"
en utilisant le compte créé sur le site officiel.

Enfin, suivez les étapes détaillées dans la partie suivante du TP et acceptez toujours les
mises à jour lorsque le logiciel vous les propose (en cliquant sur "Oui").

1
U.S.T.H.B/F.G.E 2eme année Master AS
Département d’Automatique Année universitaire 2025- 2026

Pour programmer l'application demandée, nous allons utiliser le langage « C » pour


écrire le programme de la STM32H743VIT6 et l'interface graphique de l'IDE « STM32CUBEIDE
» pour configurer les modules utilisés. Pour ce faire, suivez les étapes suivantes :
Etape 1 : Créez un projet comme suit :
1) Double-cliquez sur:

2) Cliquez sur : « File -> New -> STM32 Project »

3) Tapez « STM32H743VIT6 » dans la rubrique « Commercial Part Number»,


sélectionnez le STM32H743VIT6, puis cliquez sur « Next».

4) Donnez un nom au projet et cliquez sur « Finish »

2
U.S.T.H.B/F.G.E 2eme année Master AS
Département d’Automatique Année universitaire 2025- 2026

5) Si des fenêtres s'ouvrent, cliquez sur "Yes".


Etape 2 : Configuration des horloges :

• Après avoir créé un nouveau projet, on procède directement à la configuration


de l'horloge. Donc, cliquez sur « Clock configuration » et apportez les
modifications suivantes :

Et

Etape 3 : Dans cette étape, on génère un signal PWM et son complément, la fréquence
choisie est de 20 kHz.

1) Cliquez sur « Pinout & Configuration -> Timers -> TIM1 » :

3
U.S.T.H.B/F.G.E 2eme année Master AS
Département d’Automatique Année universitaire 2025- 2026

2) Configurez le « Timer 1 » comme suit :

3) Cliquez sur : « Build Debug » :

Vous devriez voir dans la console 0 erreur et 0 warning.

Travail de laboratoire :
Après avoir terminé les étapes décrites dans la section Préparation et vérifié que votre
projet ne contient aucune erreur, procédez aux étapes suivantes :
Etape 3+ :
4) Ouvrez le fichier « Main.c » en cliquant sur : « le Projet -> Core -> Src -> main.c » :

4
U.S.T.H.B/F.G.E 2eme année Master AS
Département d’Automatique Année universitaire 2025- 2026

5) Dans le fichier « Main.c » tapez le code suivant :


Dans la section « USER CODE BEGIN PV » :

uint16_t RC=5000;
float u1=0;
Dans la section « USER CODE BEGIN 2 » :

htim1.Instance->CCR1=RC;
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
Dans la section « USER CODE BEGIN 3 » :
RC=(u1+12)/24*10000;
htim1.Instance->CCR1=RC;

Etape 4 : Dans cette étape, nous allons configurer le temps d'échantillonnage (Te=10
ms) comme suit :
1) Ouvrez la configuration matérielle en cliquant sur « le projet ->
nom_du_projet.ioc » :

5
U.S.T.H.B/F.G.E 2eme année Master AS
Département d’Automatique Année universitaire 2025- 2026

2) Ouvrez Timer2 « Pinout & Configuration -> Timers -> TIM2 » et configurez-le
comme suit :

3) Ouvrez le fichier « Main.c » en cliquant sur : « le Projet -> Core -> Src -> main.c » et
tapez le code suivant :

Dans la section « USER CODE BEGIN 2 » :


HAL_TIM_Base_Start(&htim2);
Dans la section « USER CODE BEGIN 3 » :
while(1){
if(htim2.Instance->CNT>10000){
htim2.Instance->CNT=0;
break;
}
} 6
U.S.T.H.B/F.G.E 2eme année Master AS
Département d’Automatique Année universitaire 2025- 2026

Etape 5 : Afin de mesurer la vitesse et la position du moteur on exploite le module QEP


comme suit :
1) Accédez à la configuration matérielle en cliquant sur « Projet -> nom_du_projet.ioc
», puis allez dans Timer3 « Pinout & Configuration -> Timers -> TIM3 » et
configurez-le :

2) Ouvrez le fichier « Main.c » en cliquant sur : « le Projet -> Core -> Src -> main.c » et
tapez le code suivant :
Dans la section « USER CODE BEGIN PV » :

int16_t encoder_count=0;
float Position0=0,Position1=0,Speed0=0;
Dans la section « USER CODE BEGIN 2 » :

HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_ALL);

7
U.S.T.H.B/F.G.E 2eme année Master AS
Département d’Automatique Année universitaire 2025- 2026

Dans la section « USER CODE BEGIN WHILE » :

encoder_count=htim3.Instance->CNT;
htim3.Instance->CNT=0;
Position1=Position0;
Position0=Position1+(float)encoder_count/4/512;
Speed0=(Position0-Position1)*100*60;

Etape 6 : Pour envoyer les données à un PC, configurez une communication « USB »
comme suit :

1) Accédez à la configuration matérielle en cliquant sur « Projet -> nom_du_projet.ioc


», puis allez dans USB_OTG_FS « Pinout & Configuration -> Connectivity ->
USB_OTG_FS » et configurez-le :

2) Ouvrez « USB_DEVICE » en cliquant sur « Middleware and software packs ->


USB_DEVICE » dans la configuration matérielle et suivez :

3) cliquez sur « Clock configuration » et apportez les modifications suivantes :

4) Ouvrez le fichier « Main.c » en cliquant sur : « le Projet -> Core -> Src -> main.c » et
tapez le code suivant :
Dans la section « USER CODE BEGIN Includes » :
#include "usbd_cdc_if.h"
#include "math.h" 8
U.S.T.H.B/F.G.E 2eme année Master AS
Département d’Automatique Année universitaire 2025- 2026

Dans la section « USER CODE BEGIN PD » :


void print_a_float(float value,char str[],uint8_t longueur_decimal)
{
static int32_t entier,decimal;
if (value>=0){
entier=(int32_t)floor(value);
decimal=(float)(value-entier)*pow(10,longueur_decimal);
sprintf(str, "%ld.%ld", entier, decimal);
}
else{
value=-1.0f*value;
entier=(int)floor(value);
decimal=(float)(value-entier)*pow(10,longueur_decimal);
sprintf(str, "-%ld.%ld", entier, decimal);
}
}

Dans la section « USER CODE BEGIN 1 » :


char str_Speed[20];
char str_Position[20];
char str_U[20];
char message[100];
Dans la section « USER CODE BEGIN 3 » :
print_a_float(Speed0,str_Speed,3);
print_a_float(Position0,str_Position,3);
print_a_float(u1,str_U,4);
sprintf(message,"Speed=%s, position=%s, cmd=%s \r\n",
str_Speed,str_Position,str_U);
CDC_Transmit_FS((uint8_t *) message, strlen(message));

Etape 7 : Injectez le programme dans la carte de développement en utilisant l'outil «


Debug » dans l'IDE. Ensuite, dans la fenêtre « Live Expressions », ajoutez la commande « u1 »
et modifiez sa valeur.
Etape 8 : Ouvrir l'application « RealTerm » et récupérer une base de données.

Vous aimerez peut-être aussi