• Aucun résultat trouvé

Unité de traitement Hacheur Moteur Capteur Réducteur et transmission Consigne de vitesse angulaire Vitesse angulaire Batterie

N/A
N/A
Protected

Academic year: 2021

Partager "Unité de traitement Hacheur Moteur Capteur Réducteur et transmission Consigne de vitesse angulaire Vitesse angulaire Batterie"

Copied!
11
0
0

Texte intégral

(1)

STRUCTURE D’UNE CHAINE FONCTIONNELLE-ARDUINO

1-Contexte

De nombreux systèmes autonomes en énergie d’alimentation électrique (batteries) sont équipés de moteurs à courant continu. Ces moteurs permettent de convertir l’énergie électrique en énergie mécanique qui sera adaptée de manière à agir.

Par exemple, pour un robot tondeuse à gazon électrique, l’énergie mécanique de rotation fournie par un moteur est adaptée par un réducteur et une transmission de manière à entrainer en rotation une des roues motrices qui va agir sur le sol et provoquer le déplacement du chariot.

La variation de vitesse d’une roue motrice est obtenue en modulant l’énergie électrique d’alimentation du moteur à l’aide d’un hacheur. Le hacheur est piloté par l’unité de traitement. Cette dernière envoie un signal au hacheur de telle manière que la vitesse de rotation du moteur sera proportionnelle à ce signal.

Les chaines d’énergie peuvent être équipées d’un ou plusieurs capteurs qui permettent d’évaluer des grandeurs physiques comme par exemple la vitesse de rotation du moteur. Dans certains cas, les grandeurs physiques évaluées pourront être utilisée pour optimiser la commande du moteur. On parle de système asservi.

2-Objectif

L’objectif de ce TP est de comprendre comment un moteur à courant continu peut être piloté par une carte de commande.

3-Présentation de la carte « Arduino-Uno »

La carte « Arduino-Uno » est un exemple d’unité de traitement.

L’élément central de la carte est le microcontrôleur. Son rôle est de traiter les données et d’assigner les sorties.

Les autres éléments principaux sont le connecteur USB, les 14 broches « numériques », les 6 broches

« entrées analogiques » et de 4 broches « sorties de tensions de référence ».

Unité de

traitement Hacheur Moteur

Capteur

Réducteur et transmission

Consigne de vitesse angulaire

Vitesse angulaire

Batterie

(2)

Le connecteur USB assure la communication de la carte avec le micro-ordinateur, et permet son alimentation en l’absence d’une autre source d’alimentation.

Les broches numériques peuvent être configurées « entrée » ou « sortie ». Lorsqu’elles sont configurées

« entrée », ce sont obligatoirement des entrées TOR (Tout Ou Rien, 1 ou 0). Pour être à 1, la broche doit être au potentiel 5 V et pour être à 0, au potentiel 0 V. Pour une « sortie », il y a deux configurations possibles : soit elle est TOR, soit elle est numérique et codée sur 8 bits (1 octet), soit 256 possibilités (de 0 à 255).

Remarques : seules les broches repérées par le symbole ̴ (3, 5, 6, 9, 10 et 11) peuvent être numériques, les autres broches ne peuvent être que TOR.

Les broches « entrées analogiques » permettent de mesurer à la cadence du quartz de cadencement l’évolution de grandeurs physiques. Une entrée analogique de la carte Arduino est capable d’enregistrer un signal de 0 à 5 V délivré par un capteur ou par un élément d’interface homme machine (par exemple un potentiomètre). Ce signal est numérisé sur 10 bits (de 0 à 1023).

Les broches « sorties de tensions de référence » permettent d’alimenter des composants extérieurs (par exemple des capteurs) en 3,3 ou 5V.

4-Exemples de câblages

Câblage d’une entrée TOR avec bouton poussoir Câblage d’une sortie TOR avec alimentation par la carte

R = 10 kΩ 5V

GND Broche numérique

Broche numérique

GND Elément récepteur

Broche numérique

GND R=220 Ω

(3)

