28
CHELLY Nizar CHARED Amine FORMATION ARDUINOSIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu à l’aide de la carte Arduino UNO ISET Rades 2/3 Juin 2015

FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Embed Size (px)

Citation preview

Page 1: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

CHELLY NizarCHARED Amine

FORMATION ARDUINO↔SIMULINK/ANDROID

Asservissement de vitesse d’un moteur àcourant continu à l’aide de la carte Arduino UNO

ISET Rades 2/3 Juin 2015

Page 2: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

TABLE DES MATIÈRES TABLE DES MATIÈRES

Table des matières1 Présentation de la carte Arduino 4

1.1 Le matériel : Arduino UNO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2 Le logiciel Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Structure d’un programme Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Présentation de la maquette 6

3 Commande du moteur à courant continu avec la carte Arduino 63.1 Présentation des sorties analogiques (mode PWM) . . . . . . . . . . . . . . . . . . . . . . . . . . 63.2 Présentation du schéma électronique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.3 Exemples de programme pour la commande du moteur . . . . . . . . . . . . . . . . . . . . . . . . 8

4 Exploitation de l’encodeur optique avec la carte Arduino 84.1 Présentation du capteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.2 Principe de fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

4.2.1 Comptage du nombre d’impulsions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94.3 Programme d’acquisition des impulsions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4.3.1 l’instruction de base pour l’acquisition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104.3.2 Code Arduino pour l’acquisition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

5 L’interfacage Arduino↔Matlab/Simulink 115.1 L’environnement Matlab/Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115.2 ArduinoIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5.2.1 Pré-chargement du programme dans la carte Arduino . . . . . . . . . . . . . . . . . . . . 125.2.2 Installation du package ArduinoIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.2.3 Exploitation de la bibliothèque ArduinoIO sous Simulink . . . . . . . . . . . . . . . . . . 125.2.4 Exploitation du package ArduinoIO sous Matlab . . . . . . . . . . . . . . . . . . . . . . . 13

5.3 Arduino Target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

6 Commande du moteur avec Arduino/Simulink 136.1 Utilisation du package ArduinoIO Libraray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

7 Exploitation de l’encodeur optique avec Arduino/Simulink 14

8 Modélisation du système 148.1 Présentation de l’étape d’identification avec Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . 148.2 Acquisition de la réponse indicielle du système . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158.3 Détermination de la fonction de transfert G(z) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

9 Implémentation de la commande sur Simulink 199.1 Synthèse du régulateur numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209.2 Implémentation de la commande sous Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

10 Implémentation de la commande sur la carte Arduino 2310.1 Le régulateur PID Numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2310.2 L’implémentation du régulateur PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

1

Page 3: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

TABLE DES FIGURES TABLE DES FIGURES

Table des figures1 Description de la Carte Arduino "Uno" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 L’interface du logiciel Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Une vue de la maquette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Description du signal PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Exemples de variation du rapport cyclique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Branchement de la carte Arduino UNO avec un moteur DC . . . . . . . . . . . . . . . . . . . . . 77 Circuit interne du module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Les deux signaux issues de l’encodeur optique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 ArduinoIO Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1210 Les Blocs d’ArduinoIO nécessaires pour la commande . . . . . . . . . . . . . . . . . . . . . . . . 1211 Emplacement COM de la carte Arduino UNO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1312 Envoie de la commande PWM sous ArduinIO Library . . . . . . . . . . . . . . . . . . . . . . . . 1413 acquisition des impulsions sous Arduino IO Library . . . . . . . . . . . . . . . . . . . . . . . . . . 1414 L’utilisation de l’outil System Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415 Modèle Simulink pour la détermination de la réponse indicielle . . . . . . . . . . . . . . . . . . . 1516 L’interface de l’outil System identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1517 Choix des types des données ”Time Domain Data” . . . . . . . . . . . . . . . . . . . . . . . . . . 1618 Saisie des données relatives aux Input et Output du système . . . . . . . . . . . . . . . . . . . . . 1619 Choix de la description du système à estimer”Tranfer Function” . . . . . . . . . . . . . . . . . . . 1720 Choix du nombre des pôles et zéros de la fonction de transfert à estimer . . . . . . . . . . . . . . 1721 Visualisation du résultat de l’estimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1822 Récupération de la fonction de transfert estimée . . . . . . . . . . . . . . . . . . . . . . . . . . . 1823 Schéma synoptique de l’asservissement à implémenter . . . . . . . . . . . . . . . . . . . . . . . . 1924 Emplacement de l’outil PID tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1925 Interface de l’outil ”PID tuning” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2026 Importation du modèle estimé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2027 Interface de l’outil ”Import Linear System” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2128 Choix du régulateur à implémenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2129 Récupération des paramétrés du régulateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2230 Modèle Simulink d’asservissement de température . . . . . . . . . . . . . . . . . . . . . . . . . . 2231 Saisie des paramétrés du régulateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2232 Schéma synoptique de l’asservissement à implémenter . . . . . . . . . . . . . . . . . . . . . . . . 23

