0% ont trouvé ce document utile (0 vote)
41 vues16 pages

Mini Projet

Ce document présente deux mini-projets réalisés dans le cadre d'un Master en génie électrique, utilisant le microcontrôleur 68HC11. Le premier projet concerne le contrôle d'un moteur pas à pas, tandis que le second traite de la gestion d'un système d'aération dans un tunnel routier. Ces projets permettent d'appliquer des connaissances théoriques en programmation et en automatisation de systèmes industriels.

Transféré par

belkhoukh.mohamed02
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)
41 vues16 pages

Mini Projet

Ce document présente deux mini-projets réalisés dans le cadre d'un Master en génie électrique, utilisant le microcontrôleur 68HC11. Le premier projet concerne le contrôle d'un moteur pas à pas, tandis que le second traite de la gestion d'un système d'aération dans un tunnel routier. Ces projets permettent d'appliquer des connaissances théoriques en programmation et en automatisation de systèmes industriels.

Transféré par

belkhoukh.mohamed02
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

Mini-projets

Filière :
Master génie électrique et systèmes
intelligent industrielles (GESII)

Microcontrôleurs et DSP

Réalisé Par :

▪ BELKHOUKH Mohamed

Encadré Par :
▪ [Link]

Année Universitaire 2024 – 2025


Introduction

Ce mini-projet fait partie du module Informatique Industrielle Embarquée dans notre


formation en Master GESII. L’objectif est de mettre en pratique nos connaissances sur les
microcontrôleurs, en particulier le 68HC11, pour contrôler des systèmes industriels.

Le mini-projet est divisé en deux parties :

Dans la première partie, nous avons étudié le moteur pas à pas, un moteur utilisé pour
faire des mouvements précis, comme dans les imprimantes ou les robots. Le but est de le
contrôler avec le microcontrôleur : choisir le sens de rotation (droite ou gauche), le type de
pas (complet ou demi-pas), la fréquence et le nombre de pas. Nous avons aussi programmé
des temporisations pour contrôler la vitesse du moteur, et créé une rampe d’accélération et de
freinage.

Dans la deuxième partie, nous avons travaillé sur un système de ventilation dans un
tunnel routier. Ce système utilise plusieurs capteurs de pollution et un capteur de circulation.
Quand la pollution est élevée, des ventilateurs s’activent automatiquement. Si un
embouteillage est détecté, les ventilateurs se mettent tous en marche, et les feux de
signalisation passent au rouge. Le programme principal doit gérer toutes ces situations, selon
les capteurs, et contrôler les ventilateurs et les feux tricolores.

Ce projet nous a permis de mieux comprendre le lien entre la théorie et la pratique, et


d’apprendre à écrire des programmes en langage assembleur, à utiliser des entrées/sorties
numériques, et à contrôler un système automatisé complet.
Mini-projet 1 : Commande d’un moteur pas à pas

I. Introduction :

Dans cette première partie, nous avons appris à contrôler un moteur pas à pas avec le
microcontrôleur 68HC11.

Le moteur pas à pas tourne petit à petit, par petits mouvements appelés "pas". On peut
choisir :

• Le sens de rotation (droite ou gauche),


• Le type de pas (complet ou demi-pas),
• La vitesse (avec la fréquence),
• Le nombre de pas à faire.

Pour contrôler le moteur nous avons écrit des programmes en langage assembleur. Nous
avons aussi crée une pause de 100 millisecondes entre chaque pas, et programmé une
séquence de mouvements avec différentes vitesses et directions.

II. Le fonctionnement des moteurs pas-à-pas :

Un moteur pas à pas est un moteur électrique qui tourne par petits mouvements
appelés "pas". Contrairement aux moteurs classiques qui tournent en continu, le moteur pas
à pas se déplace étape par étape, ce qui permet un contrôle très précis de la position.
1. Principe de fonctionnement

Le moteur pas à pas est composé de deux parties :

• Le stator : la partie fixe avec des bobines


(électroaimants),
• Le rotor : la partie qui tourne, avec des
aimants.

Quand on envoie un courant électrique dans les