Câblage d’une entrée analogique Câblage d’une sortie numérique avec alimentation externe

5-Vérification du fonctionnement de la carte - Activité 1 -Lancer la logiciel Arduino en cliquant sur

La fenêtre ci-contre apparait. Elle présente la structure du programme avec deux fonctions (« void »).

La fonction setup() est appelée une seule fois lorsque le programme commence. Dans cette fonction, on écrira donc le code qui n’a besoin d’être exécuté qu’une seule fois.

La fonction loop() est la fonction principale du programme, elle est appelée en permanence. Le code est exécuté dans une boucle infinie.

En début de programme avant la fonction setup, on peut déclarer des variables.

Pour tester la carte, on souhaite écrire un programme capable de faire clignoter une LED. Il est à noter que la carte Arduino est constituée d’une LED interne reliée à la broche numérique 13. C’est cette LED que l’on va faire clignoter, mais on peut aussi relier une LED externe à la broche 13 pour s’entrainer à câbler. Pour cela on a besoin d’une plaque d’essai (breadboard), c’est une platine pleine de trous, dans lesquels on peut piquer des pattes de composants électroniques ou des fils.

Dans les zones 1et 4, les trous situés sur une même ligne horizontale sont reliés électriquement.

Dans les zones 2 et 3, les trous situés sur une même ligne verticale sont reliés électriquement.

Remarque : les zones 1 et 2 servent à l’alimentation des composants électroniques.

5V

GND Broche entrée

analogique

Capteur ou potentiomètre

(3 fils)

VCC GND

Elément à piloter Broche sortie

numérique

Récepteur

Zone 1

Zone 2

Zone 3

Zone 4

(4)

Exemple de câblage pour une sortie TOR de la carte Arduino avec une plaque d’essai

-Réaliser le câblage ci-dessus ; -Écrire le code ci-dessous ;

-Brancher le câble USB entre la carte et le PC ;

Avant de compiler et de téléverser ce code sur la carte Arduino, il faut s’assurer de la bonne configuration du logiciel par rapport à la carte, et du port USB.

Remarque : pour trouver le port de connexion, aller dans le gestionnaire de périphériques qui se trouve dans le panneau de configuration.

-Compiler et téléverser le programme en cliquant sur la flèche dans la barre d’accès rapide ; Remarque : lors du téléversement les

leds internes Tx et Rx doivent clignoter.

-Vérifier le bon fonctionnement de la carte.

(5)

6-Commande simple d’un moteur avec bouton poussoir - Activité 2

L’objectif de cette activité est de réaliser la commande en rotation d’un moteur en appuyant sur un bouton poussoir avec une alimentation externe.

Pour cela on utilise un moteur à courant continu en actionneur et un transistor MOSFET en préactionneur. Le transistor est un composant électronique qui fonctionne comme un contacteur. Il a trois pattes : deux des pattes doivent être reliées au circuit d’alimentation du moteur et la troisième patte permet son pilotage.

Lorsque cette troisième patte n’est pas alimentée, le courant ne passe pas, lorsqu’elle est alimentée le courant passe.

Pour éviter les retours de charge générés par le moteur en phase de décélération lorsque l’arrêt est demandé, il faut utiliser une diode en parallèle du moteur en faisant attention à sa polarisation.

Pour que le transistor fonctionne correctement, il faut relier les GND de la carte Arduino et de l’alimentation externe.

-Réaliser le câblage du moteur avec une alimentation extérieure en réglant la bonne tension (voir tension nominale du moteur) ;

-Relier la patte du transistor à une broche sortie numérique (TOR) ; -Câbler un bouton poussoir sur une broche entrée numérique ; -Écrire le code correspondant. Pour cela :

 Définir deux broches numériques en tant que variables « com_moteur » et « appui_bouton » ;

 Définir un variable entier « etat_bouton » ;

 Configurer la broche correspondante à la variable « com_moteur » en tant que sortie et la broche correspondante à la variable « appui_bouton » en tant que entrée ;

 Dans la fonction « loop », écrire le code correspondant au fonctionnement souhaité (voir ci- dessous) ;