2

Page 4: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

Formation Arduino⇔ Simulink/Android

Asservissement de vitesse d’un moteurà courant continu à l’aide de la carteArduino UNO

CHELLY, NizarIngénieur en Électrique et [email protected]+216 50 48 00 27

CHARED, AmineIngénieur en [email protected]+216 50 02 33 70

Nizar CHELLY-Amine CHARED 3 ISET RADES 2015

Page 5: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

1 Présentation de la carte Arduino

Arduino est un projet créé par une équipe de développeurs, composée de six individus :Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, David Mellis et NicholasZambetti. Cette équipe a créé le "système Arduino". C’est un outil qui va permettre auxdébutants, amateurs ou professionnels de créer des systèmes électroniques plus ou moinscomplexes.

1.1 Le matériel : Arduino UNO

C’est un circuit imprimé comportant tous les composants électroniques nécessaires pour fairefonctionner un microcontrôleur (Atmega 328) associé à une interface USB lui permettant decommuniquer avec un ordinateur.

Figure 1 – Description de la Carte Arduino "Uno"

– Microcontroller : ATmega328– Operating Voltage : 5v– Input Voltage (recommended) : 7-12 v– Input Voltage (limits) : 6-20 v– DC Current per I/O Pin : 40mA– DC Current for 3.3V Pin :50mA– Flash Memory :32 KB– Clock Speed : 16MHz– Pins assignments :– Analog read(A0-A5)– Analog write[PWM] (3,5,6,9,10,11)– Digital read(2-19)– Digital write(2-19)

1.2 Le logiciel Arduino

Arduino IDE ( Integrated Development Environment ). Le logiciel est gratuit et open sourcedont la simplicité d’utilisation est remarquable.Ce logiciel va nous permettre de programmer lacarte Arduino pour :

– Réaliser l’interfacage avec Matlab/simulink– Implémenter la commande directement sur la carte.

Nizar CHELLY-Amine CHARED 4 ISET RADES 2015

Page 6: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

Figure 2 – L’interface du logiciel Arduino

1.3 Structure d’un programme Arduino

Le langage de programmation Arduino dérive du langage C++ et il en respecte les règles desyntaxe :1. Une ligne qui commence par "//" est considérée comme un commentaire.2. Un paragraphe qui commence par "/*" et qui se termine par "*/" est considéré comme un

commentaire3. Toute ligne d’instruction de code doit se terminer par un point virgule " ;"4. Un bloc d’instructions (définition d’une fonction, boucle "while" ou "if"/"else"...) doit être

délimité par des accolades ouvrantes "" puis fermantes "".5. Toutes les variables doivent être déclarées, ainsi que leur type (int,float,...) avant d’être

utilisées.Un programme (ou "sketch") Arduino est constitué de 2 fonctions distinctes :1. La fonction de configuration "void setup" exécutée une seule fois au lancement du pro-

gramme.2. La fonction "void loop" qui est ensuite exécutée indéfiniment en boucle.

Remarque :On peut relancer le programme en actionnant le bouton poussoir "reset" sur la carte.

Exemple : le programme "Blink" :

i n t DEL = 5 ;void setup ( )pinMode (DEL, OUTPUT) ;On i n i t i a l i s e l a borne 5 de l ’ Arduino( nomm e "DEL" ) comme une s o r t i e .void loop ( )d i g i t a lWr i t e (DEL, HIGH) ;On met l a borne 5 au niveaul og i que haut (+5V) : l a diode s ’ al lume .de lay (1000) ; On attend un d e l a i de 1000ms ( s o i t 1 s ) .d i g i t a lWr i t e (DEL, LOW) ;On met l a borne 5 au niveau l og i que bas (0V)

Nizar CHELLY-Amine CHARED 5 ISET RADES 2015

Page 7: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

l a diode s ’ teint .de lay (1000) ; On attend un d e l a i de 1000ms ( s o i t 1 s ) .Et ainsi de suite tant que le circuit est alimenté.

2 Présentation de la maquette

La maquette est constituée d’un capteur de position ”encodeur optique ” et un moteur àcourant continu DC MOTOR.Le capteur et le moteur sont installés dans une maquette en bois.La figure suivante schématise la connexion de la carte Arduino UNO avec l’entrée et la sortiedu système (DC MOTOR + encodeur optique). La figure ci dessous montre une vue réelle de lamaquette utilisée.

Figure 3 – Une vue de la maquette

3 Commande du moteur à courant continu avec la carte Arduino

