Académique Documents
Professionnel Documents
Culture Documents
15/09/2017
Version de document: 1.0
Shield Commande Moteur - Version matérielle 1.1
1 Introduction.............................................................................................................................................................3
2 Matériel...................................................................................................................................................................4
3.1 Alimentation.....................................................................................................................................................5
4 Détails techniques....................................................................................................................................................7
5 Exemple de programme.........................................................................................................................................11
1 Introduction
Ce document présente le shield de commande moteur compatible Arduino et pcDuino en version de matériel 1.1.
2 Matériel
Un synoptique de la carte est représenté ci-dessous :
• 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 :
• Ne pas utiliser une tension supérieure à 12 V, ce que ne supporterait pas la carte Arduino
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.
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.
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 :
• 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
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);
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 »).
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 :
• 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
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.
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é.
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
*******************************************************************************/
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
// 0%
analogWrite(pwmMoteur1, 255);
analogWrite(pwmMoteur2, 255);
delay(2000);
// 0%
analogWrite(pwmMoteur1, 255);
analogWrite(pwmMoteur2, 255);
delay(2000);
}