TD1 Sedsp

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 8

Ecole Nationale d'Ingénieurs de Carthage

Date : Mars 2015


Matière: TD1 SE DSP
Classe :2ère Année Ingénieurs Mécatroniques
Enseignants : Y. Lahbib, M. Ferchichi, F. Salem, M. Haddoug, A. Foudhaili

Exercice :Programmation par adressage des registres


Nous supposons que le STM32-f4 est connecté à 9 diodes LED [D1..D9] (voir figure suivante).

PB0 D1 D2 D3
PB1
PB2
STM32F1 PB3 D4 D5 D6
PB4
PB5
PB6 D7 D8 D9
PB7
PB8

Toutes les diodes sont commandées par des tensions délivrées par le STM32 à une fréquence de montée de 2
Mhz. Nous voulons créer un jeu de lumière prenant la forme suivante :

Étape 1 Étape 2 Étape 3 Étape 4

Nous gardons la même disposition des diodes, c-à-d qu’à l’étape 1 seules les diodes allumées sont D1, D5 et
D9; à l'étape 2 seules les diodes allumées sont D2, D5 et D8; à l'étape 3 seules les diodes D7, D5 et D3.
Le passage entre les étapes 1, 2, 3 et 4 à une bonne vitesse,
donne l’allure d’une étoile qui tourne :

La programmation de l' STM32 doit être effectuée en langage C par adressage et accès directe aux registres. Les pages
annexes 5 et 6 contiennent les informations nécessaires pour la programmation de l'STM32.

1- Déterminer les adresses de tous les registres mis en jeu pour le fonctionnement du Système ?
2- Effectuer la configuration nécessaire de l'STM32 pour le fonctionnement de ce système?
3- Créer un tableau déclaré comme variable globale, ETOILE contenant l’ensemble des valeurs à appliquer au
GPIOB pour créer le jeu de lumière.
4- Écrire le reste du programme principal permettant de créer lejeu de lumières, telque le passage entre les étapes
se fait après un delay().

Problème : Machine à "remplir et boucher" des bouteilles

On veut simuler sur STM32F' le fonctionnement de la machine à "remplir et boucher" des bouteilles présentée
par la figure suivante. Cette machine est composée de trois postes: chargement-transfert, remplissage et bouchage. Le
mapping mémoire, les registres de GPIO et registres RCC seront utilisés pour l'implémentation de ce problème (voir
annexe 1) .

1
1. Poste de chargement-transfert: composé d'un capteur CP1 et de deux vérins A et B.
 Capteur CP1: capteur de présence d'une bouteille.
 Vérin A, composé de:
 2 capteurs (a+ et a-) de fin de course
 2 signaux de commande pour le déplacement avant de vérin (VA+) et le déplacement arrière (VA-).
 Vérin B, composé de:
 2 capteurs (b+ et b-) de fin de course
 2 signaux de commande pour le déplacement avant de vérin (VB+) et le déplacement arrière (VB-).
2. Poste de remplissage: composé d'un capteur CP2 et un vérin C et une électrovanne D.
 Capteur CP2: capteur de présence d'une bouteille.
 Vérin C, composé de:
 2 capteurs (c+ et c-) de fin de course
 2 signaux de commande pour le déplacement avant de vérin (VC+) et le déplacement arrière (VC-).
 Electrovanne D, composé d‘un signal de commande D et un ressort de rappel à la détection de la position d+.

3. Poste de Bouchage:Un capteur CP3, deux vérins E et G, et une électrovanne F.


 Capteur CP3: capteur de présence d'une bouteille.
 Vérin E, composé de:
 2 capteurs (e+ et e-) de fin de course
 2 signaux de commande pour le déplacement avant de vérin (VE+) et le déplacement arrière (VE-).
 Vérin G, composé de:
 2 capteurs (g+ et g-) de fin de course
 2 signaux de commande pour le déplacement avant de vérin (VG+) et le déplacement arrière (VG-).
 Electrovanne F, composée d’un signal de commande F et un ressort de rappel à la détection de la position f+.

On utilisera le brochage de la figure suivante sur le STM32 pour la simulation de cette machine. Les entrées des ports
A, B et D sont Pull-UP et leurs sorties respectives sont GP OD+PU 25 Mhz. Les entrées des ports C, E et G sont Pull-
Down et leurs sorties respectives sont GP OD+PD 100 Mhz.

2
1) Ecrire en C une fonction config_machine() permettant de définir les pines d'entrées/sorties ?
2) Ecrire en C une fonction init_machine() permettant d'initialiser les sorties à 0 ?
a+ a- b+ b- CP1 CP2 CP3

PA0 PA1 PB0 PB1 PD0 PD1 PD2

c+ PC0 PC8 VC+


c- PC1 PC9 VC-

e+ PE0 STM32F107VE PE8 VE+


e- 0
PE1 PE9 VE-

g+ PG0
PG8 VG+
g- PG1
PG9 VG-
PA8 PA9 PB8 PB9 PD8 PD9

VA+ VA- VB+ VB- D F

3) Soit l'organigramme suivant de la fonction activer_verin_B(). Donner le code C correspondant ?

voidactiver_verin_B()

VB+ = 1 et VB- = 0

b- =1

VB+ = 0 et VB- = 1

b+ =1

VB- = 0

return

4) On veut généraliser la fonction qui active les vérins, pour cela le port sera un paramètre à la fonction. Le pseudo-
code de la fonction aura la forme suivante. Compléter le code C suivant :

void activer_verin(volatile unsigned int * port){


switch(port & 0xFFFFFF00){
case <adresse de GPIOA>:
<mettre à 1 la broche 8 de GPIOA>;
<mettre à 0 la broche 9 de GPIOA>;
while(entrée PB1 == 0);
....
break;
case ......:
....
}
}

3
5) L'organigramme du programme principal est le suivant. Donner le code C correspondant ?

debut

config_machine

init_machine

activer le vérin B

CP1 = 1

activer le vérin A

activer le vérin B

CP2 = 1

D=1

activer le vérin C

D=0

activer le vérin B

CP3 = 1

activer le vérin G

F=1

activer le vérin B

F=0

Fin

4
RCC AHB1-ENR

Types de Configuration d'une Broche

5
Mapping des Registres GPIO

6
Memory MAP and GPIO Register MAP

Registres GPIO

(GPIOx_MODER) (x = A..I)

(GPIOx_OTYPER) (x = A..I)

7
(GPIOx_OSPEEDR) (x = A..I)

(GPIOx_PUPDR) (x = A..I/)

(GPIOx_IDR) (x = A..I)

(GPIOx_ODR) (x = A..I)

Vous aimerez peut-être aussi