3.1 Présentation des sorties analogiques (mode PWM)

La carte Arduino Uno dispose de 6 sorties (3,5,6,9,10 et 11) qui peuvent être utilisées enmode PWM, c’est-à-dire en modulation de largeur d’impulsion.Ce sont des signaux logiquesbinaires de fréquence constante (500Hz) mais de rapport cyclique variable.

Figure 4 – Description du signal PWM

Lorsqu’un moteur ou une lampe est alimenté par ce type de tension, tout se passe commesi il était alimenté par une tension continue ajustable entre 0V (rapport cyclique= 0) et 5V(rapport cyclique=255).Ces sorties doivent être initialisées comme des sorties digitales.

Vout = Vs ×τo

τc

; avec : τc = 2ms (1)

Nizar CHELLY-Amine CHARED 6 ISET RADES 2015

Page 8: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

La syntaxe de l’instruction permettant de générer le signal PWM est la suivante : analog-Write(pin, valeur) ;

– pin : la pin sur la quelle on souhaite envoyer le signal (3,5,6,9,10 ou 11).– valeur : le rapport cyclique entre 0 et 255.

Figure 5 – Exemples de variation du rapport cyclique

3.2 Présentation du schéma électronique

Le circuit électronique ci-dessous permet de contrôler un moteur à courant continue à partirdes sorties PWM de la carte Arduino. Ce circuit doit amplifier le courant de sortie de la carteArduino avec la résistance de protection 1KΩ) et doit aussi supporter la variation du rapportcyclique du signal PWM. Parmi les transistors pouvant satisfaire ces conditions on a choisit leTIP121.Les composants utilisés sont les suivants :

Figure 6 – Branchement de la carte Arduino UNO avec un moteur DC

– Le transistor TIP122 : C’est un transistor Darlington NPN qui d’après la fiche techniquepermet d’amplifier le courant jusqu’à 5A avec son gain d’amplification ”au minimum”β = 1000

– La diode 1N4004 : Dans une charge inductive (bobines), le courant ne peut pas se stopperinstantanément. Cette diode joue le rôle d’une diode de roue libre qui permet au courantde s’arrêter progressivement.

Nizar CHELLY-Amine CHARED 7 ISET RADES 2015

Page 9: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

3.3 Exemples de programme pour la commande du moteur

– Commande direct du moteur avec la carte Arduinoi n t cmd=90 ; //commandevoid setup ( )pinMode (6 ,OUTPUT) ; // Conf igurat ion du pin 6 comme s o r t i evoid loop ( )analogWrite (6 ,cmd) ;// Trans f e r t de ce s donnees sur l a pin 6 pour genere r l e s i g n a l PWM

– Changement de la commande avec la carte Arduino via le moniteur sériei n t cmd ; //commandevoid setup ( )

S e r i a l . begin (9600) ;// ouvre l e port s e r i e , f i x e l e deb i t 9600 bauds

void loop ( )i f ( S e r i a l . a v a i l a b l e ( ) ) cmd=( S e r i a l . read ()−48)∗100+( S e r i a l . read ()−48)∗10+( S e r i a l . read ()−48)∗1 ;// l e c t u r e des donnees a r r i v e e sanalogWrite (5 ,cmd) ;// Trans f e r t de ce s donnees sur l a pin 6 pour genere r l e s i g n a l PWM

Se r i a l . p r i n t l n (cmd) ;de lay (100) ;// d e l a i de 100ms avant l a nouve l l e a c q u i s i t i o n

4 Exploitation de l’encodeur optique avec la carte Arduino

4.1 Présentation du capteur

L’encodeur optique est un capteur de position extrêmement précis, il est constitué de deuxparties :

– un disque renferment des bandes opaques et transparentes sur sa périphérie.– un module qui sert à acquérir les alternances (opaque/transparent) pour les produire enformes d’ondes analogiques.

Le module contient un émetteur et un récepteur. La partie émettrice se compose :– une diode luminescente LED(Light Emitting Diode).– une lentille.

La lumière émise par la diode se transforme en faisceaux parallèles à l’aide de cette lentillesituée directement devant la diode. A l’opposé de l’émetteur (LED +Lentille) on trouve la partieréceptrice englobant les photodiodes et les comparateurs ayant comme sortie les chaines A et B.Lorsque le moteur tourne, le disque solidaire l’axe du moteur permet l’alternance entre bandesopaques et bandes transparents d’où l’interruption des faisceaux lumineux. Les photodiodes quidétectent ces interruptions sont l’origine de la formation du signal de sortie.Ces détecteurs sont également espacés de telle sorte que sur une paire de détecteurs une période

Nizar CHELLY-Amine CHARED 8 ISET RADES 2015

