Vous êtes sur la page 1sur 7

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/314236426

Implémentation d’un régulateur PI pour l’asservissement de vitesse d’un


moteur à courant continu à l’aide de la carte Arduino UNO et Matlab

Conference Paper · April 2015

CITATIONS READS

0 7,567

1 author:

Nizar Chelly
Higher Institute of Technological Studies Sousse
7 PUBLICATIONS   2 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

FORMATION ARDUINO MATLAB/SIMULINK View project

All content following this page was uploaded by Nizar Chelly on 05 March 2017.

The user has requested enhancement of the downloaded file.


Implémentation d’un régulateur PI pour
l’asservissement de vitesse d’un moteur à courant
continu à l’aide de la carte Arduino UNO et Matlab

Nizar Chelly , Technologue Génie Électrique


ISET Sousse
Email :chellynizar@gmail.com
Tel : +216 50 480 027

Résumé—L’article suivant présente la conception et l’implé- III. P RÉSENTATION DE LA CARTE A RDUINO


mentation d’un régulateur Proportionnel Intégrateur sur une
maquette constitué d’un DC moteur. La conception de la com- Arduino est un projet créé par une équipe de développeurs,
mande est basée sur l’environnent Matlab et L’implémentation composée de six individus : Massimo Banzi, David Cuartielles,
sera réalisé sur la carte Arduino UNO, pour l’asservissement de Tom Igoe, Gianluca Martino, David Mellis et Nicholas Zam-
vitesse du moteur à courant continu. betti. Cette équipe a créé le "système Arduino". C’est un outil
qui va permettre aux débutants, amateurs ou professionnels de
I. I NTRODUCTION créer des systèmes électroniques plus ou moins complexes [9].
Les systèmes embarqués de nos jours prennent une place
importante dans tous les domaines de la vie quotidienne : A. Le matériel : Arduino UNO
l’aéronautique [1], l’automobile [2], la securité [3], les té- La carte Arduino a les spécifications suivantes [10] :
lécoms, le médical [4], la domotique [5], les machines ind-
sutriels [6]. L’intégration des systèmes embarqués dans les
produits industriels est devenue une des principales sources
d’innovation. Les moteurs à courant continu sont largement
utilisés dans l’indsutrie et la robotique [7]. L’article en cours a
pour but de concevoir et de réaliser un système embarqué pour
l’asservissement de vitesse d’un moteur à courant continu, basé
sur le système Arduino.

II. P RÉSENTATION DE LA MAQUETTE DU MOTEUR À


COURANT CONTINU
F IGURE 2: La Carte Arduino Uno

La maquette utilisée est constituée de :


– Un moteur à courant continu avec un engrenage qui – Microcontroller : ATmega328 (8bits CPU, 16 MHz, 2
permet la rotation d’un axe sur le quel on a fixé une KB SRAM, 32 KB flash storage)
roue. – 14 Entres /Sorties Numérique, 6 Entrée Analogique
– Un encodeur optique qui permet de capter l’angle de
rotation. B. Le logiciel Arduino
– Une carte arduino UNO
– Une carte électronique d’adaptation entre la carte ar- Arduino IDE ( Integrated Development Environment ).
duino UNO et le moteur. Le logiciel est gratuit et open source. Ce logiciel permet de
La maquette peut représenter le système de motorisation d’un programmer la carte Arduino pour réaliser l’interfacage avec
robot telle que dans [8]. Matlab/simulink et implémenter la commande directement sur
la carte.

F IGURE 1: Description de la Carte Arduino "Uno" F IGURE 3: L’interface du logiciel Arduino


IV. C OMMANDE DU MOTEUR À COURANT CONTINU AVEC doit aussi supporter la variation du rapport cyclique du signal
LA CARTE A RDUINO PWM. Parmi les transistors pouvant satisfaire ces conditions
on a choisit le TIP121.
A. Présentation des sorties analogiques (mode PWM)
Les composants utilisés sont les suivants :
La carte Arduino Uno dispose de 6 sorties (3,5,6,9,10
et 11) qui peuvent être utilisées en mode PWM, c’est-à-dire
en modulation de largeur d’impulsion.Ce sont des signaux
logiques binaires de fréquence constante (500Hz) mais de
rapport cyclique variable.

F IGURE 6: Branchement de la carte Arduino UNO avec un


moteur DC

F IGURE 4: Description du signal PWM – Le transistor TIP122 : C’est un transistor Darlington


