Réalisation D'un PID À Base Arduino: Mémoire de Projet de Fin D'études
Réalisation D'un PID À Base Arduino: Mémoire de Projet de Fin D'études
Réalisation D'un PID À Base Arduino: Mémoire de Projet de Fin D'études
كلية التكنولوجيا
Faculté de Technologie
قسم اإللكترونيـك
Département d’Électronique
Thème
MOHAMED AMINE
Tout d’abord, je tiens à remercier Allah, le clément et le
miséricordieux de m’avoir donné la force et le courage de mener à
bien ce modeste travail.
بحيث سيتم تحقيق هذا التحكم بناءا على بطاقةPID يهدف هذا المشروع لنهاية الدراسة الى تنفيذ التحكم من نوع
. « من أجل مراقبة سرعة المحرك ذات التيار المستمرCarte Arduino »أردوينو
" تُظهر كذلك رسما بيانيا لتطور السرعة فيMATLAB" بفضل واجهة بيانية علىPID سيتم ارسال تعليمات و معايير
.الزمن الحقيقي
Résumé
Abstract
This Final project assignment aims to implement a PID servo. This controller will be
implemented based on an Arduino board to control the speed of a DC motor .the setpoints
and PID parameters will be done through a graphical interface on MATLAB, which also
display the graph of the evolution of the speed on real-time.
Table des matières
Introduction générale
coût faible.
précision élevée.
insensibilité au bruit.
facilité d’implémentation.
souplesse par rapport aux modifications.
1
P.F.E Introduction générale
L’objectif de notre projet de fin d’étude, est de réaliser un régulateur PID à base d’une
carte Arduino, pour contrôler et commander un moteur à courant continu.
Le premier chapitre est consacré aux moteurs à courant continu, à leurs commandes
ainsi qu’à l’étude des codeurs optiques.
Dans le deuxième chapitre, représente une étude sur la régulation et la commande
numérique des systèmes.
Le troisième chapitre concerne la partie électronique et la partie software de notre
régulateur PID.
Le quatrième chapitre est réservé à la réalisation des différents modules et aux tests.
Dans la dernière partie de ce mémoire, nous présentons la conclusion générale qui
récapitule notre travaille.
2
P.F.E Conclusion générale
Conclusion générale
L’objectif qui a été donné pour notre projet, est l’utilisation d’une carte Arduino. Dont le
but est de mettre au point la commande en vitesse d’un moteur à courant continu en
utilisant un régulateur PID.
66
P.F.E Références Bibliographiques
[3] Y.Bettou, H.Ahcène, régulation de la vitesse d’un moteur à courant continu par PIC
16F877, thèse de fin d’étude, université saad dahleb de Blida, octobre 2011.
[4] M.Arhoujdam, K.Dahi, mise en œuvre d’une régulation de vitesse d’un moteur à courant
continu, thèse de fin d’étude, université Mohamed V souissi, 2012-2013
[5] O.Ait sahed, A.Benachour, implémentation sur carte DSP de la commande PID auto-
ajustable d’un moteur à courant continu, thèse de fin d’étude, université saad dahleb de
Blida, septembre 2010.
[6] projet de fin d’étude : étude et réalisation d’une alimentation à thyristors pilotée par PIC
16F877A en vue de la commande d’un moteur DC, université saad dahleb de Blida, juillet
2011.
[7] A.Kebaili, M.Izri, réalisation d’une boucle d’asservissement de la vitesse d’un moteur DC
utilisant la technique PLL, thèse de fin d’étude, université saad dahleb de Blida, 2011-2012.
[12] A.Bensaadi, S.Abbas, régulation de niveau d’eau dans un réservoir assisté par le logiciel
LabVIEW, thèse de fin d’étude, université saad dahleb de Blida, 2010/2012
67
LISTE DES ABREVIATIONS
PC Personal Computer
1.1 Introduction
Les moteurs et les générateurs à courant continu furent les premières machines électrique
utilisées par les ingénieurs au milieu du 19ième siècle pour produire de la puissance motrice en
usine ou en transport.
Le but de cette partie est d’élaborer une représentation mentale aussi claire et fidèle que
possible du moteur à courant continu. Là est l’objet de la commande dans notre réalisation.
Les moteurs à courant continu sont les plus utilisés dans le domaine de faible puissance. En
effet, la mise en œuvre de leurs commandes est parfaitement au point [1].
3
Chapitre 1 Généralités sur les moteurs à courant continu
Le rotor, partie mobile, appelé aussi induit, composé de tôle isolées entre elles et munies
d’encoches dans lesquelles sont réparties les conducteur. Parcourus par un courant, ceux-ci
créent le champ magnétique dit rotorique.
4
Chapitre 1 Généralités sur les moteurs à courant continu
Figure.1.4: collecteur
Lorsque l’on place une spire parcourue par un courant (grâce aux balais et au collecteur)
dans un champ magnétique, il apparait un couple de force. Ce couple de force crée un
couple de rotation qui fait dériver la spire de plus ou moins 90 degrés par rapport au plan
vertical, le sens du courant restant inchangé dans la spire, au cours de ce déplacement, le
couple de rotation diminue constamment jusqu’à s’annuler après rotation de la bobine de
plus ou moins 90 degrés( zone neutre, la spire se trouve à l’horizontale et perpendiculaire
aux aimants naturels).
A fin d’obtenir une rotation sans à coup, l’enroulement d’induit doit être constitué d’un
nombre élevé de spire similaires. Celles-ci seront réparties de façon régulière sur le pourtour
du rotor (induit), de manière à obtenir un couple indépendant de l’angle de rotation. Après
le passage de zone neutre, le sens du courant doit être inversé simultanément dans chacune
de ces spires.
L’inversion du courant est opérée par l’inverseur ou commutateur (collecteur) qui associé
au balai, constitue l’élément assurant la transmission du courant de la partie fixe à la partie
tournante du moteur.
5
Chapitre 1 Généralités sur les moteurs à courant continu
Nombre de pôles,
Nombre de faisceaux (et donc de lames du collecteur),
Nombre de spires dans un faisceau,
Choix des matériaux constituant l’ensemble.
……………………………… (1.1)
E : force électromotrice
6
Chapitre 1 Généralités sur les moteurs à courant continu
.................................................... (1.2)
Ke : constante
........................................................ (1.3)
Kc : constante
Le courant consommé par le moteur est directement lié au couple résistant sur l’arbre.
……………..……………………… (1.4)
N : vitesse en tr/s.
Les moteurs à courant continu sont souvent classes par le type de champ statorique utilisé.
7
Chapitre 1 Généralités sur les moteurs à courant continu
Ce moteur à une grande souplesse de commande et une large gamme de vitesse, il est
utilisé en milieu industriel associé avec un variateur électrique [4].
8
Chapitre 1 Généralités sur les moteurs à courant continu
Ce type de moteur possède une vitesse sensiblement constante quelque soit la charge, ne
s’emballe pas à vide et s’emballe si rupture d’inducteur.
1.5.4 Moteur à excitation compound
Dans le moteur compound une partie du stator est raccordé en série avec le rotor et une
autre est de type parallèle ou shunt.
Ce moteur réunit les avantages des deux types de moteur : le fort couple à basse vitesse
du moteur série et l’absence d’emballement du moteur shunt.
9
Chapitre 1 Généralités sur les moteurs à courant continu
Ce type de moteurs est largement utilisé dans la pratique à cause de son prix économique
et la diversité de ces modèles présents sur le marché, mais il est de plus en plus remplacé
par le moteur sans balais.
Les moteurs à aimant permanents sont les plus utilisés pour les applications à faible
puissance. Car il est plus économique d’utiliser des aimants permanents qu’un bobinage
(pour la création du champ magnétique du stator). Leur inconvénient, est le fait qu’au
passage du temps, ils commencent à perdre leurs propriétés.
Il existe également des moteurs à courant continu sans balais, ils utilisent des aimants
permanents pour obtenir le champ magnétique, mais à la place de la rotation de l’induit
provoqué par le champ magnétique de l’aimant, l’aimant permanent tourne dans la bobine
fixe. Avec un moteur à courant continu classique il est nécessaire d’utiliser un commutateur
pour inverser le courant dans les bobines à chaque demi-rotation de manière à pour suivre
la rotation de l’induit dans le même sens, avec les moteurs sans balais à aimant permanent
un circuit électronique permet d’inverser le courant. Le moteur peut être démarré et arrêté
en contrôlant le courant dans la bobine fixe.
L’inversion du sens de rotation du moteur est plus complexe, car inverser le courant n’est
pas si simple, en raison du circuit électronique qui met en œuvre le commutateur. Une
méthode consiste à incorporer des capteurs pour détecter l’emplacement des pôles nord et
sud, ces capteurs peuvent ensuit provoquer la commutation du courant dans les bobines au
bon moment à fin d’inverser les forces appliquées à l’aimant. La vitesse de rotation peut être
commandée par PWM (Pulse Width Modulation).
10
Chapitre 1 Généralités sur les moteurs à courant continu
Ce réglage est mauvais sur le plan technique, et aussi sur le plan économique car plus la
chut de vitesse réclamée est grande plus la consommation d’énergie dans le rhéostat
augmente. Dans la pratique on utilise ce procédé de réglage pour le démarrage et le freinage
du moteur [6].
Lors du démarrage on applique le flux maximal, pour obtenir un couple maximal, des que
la vitesse nominale sera atteinte il sera possible de réduire le flux par un rhéostat de champ,
insérer dans le circuit de l’inducteur.
Ce réglage est bon du point de vue technique, et aussi du point de vue économique, car la
puissance dissipé dans l’inducteur étant très faible par rapport à la puissance absorbée, avec
ce procédé on ne peut qu’augmenter la vitesse du moteur par rapport à sa vitesse nominale
[6].
11
Chapitre 1 Généralités sur les moteurs à courant continu
On applique une tension de valeur moyenne variable entre zéro et une valeur maximale
tout en réglant le flux à sa valeur maximale. Ce procédé de réglage de vitesse est excellent
du point de vue économique car aucune énergie n’est dissipe dans les rhéostats [4].
Quand on veut régler la vitesse d’un moteur à courant continu, il suffit de faire varier la
tension à ses bornes, et pour maintenir une vitesse invariable pour une tension de consigne
donnée, il faut donc munir le moteur d’un asservissement de vitesse, et pour surveiller
l’évolution de cette vitesse il faut utiliser un capteur.
1.8 Le codeur
La mesure des déplacements, des positions et des vitesses du machines rotatives est un
problème régulièrement rencontré dans l'industrie: robots, cisailles, machines-outils,
bobineuses, .... Les systèmes de détection tout ou rien conventionnels (détecteurs inductifs
ou capacitifs, interrupteurs de position, capteurs photoélectriques, ...) apportent souvent
une solution suffisante dans la plupart des applications mais à partir du moment où il est
important d'effectuer un nombre important de mesures de positions, ces systèmes arrivent
très rapidement à saturation (au bout du rouleau). Il est important de résoudre tous ces
problèmes à l'aide de capteurs dont le positionnement n'est plus maîtrisé par le capteur
physique proprement dit mais bien par le système de traitement numérique qui leur est
associé [7]. Une des solutions consiste à utiliser un codeur optique.
Le capteur ou codeur optique rotatif, introduit dans les années 1970, est aujourd’hui très
répandu et remplace souvent les génératrices tachymétriques, les résolveurs et les capteurs
résistifs [8].
12
Chapitre 1 Généralités sur les moteurs à courant continu
Le codeur optique, le plus répandu, est lié mécaniquement à un arbre qui l’entraine. Il est
constitué d’un système mécanique qui comporte un disque en verre portant des gravures
opaques dont l’écartement est fonction du pas angulaire que l’on veut obtenir. Le faisceau
lumineux, traversant le disque, est la plupart du temps généré par une diode
électroluminescente et le faisceau modulé est capté par une photodiode ou un
phototransistor [8].
13
Chapitre 1 Généralités sur les moteurs à courant continu
dernière est proportionnelle à la fréquence des impulsions. Il est constitué d’un disque
comportant deux à trois pistes :
Pour un tour complet de l’axe du codeur, la partie commande reçoit autant d’impulsions
électriques qu’il ya de fenêtre, dont la durée dépend de la vitesse de rotation du disque [9].
Le codeur absolu comporte beaucoup d’avantages pour le codage précis et sans erreur de la
position angulaire, puisque l’information de position est disponible dés la mise sous tension.
Lorsqu’une information est parasitée, la position du codeur n’est pas perdue puisque les
suivantes sont inhérentes à sa complexité [8].
Souvent il n’est pas nécessaire de coder une position de manière absolue, par exemple
dans les asservissements. Dans ce cas, le codeur incrémental s’impose par sa conception
simple à un seul disque, ce qui rend plus fiable et moins cher qu’un codeur absolu.
14
Chapitre 1 Généralités sur les moteurs à courant continu
1.9 Conclusion
Dans ce chapitre, nous avons présenté une vue globale sur les moteur à courant continu,
leurs caractéristiques, leurs différents types, et leurs réglages de vitesse. Nous avons
présenté aussi les codeurs optiques qui peuvent surveiller l’évolution de vitesse de ces
moteurs, a fin de réaliser un asservissement. Et pour cela nous avons besoin d’un régulateur,
ce qu’on verra au prochain chapitre.
15
Chapitre 2 Etude sur la régulation et la commande numérique
2.1 Introduction
Le contrôle des procédés est une discipline étudiée et utilisée dans plusieurs domaines de
l’ingénierie. L’objectif d’une régulation ou d’un asservissement automatique d’un procédé
est de le maintenir le plus près possible de son optimum de fonctionnement, prédéfini par
un cahier des charges (conditions ou performances imposées). Le cahier des charges définit
des critères qualitatifs à imposer qui sont traduits le plus souvent par des critères
quantitatifs, comme par exemple, de stabilité, de précision, de rapidité ou de lois d’évolution
[10].
16
Chapitre 2 Etude sur la régulation et la commande numérique
Dans l’étude classique des systèmes, on admet le principe de causalité qui signifie que la
cause (entrée) agit sur un système pour produire un effet sur la sortie. Dans le cas des
systèmes asservis, l’effet, à son tour, agit et influence la cause. Cette interdépendance entre
cause et effet est le mécanisme fondamental qui permet à des systèmes de contrôler et de
régler des grandeurs automatiquement.
17
Chapitre 2 Etude sur la régulation et la commande numérique
Le choix des éléments de la chaine de régulation est dicté par les caractéristiques du
processus à contrôler, ce qui nécessite de bien connaitre le processus en question et son
comportement [12].
18
Chapitre 2 Etude sur la régulation et la commande numérique
E(p) S(p)
Système
Entrée G(p) Sortie
S(p)=G(p).E(p) (2.1)
Dans ce qui vient d’être dit, la variable de sortie (de la chaine de régulation) exerce une
influence sur la valeur de la variable d’entrée (de la chaine de régulation) ou variable
contrôlée, pour la maintenir dans des limites définies : il s’agit d’une régulation sur la
variable ou d’asservissement en boucle fermée. L’action de la grandeur réglante sur la
variable contrôlée s’opère à travers le processus qui boucle la chaine.
Dans une régulation en boucle fermée, une bonne partie des facteurs perturbateurs sont
automatiquement compensés par la contre-réaction à travers le procédé. Autre avantage, il
n’est pas nécessaire de connaitre avec précision les lois, le comportement des différentes
composants de la boucle, et notamment du processus, bien que la connaissance des allures
statistiques et dynamique des divers phénomènes rencontrés soit utile pour le choix des
composants.
Parmi les inconvénients d’une régulation en boucle fermée, il faut citer le fait que la
précision et la fidélité de la régulation dépend de la fidélité et de la précision sur les valeurs
mesurées et sur la consigne. Autre inconvénient, sans doute plus important, le
comportement dynamique de la boucle dépend des caractéristiques des différents
19
Chapitre 2 Etude sur la régulation et la commande numérique
(2.2)
Avec Y=G.ɛ
Et ɛ =X-H.Y (2.3)
ɛ : l’erreur.
2.5.3 Régulation en cascade
La régulation en cascade se base sur l’utilisation de deux ou trois régulateurs. Elle est mise
en place principalement pour réduire les effets des perturbations.
20
Chapitre 2 Etude sur la régulation et la commande numérique
On utilise une régulation de rapport quand on veut un rapport constant entre deux
grandeurs réglées S1 et S2 (S1/S2=constant).
Dans l’exemple ci-dessous, la grandeur piloté S1 est utilisée pour calculer la consigne de la
boucle de régulation S2 (figure 2.6).
21
Chapitre 2 Etude sur la régulation et la commande numérique
Un système asservi en boucle fermée est dit précis, si sa sortie S(t) est proche de la
consigne (valeur désirée) E(t), on peut représenter l’erreur entre la consigne et la sortie :
ɛ=E(p)-S(p) (2.4)
Dans le cas des systèmes linéaires représentés par une fonction de transfert, l’analyse
des poles permet de conclure sur la stabilité du système [4].
On définira la stabilité par une des propositions suivantes : un système linéaires est stable :
La rapidité d’un système régulé s’évalue par le temps nécessaire à la mesure pour entrer
dans une zone ± 5% de sa valeur final (soit entre 95% et 105%). Le système régulé est
d’autant plus rapide que le temps de réponse à 5% est court [4].
La commande PID est dite aussi (correcteur, régulateur, contrôleur), se compose de trois
termes P,I et D, ou le « P » correspond au terme proportionnel, « I » pour le terme intégral
et « D » pour le terme dérivée de la commande.
Un régulateur PID permet d’effectuer une régulation en boucle fermée d’une grandeur
physique d’un système industriel.
22
Chapitre 2 Etude sur la régulation et la commande numérique
La commande PID est insérée dans la chaine directe de l’asservissement, en série avec le
processus, comme indiqué dans la (figure.2.6). Ce régulateur élabore à partir du signal
dérivée[3].
Uc(t)= Kp e(t) + + Td
= Kp e(t) + + Td
23
Chapitre 2 Etude sur la régulation et la commande numérique
Lorsque l’on augmente le gain « Kp » le système réagit plus vite et l’erreur statique s’en
trouve améliore , mais en contrepartie le système perd la stabilité.
Effets du correcteur :
• Diminution du temps de montée.
• Diminution de l’erreur statique.
• Augmentation du temps de stabilisation.
• Augmentation du dépassement.
Effets du correcteur :
• Diminution du temps de montée.
• Elimination de l’erreur statique.
• Augmentation du temps de stabilisation.
• Augmentation du dépassement.
2.7.3 Action proportionnelle-intégrale-dérivée (PID)
L’action conjugée PID permet une régulation optimal en associant les avantages de
chaque action : la composante P réagit à l’apparition d’un écart de réglage, la composante D
s’oppose aux variations de la grandeur réglée et stabilise la boucle de régulation et la
24
Chapitre 2 Etude sur la régulation et la commande numérique
composante I élimine l’erreur statique. Et c’est pou cela que ce type de correcteur est le plus
utilisé en milieu industriel [12].
Effets du correcteur :
• Diminution du temps de montée.
• Elimination de l’erreur statique.
• Diminution du temps de stabilisation.
• Diminution du dépassement.
Remarque :
Pour construire un correcteur PID, il suffit d’assembler les trois actions (P,I et D), cet
assemblage peut être fait de plusieurs façons possibles. On peut par exemple mettre les trois
actions en série, ou en parallèle.
25
Chapitre 2 Etude sur la régulation et la commande numérique
que la température, elle n’est pas recommandée pour le réglage d’une variable
bruitée ou trop dynamique (la pression)
E(nT) U(nT)
Kp
26
Chapitre 2 Etude sur la régulation et la commande numérique
E(nT) U(nT)
I
U (nT) = Ki
= Ki + Ki E(nT)
R(z) = = Ki = Ki (2.11)
E(nT) Kp U(nT)
I
Correcteur PI
U (nT) = Kp E(nT) +
R(z) = = Kp + Ki
27
Chapitre 2 Etude sur la régulation et la commande numérique
E(nT) U(nT)
D
U (nT) = Kd
U (nT) = Kd (
R (z) = = Kd = Kd (2.12)
E(nT) Kp U(nT)
Correcteur PD
R (z) = = Kp + Kd
Le correcteur PID est une combinaison d’un correcteur P et I et d’un correcteur D c’est le
plus connu entre les correcteurs :
28
Chapitre 2 Etude sur la régulation et la commande numérique
Kp
E(nT) U(nT)
I
D
Correcteur PID
29
Chapitre 2 Etude sur la régulation et la commande numérique
2.9 Conclusion
Dans ce chapitre nous avons présenté le principe général de la régulation, les éléments
principaux d’une boucle de régulation, et ces différents types, ainsi que les caractéristiques
de régulateur PID numérique. Pour réaliser ce dernier, nous avons utilisé une carte Arduino
comme élément principal, qui sera détaillé dans le prochain chapitre.
30
Chapitre3 Conception de la maquette de régulation
3.1 Introduction
Le système qu’on se propose de réaliser a pour objectif ; la régulation ou l’asservissement
numérique de la vitesse d’un moteur à courant continue. Dans ce chapitre, on va présenter
la partie électronique et la partie software de notre dispositif.
bloc
d'affichage alimentation
(afficheur 12v
LCD)
Liaison
unité de contrôle série PWM
(inteface unité de moteur à
commande et bloc de
graphique PC) puissance et courant
de régulation continu
(carte Arduino) d'isolation
Alimentation
5v du PC
31
Chapitre3 Conception de la maquette de régulation
a) Alimentation de la carte
Pour fonctionner, la carte à besoin d’une alimentation. Le microcontrôleur fonctionnant
sous une tension de 5V, la carte peut être alimentée en 5V par le port USB ou bien par une
alimentation externe qui est comprise entre 7V et 12V. Cette tension doit être continue et
peut par exemple être fournie par une pile de 9V. Un régulateur se charge ensuit de réduire
la tension à 5V pour le fonctionnement de la carte.
Pour alimenter la carte par un port USB, il faut assurer la protection du port et pour cela
la carte Arduino UNO intègre un fusible réinitialisable qui protège le port USB de votre
32
Chapitre3 Conception de la maquette de régulation
ordinateur contre les surcharges en intensité (le port USB est généralement limité à 500mA
en intensité). Bien que la plupart des ordinateurs aient leur propre protection interne, le
fusible de la carte fournit une couche supplémentaire de protection. Si plus de 500mA sont
appliqués au port USB, le fusible de la carte coupera automatiquement la connexion jusqu’à
ce que le court-circuit ou la surcharge soit stoppé.
b) connecteurs des sources de tension (broches alimentation)
La première broche d’alimentation correspond à Reset qui a la même fonction de
réinitialisation que le bouton de remise à zéro (reset). Pour forcer un redémarrage avec
cette broche, il faut la forcer momentanément à 0 V (état bas). La deuxième broche fournie
une tension de 3.3 V et la troisième une tension de 5 V, on a aussi deux broches pour la
masse.
c) Entrées analogiques
Les broches d’entrée analogique de A0 à A5 permettent de mesurer une tension pour
pouvoir en utiliser les valeurs dans les programmes. Précisons que les broches servent à
mesurer une tension et non un courant. Le circuit d’entrée auquel chacune des broches
donne accès possède une résistance interne (impédance) très importante, ce qui fait que le
courant passant par la broche est toujours très faible. Ces entrées sont désignées comme
étant de type analogique, et elles le sont par défaut, mais vous pouvez également les
exploiter en tant qu’entrées numériques ou même comme sorties numériques.
d) Entrées et soties numériques
Les broches d’entrée et de sortie numérique de 0 à 13, lorsque vous les utilisez en tant
que sorties, elles se comportent comme les broches de source de tension, sauf qu’elles
fonctionnent toutes en 5V et qu’elles peuvent être activées et désactivées depuis le
programme. Si vous activez une de ces broches, la tension présentée sera à 5V. Si vous
désactivez la broche, la tension sera à 0V. Certaines de ces broches peuvent être configurées
en sortie PWM. Les deux premières broches RX et TX sont réservées à la communication,
transmission et la réception.
Toutes les broches numériques peuvent supporter jusqu’à 40 mA à 5V.
e) Les LEDs (visualisation)
La première LED qui se trouve à droite de la carte est connectée à une broche (pin 13) du
microcontrôleur et va servir pour tester le matériel.
33
Chapitre3 Conception de la maquette de régulation
Les deux autre LEDs servent à visualiser l’activité sur la voie série, une pour l’émission et
l’autre pour la réception.
f) Bouton de remise à zéro
Une pression sur cet interrupteur envoie une impulsion logique sur la broche RESET du
microcontrôleur, ce qui le forcer à redémarrer en effaçant la mémoire. Sachez que les
programmes stockés sur la carte ne sont pas effacés, parce qu’ils sont stockée dans la
mémoire flash, c'est-à-dire que le contenu n’est pas perdu en cas de mise hors tension.
g) Microcontrôleur
Le microcontrôleur est l’élément principal de la carte Arduino, il est aujourd’hui implanté
dans la plupart des applications grand public ou professionnelles.
Un microcontrôleur est littéralement un petit ordinateur contenu dans une seule puce. Il
embarque même plus de fonctions que les premiers ordinateurs personnels, puisqu’il réunit
un processeur central, un kilo-octet de mémoire vive (RAM) pour stocker les données,
quelques kilo-octets de mémoire en lecture seule effaçable (EEPROM) ou en mémoire flash,
dans lesquels vous pouvez stocker les programmes, ainsi que des broches d’entrée et de
sortie. Ces broches permettent de relier de microcontrôleur à vous composants
électroniques.
Le microcontrôleur utilisé sur la carte Arduino UNO est un microcontrôleur ATMega328.
C’est un microcontrôleur ATMEL de la famille AVR.
34
Chapitre3 Conception de la maquette de régulation
Caractéristique de l’ATMega328
Mémoire
- flash de 32Koctets, c’est celle qui contiendra le programme à exécuter. Cette mémoire
est effaçable et réinscriptible.
- RAM de 2 Koctets, servant à stocker les variables créées par le programme
- EEPROM de 1 Koctet, c’est le disque dur du microcontrôleur. Vous pourrez y enregistrer
des informations qui ont besoin de survivre dans le temps, même si la carte doit être
arrêtée. Cette mémoire ne s’efface pas lorsque l’on éteint le microcontrôleur ou
lorsqu’on le reprogramme.
- Registres : c’est un type de mémoire utilisé par le processeur.
- Mémoire cache : c’est une mémoire qui fait la liaison entre les registres et la RAM.
Le processeur
C’est le composant principal du microcontrôleur. On le nomme souvent le CPU (Central
Processing Unit). C’est lui qui va exécuter le programme que nous lui donnerons traité. Il lit
une par une les instructions du programme qui est stocké dans la mémoire flash, puis les
exécute en séquence. Parfois, cela suppose d’aller lire des données dans la mémoire vive
(RAM), de les modifier et de les réécrire.
Digital I/O (entrée sortie tout ou rien)
3 ports : portB, portC,portD (soit 23 broches en tout I/O)
Timer/counter
L’ATMega328 comprend 3 Timers, c'est-à-dire trois compteurs qui sont incrémenté par le
microcontrôleur tout les N ticks d’horloge. Le Timer0 est utilisé par la bibliothèque Arduino
pour évaluer l’écoulement du temps et pour les sorties PWM (6 broches OCxA/OCxB)
associés à ce Timer. Le Timer 1 dispose d’un compteur 16bits, alors que les Timers 2 et 0
sont en 8bits.
Port série
Emission et réception série via les broches TXD(PD1) et TXD(PD0)
Comparateur analogique
Broches AIN0(PD6) et AIN1(PD7) peut déclencher interruption
Conversion analogique numérique
6 entrées multiplexées ADC0(PD0) à ADC5(PC5)
35
Chapitre3 Conception de la maquette de régulation
36
Chapitre3 Conception de la maquette de régulation
Les écrans LCD sont aussi sous forme complexes telle que la plupart des écrans d’ordinateur
ainsi que les téléviseurs à écrans plat.
Plusieurs afficheurs sont disponibles sur le marché et ne diffèrent les uns des autres, non
seulement par leurs dimensions, de 1 à 4 lignes de 6 à 80 caractères. L’afficheur utilisé dans
notre projet est afficheur LCD 16*2 (figure3.4).
37
Chapitre3 Conception de la maquette de régulation
Mode 4 bits :
Dans ce mode, seul les 4 bits de poids fort (D4 à D7) de l’afficheur sont utilisés pour
transmettre les données et les lires. Les 4 bits de poids faible (D0 à D3) sont alors connectés
à la masse, on a donc besoin hors alimentation de sept fils pour commander l’afficheur. Dans
notre projet nous avons utilisé ce mode d’affichage.
3.3.1.4 bronchement d’un écran LCD avec une carte Arduino
En l’absence de l’ordinateur, nous avons besoin d’un écran, pour afficher les informations
transmises par Arduino, et aussi d’un clavier pour contrôler ces informations.
38
Chapitre3 Conception de la maquette de régulation
Dans notre projet nous avons branché un écran LCD avec la carte Arduino UNO; Pour
pouvoir lire la consigne et la vitesse réelle du moteur. Nous avons aussi ajouté deux boutons
poussoir pour varier la vitesse.
39
Chapitre3 Conception de la maquette de régulation
40
Chapitre3 Conception de la maquette de régulation
La diode D1 est une diode de roue libre qui est connectée en parallèle du moteur, pour la
continuité du courant électrique. Si on ne met pas cette diode, le courant ne peut aller nulle
part, va décroitre ainsi très vite et créer une surtension qui détruira le transistor. La roue
libre écrête cette surtension en offrant un passage pour le courant. Dans notre cas, la diode
de roue libre doit supporter en tension au moins 12 V, puisque nous avons utilisé un moteur
de 12V.
Pour le choix du MOSFET, il faut s’intéresser à la tension maximale qu’il doit accepter
avant de claquer, et aussi à la résistance drain source à l’état passant. Plus cette valeur est
faible et moins l’échauffement du MOSFET est élevé.
Donc, Le moteur se contrôle en tout ou rien, ce qui est bien, car la sortie analogique de
l’Arduino est en réalité une sortie PWM de rapport cyclique ajustable.
41
Chapitre3 Conception de la maquette de régulation
Le principe est de générer un signal logique (valant 0 ou 1) à une fréquence fixe mais dont
le rapport cyclique est contrôlé numériquement, dans notre cas la fréquence générée par la
carte Arduino de l’ordre 500 Hz d’où la période égale à 2 millisecondes.
On peut changer la fréquence générée par Arduino, selon le type du moteur. Une
fréquence de commutation plus élevée permet d’avoir un moteur plus silencieux mais fait
chauffer un peu plus le MOSFET, d’où le choix et la commande de cet dernier devient plus
critique.
3.3.2.3 fonctionnements de la partie d’isolation
Dans la plupart des circuits électroniques, les tensions mises en jeux ne sont pas
compatibles de part et d’autre. Par exemple, dans notre circuit d’une part la carte Arduino
est alimentée en 5V et de l’autre part le moteur est alimenté en 12V qui peut présenter une
tension dangereuse.
Afin d’éviter ce problème et de protéger notre circuit, nous avons isolé la partie
commande et la partie puissance. Cette isolation est réalisée par un optocoupleur.
Un optocoupleur est un composant qui permet le transfert d’information entre deux
parties électroniques isolées l’une de l’autre d’un point de vue électrique. La première partie
est un émetteur, et la seconde partie est un récepteur. Quand on parle d’émission, c’est en
général parce que l’on émet quelque chose. Ici, il s’agit d’une émission de lumière.
L’émetteur produit donc de la lumière, et le récepteur, qui est sensible à la lumière émise
par l’émetteur.
42
Chapitre3 Conception de la maquette de régulation
L’entrée est composée d’une diode électroluminescente « LED » et la sortie est un photo-
détecteur c'est-à-dire une photo diode, phototransistor ou un photo-thyristor.
La LED et le photo-détecteur sont reliés optiquement, mais sont isolés électriquement
dans un même boitier.
Le circuit que nous avons utilisé est le 4N28, avec des résistances R3 pour abaisser la
tension à une valeur acceptable pour l’émetteur, et R4 pour la polarisation du transistor.
43
Chapitre3 Conception de la maquette de régulation
Nous avons utilisé un amplificateur opérationnel LM358 qui est monté en comparateur,
pour comparer la tension reçue du capteur avec une tension de seuil réglable grâce à un
potentiomètre. Les tensions extrêmes maximales que peut faire sortir l’amplificateur
opérationnel n’atteignent pas les valeurs des tensions d’alimentation. Selon les modèles,
une différence de 2V peut être observée. Le signal qui sort de notre comparateur est un
signal carré qui varie entre deux valeurs 0V et 3.6V. Donc nous avons branché à la sortie un
circuit intégré de type 7400 qui contient 4 portes logique NON-ET (NAND), et qui donne à la
sortie un signal carré inversé variant entre 0V et 5V; qui sera reconnu par la carte Arduino.
3.3.4 Alimentation
L’alimentation étant nécessaire pour tout circuit électronique. La fonction principale est
de délivrer d’une ou de plusieurs tensions (ou courant) bien précises et souvent stables.
Aussi de fournie une énergie électrique avec un minimum de pertes.
Les basses puissances dans notre circuit sont alimentées par l’ordinateur à une tension de
5V à partir du port USB (figure 3.1).
Pour l’alimentation du moteur, nous avons réalisé une alimentation stabilisée de 12V.
La carte réalisée contient :
Un transformateur abaisseur
Qui fournit sur son secondaire une tension alternative très inferieur à celle du secteur.
44
Chapitre3 Conception de la maquette de régulation
45
Chapitre3 Conception de la maquette de régulation
46
Chapitre3 Conception de la maquette de régulation
47
Chapitre3 Conception de la maquette de régulation
Bien que cette seconde méthode semble beaucoup moins intuitive que celle utilisant le
GUIDE.
Du fait du nombre important d’objets et surtout du nombre des propriétés associées, la
programmation à la main est généralement déroutante au début. Il est nécessaire de se
servir de la documentation MATLAB et de savoir en tirer les bonnes informations.
Dans notre étude nous avons utilisé cette dernière méthode de programmation.
3.4.1.3 Présentation de l’interface
Il est nécessaire de mettre à la disposition de l’utilisateur une interface pratique,
permettant de varier la vitesse du moteur, et aussi de régler les paramètres du contrôleur
PID. Cette interface est présentée par le schéma ci-dessous :
48
Chapitre3 Conception de la maquette de régulation
49
Chapitre3 Conception de la maquette de régulation
Début
Initialisation des
registres
Initialisation du
port série
9600 bit/s
Démarrage des
interruptions
(patte INT0)
Démarrage du
Timer TMR0
Réception
des données
Stocké les
données
50
Chapitre3 Conception de la maquette de régulation
Interruption INT0
Incrémentation ++
de top d’horloge
++
Figure 3.19. Interruption du top d’horloge du capteur
Interruptions du
Timer TMR0
Lecture de la
vitesse mesurée
Calcul de l’erreur
Correction d’erreur
Nouvelle valeur du
PWM (commande)
Envoi de la valeur
de la vitesse vers
le PC
51
Chapitre3 Conception de la maquette de régulation
52
Chapitre3 Conception de la maquette de régulation
3.6 Conclusion
Dans ce chapitre, nous avons bien détaillé notre projet, qui consiste à une étude de
conception des différents cartes électroniques, et aussi d’une partie de programmation sur
logiciel ARDUINO et MATLAB. Le chapitre suivant sera donc consacré à la réalisation de ces
cartes électronique.
53
Chapitre4 Réalisation et tests
4.1 Introduction
Après avoir présenté dans le chapitre précédent la conception de différentes cartes
électroniques. Nous allons aborder dans ce chapitre la réalisation pratique de ces cartes.
Ainsi que le réglage des paramètres Kp, Ki et Kd du correcteur PID.
54
Chapitre4 Réalisation et tests
55
Chapitre4 Réalisation et tests
56
Chapitre4 Réalisation et tests
On peut placée cette carte sur n’importe quelle Arduino UNO, et commandé n’importe
quelle moteur, en changeant juste la carte de puissance.
4.3.2 Carte de puissance et de mise en forme
57
Chapitre4 Réalisation et tests
58
Chapitre4 Réalisation et tests
59
Chapitre4 Réalisation et tests
Ce problème est connu par la synthèse des systèmes bouclés. Les méthodes de synthèse
sont très nombreuses et une classification rigoureuse n’est pas une tâche facile. Néanmoins,
on peut distinguer dans les deux types de méthodes :
o Des méthodes dites empiriques ne nécessitant pas une connaissance parfaite du
modèle du procédé à commander. Les paramètres du régulateur seront calculés à partir des
observations expérimentales sur le procédé. L’intérêt majeur de ces méthodes réside dans
leur simplicité. Elles sont largement utilisées dans le domaine industriel et elles sont dans la
plus part des cas suffisantes mais ne permettent pas un réglage fin.
oDes méthodes basées sur la connaissance du modèle du système sous forme de
fonction de transfert par exemple. Les actions du régulateur seront calculées de façon à
obtenir la fonction de transfert souhaitée en boucle ouverte ou en boucle fermée.
Dans notre cas nous avons utilisé la première méthode qui consiste à régler les
paramètres du régulateur à partir des observations expérimentales sur le MATLAB.
4.4.2 Tests et réglages des paramètres du régulateur PID
Pour déterminer les paramètres du correcteur PID et connaitre leurs rôles. Nous allons
utiliser une méthode d’approximations successives. Cette dernière consiste à faire des testes
sur chacune des actions du régulateur indépendamment des autres actions.
Premièrement, nous devons fixer la consigne pour faire le test. Pour cela nous avons
choisi une vitesse de 20 tours/seconde.
60
Chapitre4 Réalisation et tests
61
Chapitre4 Réalisation et tests
o Nous avons ajouté un intégrateur pour obtenir un régulateur PI (le coefficient Kd est
nul).
62
Chapitre4 Réalisation et tests
63
Chapitre4 Réalisation et tests
o Les coefficients que nous avons choisis pour notre système sont : Kp = 5, Ki = 0.5 et
Kd=1
Figure 4.19.réponse du moteur après un changement de consigne de 5tr/s à 20tr/s avec les
coefficients Kp=5, Ki=0.5 et Kd=100
64
Chapitre4 Réalisation et tests
4.5 Conclusion
Chacun des coefficients du PID à un rôle à jouer sur la réponse à une consigne. Il faut juste
trouver un compromis qui répond au cahier de charge.
La réalisation de notre montage a été faite en totalité. Le montage fonctionne
correctement et répond à la consigne désirée.
65
P.F.E Annexe1
Le Logiciel Arduino
1. Description
Le code écrit avec le logiciel Arduino est appelé un programme (ou une séquence -
sketch en anglais) :
Ces programmes sont écrits dans l'éditeur de texte. Celui-ci a les fonctionnalités
usuelles de copier/coller et de rechercher/remplacer le texte.
la zone de messages donne l'état de l'opération en cours lors des sauvegardes, des
exportation et affiche également les erreurs.
La console texte affiche les messages produit par le logiciel Arduino incluant des
messages d'erreur détaillés et autres informations utiles.
la barre de boutons vous permet de vérifier la syntaxe et de transférer les
programmes, créer, ouvrir et sauver votre code, et ouvrir le moniteur série.
la barre des menus vous permet d'accèder à toutes les fonctionnalités du logiciel
Arduino.
Ouvrir : Ouvre la liste de tous les programmes dans votre "livre de programmes".
Cliquer sur l'un des programmes l'ouvre dans la fenêtre courante.
Transférer vers la carte : Compile votre code et le transfère vers la carte Arduino.
Voir ci-dessous "Transférer les programmes" pour les détails.
Le menu est sensible au contexte ce qui signifie que seulement les items correspondant au
travail en cours sont disponibles.
Cette fonction formate votre code joliment : c'est à dire ajuste le code de façon à ce que
les accolades soient alignées ey que ce que les instructions entre les accolades soient
davantage décalées.
Board (Carte) :
Sélectionne la carte Arduino que vous utilisez. Voir ci-dessous pour la description des
différentes cartes.
Serial Port (Port Série) :
Ce menu contient tous les ports séries (réels ou virtuels) présents sur votre ordinateur.
Il est automatiquement mis à jour à chaque fois que vous ouvrez le niveau supérieur du
menu outils.
Burn Bootloader (Graver le bootloader) :
Cette fonctionnalité vous permet de graver le bootloader dans le microcontrôleur sur
une carte Arduino. Ceci n'est pas nécessaire pour une utilisation normale de votre carte
Arduino (le bootloader est déjà gravé dans votre carte quand vous l'achetez) mais peut
être utile si vous achetez un nouvel ATmega (qui sera normalement livré sans
bootloader). Assurer vous que vous avez sélectionné la carte correcte dans le
menuBoards avant de graver le booloader. Si vous utilisez un AVR ISP, vous devez
sélectionner l'item correspondant à votre programmeur dans le menu Serial Port.
P.F.E Annexe1
Menu Help
Propose tout ce qui peut être utile pour être aidé lors de l'écriture des
programmes, notamment un lien vers la référence du langage en anglais.
Vous permet de gérer les programmes avec plus d'un fichier (chaque fichier
apparaissant dans son propre onglet). Ces fichiers doivent être des fichiers Arduino
normaux (no extension), des fichiers C (extension .c ), des fichiers C++ (.cpp) ou des
fichiers d'entête (.h).
P.F.E Annexe2
Pour créer une interface, il faut disposer d'une fenêtre de base dans laquelle seront insérés les
éléments graphiques (objets). A noter que tout dessin graphique ou affichage d'image (résultat
de plot, mesh, imshow) peut servir de fenêtre de base.
fig1 = figure
Le paramètre fig1 est le handle de la fenêtre, c'est à dire le numéro de repère de la fenêtre
attribué par Matlab à sa création. Il est possible d'appliquer des fonctions sur cette fenêtre
(redimensionnement, ajout de menus, boutons, ...) en précisant dans les fonctions le
handleauquel elle s'applique. La fenêtre active à un instant donné a pour handle implicite gcf.
De façon générale, tout objet graphique se voit attribué un handle; ce handle sert de référence
à cet objet dans l'application.
get(fig1)
Les principales propriétés sont : le titre, la position et la dimension dans l'écran, la couleur de
fond, la présence et le type de menus, le redimensionnement...
Toute propriété (modifiable!) peut être modifiée en définissant une nouvelle valeur pour la
propriété considérée (valeur numérique, chaîne, liste de valeur, tableau...)
La fenêtre de base est l'écran qui a pour handle "0". Par get (0 , 'ScreenSize' ), on obtient la
taille de l'écran physique de l'écran. Ces valeurs permettent de fixer la taille d'une fenêtre en
P.F.E Annexe2
rapport avec la dimension physique de l'écran et d'éviter de créer une application qui
"déborde" de l'écran!
La taille et la position de la fenêtre (ou d'un objet) se fixent par modification de sa propriété
ou contrôle "position", comprenant les coordonnées (Xor,Yor) du coin inférieur gauche et ses
dimensions (Xfen,Yfen):
L'ensemble des propriétés modifiables d'un objet est donné par set(handle_objet) . La liste
s'affiche avec les valeurs possibles pour les différentes propriétés; les valeurs par défaut sont
signalées par des crochets { } . Exemple :
set( fig1 )
delete (handle_objet)
La suppression d'un objet entraîne la suppression des objets qui lui sont liés (objets fils).
L'insertion d'un objet dans une fenêtre se fait par la fonction "uicontrol", dont le premier
paramètre est le handle de la figure de référence. Le deuxième paramètre précise le "style"
ou type d'objet à insérer.
Exemple le "texte fixe" est l'objet le plus simple; il permet de placer un texte dans la fenêtre.
A la différence du "texte", on remarque que cet objet est "cliquable" à la souris, avec
modification de son aspect (cette fonction est prise en charge sans aucune programmation
par l'utilisateur).
La fonctionnalité la plus courante est la modification de la valeur associée à l'objet (si elle
existe): pour les objets destinés à faire une saisie (case à cocher, curseur, champ de saisie,
choix de liste...), Matlab gère automatiquement la valeur associée. Cette valeur est
récupérable par toute partie de l'application par la fonction "get" :
Cette fonctionnalité permet de saisir la valeur d'une variable par l'interface graphique plutôt
que par le clavier.
La deuxième interaction courante est une action déclenchée par le "clic" souris sur l'objet
(appuyé puis relâché): la fonction associée est décrite dans la propriété "callback" de l'objet.
Cette fonction peut être une instruction de base Matlab ou une fonction définie par
l'utilisateur (stockée en fichier .m)
Remarquer que la fonction est décrite en chaîne de caractères avec des " ' " en début et fin,
ce qui oblige à doubler les " ' " pour ceux qui sont inclus dans la chaîne principale.
P.F.E Annexe2
Cette description en chaîne permet de définir en callback une liste d'instruction, ce qui évite
d'écrire une multitude de petites fonctions externes dédiées aux callbacks.
Certains objets n'ont pas de callback (cas des figures) mais possèdent d'autres actions
associées à la souris. Leur emploi est identique au callback classique (description de la
fonction en liste d'instructions). Les principales sont :
fig1 = figure ;
set( fig1 , 'WindowButtonDownFcn' , 'get( fig1 , ' 'CurrentPoint ' ' ) ' );
Si on désire obtenir des coordonnées dans l'espace de mesure des axes d'un graphique,
plutôt qu'en pixels de la figure, il faut faire référence aux axes ( gca ) dans la fonction de clic
:plot( 20 , 20 , ' r+ ' ) % tracé d'une croix rouge au centre
Certains objets possèdent une fonction callback et une fonction associée au clic souris (par
exemple : ButtonDownFcn)
III - Principaux Objets Graphiques
Bouton poussoir
bp1= uicontrol ( fig1 , 'style' , 'push' , 'position' , [10 100 60 30 ] ,...'string' , 'Début' , 'callback'
, 'plot(T,X)' )
Lorsqu'on clique sur le bouton poussoir, il provoque l'exécution de la fonction indiquée dans
le 'callback'. Cette fonction peut être une instruction de base Matlab ou une liste
d'instruction, ce qui évite d'écrire une multitude de petites fonctions exécutées pat les
callbacks.
Par cette commande, on peut rendre inactif certaines commandes, par exemple lorsqu'il
manque des informations pour traiter un problème.
P.F.E Annexe2
Menus
Généralement, les menus de la fenêtre d'application ne sont pas les menus standard (voir
vue ci-dessus mais des menus spécifiques. Un menu est un titre complété par une liste de
sous-menu.
Les actions (callbacks) sont généralement lancés à partir des sous-menus. L'ajout de menus
spécifique se fait par :
Un sous-menu est un élément du menu principal, donc de l'entité père. Il est donc déclaré
car menu du menu principal.
Pour enlever les menus standards de la fenêtre, il faut fixer la propriété "Menubar" à la
valeur par défaut menubar :
set(fig1,'menubar',menubar);
Ascenseur ou slider
P.F.E Annexe2
L'ascenseur a pour objectif de fixer la valeur d'un paramètre entre deux bornes fixées. La
valeur prise par la variable est représentée par la position du curseur.
Les textes (variable affectée, valeurs..) ne sont pas définis par le slider. Il faut le compléter
par des éléments textes convenablement placés et paramétrés; leur valeur est à modifier
par le callback du slider.
fig1=figure;
texte1=uicontrol(fig1,'Style','text','String',0,'Position', [140,70,80,20],'BackGroundcolor','w');
Texte Editable
Text1 = uicontrol ( fig1 , 'style' , ' edit' , 'position', [100,50,150,20] , 'Max' , 1 , 'string' , '0' );
Généralement, Il faut associer un texte fixe pour préciser le rôle de la fenêtre de saisie à
l'utilisateur. Exemple : le texte est placé à gauche de la fenêtre de saisie
uicontrol ( fig1 , 'style' , ' texte' , 'position', [10,50,90,20] , 'string' , 'Valeur A' );
P.F.E Annexe2
Liste de choix
La liste de choix ou pop-up menu permet de sélectionner une valeur parmi une liste.
Généralement, cette valeur est un texte. La valeur retournée lors du choix (paramètre
'Value') est le numéro de ligne du choix.
Bouton Radio
fig1 = figure ;
radio1 = uicontrol( fig1 , 'style' , 'Radio' , 'Position' , [ 30 20 130 25 ] , 'String' , ' OptionA ' );
radio2 = uicontrol( fig1 , 'style' , 'Radio' , 'Position' , [ 30 45 130 25 ] , 'String' , ' OptionB ' );
uicontrol( fig1 , 'style' , 'Text' , 'Position' , [ 30 70 130 30 ] , 'String' , ...' Choix des Options ' ,
'FontWeight', 'bold' );
Remarquer que les choix ne sont pas exclusifs (chaque choix peut être sélectionné). Pour
obtenir l'exclusion mutuelle, il faut agir sur les valeurs de choix par les callbacks.
set( radio2 , 'callback' , 'set( radio1 , ' ' Value' ' , 0 ) ' ) ;
Cadre
Graphiques
Les graphiques se dessinent dans une partie de la fenêtre définie par la fonction 'subplot',
dont les paramètres sont différents de l'emploi classique (division de la fenêtre en sous-
fenêtres de taille égale)
fig1 = figure ;