Vous êtes sur la page 1sur 12

Shield Commande Moteur

Version matérielle 1.1

15/09/2017
Version de document: 1.0
Shield Commande Moteur - Version matérielle 1.1

Table des matières

1 Introduction.............................................................................................................................................................3

2 Matériel...................................................................................................................................................................4

3 Mise en œuvre et précautions d’utilisation.............................................................................................................5

3.1 Alimentation.....................................................................................................................................................5

3.2 Branchement d’un moteur................................................................................................................................5

3.3 Mesure de la tension d’alimentation des moteurs............................................................................................6

4 Détails techniques....................................................................................................................................................7

4.1 Commande par PWM........................................................................................................................................7

4.2 Mesure de vitesse de rotation..........................................................................................................................8

4.3 Mesure de courant............................................................................................................................................8

4.4 Limitation matérielle du courant.......................................................................................................................9

4.5 Connecteurs banane.........................................................................................................................................9

4.5.1 Connecteur « PWM »...............................................................................................................................10

4.5.2 Connecteurs jaune et blanc......................................................................................................................10

4.6 Ajout d’un convertisseur de tension...............................................................................................................10

5 Exemple de programme.........................................................................................................................................11

http://www.3sigma.fr Page 2 sur 12 v 1.0


Shield Commande Moteur - Version matérielle 1.1

1 Introduction
Ce document présente le shield de commande moteur compatible Arduino et pcDuino en version de matériel 1.1.

Ses caractéristiques sont les suivantes :

• compatible avec les cartes Arduino 5V ou 3.3V


• compatible pcDuino. Il est même possible d'alimenter la carte pcDuino via le shield en soudant un
convertisseur de tension (comme le Traco Power TSR-1 2450) sur l'emplacement réservé à cet effet
• basé sur le driver DRV8871 de Texas Instruments (fiche technique)
• tension d'alimentation commune ou non avec celle de l'Arduino (configuration par cavalier) comprise
entre 6.5V et 45V
• alimentation par jack 5.5 / 2.1mm ou par bornier à vis
• courant maximal en pic: 2.5 A
• possibilité de limiter le courant de façon matérielle à une valeur inférieure en soudant une résistance
traversante ou une résistance CMS en boitier 0805
• mesure de courant dans le moteur via une résistance de shunt de 0.01 Ohm associée à un INA213 de
Texas Instruments (fiche technique)
• mesure de la tension d'alimentation des deux bornes du moteur (optionnel, configuration par cavalier)
• sélection des broches PWM utilisées (configuration par cavalier), 2 parmi les 4 suivantes: 5, 6, 9, 10
• variation de vitesse et changement de direction grâce au pilotage des deux broches PWM choisies
• fréquence PWM max: 200 kHz
• branchement direct d'un moteur Pololu 25D avec codeur incrémental (comme celui-ci ou celui-là). Les
voies A et B du codeur sont routées sur les broches 2,3 et 13 du shield
• le routage des voies du codeur incrémental sur les broches 2 et 13 permet l'utilisation de la fonction QDEC
(mesure de vitesse native par le mirco-contrôleur) sur Arduino Due
• branchement possible des deux bornes du moteur sur un bornier à vis
• possibilité de visualiser 5 signaux rapides sur oscilloscope grâce à 6 connecteurs banane 2mm

http://www.3sigma.fr Page 3 sur 12 v 1.0


Shield Commande Moteur - Version matérielle 1.1

2 Matériel
Un synoptique de la carte est représenté ci-dessous :

http://www.3sigma.fr Page 4 sur 12 v 1.0


Shield Commande Moteur - Version matérielle 1.1

3 Mise en œuvre et précautions d’utilisation


3.1 Alimentation
L’alimentation du shield se fait en utilisant soit le connecteur jack (noir, positif au centre), soit le bornier
d’alimentation vert, comme indiqué sur le schéma ci-dessus. La tension d’alimentation doit respecter les limites
préconisées pour le driver DRV8871 :

• Tension minimale : 6.5 V

• Tension maximale : 45 V

Il n’est pas possible d’alimenter le shield via la carte Arduino. En revanche, l’inverse est possible aux 2 conditions
suivantes :

• Relier les broches PWRIN et VIN par le cavalier fourni

• Ne pas utiliser une tension supérieure à 12 V, ce que ne supporterait pas la carte Arduino

3.2 Branchement d’un moteur


