11
Multipower 83 Avenue d’Italie - 75013 PARIS - Tél. : 01 53 94 79 90 - Fax : 01 53 94 08 51 E-Mail : [email protected] - Web : http//www.multipower.fr Document propriété de Multipower. Reproduction même partielle interdite sans autorisation. Utilisation conjointe de Flowcode et Proteus PWM – MLI et servo moteur André Mininno – Juin 2010 - ©MULTIPOWER

Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

Multipower - Proteus/Flowcode - PMW

Multipower83 Avenue d’Italie - 75013 PARIS - Tél. : 01 53 94 79 90 - Fax : 01 53 94 08 51

E-Mail : [email protected] - Web : http//www.multipower.fr

Document propriété de Multipower. Reproduction même partielle interdite sans autorisation.

Utilisation conjointe de Flowcode et Proteus

PWM – MLI et servo moteur

André Mininno – Juin 2010 - ©MULTIPOWER

Page 2: Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

Multipower - Proteus/Flowcode - PMW

2

SOMMAIRE

1 Généralités 3

2 Les servo moteurs 3

2.1 Généralités 3

2.2 PWM 3

2.3 PWM et servo moteur 3

3 Premier exemple (fichiers PWM01.*) 4

3.1 L’algorigramme 6

3.2 Le projet électronique 7

4 Second exemple (fichiers PWM02.*) 4

4.1 Configurer Flowcode 6

4.2 L’algorigramme 7

4.3 Le projet électronique 7

Page 3: Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

Multipower - Proteus/Flowcode - PMW

3

1 Généralités

Cette note d’application s’intéresse au contrôle des moteurs par largeur d’impulsion. Les microcon-trôleurs PIC possèdent des sorties qui génèrent des impulsions de largeur variable – PWM (Pulse Width Modulation) ou MLI (Modulation par Largeur d’Impulsion).

Nous présenterons deux exemples de mise en œuvre des sorties PWM. Le premier explique com-ment configurer l’objet PWM de Flowcode V4, alors que le second valide des largeurs d’impulsions compatibles avec celles attendues par les servomoteurs.

Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes qui valident les sorties PWM.

Proteus, de Labcenter Electronics, est utilisé pour dessiner le schéma électronique équivalent à la fonction programmée. Le programme HEX, généré par Flowcode, est ensuite testé dans Proteus pour prouver son bon fonctionnement.

Les versions des logiciels utilisés dans nos exemples sont :

• Flowcode V4.2.3.58• Proteus V7.7SP2

2 Les servo moteurs

2.1 Généralités

Un servomoteur est un organe très utilisé pour contrôler un angle. Comme applications citons :

1) Faire tourner un véhicule vers la gauche ou la droite.2) Sortir le train d’atterrissage d’un avion.3) Déplacer un bras robot d’un angle donné.4) Ouvrir plus ou moins une vanne de canalisation.5) Contrôler la position d’une voile sur un voilier.6) Contrôler la position d’une caméra sur son support motorisé.7) Modélisme : avion, bateau, planeur, hélico, robot, voiture, …

Le servomoteur est constitué de :

1) Un moteur à courant continu.2) Un réducteur de vitesse (roue dentée) qui permet de diminuer la vitesse pour disposer de plus de puissance.3) Un potentiomètre qui fournit une résistance variable fonction de l’angle obtenu. La position du potentiomètre, donc la valeur de la résistance, contrôle l’angle.4) Un circuit électronique de contrôle.5) Un axe mécanique.

Page 4: Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

Multipower - Proteus/Flowcode - PMW

4

Exemple de servomoteur Futaba S3002 (détail du réducteur à droite)

Un seul fil sert à faire tourner l’axe de sortie du servomoteur, sans parler de l’alimentation bien évi-demment. Il faut envoyer sur ce fil de commande (jaune ou blanc en général) une impulsion dont la durée contrôle l’angle souhaité. Lorsque le servomoteur reçoit l’impulsion, il tourne jusqu’à l’angle désiré puis se maintient à cette position tant qu’il reçoit la même impulsion de commande.

2.1 PWM