NPN qui d’après la fiche technique permet d’amplifier
le courant jusqu’à 5A avec son gain d’amplification ”au
Lorsque le moteur est alimenté par ce type de tension, tout minimum” β = 1000
se passe comme si il était alimenté par une tension continue – La diode 1N4004 : Dans une charge inductive (bobines),
ajustable entre 0V (rapport cyclique= 0) et 5V (rapport le courant ne peut pas se stopper instantanément. Cette diode
cyclique=255) [11].Ces sorties doivent être initialisées comme joue le rôle d’une diode de roue libre qui permet au courant
des sorties digitales. de s’arrêter progressivement.

τo C. Exemples de programme pour la commande du moteur


Vout = Vs × ; avec : τc = 2ms (1)
τc i n t cmd = 9 0 ;
La syntaxe de l’instruction permettant de générer le signal void setup ( )
PWM est la suivante : analogWrite(pin, valeur) ; {
– pin : la pin sur la quelle on souhaite envoyer le signal pinMode ( 6 ,OUTPUT ) ;
(3,5,6,9,10 ou 11). }
– valeur : le rapport cyclique entre 0 et 255. void loop ( )
{
a n a l o g W r i t e ( 6 , cmd ) ;
}

V. E XPLOITATION DE L’ ENCODEUR OPTIQUE AVEC LA


CARTE A RDUINO

A. Présentation du capteur
L’encodeur optique est un capteur de position extrêmement
précis, il est constitué de deux parties :
– un disque renferment des bandes opaques et transpa-
rentes sur sa périphérie.
– un module qui sert à acquérir les alternances (opaque/-
transparent) pour les produire en formes d’ondes analo-
giques.
Le module contient un émetteur et un récepteur. La partie
émettrice se compose :
– une diode luminescente LED(Light Emitting Diode).
– une lentille.
F IGURE 5: Exemples de variation du rapport cyclique La lumière émise par la diode se transforme en faisceaux
parallèles à l’aide de cette lentille située directement devant la
diode. A l’opposé de l’émetteur (LED +Lentille) on trouve la
partie réceptrice englobant les photodiodes et les comparateurs
B. Présentation du schéma électronique
ayant comme sortie les chaines A et B.
Le circuit électronique ci-dessous permet de contrôler le Lorsque le moteur tourne, le disque solidaire l’axe du
moteur à courant continue à partir des sorties PWM de la moteur permet l’alternance entre bandes opaques et bandes
carte Arduino. Ce circuit doit amplifier le courant de sortie transparents d’où l’interruption des faisceaux lumineux. Les
de la carte Arduino avec la résistance de protection 1KΩ) et photodiodes qui détectent ces interruptions sont l’origine de la
– Lorsque la voie A passe au niveau bas, la voie B est au
niveau bas.
Quand le moteur tourne dans le sens négatif, lors d’une
interruption sur la voie A, les niveaux de A et B sont ont le
même niveau. Le code à implémenter sur l’Arduino est détaillé
dans le paragraphe suivant.

C. Programme d’acquisition des impulsions

F IGURE 7: Circuit interne du module 1) l’instruction de base pour l’acquisition: Le programme