bobines du stator, cela crée un champ magnétique qui
attire le rotor. En activant les bobines l’une après
l’autre dans un certain ordre, le rotor tourne d’un pas
à chaque fois. La séquence des signaux permet de
choisir :

• Le sens de rotation (droite ou gauche),


• Le mode de fonctionnement :
o Pas complet : le rotor avance d’un grand angle,
o Demi-pas : il avance d’un plus petit angle pour plus de précision.

2. Types de moteurs pas à pas

Il existe plusieurs types de moteurs pas à pas :


À réluctance variable À aimant permanent Hybride

Constitution

Caractéristiques Le rotor n’est pas aimanté, Utilise des aimants simples, Mélange les deux précédents,
mais réagit au champ facile à contrôler. plus précis et plus courant.
magnétique
3. Avantages et inconvénient
- Avantages :

Très précis sans capteur de position,


Facile à contrôler avec un microcontrôleur,
Peut rester en position sans bouger.
- Inconvénients :
Peut vibrer à certaines vitesses,
Moins puissant qu’un moteur classique de même taille,
Chauffe un peu si maintenue longtemps sur place.

III. Instructions pour un pas à droite puis un à gauche :

Pour déplacer le moteur d’un pas à droite, il faut envoyer une impulsion à l’entrée CLOCK,
mettre SENS DE ROTATION à 1 et définir la PORTÉE.

Pour un pas à droite :

ldaa #%11100000 ; Demi-pas, droite, CLOCK = 1

staa PORT1

ldaa #%11000000 ; CLOCK = 0 pour déclencher le pas

staa PORT1
Pour un pas à gauche :

ldaa #%10100000 ; Demi-pas, gauche, CLOCK = 1

staa PORT1

ldaa #%10000000 ; CLOCK = 0 pour déclencher le pas

staa PORT1

IV. Sous-programme ‘DELAY’ (100 ms)

Le microcontrôleur a une fréquence de 8 MHz. Donc chaque cycle machine dure 0,5 µs. Pour
obtenir un délai de 100 ms, on doit faire une boucle assez longue.

DELAY_100MS:

LDX #4000 ; Compteur

LOOP1:

LDY #100 ; Compteur

LOOP2:

DEY ; Décrémenter Y

BNE LOOP2 ; Revenir à LOOP2 tant que Y ≠ 0

DEX ; Décrémenter X

BNE LOOP1 ; Revenir à LOOP1 tant que X ≠ 0

RTS ; Fin du sous-programme

V. Programme pour effectuer 10 pas à gauche

LDAB #10 ; Charger le compteur de pas

LOOP_LEFT:
LDAA #%00100000 ; demi-pas / gauche / horloge à 1

STAA PORTB

NOP

LDAA #%00000000 ; horloge à 0

STAA PORTB

JSR DELAY ; Appel de la pause de 100 ms

DECB

BNE LOOP_LEFT ; Répéter tant que B ≠ 0

VI. Contenu d’un tableau de mouvements + programme associé

Le tableau contient une série de commandes. Chaque


commande peut avoir :

• Mode (bit de direction et de type de pas),


• Nombre de pas à faire,
• Fréquence (ou délai entre les pas).

Il commence avec $FD et finit avec $FE pour indiquer début et


fin.

Programme simple pour lire le tableau :

tab:

fcb $FD

fcb $C0,$0A,$64 ; demi-pas droite, 10 pas, 100Hz

fcb $80,$05,$32 ; demi-pas gauche, 5 pas, 50Hz

fcb $FE
VII. Rampe d’accélération et de freinage (vers 250 Hz puis arrêt)

Pour faire une rampe :

• Commence avec une fréquence basse (grand délai),


• Réduis progressivement le délai jusqu’à 4 ms (≈250 Hz),
• Puis augmente de nouveau le délai pour simuler le freinage.

ORG $8000

PORTB EQU $1004

DELAYVAL EQU $0040

LDS #$00FF

LDX #100

LDY #100

ACCEL:

LDAA #%11100000

STAA PORTB

LDAA #%11000000

STAA PORTB

