Arduino, Tutoriels

Comment utiliser PCA9685 Driver Servo Moteur PWM 16 Canaux avec Arduino

Pca9685 Driver Servo Moteur Pwm 16 Canaux

Introduction

PCA9685 Driver Servo Moteur PWM 16 Canaux est spécialement conçu pour piloter une quantité importante de servomoteurs, trouvant ainsi son utilité dans diverses mises en œuvre telles que les structures de bras robotiques, les hexapodes et diverses formes de robots. Le protocole I2C constitue la base de sa communication, facilitant une liaison à la fois simple et performante avec votre microcontrôleur via un branchement de seulement deux broches.

Image Du Pca9685 Driver Servo Moteur Pwm 16 Canaux Pour Contrôler Et Commander Facilement Jusqu'À 16 Servomoteurs.

Spécifications techniques du contrôleur de servo PCA6985

PCA6985 est un contrôleur de LED 16 canaux contrôlé par le bus I²C optimisé pour les applications de rétroéclairage de couleur Rouge/Vert/Bleu/Ambre (RGBA). Bien qu’il ait été initialement conçu pour contrôler les LED, sa capacité s’étend à être un remarquable contrôleur de servo. Les principales spécifications comprennent :

  • Tension d’alimentation de fonctionnement : de 2,3 V à 5,5 V
  • 16 pilotes de LED. Chaque sortie est programmable à l’arrêt, à l’allumage, à la luminosité des LED programmables, au groupement programmable de variation / clignotement mélangé à la luminosité individuelle des LED
  • Interface de bus I²C compatible avec Fast-mode Plus à 1 MHz avec une capacité de sortie SDA à haute impulsion de 30 mA pour piloter des bus à haute capacité
  • Luminosité programmable linéaire de 4096 étapes (12 bits) par sortie de LED variant de complètement éteint (par défaut) à la luminosité maximale
  • Fréquence de sortie (de 200 Hz à 200 kHz) généralement utilisée pour (mais pas limitée à) la commande de servomoteurs
  • Toutes les sorties ont une résolution de 16 bits (45 μs) pour une fréquence allant de 24 Hz à 1526 Hz
  • Adresse du bus I²C programmable par logiciel (une adresse LED All Call et trois adresses LED Sub Call) permet à tous les dispositifs PCA9685 définis ou à des groupes définis de répondre à une adresse commune de bus I²C
  • Seize sorties en totem pole (25 mA de source et 10 mA de source à 5 V) avec une sélection de sorties LED à drain ouvert programmables par logiciel (le PCA9685 pilote les LED en mode à drain ouvert (IOUT = 25 mA) par défaut)

Pour plus d’information, vous pouvez consulter la fiche technique du driver :

https://cdn-learn.adafruit.com/downloads/pdf/16-channel-pwm-servo-driver.pdf

Les broches du PCA6985

Il a un total de 28 broches, dont 16 sont des canaux de sortie PWM, 6 sont des broches de terre, 2 sont des broches V+ pour alimenter le PCA6985, et le reste sont des broches de contrôle.

  1. PWM : Ce sont les 16 broches de sortie. Elles délivrent des signaux PWM qui peuvent être utilisés pour contrôler les servos ou les LED.
  2. VCC : Il s’agit de la broche d’alimentation pour la puce PCA6985 elle-même. Elle doit être connectée à 3.3V ou 5V sur votre Arduino.
  3. V+ : Cette broche est pour l’alimentation externe de vos servos ou LEDs. Elle peut gérer des tensions de 3V à 6V.
  4. GND : La broche de terre doit être connectée à la terre de votre Arduino.
  5. SDA : Cette broche doit être connectée à la broche SDA (ligne de données) de votre Arduino.
  6. SCL : Cette broche doit être connectée à la broche SCL (ligne d’horloge) de votre Arduino.
  7. OE : Cette broche signifie “Output Enable” (Activation de la sortie). Par défaut, elle doit être connectée à la terre.

PCA9685 Driver Servo Moteur vs TLC5940

PCA9685TLC5940
Nombre de canaux1616
Résolution12 bits (4096 niveaux)12 bits (4096 niveaux)
Interface de communicationI2C (2 broches)SPI (au moins 3 broches)
Tension d’alimentation2.3V à 5.5V3V à 5.5V
Caractéristiques supplémentairesArrêt à la fin de chaque cycle PWMPilote de grille de grille de tension élevée, correction de point grisé
Applications courantesContrôle de servosApplications d’éclairage LED à grande échelle

Contrôler un seul servo

Branchement du PCA9685 à l’Arduino