-Compiler et téléverser le code dans la carte ; -Tester le fonctionnement du système.

7-Commande d’un moteur avec variation de vitesse - Activité 3

Dans l’activité précédente, la vitesse de rotation du moteur était fixe et proportionnelle à la tension d’alimentation. L’objectif de cette activité est de réaliser la commande d’un moteur de manière à faire varier sa vitesse de rotation avec un potentiomètre.

M

VCC

GND Broche sortie

numérique de la carte Arduino

M

VCC

GND Tension de

commande

La variable « etat_bouton » permet la

« lecture » de l’état de la broche numérique liée à la variable « appui_bouton ».

Si l’entrée « etat_bouton » est à 1, on met la sortie « com_moteur » à 1, sinon on la met à 0.

(6)

Pour cela on utilise un hacheur de tension en préactionneur. Son principe peut être décrit à l’aide du schéma électrique ci-contre :

Lorsque le contact est fermé, le moteur est sous tension maximale VCC avec GND = 0 V.

Lorsque le contact est ouvert, le moteur est hors tension.

En jouant sur les fréquences d’ouverture et de fermeture du contact (hautes fréquences), la tension d’alimentation du moteur peut être décrite par le graphe suivant :

On peut définir une période T, un rapport cyclique α (0 ≤ α ≤ 1) et une tension moyenne U .

Naturellement, cette tension en créneaux est filtrée par les bobines du moteur, ce qui équivaux à une alimentation à la tension moyenne. La vitesse de rotation du moteur est proportionnelle à la tension U et donc au rapport cyclique α.

Pour cette activité on va utiliser le motoréducteur IG220053X00069R et le composant PmodHB5.

Le motoréducteur est équipé de 6 fils qui se connectent directement sur le composant PmodHB5 qui a 6 broches correspondantes au niveau du connecteur J2. Il y a aussi 6 broches au niveau du connecteur J1. Le connecteur J3 permet l’alimentation externe du moteur.

M

VCC

GND contact VCC

t

VCC

t

VCC

t

T T

α =T T U

(7)

La broche 1 (DIR) de J1 doit définir le sens de rotation du moteur, elle doit être reliée à une sortie TOR de la carte de commande. Si cette broche est à 0, le moteur tourne dans un sens, si elle est à 1, le moteur tourne dans l’autre sens.

La broche 2 (EN) de J1 doit définir la valeur de la vitesse de rotation du moteur, elle doit être reliée à une sortie numérique de la carte de commande. Les sorties numériques de la carte Arduino sont codées sur 8 bites soit 256 possibilités. Lorsque la sortie est à 0, le moteur ne tourne pas, lorsque la sortie est à 255, la vitesse du moteur est maximale, entre ces deux valeurs, la vitesse est proportionnelle.

Les broches 5 et 6 doivent assurer l’alimentation du composant sous une tension de 5 V, et doivent donc être reliées aux broches d’alimentation de la carte de commande.

Le motoréducteur est équipé de deux codeurs magnétiques qui délivrent chacun un signal de 0 ou 5 V. Ces codeurs sont décalés de 90°, le graphe ci-contre donne le profil des signaux délivrés lorsque le moteur tourne. Les broches 3 et 4 délivrent ces signaux. Nous les utiliserons lors de l’activité suivante.

-Réaliser le câblage du composant PmodHB5 ;

-Réaliser le câblage du potentiomètre avec une entrée analogique ; -Écrire le code correspondant. Pour cela :

 Définir trois broches numériques en tant que variables « consigne_sens », « sens_broche » et

« vitesse_broche » (attention, choisir une broche numérique marquée symbole ̴ pour la variable

« vitesse_broche ») ;

 Définir une broche analogique en tant que variable « consigne_vitesse » ;

 Définir deux variables entières « sens » et « vitesse » ;

 Configurer les broches correspondantes aux variables « sens_broche » et « vitesse_broche » en tant que sorties et la broche correspondante à la variable « consigne_sens » en tant que entrée ;

 Dans la fonction « loop », écrire le code correspondant au fonctionnement souhaité (voir ci- dessous) ;