d’acquisition des impulsions se base sur la fonction suivante :
a t t a c h I n t e r r u p t ( i n t e r r u p t i o n , f o n c t i o n , mode )
formation du signal de sortie.
Ces détecteurs sont également espacés de telle sorte que sur Lorsqu’une interruption externe survient cette instruction spé-
une paire de détecteurs une période opaque (0 Volts) corres- cifie la fonction à appeler. La plupart des cartes Arduino ont
pond à une période transparente (5 Volts) sur la paire adjacente. deux interruptions externes : interruption externe n0 sur la
Deux comparateurs reçoivent ces signaux et produisent les broche numérique 2 et interruption externe n1 sur la broche
sorties finales pour les canaux A et B. Le canal A est en numérique 3.
quadrature de phase avec le canal B. Les paramètres de cette fonction sont :
– interruption : le numéro de l’interruption (type int)
B. Principe de fonctionnement – fonction : la fonction à appeler quand l’interruption
survient ; la fonction doit recevoir aucun paramètres et
L’encodeur optique fournit deux signaux carrés en qua- ne renvoie rien. Cette fonction est également appelée une
drature, comme sur la capture ci-dessous : Ces deux signaux routine de service d’interruption (ou ISR).
– mode : définit la façon dont l’interruption externe doit
être prise en compte. Quatre constantes ont des valeurs
prédéfinies valables :
– LOW : pour déclenchement de l’interruption lorsque la
broche est au niveau BAS
– CHANGE : pour déclenchement de l’interruption lorsque
la broche change d’état BAS/HAUT
– RISING : pour déclenchement de l’interruption lorsque la
broche passe de l’état BAS vers HAUT (front montant)
– FALLING : pour déclenchement de l’interruption lorsque
la broche passe de l’état HAUT vers l’état BAS (front
descendant)
2) Code Arduino pour l’acquisition:
i n t pinA = 2 ;
F IGURE 8: Les deux signaux issues de l’encodeur optique
i n t pinB = 3 ;
i n t iValue = 0;
permettent de mesurer à la fois la vitesse et le sens de rotation. void setup ( ) {
La mesure de la vitesse se fait simplement en comptant S e r i a l . begin (9600);
le nombre d’impulsions pendant un temps fixe. La cadence pinMode ( pinA , INPUT ) ;
d’échantillonnage utilisée pour l’asservissement sera de 0.01 pinMode ( pinB , INPUT ) ;
s. a t t a c h I n t e r r u p t ( 0 , e n c o d e r C l i c k , RISING ) ;
/ / r o u t i n e de s e r v i c e d ’ i n t e r r u p t i o n ( ou ISR ) .
1) Comptage du nombre d’impulsions: Il suffit pour cela }
d’observer les courbes ci-dessus, obtenues alors que le moteur void loop ( )
tourne dans le sens positif. On constate que : {
– Lorsque la voie A passe au niveau haut, la voie B est S e r i a l . p r i n t l n ( iValue ) ;
au niveau bas delay (10);
– Lorsque la voie A passe au niveau bas, la voie B est au }
niveau haut void encoderClick ( ) ( pin2 )
Quand le moteur tourne dans le sens positif, lors d’une {
interruption sur la voie A, les niveaux de A et B sont donc i n t valA = d i g i t a l R e a d ( pinA ) ;
inversés. i n t v a l B = d i g i t a l R e a d ( pinB ) ;
Si le moteur tourne dans le sens négatif. On constate que : i f ( valA ! = v a l B ) {
– Lorsque la voie A passe au niveau haut, la voie B est i V a l u e ++;
au niveau haut. }
else { C. Détermination de la fonction de transfert G(z)
i V a l u e −−;
} Après avoir déterminer la réponse (la sortie) du système,la
} détermination de la fonction de transfert G(z) est assurée par
l’outil System identification Tool de Matlab.
La fonction de transfert retrouvé est la suivante :
0.4364
VI. M ODÉLISATION DU SYSTÈME G(z) = (2)
1 − 1.6.z −1 + 0.8548.z −2
Le but de cette partie est de déterminer la fonction
de transfert échantillonnée de notre système en boucle ou- La détermination du régulateur est constituée de deux
vert notée G(z), La période d’échantillonnage choisie est de parties.
10ms.L’entrée du système est la tension u(z) en volts et la La première partie consiste à utiliser l’outil Matlab PID Tuning
sortie est la vitesse V (z) en (impulsion/10ms). pour déterminer les différents paramétrés de notre régulateur
PI à savoir Kp ,Ki en fonction de notre objectif de commande,
à savoir
A. Présentation de l’étape d’identification avec Matlab – un temps de réponse inférieur à 0.5 seconde
Cette étape est constituée de deux parties. La première est – une erreur statique nulle
assuré par l’environnement Simulink et le package ArduinoIO La deuxième partie consiste à implémenter le régulateur sur la
[12] pour l’envoie et l’acquisition des données. La deuxième carte Arduino UNO.
partie est assuré par l’outil System identification sous Matlab
[12].

F IGURE 11: Emplacement de l’outil PID tuning


F IGURE 9: L’utilisation de l’outil System Identification

D. Le régulateur PI Numérique
B. Acquisition de la réponse indicielle du système
Ce type de correcteur est défini par l’équation différentielle
Plusieurs méthodes sont utilisées pour la modélisation d’un suivante :
système comme la détermination des équations physiques du Z t
système, l’étude de la réponse d’un système à une entrée....etc. UP ID (t) = Kp × e(t) + Ki × e(τ )dτ (3)
Dans notre cas on va identifier notre système en étudiant la 0
réponse de notre système à échelon de tension.
Le modèle Simulink permettant de réaliser l’acquisition de la L’équation de contrôle PI numérique peut être exprimée
réponse du système à un échelon de tension est le suivant : en de diverses manières, mais une formulation générale est
donnée par l’équation suivante [3] :
X
P ID = Kp × erreur + Ki × (erreur × ∆t) (4)

L’algorithme suivant est un pseudo code d’un PI :