Page 10: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

Figure 7 – Circuit interne du module

opaque (0 Volts) correspond à une période transparente (5 Volts) sur la paire adjacente. Deuxcomparateurs reçoivent ces signaux et produisent les sorties finales pour les canaux A et B. Lecanal A est en quadrature de phase avec le canal B.

4.2 Principe de fonctionnement

L’encodeur optique fournit deux signaux carrés en quadrature, comme sur la capture ci-dessous : Ces deux signaux permettent de mesurer à la fois la vitesse et le sens de rotation.

Figure 8 – Les deux signaux issues de l’encodeur optique

La mesure de la vitesse se fait simplement en comptant le nombre d’impulsions pendant untemps fixe. La cadence d’échantillonnage utilisée pour l’asservissement sera de 0.01 s.

4.2.1 Comptage du nombre d’impulsions

Il suffit pour cela d’observer les courbes ci-dessus, obtenues alors que le moteur tourne dansle sens positif. On constate que :

– Lorsque la voie A passe au niveau haut, la voie B est au niveau bas– Lorsque la voie A passe au niveau bas, la voie B est au niveau haut

Quand le moteur tourne dans le sens positif, lors d’une interruption sur la voie A, les niveauxde A et B sont donc inversés.Si le moteur tourne dans le sens négatif. On constate que :

– Lorsque la voie A passe au niveau haut, la voie B est au niveau haut.– Lorsque la voie A passe au niveau bas, la voie B est au niveau bas.

Nizar CHELLY-Amine CHARED 9 ISET RADES 2015

Page 11: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

Quand le moteur tourne dans le sens négatif, lors d’une interruption sur la voie A, les niveauxde A et B sont ont le même niveau. Le code correspondant sur l’Arduino est détaillé dans leparagraphe suivant.

4.3 Programme d’acquisition des impulsions

4.3.1 l’instruction de base pour l’acquisition

Le programme d’acquisition des impulsions se base sur la fonction suivante :a t t a ch In t e r rup t ( i n t e r rup t i on , f onct ion , mode)Lorsqu’une interruption externe survient cette instruction spécifie la fonction à appeler. Laplupart des cartes Arduino ont deux interruptions externes : interruption externe n°0 sur labroche numérique 2 et interruption externe n°1 sur la broche numérique 3.Les paramètres de cette fonction sont :

– interruption : le numéro de l’interruption (type int)– fonction : la fonction à appeler quand l’interruption survient ; la fonction doit recevoiraucun paramètres et ne renvoie rien. Cette fonction est également appelée une routine deservice d’interruption (ou ISR).

– mode : définit la façon dont l’interruption externe doit être prise en compte. Quatreconstantes 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’étatBAS/HAUT

– RISING : pour déclenchement de l’interruption lorsque la broche passe de l’état BASvers HAUT (front montant)

– FALLING : pour déclenchement de l’interruption lorsque la broche passe de l’état HAUTvers l’état BAS (front descendant)

4.3.2 Code Arduino pour l’acquisition

i n t pinA = 2 ;//Channel A connecte sur l ’ i n t e r r up t i on exte rne numero 0 ( pin2 )i n t pinB = 3 ;//Channel B connecte sur pin3i n t iValue = 0 ; // i n i t i a l i s a t i o n 0

void setup ( ) S e r i a l . begin (9600) ;pinMode (pinA , INPUT) ;pinMode ( pinB , INPUT) ;a t t a ch In t e r rup t (0 , encoderCl ick , RISING) ;// rou t in e de s e r v i c e d ’ i n t e r r up t i on ( ou ISR ) .

void loop ( )S e r i a l . p r i n t l n ( iValue ) ;// l e c t u r e des implus ions sur l e moniteur s e r i ede lay (10) ;// per i ode d ’ e chan t i l l o nag e

Nizar CHELLY-Amine CHARED 10 ISET RADES 2015

Page 12: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

void encoderCl i ck ( )// l a f onc t i on appe lee par l ’ i n t e r r up t i on exte rne numero 0 ( pin2 )

// encoder must have turned one c l i c k because i n t e r r up t 0 was t r i g g e r e d// read value from both encoder p insi n t valA = dig i t a lRead ( pinA ) ;i n t valB = dig i ta lRead ( pinB ) ;

// compare p ins to determine in which d i r e c t i o n encoder was turnedi f ( valA != valB )

// pinA ju s t changed but pinB had not yet changed// Di r e c t i on must be c l o ckw i s e i f A changes be f o r e BiValue++;

e l s e

// pinA ju s t changed and pinB had a l ready done so .// D i r e c t i on must be counter−c l o ckw i s e i f B changes be f o r e AiValue−− ;

5 L’interfacage Arduino↔Matlab/Simulink