Ce shield est particulièrement adapté au branchement d’un moteur Pololu de type 25D avec codeur incrémental
intégré (comme ceux-ci : https://www.pololu.com/category/115/25d-mm-metal-gearmotors ) : aucune adaptation
de connectique n’est nécessaire, il suffit juste de ne pas inverser le sens du connecteur (le fil rouge du moteur doit
être à côté du premier bornier vert).

Il est bien sûr possible d’utiliser d’autres types de moteurs à courant continu dont le courant maximal (courant de
démarrage ou courant rotor bloqué) est inférieur à 2.5 A.

http://www.3sigma.fr Page 5 sur 12 v 1.0


Shield Commande Moteur - Version matérielle 1.1

3.3 Mesure de la tension d’alimentation des moteurs


Deux cavaliers (fournis) permettent de relier les bornes du moteur aux entrées analogiques A0 et A1 de la carte
Arduino, via un diviseur de tension d’un rapport 4 environ (13.3 / 3.3 précisément). La tension à mesurer ne doit
donc pas dépasser 4 fois la tension de fonctionnement de la carte Arduino (ou pcDuino).

Les limites sont donc les suivantes :

Type de système Tension maximale mesurable aux


bornes du moteur

5 V (exemple : Arduino Uno) 20 V

3.3 V (exemple : Arduino Due) 13.2 V

2 V (spécifique aux entrées A0 et A1 de la carte pcDuino, bien que celle-ci 8V


fonctionne en 3.3 V)

Attention : la tension maximale aux bornes du moteur est égale la tension d’alimentation de la carte.
On pourrait en effet penser, par exemple, qu’il suffit de ne pas dépasser un rapport cyclique de 50 % pour un
moteur alimenté en 40 V sur une carte Arduino Uno. Mais même s’il est vrai que dans ce cas le moteur « voit » en
moyenne une tension de 20 V, il subit en réalité une tension alternativement égale à 0 V et à 40 V (on peut le
vérifier en branchant un oscilloscope sur les voies M+ et M-). Ces valeurs se retrouvent (divisées par 4) sur les
entrées analogiques de la carte Arduino.

http://www.3sigma.fr Page 6 sur 12 v 1.0


Shield Commande Moteur - Version matérielle 1.1

4 Détails techniques
4.1 Commande par PWM
Le driver DRV8871 se commande avec deux signaux PWM, que nous nommerons PWM1 et PWM2, reliés
respectivement aux broches D9 ou D10 et D5 ou D6 (en fonction de la configuration choisie des cavaliers). En
fonction du sens de rotation du moteur, un des deux signaux doit être à 100 %, l’autre ayant un rapport cyclique
inversement proportionnel à la vitesse souhaitée.
Par exemple, pour faire fonctionner un moteur à 33 % de sa vitesse nominale dans une direction, il faut :

• 100 % sur PWM1

• 66 % sur PWM2

De même, pour faire fonctionner un moteur à 25 % de sa vitesse nominale dans l’autre direction, il faut :

• 75 % sur PWM1

• 100 % sur PWM2

Ainsi, en fonction du sens de rotation on modulera le rapport cyclique de l’un ou l’autre des deux signaux.

Pour plus de détails, veuillez consulter la table de vérité de la commande PWM dans la fiche technique du driver
DRV8871. Attention cependant : sur le shield, la sortie OUT1 du driver est branchée sur M-. Par conséquent, une
rotation dans le sens positif se programme comme ceci sur Arduino Uno :

analogWrite(pwmMoteur2, 255);

analogWrite(pwmMoteur1, 255 - pwm);

Une rotation dans le sens négatif se programme comme cela :

analogWrite(pwmMoteur1, 255);

analogWrite(pwmMoteur2, 255 - pwm);

http://www.3sigma.fr Page 7 sur 12 v 1.0


Shield Commande Moteur - Version matérielle 1.1

4.2 Mesure de vitesse de rotation


La mesure de vitesse de rotation peut se faire à condition de brancher les deux voies du codeur incrémental du
moteur sur les broches ENCA et ENCB.

Les broches ENCA et ENCB sont reliées aux voies digitales D2 et D3 de la carte Arduino, ce qui permet de mesurer
la vitesse en comptant les fronts des signaux du codeur par l’intermédiaire de fonctions exécutées sur
interruptions.

La broche ENCB est également reliée à la voie D13 afin de bénéficier de la mesure de vitesse matérielle sur la carte
Arduino Due (fonction « QDEC »).

4.3 Mesure de courant


La mesure de courant se fait par l’intermédiaire d’une résistance de « shunt » placée en série avec le moteur. La
valeur de cette résistance (0.01 W) est suffisamment petite pour qu’elle ne puisse pas augmenter de manière
importante la résistance du moteur.

La tension au borne de cette résistance est amplifiée par le composant INA213, dont le gain est égal à 50. Un
courant nul correspond à la moitié de la tension de référence de la carte Arduino utilisée.

Le courant mesuré est routé sur la broche Arduino A3. Voici le code permettant de mesurer la valeur du courant
sur Arduino Uno :

int adc = analogRead(A3);


float courant = (Vref * ((float)adc)/1024. - Vref/2) / (50. * Rmes);

http://www.3sigma.fr Page 8 sur 12 v 1.0


Shield Commande Moteur - Version matérielle 1.1

4.4 Limitation matérielle du courant


Le driver DRV8871 possède une fonctionnalité de limitation matérielle du courant via une résistance dont la valeur
est égale, sur le shield, à 20 kW . Ceci correspond à un courant maximal de 3.2 A, selon la formule suivante :

Si nécessaire, il est possible de modifier cette valeur de la façon suivante :

• Dessouder cette résistance (voir sa position sur le synoptique de la carte)

• Souder une résistance de la valeur adéquate :

◦ au même emplacement (boîtier 0603)

◦ ou à l’emplacement pour boîtier 0805 (voir synoptique)

◦ ou à l’emplacement pour résistance traversante (voir synoptique)

4.5 Connecteurs banane


Six connecteurs banane 2mm permettent d’afficher 5 signaux rapides sur un oscilloscope. Ils sont de 6 couleurs
différentes

• Rouge M+ (borne positive du moteur)

• Bleu : M- (borne négative du moteur)

• Jaune : voie A de l’encodeur ou tension sur une des bornes de la résistance de mesure de courant

• Blanc : voie B de l’encodeur ou tension sur l’autre borne de la résistance de mesure de courant

• Vert : PWM

• Noir : GND

On détaille ci-dessous quelques particularités.

http://www.3sigma.fr Page 9 sur 12 v 1.0


Shield Commande Moteur - Version matérielle 1.1

4.5.1 Connecteur « PWM »


Une seule banane (la verte) permet de visualiser le signal PWM, bien qu’en pratique il faille moduler deux signaux
en fonction du sens de rotation du moteur. Nous avons par conséquent intégré sur la carte un circuit XOR
permettant de visualiser le signal dont le rapport cyclique est variable. Ainsi, quelque soit le sens de rotation du
moteur, le signal PWM peut toujours être visualisé sur un oscilloscope.

4.5.2 Connecteurs jaune et blanc

Si l’interrupteur situé à côté des bananes jaune et blanche et positionné à gauche, ce sont les signaux des voies A
et B qui sont accessibles sur ces connecteurs.

Dans le cas contraire, les bananes jaunes et blanches sont reliées aux deux bornes de la résistance de mesure de
courant. Il est ainsi possible, à condition d’intégrer un amplificateur externe ou bien d’avoir un oscilloscope très
sensible de visualiser la tension différentielle directement proportionnelle au courant circulant dans le moteur.

4.6 Ajout d’un convertisseur de tension


Dans le cas où un cavalier relie PWRIN et VIN, la carte Arduino est alimentée par l’intermédiaire du shield.
Cependant, cette configuration ne fonctionne pas si on utilise une carte pcDuino à la place d’une carte Arduino : la
pcDuino n’intègre pas de convertisseur de tension et l’application d’un tension supérieure à 5 V sur sa broche VIN
conduit à la destruction de la carte.

Pour palier à cet inconvénient, il est prévu sur le shield un emplacement permettant de souder un convertisseur
de tension sortant 5 V. Cette tension est appliquée sur la broche 5 V du shield, et donc sur la broche 5 V de la carte
sur laquelle ce shield est connecté.

Attention, si un convertisseur de tension est en place :

• Ne pas mettre le cavalier reliant PWRIN et VIN

• Ne pas alimenter séparément la carte pcDuino (ou Arduino)

http://www.3sigma.fr Page 10 sur 12 v 1.0


Shield Commande Moteur - Version matérielle 1.1

5 Exemple de programme
Voici un exemple de programme fonctionnant sur Arduino Uno et permettant de commander le PWM
alternativement à 50% dans le sens positif, 0% et 50% dans le sens négatif :

/******************************************************************************
Exemple de programme destiné à fonctionner avec le shield de commande moteur,
disponible à l'adresse suivante:
http://boutique.3sigma.fr/180-shield-commande-moteur.html

Auteur: 3Sigma
Version 1.0 - 15/09/2017
*******************************************************************************/

// Broches PWM utilisées (attention: ceci doit correspondre à la configuration des


cavaliers)
#define pwmMoteur1 9
#define pwmMoteur2 10

// Signal PWM à appliquer au moteur


int pwm = 0;

void setup() {
// Définition des broches PWM en sortie
pinMode(pwmMoteur1, OUTPUT);
pinMode(pwmMoteur2, OUTPUT);
}

void loop() {
// Commande PWM alternativement à 50% dans le sens positif,
// 0% et 50% dans le sens négatif

// 50% dans le sens positif


pwm = 128;
analogWrite(pwmMoteur2, 255);
analogWrite(pwmMoteur1, 255 - pwm);
delay(2000);

http://www.3sigma.fr Page 11 sur 12 v 1.0


Shield Commande Moteur - Version matérielle 1.1

// 0%
analogWrite(pwmMoteur1, 255);
analogWrite(pwmMoteur2, 255);
delay(2000);

// 50% dans le sens négatif


pwm = 128;
analogWrite(pwmMoteur1, 255);
analogWrite(pwmMoteur2, 255 - pwm);
delay(2000);

// 0%
analogWrite(pwmMoteur1, 255);
analogWrite(pwmMoteur2, 255);
delay(2000);
}

http://www.3sigma.fr Page 12 sur 12 v 1.0

Vous aimerez peut-être aussi