STY DELAYVAL

LDAB DELAYVAL

JSR DELAY_MS

DEY

CPY #4

BHI ACCEL

DECEL:

; Envoi d’un pas

LDAA #%11100000

STAA PORTB

LDAA #%11000000
STAA PORTB

STY DELAYVAL

LDAB DELAYVAL

JSR DELAY_MS

INY

CPY #101

BLO DECEL

SWI

DELAY_MS:

LDAA #0

DELAY_LOOP1:

LDX #4000

LOOP2:

DEX

BNE LOOP2

DECB

BNE DELAY_LOOP1

RTS
Mini-projet 2 : Commande d'un système d'aération de tunnel
I. Introduction
Ce mini-projet consiste à commander un système d’aération dans un tunnel routier.
Dans ce tunnel, 4 capteurs (I1 à I4) détectent la pollution de l’air, et 1 capteur (I5) détecte les
embouteillages.
Le système doit gérer automatiquement :
L’activation des 3 ventilateurs d’aération (M1, M2, M3) selon le niveau de pollution.
Le feu de circulation (rouge, orange, vert) selon la pollution et le trafic.
II. Analyse des problèmes et réponses aux questions
Q1.

Phase Binaire Hexadécimal Décimal


Rouge %10000000 $80 128
Orange %01000000 $40 64
Vert %00100000 $20 32
Rouge + Orange %11000000 $C0 192

Chaque phase correspond à un feu qui s’allume sur le Port 0 du microcontrôleur 68HC11.
Q2.

Le tableau de phases des feux est stocké à partir de l’adresse $0030 dans la RAM.
Chaque phase contient deux valeurs :

• 1 octet pour le feu (ex: $80 pour rouge),


• 1 octet pour la durée (ex: $0A pour 10 secondes).

Adresse | Valeur | Signification

$0030 | $80 : Feu Rouge

$0031 | $0A : 10 secondes

$0032 | $C0 : Rouge + Orange

$0033 | $02 : 2 secondes

$0034 | $20 : Vert

$0035 | $0A : 10 secondes

$0036 | $40 : Orange

$0037 | $02 : 2 secondes

$0038 | $FF : Fin du tableau


Q3.

La fin du tableau est marquée par la valeur spéciale $FF.


Le programme s’arrête de lire le tableau quand il lit cette valeur.

III. Sous-programme DELAY (temporisation)

Pour retarder les phases des feux, on utilise un sous-programme DELAY.


Le but est de faire une pause de 1 seconde à chaque appel, répétée selon un compteur.

Calcul

• Fréquence : 8 MHz
• Cycle : 0,5 µs
• 1 seconde = 2 000 000 cycles

ORG $0030

DelayTime FCB 10 ; Paramètre DelayTime = 10 secondes

ORG $F800

; === Sous-programme DELAY ===

; Fonction : Créer un délai total de DelayTime secondes

DELAY:

LDAA $0030 ; Lire le paramètre DelayTime depuis RAM

PSHA ; Sauvegarder le contenu de A

LOOP:

JSR DELAY1S ; Appeler le sous-programme de 1 seconde

DECA ; Diminuer le compteur

BNE LOOP ; Refaire tant que le compteur ≠ 0

PULA ; Restaurer A

RTS ; Retour au programme appelant

; === Sous-programme DELAY1S ===

; Fonction : Créer un délai d'environ 1 seconde

DELAY1S:

LDX #80 ; Boucle extérieure


BOUCLE_X:

LDY #4200 ; Boucle intérieure

BOUCLE_Y:

NOP ; Instruction vide (2 cycles)

NOP ; Instruction vide (2 cycles)

DEY

BNE BOUCLE_Y

DEX

BNE BOUCLE_X

RTS

IV. Sous-programme LIGHTS

ORG $F800

LIGHTS:

LDX #$0032 ; Adresse du tableau

NextPhase:

LDAA 0,X ; Lire valeur feu

CMPA #$00
BEQ EndLIGHTS ; Si $00, fin

STAA $1004 ; Afficher sur PORTB

LDAA 1,X ; Lire durée