5.1 L’environnement Matlab/Simulink

C’est un logiciel de calcul mathématique pour les ingénieurs et les scientifiques créé parMathworks.

MATLAB est un environnement de programmation pour le développement d’algorithme,d’analyse de données, de visualisation, et de calcul numérique. En utilisant MATLAB, la ré-solution des problèmes de calcul complexes se fait plus rapidement qu’avec des langages deprogrammation traditionnels, tels que C, C++, et le Fortran.

SIMULINK est un environnement pour la simulation, il fournit un environnement graphiqueinteractif et un ensemble de bibliothèques de bloc qui permettent de concevoir, simuler, mettreen application, et examiner une variété de systèmes, tel que les systèmes de communications, decommandes, de traitement des signaux, de traitement visuel, et de traitement d’image. Il existetrois possibilités d’interfacer la carte Arduino avec Matlab/Simulink, à savoir :1. Programmation de la carte Arduino Uno comme une carte d’interface.2. Utilisation du package ArduinoIO.3. Utilisation du package Arduino Target.

5.2 ArduinoIO

Cette solution consiste à utiliser la carte arduino comme une interface d’entrées(AnalogInput)/sorties(Analog/Digital Output).Ce package permet de communiquer Matlab ou Simulinkavec la carte Arduino via un câble USB.

Elle consiste à pré-charger un programme dans la carte Arduino afin que celle-ci fonctionneen serveur.Ce programme consiste à "écouter" les requêtes envoyées via la liaison série (USB) et de répondre

Nizar CHELLY-Amine CHARED 11 ISET RADES 2015

Page 13: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

à ces requêtes en renvoyant l’état d’une entrée ou en modifiant l’état d’une sortie. Ces mêmesentrées/sortie sont vues dans matlab comme des entrées logiques ou analogiques (utilisation duCAN) ou des sorties analogiques (mode PWM).

5.2.1 Pré-chargement du programme dans la carte Arduino

1. Télécharger le package ArduinoIO2. Décompresser à la racine de votre disque dur, exemple E :\arduinoio3. Ouvrir le dossier décompressé.4. Aller vers : ”ArduinoIO\pde\adiosrv” *5. Charger le fichier adiosrv.pde vers le logiciel Arduino.6. Televerser !

* adiosrv est l’abréviation de : Analog and Digital Input and Output Server for MATLAB.La carte Arduino UNO est maintenant configuré pour être utiliser comme une carte d’interfaceEntrées/Sorties.

5.2.2 Installation du package ArduinoIO

1. Lancer Matlab2013 et placer vous dans le répertoire E :\arduinoio2. Exécuter la commande : install-arduino3. Fermer et relancer Matlab puis Simulink4. Dans les bibliothèques se trouvent maintenant les blocs dans Arduino IO library.

Figure 9 – ArduinoIO Library

5.2.3 Exploitation de la bibliothèque ArduinoIO sous Simulink

Les blocs nécessaires pour notre objectif d’asservissement sont les suivants :

Figure 10 – Les Blocs d’ArduinoIO nécessaires pour la commande

– Real-Time Pacer : Ce bloc permet de ralentir le temps de simulation de sorte qu’ilsynchronise avec le temps réel écoulé.Le coefficient de ralentissement est contrôlable parl’intermédiaire du paramètre Speedup.

– Arduino IO Setup : Pour configurer sur quel port la carte Arduino UNO est connectée.Pour cela il suffit de voir dans Gestionnaire des périphériques.voir Figure 4.

Nizar CHELLY-Amine CHARED 12 ISET RADES 2015

Page 14: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

Figure 11 – Emplacement COM de la carte Arduino UNO

– Encodeur Read : Pour configurer à partir de quel pin on va realiser l’aquistion dessignaux issue du capteur (channel A et channel B).

– Encodeur Reset : Pour configurer la période de la mise à zéro de l’encodeur.– Arduino Analog Write : Pour configurer à partir de quel pin [3,5,6,9,10,11] on va envoyerla commande en PWM vers l’actionneur.

5.2.4 Exploitation du package ArduinoIO sous Matlab

Le package ArduinoIO offre une panoplie de commandes permettant d’écrire un programmesous Matlab (M-file). Pour accéder à ces commandes il faut créer un objet arduino dans l’espacede travail et spécifier le port sur lequel la carte arduino est connecté avec la commande :

>> a = arduino(′port′); (2)

Parmi les commandes qui sont accessibles on retrouve :– pinModeExemple :a.pinMode(11,’output’) // configurer la pin 11 comme sortie.

– digitalReadExemple :val=a.digitalRead(4) ; // lecture de l’etat de la pin 4

– digitalWriteExemple :a.digitalWrite(13,0) ; // mettre la pin 13 à l’etat bas 0V

