Bonjour,
Je suis à me construire un petit véhicule autonome à deux roues, mais je suis embêté avec un bogue dans la bibliothèque « Servo » qui me désactive la fonctionnalité de mes ports PWM pour le contrôle de deux moteurs CC avec engrenage démultiplicateur.
Comme bien des petits robots mobiles, j'utilise un capteur à ultrason sur un petit servomoteur TowerPro SG90 9G et un contrôleur moteur L298N (H-Bridge) pour les moteurs CC.
J'utilise les trois broche par moteur du contrôleur (ENA, ENB, IN1, IN2, IN3, IN4), pour contrôler la vitesse des moteurs CC, mais après une commande du genre « UnServo.attach (46,0,180); », je perds l'usage des moteurs CC en mode vitesses variables sur le contrôleur, sauf si la valeur de ENA, ENB est au maximum soit 255, ils passent donc du mode vitesse variable au mode binaire On/Off.
C'est comme si le mode PWM des Arduino (tester avec deux Mega, pour les autres je ne sais pas) était déréglé par l'utilisation de la librairie « Servo ».
Je suis actuellement en recherche d'autres cas similaires dans la francophonie (je suis unilingue francophone).
Pour info, je rencontre ce problème avec toutes les versions de l'IDE d'Arduino (1.0.3, 1.0.5, 1.5.2 et 1.5.3) et je suis sous Linux Kubuntu 12.04, 64 bits.
En fichier joint, mon code source avec le détail des pièces utilisées et des branchements (brouillon didactique pour un véhicule autonome à deux roues).
Dans la description de la bibliothèque, il y a bien une limitation et une désactivation du mode PWM de la broche 11 et 12 avec une carte Arduino Mega, mais seulement si plus de 12 servomoteurs sont utilisés, je n'en ai qu’un :
A partir d'Arduino 0017, la librairie Servo supporte jusqu'à 12 servomoteurs sur la plupart des cartes Arduino (la Duemilanove par exemple) et 48 sur l'Arduino Mega. Sur les cartes autres que la Mega, l'utilisation de la librairie Servo désactive l'instruction analogWrite() sur les broches 9 et 10, qu'il y ait ou non un servomoteur sur ces broches. Sur la Mega, jusqu'à 12 servomoteurs peuvent être utilisés sans interférer avec la fonction PWM (càd avec l'instruction analogWrite); utiliser de 12 à 23 servomoteurs désactivera les impulsions PWM sur les broches 11 et 12. (Note : PWM pour Pulse Width Modulation ou Modulation de Largeur d'Impulsion).
Référence : http://arduino.cc/fr/Main/LibrairieServo
Est-ce que je suis le seul à expérimenter ce problème ?
Existe-t-il une parade à ce problème ?
Est-ce qu'il n'y aurait pas une âme charitable qui pourrait nous corriger ce problème récurrent dans les versions de cette bibliothèque. Je lui serais éternellement reconnaissant !
L'ami René
(M-à-j code source : 2013-09-09)
Arduinobot.zip (30.7 KB)