PI :
Error = Setpoint − Actual
I n t e g r a l = I n t e g r a l + ( Error ∗ dt )
D r i v e = ( E r r o r ∗kP ) + ( I n t e g r a l ∗ k I )
Previous_error = Error
wait ( dt )
GOTO P I
F IGURE 10: Modèle Simulink pour la détermination de la
réponse indicielle Ce pseudo code n’est pas écrit dans un langage particulier
mais donne les étapes de base pour obtenir un régulateur PI
sur n’importe quel micro contrôleur [13].
VII. I MPLÉMENTATION DE LA COMMANDE SUR LA CARTE
A RDUINO
Dans cette partie l’implémentation du régulateur PI est
faite directement sur la carte Arduino UNO selon le schéma
descriptif ci-dessous.
Les résultats obtenus sont décrient par les 3 figures ci-

F IGURE 15: La vitesse (impulsion par seconde)


F IGURE 12: Schéma synoptique de l’asservissement à implé-
menter

sur l’axe) à l’instant 6 seconde, on remarque bien que la


dessous qui représentent la sortie du système ( la vitesse commande est augmenté afin d’éliminer la perturbation et de
en impulsion/seconde), l’erreur et la commande appliquée au garder l’erreur nulle.
moteur. Ces figures sont obtenus grâce à la bibliothèque de
Matlab Instrument Control Toolbox.La consigne est fixer à 50
impulsion par seconde.

F IGURE 13: acquisition des différentes variables du système

F IGURE 16: La commande numérique appliqué au moteur


La figure ci-dessous représente l’erreur, on remarque que
l’erreur converge vers zéro en un temps de réponse inférieur
à 0.5 seconde et l’erreur statique est nulle, ce qui confirme
l”effet du Proportionnel Intégrateur.
VIII. C ONCLUSION
On a montré dans cet article les différentes parties pour
l’implémentation d’un régulateur à savoir l’étude du capteur
(encodeur optique), l’interface électronique pour la commande
du moteur, l’identification du système, l’implémentation du
régulateur sur la carte Arduino UNO et dans la dernière partie
on a exposé les résultats graphique.

R ÉFÉRENCES
[1] M. Lagasse, “Emergence d’un nouveau modèle économique d’airbus et
ses conséquences sur les sous/co-traitants à travers l’hypothèse de finan-
ciarisation : une illustration par les systèmes embarqués aéronautiques,”
Ph.D. dissertation, Toulouse 1 Capitole, 2010.
[2] K. Lemke, C. Paar, and M. Wolf, Embedded security in cars. Springer,
F IGURE 14: L’erreur du système 2006.
[3] P. Koopman, “Embedded system security,” Computer, vol. 37, no. 7,
pp. 95–97, 2004.
La figure ci-dessous représente la sortie du système c’est à [4] W. H. Wu, A. A. Bui, M. A. Batalin, L. K. Au, J. D. Binney, and W. J.
dire la vitesse en impulsion par seconde, on remarque que la Kaiser, “Medic : Medical embedded device for individualized care,”
sortie converge vers la consigne voulue. Artificial Intelligence in Medicine, vol. 42, no. 2, pp. 137–152, 2008.
Cette figure représente la commande appliquée au moteur avec [5] L. Dobrescu, “Domotic embedded system,” arXiv preprint
l’introduction d’une perturbation additive (force de frottement arXiv :1412.4406, 2014.
[6] D. P. Desai and D. Patel, “Design of control unit for cnc machine
tool using arduino based embedded system,” in Smart Technologies
and Management for Computing, Communication, Controls, Energy and
Materials (ICSTM), 2015 International Conference on. IEEE, 2015,
pp. 443–448.
[7] V. M. Hernández-Guzmán, V. Santibáñez, and G. Herrera, “Control of
rigid robots equipped with brushed dc-motors as actuators,” INTERNA-
TIONAL JOURNAL OF CONTROL AUTOMATION AND SYSTEMS,
vol. 5, no. 6, p. 718, 2007.
[8] F. Aguilar-Acevedo and V. Granados Alejo, “Using open-source plat-
form for trajectory control of dc motors,” in Power, Electronics and
Computing (ROPEC), 2013 IEEE International Autumn Meeting on.
IEEE, 2013, pp. 1–5.
[9] J.-D. Warren, J. Adams, and H. Molle, Arduino for Robotics. Springer,
2011.
[10] J. Boxall, Arduino workshop : A Hands-On introduction with 65
projects. No Starch Press, 2013.
[11] T. Hirzel. Pwm. [Online]. Available :
https ://www.arduino.cc/en/Tutorial/PWM
[12] MATLAB, version (R2014a). The MathWorks Inc., 2014.
[13] O. Jones, “Design and development of an embedded dc motor controller
using a pid algorithm,” 2010.

View publication stats

Vous aimerez peut-être aussi