STAA DelayTime

JSR DELAY ; Appel routine délai

INX

INX

BRA NextPhase

EndLIGHTS:

RTS

ORG $F820

DELAY:

LDAA DelayTime

LOOP_DELAY:

BEQ FIN_DELAY

JSR DELAY_1S

DECA

BRA LOOP_DELAY

FIN_DELAY:

RTS

DELAY_1S:

LDX #80

BOUCLE_X:

LDY #4200

BOUCLE_Y:

NOP
NOP

DEY

BNE BOUCLE_Y

DEX

BNE BOUCLE_X

RTS

Le sous-programme LIGHTS parcourt une table de phases de feux enregistrée en mémoire à


partir de l’adresse $0032.
Chaque phase est composée de 2 octets :

• un pour l’état du feu (par exemple feu rouge, vert, etc.),


• un pour la durée de la phase (en secondes).
• Lorsque la valeur lue est $00, cela indique la fin de la séquence.
Le délai est géré grâce à deux sous-programmes :
DELAY, qui répète un délai d’un seconde autant de fois que nécessaire,
DELAY_1S, qui crée un délai d’un seconde à l’aide de boucles .
V. Programme principal – Système tunnel
Fonctionnement attendu

• Si 1 capteur actif : M1 allumé.


• Si 2 capteurs : M1 + M2 allumés.
• Si 3 ou 4 capteurs : M1 + M2 + M3 allumés.
• Si 4 capteurs actifs : lancer le programme des feux LIGHTS.
• Si < 4 capteurs : allumer feu vert.
• Si embouteillage (I5 actif) :
- Tous les ventilateurs allumés,
- Feu rouge pendant 10 secondes,
- Si embouteillage continue : feu reste rouge.
Le programme :

ORG $0030

DelayTime: RMB 1 ; Réservation d'1 octet pour stocker la durée

ORG $F900

MAIN:
JSR LIGHTS ; Appel du sous-programme des feux

BRA MAIN ; Boucle infinie

; ----------------------------------------

ORG $F940

DELAY:

LDAA DelayTime

LOOP_DELAY:

BEQ FIN_DELAY

JSR DELAY_1S

DECA

BRA LOOP_DELAY

FIN_DELAY:

RTS

DELAY_1S:

LDX #80

BOUCLE_X:

LDY #4200

BOUCLE_Y:

NOP

NOP

DEY

BNE BOUCLE_Y

DEX

BNE BOUCLE_X

RTS
; ---------------------------------------

ORG $F980

LIGHTS:

LDX #$0032

NextPhase:

LDAA 0,X

CMPA #$00

BEQ EndLIGHTS

STAA $1004

LDAA 1,X

STAA DelayTime

JSR DELAY

INX

INX

BRA NextPhase

EndLIGHTS:

RTS
Conclusion générale

Dans ce travail, nous avons réalisé deux mini-projets pratiques utilisant le microcontrôleur
68HC11.

Le premier mini-projet portait sur la commande d’un moteur pas à pas. Nous avons
appris à contrôler le sens de rotation, le type de pas (complet ou demi-pas), et la fréquence
des impulsions. Ce projet nous a permis de mieux comprendre comment envoyer des
signaux précis à un actionneur, et comment utiliser des temporisations pour synchroniser les
mouvements.

Le deuxième mini-projet était centré sur la gestion automatique d’un système


d’aération dans un tunnel. Nous avons utilisé plusieurs capteurs pour détecter la pollution et
les embouteillages, et nous avons programmé la logique de commande pour activer les
ventilateurs et gérer les feux de circulation. Ce projet nous a aidé à appliquer les bases de la
programmation en assembleur dans une situation plus complexe, avec des conditions, des
sous-programmes, des boucles et des tableaux en mémoire.

Ces deux mini-projets nous ont permis de renforcer nos compétences en


programmation bas niveau, en logique combinatoire et en gestion des entrées/sorties. Ils
sont aussi une bonne préparation pour des systèmes embarqués réels dans le domaine de
l’automatique et de l’électronique industrielle.

Vous aimerez peut-être aussi