Pca9685 Driver Servo Moteur Pwm 16 Canaux
  1. Alimentation : Connectez la broche VCC du PCA9685 à la broche 5V de votre Arduino. Connectez la broche GND du PCA9685 à une broche GND de l’Arduino.
  2. Communication I2C : Reliez la broche SDA du PCA9685 à la broche SDA de votre Arduino. Pour un Arduino Uno, c’est la broche A4. Puis, connectez la broche SCL du PCA9685 à la broche A5 de votre Arduino.
  3. Réglage de l’adresse I2C (optionnel) : Si vous utilisez plusieurs PCA9685 ou d’autres appareils I2C, vous devrez définir des adresses I2C uniques pour chaque appareil. Vous pouvez le faire en soudant les pads d’adresse A0-A5 sur le PCA9685. Par défaut, tous les pads sont ouverts, ce qui donne à l’appareil l’adresse I2C 0x40.

Branchement du servomoteur au PCA9685

  1. Connectez les fils du servomoteur aux broches du PCA9685 : Les servomoteurs ont généralement trois fils : un pour l’alimentation (rouge), un pour la terre (marron ou noir) et un pour le signal (jaune ou blanc). Sur le PCA9685, chaque canal a trois broches. Connectez le fil d’alimentation à la broche +, le fil de terre à la broche – et le fil de signal à la broche S.
  2. Alimentation du servomoteur : Connectez l’alimentation du servomoteur (par exemple, une batterie) à la broche V+ du PCA9685. Cela fournira l’énergie nécessaire pour faire fonctionner le servomoteur.
  3. Choix du canal : Vous pouvez connecter jusqu’à 16 servomoteurs au PCA9685. Chaque servomoteur doit être connecté à un canal différent.

Note sur l’alimentation des servos

Les servos sont généralement conçus pour fonctionner à une tension de 5 ou 6 V. Il est important de noter qu’un grand nombre de servos en mouvement simultanément (en particulier les grands servos puissants) nécessiteront beaucoup de courant. Même les micro-servos consomment plusieurs centaines de mA lorsqu’ils sont en mouvement. Certains servos à couple élevé consommeront plus de 1A chacun sous charge.

De bonnes options d’alimentation pour vos servos comprennent :

  • Alimentation à découpage 5v 2A
  • Alimentation à découpage 5v 10A
  • Porte-piles 4xAA – 6v avec des piles alcalines. 4,8v avec des piles rechargeables NiMH.
  • Piles RC rechargeables de 4,8 ou 6 V provenant d’un magasin de bricolage.

Gardez à l’esprit qu’une bonne alimentation est essentielle pour le fonctionnement correct de votre projet.

Code

Avec les connexions correctement établies, vous pouvez maintenant contrôler un servomoteur unique à l’aide du PCA6985 et de votre Arduino. Assurez-vous d’avoir installé la bibliothèque Adafruit_PWMServoDriver.h. Voici comment vous pouvez contrôler un seul servomoteur connecté au canal 0 du PCA6985 :

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// called this way, it uses the default address 0x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

// Depending on your servo make, the pulse width min and max may vary
#define SERVOMIN  125 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX  575 // this is the 'maximum' pulse length count (out of 4096)

void setup() {
  Serial.begin(9600);
  Serial.println("16 channel Servo test!");

  pwm.begin();
  
  pwm.setPWMFreq(60);  // Analog servos run at ~60 Hz updates
}

void loop() {
    for( int angle =0; angle<181; angle +=10){
      delay(50);
        pwm.setPWM(0, 0, angleToPulse(angle));
    }
 
  delay(1000);
}

int angleToPulse(int ang){
   int pulse = map(ang,0, 180, SERVOMIN,SERVOMAX);
   Serial.print("Angle: ");Serial.print(ang);
   Serial.print(" pulse: ");Serial.println(pulse);
   return pulse;
}

Contrôler plusieurs servomoteurs

 Pca9685 Driver Servo Moteur Pwm 16 Canaux
PCA9685 Driver Servo Moteur PWM 16 Canaux

Pour contrôler plusieurs servomoteurs, le processus est similaire mais nécessite de connecter chaque servomoteur à une sortie PWM différente du PCA6985. Le code est très similaire, il faut simplement ajouter une boucle pour gérer chaque servomoteur. Voici un exemple de code pour contrôler plusieurs servomoteurs :

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

#define SERVOMIN  125 
#define SERVOMAX  575 

void setup() {
  Serial.begin(9600);
  Serial.println("16 channel Servo test!");

  pwm.begin();
  pwm.setPWMFreq(60); 
}

void loop() {
  for(int i=0; i<16; i++) {
    for(int angle =0; angle<181; angle +=10) {
      delay(50);
        pwm.setPWM(i, 0, angleToPulse(angle));
    }
  }
 
  delay(1000);
}

int angleToPulse(int ang){
   int pulse = map(ang,0, 180, SERVOMIN,SERVOMAX);
   Serial.print("Angle: ");Serial.print(ang);
   Serial.print(" pulse: ");Serial.println(pulse);
   return pulse;
}

Video descriptive

Lien outilles

  1. Pour découvrir plus de tutoriel, vous pouvez consulter notre bloc https://www.moussasoft.com/tutoriels-electroniques
  2. Téléchargement de l’Arduino IDE : https://www.arduino.cc/en/software
  3. GitHub Arduino Repository : https://github.com/arduino/Arduino/