La modulation par largeur d’impulsion (MLI ou PWM : Pulse Width Modulation) consiste à émet-tre des impulsions de largeur variable. Le dessin ci-dessous représente l’impulsion à 1 pendant le temps T haut.

T haut

T période

Rapport cyclique = T haut/T période

PWM et rapport cyclique (duty cycle)

Le rapport cyclique varie de 0% à 100% lorsque le temps haut varie depuis le minimum jusqu’au maximum.

2.2 PWM et servo moteur

Dans le cas d’un servomoteur, la largeur de l’impulsion sera convertie en angle. Il faut envoyer une impulsion toutes les 20ms maximum (50 Hz). Donc, si on souhaite maintenir une position au cours du temps, il faut transmettre la même largeur d’impulsion toutes les 20ms maximum.

Page 5: Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

Multipower - Proteus/Flowcode - PMW

5

Exemple : le servomoteur HS-755HB de Hitec permet de contrôler un angle entre 0° et 180°

Dans cet exemple la valeur de 0.6 ms place le servomoteur en limite gauche alors que la valeur de 2.4 ms le positionne en limite droite. Une impulsion de 1.5 ms correspond à l’angle 0°. Entre les deux valeurs extrêmes, nous supposons que l’angle obtenu varie linéairement avec la largeur d’impulsion.

0.6ms:-90°

2.4ms: +90°

1.5ms: 0°

Pilotage du HS-755HB : angle obtenu en fonction de la largeur de l’impulsion de commande

La largeur des impulsions des servomoteurs est couramment comprise entre 0.2 ms et 2.8 ms. En relation de ce qui vient d’être dit, nous comprenons que, pendant une période de 20 ms, nous pourrions piloter jusqu’à 6 servomoteurs différents, en réservant une activité de 3.4 ms par servomoteur ( = 20 / 6 ). Dans ce cas, il faut bien évidemment organiser son électronique et son programme pour sélectionner le bon servomoteur au bon instant.

1 2 3 4 5 6

20 ms

Numéro du servomoteur

Temps (ms)

Période suivante

Principe de pilotage de plusieurs servomoteurs pendant une période de 20 ms.

Page 6: Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

Multipower - Proteus/Flowcode - PMW

6

Note : Des exemples d’interfaçage de 8 servomoteurs sont disponibles sur Internet. Ceci suppose d’utiliser des composants dont la largeur des impulsions est de 2.5 ms maximum (2.5 x 8 = 20 ms).

A présent que nous avons décrit le principe du servomoteur ainsi que son pilotage angulaire, nous allons montrer comment obtenir une impulsion de largeur variable avec un microcontrôleur PIC.

3 Premierexemple(fichiersPWM01.*)

Ce premier exemple décrit la mise en œuvre du PWM, indépendamment du pilotage d’un servo moteur.Flowcode V4 masque la complexité des PWM grâce au composant PWM de la barre d’outils Mecha-tronics.

Ce composant permet de piloter 2 sorties PWM maximum. Notre exemple utilise un PIC16F877A qui possède 2 sorties PWM, les broches CCP2 (16) et CCP1 (17).

Le microcontrôleur se sert du timer interne sur 8 bits pour générer l’impulsion. Le timer s’incrémen-te de 1 à chaque cycle d’opération, c’est-à-dire à chaque microseconde avec un quartz de 4MHz. De plus, le timer est remis à zéro lorsqu’il atteint son maximum de 255. En résumé la largeur de l’impulsion de notre premier exemple sera de 256 µs ( 256 comptages de 1 chacun µs ).Le rapport cyclique est programmable grâce à la routine composant ‘SetDutyCycle’ qui nécessite deux paramètres : le numéro du PWM ( 1 ou 2 ) et le temps de l’état haut ( de 0 à 255 ).

Nous validerons le premier PWM avec la valeur 64, soit 64 µs à l’état haut (le cycle d’opération vaut 1 µs), alors que le second PWM contiendra la valeur 192, pour 192 µs à l’état haut.

En résumé :

Période : 256 µsEtat haut premier PWM : 64 µsEtat haut second PWM : 192 µs