– analogReadExemple :val=a.analogRead(0) ; // lecture de la pin 0 de l’ADC

– analogWriteExemple :a.analogWrite(3,10) ; // envoyer sur la pin 10 un signal pwm de rapport cyclique10/255

5.3 Arduino Target

Embedded Coder Support Package for Arduino permet de créer des applications Simulinkqui vont fonctionner de façon autonome sur la carte Arduino. on dit que la carte Arduino estdevenue une cible (Target) et elle peut fonctionner d’une façon autonome (sans avoir recours àMatlab/Simulink).

Dans la suite, on utlisera les blocs Simulink offert par le package ArduinoIO Library.

6 Commande du moteur avec Arduino/Simulink

6.1 Utilisation du package ArduinoIO Libraray

1. Pré-chargement de adiosrv.pde sur la carte Arduino UNO2. Développement du modèle Simulink

Nizar CHELLY-Amine CHARED 13 ISET RADES 2015

Page 15: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

Figure 12 – Envoie de la commande PWM sous ArduinIO Library

7 Exploitation de l’encodeur optique avec Arduino/Simulink

1. Pré-chargement de adiosrv.pde sur la carte Arduino UNO2. Développement du modèle Simulink

Figure 13 – acquisition des impulsions sous Arduino IO Library

8 Modélisation du système

Le but de cette partie est de déterminer la fonction de transfert échantillonnée de notresystème en boucle ouvert notée G(z).L’entrée du système est la tension u(z) en volts et la sortieest la vitesse V (z) en (implusion/10ms).

8.1 Présentation de l’étape d’identification avec Matlab

Cette étape est constituée de deux parties. La première est assuré par l’environnementSimulink et le package ArduinoIO pour l’envoie et l’acquisition des données. La deuxième partieest assuré par l’outil System identification sous Matlab.

Figure 14 – L’utilisation de l’outil System Identification

Nizar CHELLY-Amine CHARED 14 ISET RADES 2015

Page 16: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

8.2 Acquisition de la réponse indicielle du système

Plusieurs méthodes sont utilisées pour la modélisation d’un système comme la déterminationdes équations physiques du système, l’étude de la réponse d’un système à une entrée....etc.Dans notre cas on va identifier notre système en étudiant la réponse de notre système à échelonde tension.Le modèle Simulink permettant de réaliser l’acquisition de la réponse du système à un échelonde tension est le suivant :

Figure 15 – Modèle Simulink pour la détermination de la réponse indicielle

8.3 Détermination de la fonction de transfert G(z)

Après avoir déterminer la réponse du système, on passe à la détermination de la fonction detransfert G(z).1. Ouvrir l’outil System identification Tool

Figure 16 – L’interface de l’outil System identification

Nizar CHELLY-Amine CHARED 15 ISET RADES 2015

Page 17: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

2. Cliquer sur import data et choisir Time domain data.

Figure 17 – Choix des types des données ”Time Domain Data”

3. Entrer le nom de la variable Input et la variable Output ainsi que temps de starting time etsample time qu’on a utiliser lors de l’identification avec Simulink.Enfin cliquer sur Import.

Figure 18 – Saisie des données relatives aux Input et Output du système

4. Cliquer sur Estimate et choisir Transfer Function Models

Nizar CHELLY-Amine CHARED 16 ISET RADES 2015

Page 18: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

Figure 19 – Choix de la description du système à estimer”Tranfer Function”

5. Entrer le nombre de pôle et de zéro et cliquer sur Discrete-Time ensuite cliquer surEstimate.

Figure 20 – Choix du nombre des pôles et zéros de la fonction de transfert à estimer

6. Vous pouvez revenir à l’interface System Identification Tool et cliquer deux fois sur tf1pour voir le résultat.

Nizar CHELLY-Amine CHARED 17 ISET RADES 2015

Page 19: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

Figure 21 – Visualisation du résultat de l’estimation

7. Une fenêtre apparait dans laquelle vous trouvez G(z).

Figure 22 – Récupération de la fonction de transfert estimée

Nizar CHELLY-Amine CHARED 18 ISET RADES 2015

Page 20: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

9 Implémentation de la commande sur Simulink

Dans cette partie l’implémentation du régulateur se fera sur Simulink.

Figure 23 – Schéma synoptique de l’asservissement à implémenter

L’étape de la commande du système est constituée de deux parties.La première partie consiste à utiliser l’outil Matlab PID Tuning pour déterminer les différentsparamétrés de notre régulateur PI à savoir Kp,Ki en fonction de notre objectif de commande.La deuxième partie consiste à implémenter le régulateur sur Simulink.

Figure 24 – Emplacement de l’outil PID tuning

Nizar CHELLY-Amine CHARED 19 ISET RADES 2015