(8)

Remarque : Pourquoi diviser par 4 ?

Une entrée analogique est codée sur 10 bits (1024 possibilités) alors qu’une sortie numérique est codée sur 8 bits (256 possibilités). Il y a donc un rapport de 4. Si on est à 5 V en entrée le microcontrôleur lit 1023 et il faut mettre la sortie à 5 V soit 255.

-Compiler et téléverser le code dans la carte ; -Tester le fonctionnement du système.

8-Évaluation de la vitesse de rotation - Activité 4

L’objectif de cette activité est d’évaluer la vitesse de rotation du moteur à l’aide des signaux fournis par les codeurs.

Les broches 3 et 4 du composant PmodHB5 délivrent chacune un signal de 0 ou 5 V. Il faut donc relier chacune de ces broches à une broche entrée TOR de la carte Arduino de manière à pouvoir compter le nombre d’impulsions à des intervalles de temps réguliers. De cette façon, on peut déterminer la vitesse de rotation du moteur. Pour un seul codeur, si on compte les fronts montants et descendants du signal, et que l’on a évalué 6 impulsions en 10 ms, cela veut dire que le moteur effectuerait 3 tours en 10 ms et donc qu’il tournerait à 300 trs/s soit 18 000 trs/min. Pour 2 codeurs, il y aura 4 impulsions par tour.

Comme cela a été indiqué précédemment, un programme Arduino se compose de deux fonctions essentielles : « setup » et « loop ». La fonction « setup » est appelée une seule fois lorsque le programme commence et la fonction « loop » est appelée en permanence. Il est possible d’arrêter brièvement et temporairement la fonction « loop » à chaque fois qu’un événement (changement d’état d’une entrée TOR) se produit. Pour cela il faut utiliser les broches numériques d’interruption, les broches 2 et 3, numérotées 0 et 1. A chaque changement d’état des signaux des codeurs, on va incrémenter un compteur.

Remarque : Le faite d’avoir deux codeurs peut permettre de détecter le sens de rotation. On peut aussi décrémenter le compteur.

-Effectuer le câblage des broches 3 et 4 du composant PmodHB5 avec les broches d’interruption de la carte ; -Compléter le programme de l’activité 3. Pour cela :

 Définir les broches numériques 2 et 3 en tant que variables « signA » et « signB » ;

 Définir une variable entière « Nimpulsion » et l’initialiser à 0 ;

 Écrire deux fonctions « comptageA » et « comptageB » permettant d’incrémenter ou de décrémenter un compteur d’impulsion (ces fonctions seront placées avant la fonction « setup » et seront appelées à chaque interruption) ;

R = 10 kΩ Broche 3 ou 4 du

composant PmodHB5

GND Broche numérique

(9)

Explications :

À chaque fois que la fonction

« comptageA » est appelée, le niveau (haut ou bas) de la voie A sera comparé au niveau de la voie B. En fonction de cela, on détectera le sens de rotation et on incrémentera ou décrémentera le compteur d’impulsion.

Remarque : La commande « digitalReadFast2 » fonctionne comme la commande « digitalRead » mais comme son nom l’indique elle lit plus vite. Il faudra au préalable (en début de programme) inclure la bibliothèque « digitalWriteFast ». Soit en écrivant le code ci-dessous soit en développant l’onglet croquis comme l’indique l’illustration ci-contre.

 Écrire dans la fonction « setup », le code correspondant à l’interruption des broches 2 et 3 ; Syntaxe pour la broche 2 :

Il faut maintenant calculer la vitesse de rotation du moteur. Pour cela nous avons besoin d’un « timer » qui déclenchera le calcul toutes les 10 millisecondes.

Code à écrire dans la fonction « setup ».

Il ne faut pas oublier d’inclure la bibliothèque « MsTimer2 » en début de programme.

 Écrire les lignes de codes correspondantes ;

 Écrire la fonction « calcul » permettant le calculer de la vitesse ;