Page 7: Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

Multipower - Proteus/Flowcode - PMW

7

3 L’algorigramme

Validation du PWM 1

Validation du PWM 2

Valider la valeur 64 pour le rapport cyclique du premier PWM

Valider la valeur 192 pour le rapport cyclique du second PWM

Boucle infinie

Page 8: Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

Multipower - Proteus/Flowcode - PMW

8

3.2 Le projet électronique

Le schéma ci-dessus montre la connexion des voies A et B de l’oscilloscope aux broches CCP2 et CCP1 respectivement.

Les curseurs montrent que nous obtenons bien les temps attendus de 64 µs, 192 µs et 256 µs.

Page 9: Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

Multipower - Proteus/Flowcode - PMW

9

4 Secondexemple(fichiersPWM02.*)

Dans cet exemple, nous générerons une largeur d’impulsion compatible avec les servomoteurs, à savoir entre 0.6 ms et 2.4 ms.

La variation de largeur d’impulsion est obtenue avec une résistance variable reliée à une entrée analogique du microcontrôleur, à savoir un PIC16F88.

Un peu de calculs …

Une fois de plus, notre but est d’expliquer le principe de mise en œuvre de la fonction avec Flow-code et Proteus, sans nous focaliser sur la précision temporelle ou les optimisations possibles.

Nous allons paramétrer le processeur afin que la période du PWM soit de 4.096 ms -voir plus loin dans le paragraphe Flowcode.

La résistance variable produira une valeur numérique comprise entre 0 et 255 après conversion par un numériseur 8 bits.

Pour la valeur 0 de la résistance, nous obtiendrons une largeur d’impulsion de 0 ms.Pour la valeur 255 de la résistance, nous obtiendrons une largeur de 4.096 ms.

Notre but est de limiter l’excursion de 0.6 ms à 2.4 ms.

Pour ces valeurs minimales et maximales, la position de la résistance sera :

Min = 0.6 * 255 / 4.096, soit 37Max = 2.4 * 255 / 4.096 soit 149

En résumé, si la position de la résistance donne une valeur numérique inférieure à 37 ou supérieure à 149, nous n’agirons pas sur le rapport cyclique de l’impulsion. Pour toutes les valeurs comprises dans ces limites, nous modifierons le rapport cyclique qui variera ainsi de 0.6 ms à 2.4 ms.

4.1 ConfigurerFlowcode

Il faut placer un objet ADC du groupe d’outils ‘Inputs’ sur le panneau (type curseur dans les proprié-tés étendues), ainsi qu’un objet PWM du groupe d’outils ‘Mechatronics’ – voir image ci-dessous.

Commencez par un clic droit sur l’objet PWM afin de sélectionner la commande ‘Propriétés éten-dues’ du menu contextuel. La fenêtre de droite ci-dessous montre le paramétrage pour que la pé-riode du PWM soit de 4.096 ms.

Note : la fréquence de l’oscillateur a été fixée à 1000000 Hz ( 1 MHz ) grâce à la commande ‘Op-tions projet’ du menu ‘Afficher’.

Page 10: Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

Multipower - Proteus/Flowcode - PMW

10

4.2 L’algorigramme

Validation du PWM 1

Numériser la position de la résistance

Si valeur > 37 et valeur < 149

Modifier le rapport cyclique

Boucle infinie

Page 11: Utilisation conjointe de Flowcode et Proteus · compatibles avec celles attendues par les servomoteurs. Flowcode, de Matrix Multimédia, est utilisé pour décrire les algorigrammes

11

Multipower - Proteus/Flowcode - PMW

4.3 Le projet électronique

Résistance variable reliée au numériseur du PIC et sortie PWM vers oscilloscope

Lancement de l’exécution dans ISIS, par un clic sur le bouton Play

Un clic sur les deux zones rouges de la résistance variable, repérées par les flèches ‘variation’ ci-dessus, modifient la valeur numérisée, qui se répercute sur la largeur de l’impulsion visualisée sur l’oscilloscope. Les curseurs valident la période de 4.1 ms paramétrée dans Flowcode.