Page 21: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

9.1 Synthèse du régulateur numérique

1. Ouvrir l’outil PID Tuner

Figure 25 – Interface de l’outil ”PID tuning”

2. Cliqueur sur Import new plant, une nouvelle fenêtre apparait.

Figure 26 – Importation du modèle estimé

3. Une nouvelle fenêtre apparait dans laquelle vous allez sélectionner tf1 ensuite cliquer surimport puis close.

Nizar CHELLY-Amine CHARED 20 ISET RADES 2015

Page 22: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

Figure 27 – Interface de l’outil ”Import Linear System”

4. Revenir à la fenêtre PID Tuner, vous pouvez choisir le type de régulateur à implémenter etles objectifs de la commande en boucle fermé et voir la réponse de la sotie du système.

Figure 28 – Choix du régulateur à implémenter

Nizar CHELLY-Amine CHARED 21 ISET RADES 2015

Page 23: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

5. Cliquer sur la flèche de show parameter pour voir les paramétrés utilisés de votre régulateurainsi que les performances du système en boucle fermé.

Figure 29 – Récupération des paramétrés du régulateur

9.2 Implémentation de la commande sous Simulink

La boucle d’asservissement à implémenter sur Simulink se traduit par le schéma suivant :L’asservissement de notre procédé est assuré par le schéma Simulink ci-dessous qui regroupe laconsigne, le comparateur, le correcteur PI(z), l’acquisition de vitesse et l’envoie de la commandePWM.

Figure 30 – Modèle Simulink d’asservissement de température

L’appui deux fois sur le bloc PID(z) permet d’introduire les paramétrés Kp Ki et de configurerle régulateur selon notre objectif de commande.

Figure 31 – Saisie des paramétrés du régulateur

Nizar CHELLY-Amine CHARED 22 ISET RADES 2015

Page 24: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

10 Implémentation de la commande sur la carte Arduino

Dans cette partie l’implémentation du régulateur directement sur la carte Arduino UNO.

Figure 32 – Schéma synoptique de l’asservissement à implémenter

10.1 Le régulateur PID Numérique

Ce type de correcteur est défini par l’équation différentielle suivante :

UP ID(t) = Kp × e(t) +Ki ×∫ t

0e(τ)dτ +Kd ×

d

dte(t) (3)

L’équation de contrôle PID numérique peut être exprimée en de diverses manières, mais uneformulation générale est donnée par l’équation suivante [3] :

PID = Kp× erreur +Ki×∑

(erreur ×∆t) +Kd× (erreur − erreurprécédente)∆t (4)

L’implémentation du régulateur PID sur la carte Arduino se fera de la manière suivante [3] :PID :Error = Setpo int − ActualI n t e g r a l = In t e g r a l + ( Error ∗dt )Der iva t i ve = ( Error − Previous_error )/ dtDrive = ( Error ∗kP) + ( I n t e g r a l ∗kI ) + ( Der iva t i ve ∗kD)Prev ious_error = Errorwait ( dt )GOTO PID

10.2 L’implémentation du régulateur PID

Le code suivant permet d’implémenter le régulateur PID sur la carte Arduino.– Implémentation direct de la consigne sur la carte Arduino

f l o a t de l ta_er reur=0 ;f l o a t somme_erreur = 0 ; // Somme des e r r e u r s pour l ’ i n t g r a t e u rf l o a t kp = 0.00030798 ; // Co e f f i c i e n t p ropo r t i onne lf l o a t k i = 0.061596 ;// Co e f f i c i e n t i n t e g r a t eu r

f l o a t ep , up , v , u , e , i n t e g r a l , cmd ;f l o a t de r i v e ;i n t pinA = 2 ; //Encoder pin A connects to i n t e r r up t 0 (D2)i n t pinB = 3 ; //Encoder pin B connects to D4in t iValue = 0 ; //A va r i ab l e that w i l l be i n c r e a s ed or decreased

Nizar CHELLY-Amine CHARED 23 ISET RADES 2015

Page 25: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

i n t cons igne ;

void setup ( ) S e r i a l . begin (9600) ;

pinMode (pinA , INPUT) ;pinMode ( pinB , INPUT) ;a t t a ch In t e r rup t (0 , encoderCl ick , RISING) ;// rou t in e de s e r v i c e d ’ i n t e r r up t i on ( ou ISR ) .

void loop ( )v=abs ( iValue ) ;

e=50−v ;de l ta_er reur = ( e−ep )/0 . 01 ;somme_erreur=somme_erreur+e ∗0 .01 ;cmd = kp∗e + k i ∗somme_erreur ;analogWrite (5 ,cmd∗ (255/5) ) ;S e r i a l . p r i n t l n ( e ) ;// envo ie de l a donnee sur l e port s e r i e// de lay (10) ;// per i ode d ’ e chan t i l l o nag eep=e ;