Pour lire la vitesse, il faut envoyer l’information sur le PC via la liaison série. Il faut donc écrire sur la liaison série mais avant il faut ouvrir cette liaison.

Dans la fonction « setup » :

Commande permettant l’interruption

Numéro de la broche d’interruption 0 ou 1

Fonction appelée lors de l’interruption

L’interruption à lieu à chaque changement de niveau c’est-à-dire à chaque front montant et à

chaque front descendant du signal

Vitesse en bits par seconde ou bauds Délai de 100 ms pour attendre que la

liaison s’effectue correctement

(10)

Dans la fonction « loop » ou « calcul » :

 Écrire les lignes de codes correspondantes.

-Compiler et téléverser le code dans la carte ; -Tester le fonctionnement du système.

Pour visualiser l’évolution de la vitesse, il faut ouvrir le « moniteur série » en haut à droite de la fenêtre.

Si on souhaite tracer l’évolution de la vitesse en fonction du temps la démarche est plus compliquée. Il faut stocker les données envoyées vers le PC et les traiter. Pour cela il faut un outil logiciel capable de lire les données sur la liaison série.

Le programme Python « vitesse moteur.py » va lire directement le nombre d’impulsions sur la liaison série toutes les 10 ms, calculer la vitesse correspondante, constituer une liste de valeurs et tracer la courbe dévolution. Mais il faut adapter le programme Arduino.

On va remplacer la fonction « calcul » par une fonction « envoi ».

Au préalable, il faudra bien évidement définir les différentes variables :

« byte » signifie octet. L’entier « DeltaPos » est codé sur deux octets et les octets sont envoyés un par un sur la liaison série. Il faut donc définir deux octets : un octet bas « lowByte » et un octet haut « highByte » de manière à décomposer l’entier « DeltaPos », et de le recomposer ensuite au niveau du PC, ce qui sera fait par le programme Python.

(11)

Pour synchroniser le programme Python avec la carte Arduino, on va définir une procédure de début et de fin de prise de mesures. Pour cela on va écrire le code ci-dessous dans la fonction « loop » en définissant au préalable la nouvelle variable « c » en tant que chaine de caractères « char ».

Une fois le programme python édité et lancé, le caractère « d » est envoyé vers la carte via la liaison série.

Après 3 s, c’est le caractère « s » qui est envoyé.

Si le buffer de la liaison série au niveau de la carte arduino contient un octet, on lit cet octet et si cet octet correspond au caractère

« d », on démarre le « timer ». Dès qu’il y aura un octet correspondant à un autre caractère, le « timer » sera stoppé.

Références

Documents relatifs

Pour atteindre cet objectif nous avons visé la commande MLI d'un hacheur série (hacheur BUCK), cette dernière permet la variation de la tension moyenne aux bornes de

Pour mesurer la quantité d’électricité consommée par les clients, la société EDF utilise le « kilowatt-heure » (kW.h) c’est à dire qu’elle multiplie la puissance

La commande du hacheur, ainsi que la mesure de la vitesse du moteur sont gérés par le port parallèle de l’ordinateur..

La vitesse instantan´ee d’un point mobile ` a un instant t peut ˆetre assimil´ee `a la vitesse moyenne sur un intervalle de temps le plus court possible encadrant l’instant t..

3- A l'aide des mesures des valeurs moyennes, déterminez la valeur moyenne de la tension u B aux bornes de la bobine, puis la valeur de la résistance interne r B de cette bobine,

déplace pas en ligne droite mais s'enroule légèrement sur les galets (augmentation de

Le nombre de dents du pédalier étant trois fois plus grand que celui du pignon de la roue, la roue fait 3 tours quand le pédalier fait un tour4. Donc 20 tours de pédalier en une

Le tambour est placé sur un système de suspension modélisable par l’association en parallèle d’un ressort de raideur k, de longueur à vide l 0 et d’un amortisseur de coefficient