iValue=0 ;de lay (10) ;// per i ode d ’ e chan t i l l o nag e

void encoderCl i ck ( )// l a f onc t i on a p p e l e par l ’ i n t e r r up t i on exte rne numero 0

// encoder must have turned one c l i c k because i n t e r r up t 0 was t r i g g e r e d// read value from both encoder p insi n t valA = dig i t a lRead ( pinA ) ;i n t valB = dig i ta lRead ( pinB ) ;

// compare p ins to determine in which d i r e c t i o n encoder was turnedi f ( valA != valB )

// pinA ju s t changed but pinB had not yet changed// Di r e c t i on must be c l o ckw i s e i f A changes be f o r e BiValue++;

e l s e

// pinA ju s t changed and pinB had a l ready done so .// D i r e c t i on must be counter−c l o ckw i s e i f B changes be f o r e AiValue−− ;

.

– Changement de la consigne avec le moniteur sérief l o a t de l ta_er reur=0 ;f l o a t somme_erreur = 0 ; // Somme des e r r e u r s pour l ’ i n t g r a t e u rf l o a t kp = 0.00030798 ; // Co e f f i c i e n t p ropo r t i onne lf l o a t k i = 0.061596 ;// Co e f f i c i e n t i n t e g r a t eu r

Nizar CHELLY-Amine CHARED 24 ISET RADES 2015

Page 26: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

f l o a t ep , up , v , u , e , i n t e g r a l , cmd ;f l o a t de r i v e ;i n t pinA = 2 ; //Encoder pin A connects to i n t e r r up t 0 (D2)i n t pinB = 3 ; //Encoder pin B connects to D4in t iValue = 0 ; //A va r i ab l e that w i l l be i n c r e a s ed or decreasedi n t cons igne ;

void setup ( ) S e r i a l . begin (9600) ;

pinMode (pinA , INPUT) ;pinMode ( pinB , INPUT) ;a t t a ch In t e r rup t (0 , encoderCl ick , RISING) ;\\// rou t in e de s e r v i c e d ’ i n t e r r up t i on ( ou ISR ) .

void loop ( )v=abs ( iValue ) ;i f ( S e r i a l . a v a i l a b l e ( ) )

cons igne=( S e r i a l . read ()−48)∗100+( S e r i a l . read ()−48)∗10+\\( S e r i a l . read ()−48)∗1 ;// l e c t u r e des d o n n e s a r r i v e s

e=cons igne−v ;de l ta_er reur = ( e−ep )/0 . 01 ;somme_erreur=somme_erreur+e ∗0 .01 ;cmd = kp∗e + k i ∗somme_erreur ;analogWrite (5 ,cmd∗ (255/5) ) ;S e r i a l . p r i n t l n ( cons igne ) ;// envo ie de l a donnee sur l e port s e r i e// de lay (10) ;// per i ode d ’ e chan t i l l o nag eep=e ;

iValue=0 ;de lay (10) ;// per i ode d ’ e chan t i l l o nag e

void encoderCl i ck ()\\// l a f onc t i on appe lee par l ’ i n t e r r up t i on exte rne n 0

// encoder must have turned one c l i c k because i n t e r r up t 0 was t r i g g e r e d// read value from both encoder p insi n t valA = dig i t a lRead ( pinA ) ;i n t valB = dig i ta lRead ( pinB ) ;

// compare p ins to determine in which d i r e c t i o n encoder was turnedi f ( valA != valB )

// pinA ju s t changed but pinB had not yet changed// Di r e c t i on must be c l o ckw i s e i f A changes be f o r e B

Nizar CHELLY-Amine CHARED 25 ISET RADES 2015

Page 27: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

iValue++;e l s e

// pinA ju s t changed and pinB had a l ready done so .// D i r e c t i on must be counter−c l o ckw i s e i f B changes be f o r e AiValue−− ;

Nizar CHELLY-Amine CHARED 26 ISET RADES 2015

Page 28: FORMATION ARDUINO SIMULINK/ANDROID Asservissement … · CHELLY Nizar CHARED Amine FORMATION ARDUINO↔SIMULINK/ANDROID Asservissement de vitesse d’un moteur à courant continu

Formation Arduino ↔ Simulink/Android Asservissement de vitesse d’un moteur à courant continu

Références

[1] http ://www.mathworks.com/[2] http ://www.arduino.cc/[3] PID Control : A brief introduction and guide, using Arduino.[4] PID controller http ://en.wikipedia.org/w/index.php ?title=PID controller soldid=547984770.

Nizar CHELLY-Amine CHARED 27 ISET RADES 2015