Contrôle de la vitesse du pilote de moteur avec un Arduino

Dans cet exemple, nous contrôlerons la vitesse d'un actionneur linéaire avec un Arduino et un pilote de moteur.

Remarque: Ce tutoriel suppose des connaissances préalables avec les principes électroniques de base, le matériel et les logiciels Arduino. Si c'est la première fois que vous utilisez Arduino, nous vous suggérons d'apprendre les bases de l'un des nombreux tutoriels pour débutants disponibles via les recherches Google et YouTube. Veuillez noter que nous ne disposons pas des ressources nécessaires pour fournir un support technique pour les applications personnalisées et que nous ne déboguerons pas, ne modifierons pas, ne fournirons pas de code ou de schémas de câblage en dehors de ces didacticiels accessibles au public.

Composants

Câblage

Contrôle de la vitesse du pilote de moteur avec un Arduino

Présentation du matériel et des logiciels

Les moteurs à courant continu dans les actionneurs linéaires nécessitent un courant élevé (jusqu'à 5A), si nous devions connecter l'actionneur linéaire directement à l'Arduino, cette consommation de courant élevée détruirait les broches numériques Arduino car elles ne sont évaluées que pour 40 mA chacune. Par conséquent, nous utilisons un pilote de moteur qui peut prendre un signal PWM (modulation de largeur d'impulsion) à faible courant de la carte Arduino et fournir un signal PWM à courant élevé à l'actionneur linéaire.

Le pilote du moteur est connecté à deux broches numériques PWM (broches 10 et 11 sur l'Arduino Uno). En réglant l'une de ces broches sur LOW et l'autre sur HIGH (voir les lignes 18 et 19 dans le code ci-dessous), nous pouvons étendre l'actionneur à la vitesse maximale. Pour arrêter l'actionneur, nous réglons les deux broches sur LOW (voir les lignes 21 et 22 dans le code ci-dessous) et pour inverser le sens du mouvement, nous pouvons inverser l'ordre des broches HIGH et LOW (voir les lignes 24 et 25 dans le code ci-dessous). Nous pouvons également ajuster la vitesse en changeant la variable «Vitesse» à n'importe quelle valeur dans la plage [0, 255]; voir la ligne 17 dans le code ci-dessous.

Code

https://gist.github.com/Will-Firgelli/c0ef0871dc1946d75257e0c29dccae2a

COPY
/* Firgelli Automations
 * Limited or no support: we do not have the resources for Arduino code support
 * 
 * Program demos how a motor driver controls direction & speed of a linear actuator 
 */

int RPWM = 10;  //connect Arduino pin 10 to IBT-2 pin RPWM
int LPWM = 11;  //connect Arduino pin 11 to IBT-2 pin LPWM
int Speed;

void setup() {
  pinMode(RPWM, OUTPUT);
  pinMode(LPWM, OUTPUT);
}

void loop() {  
  Speed = 255;                    //choose any speed in the range [0,255]
  analogWrite(RPWM, 0);
  analogWrite(LPWM, Speed);
  delay(1000);                    //extend at given speed for one second
  analogWrite(RPWM, 0);
  analogWrite(LPWM, 0);
  delay(500);                     //stop for half a second
  analogWrite(RPWM, Speed);
  analogWrite(LPWM, 0);
  delay(1000);                    //retract at maximum speed for one second
}   

Contrôle de vitesse variable avec un potentiomètre

Dans l'exemple ci-dessus, nous définissons manuellement la vitesse à la ligne 17 du code. Cependant, des situations peuvent survenir où l'on souhaite faire varier la vitesse de l'actionneur dans le temps. La méthode la plus simple pour y parvenir consiste à utiliser un potentiomètre. UNE le potentiomètre estune résistance variable à trois bornes qui peut agir comme un diviseur de tension. En tournant le bouton du potentiomètre, la tension de sortie variera et nous pouvons le connecter à la broche analogique d'un Arduino pour définir une vitesse variable.

Câblage

Contrôle de la vitesse du pilote de moteur avec un Arduino

Présentation du matériel et des logiciels

Comme mentionné ci-dessus, un potentiomètre est un dispositif rotatif qui change la résistance lorsque le bouton est tourné. En connectant les deux broches externes du potentiomètre à 5V et GND, et la broche du milieu à la broche analogique Arduino, A0, un diviseur de tension est créé. Lorsque le bouton est tourné, l'Arduino lira des lectures analogiques allant de [0, 1023].

Pour les valeurs dans la plage [512, 1023], nous voulons que l'actionneur s'étende et pour les valeurs [0, 511], nous voulons que l'actionneur se rétracte, cela peut être réalisé avec une simple instruction if () / else aux lignes 22 et 28 en le code ci-dessous. Ensuite, en utilisant la fonction map () (lignes 23 et 29 dans le code ci-dessous), nous pouvons le convertir en un signal PWM qui contrôlera à la fois la vitesse et la direction de l'actionneur.

Code

https://gist.github.com/Will-Firgelli/d2cdf69edc829974885984b3fb8e4856

COPY
/* Firgelli Automations
 * Limited or no support: we do not have the resources for Arduino code support
 * 
 * This progam controls the speed of a linear actuator via a potentiometer input 
 */

int RPWM = 10;    //connect Arduino pin 10 to IBT-2 pin RPWM
int LPWM = 11;    //connect Arduino pin 11 to IBT-2 pin LPWM
int potPin = A0;  //analog pin that connects to centre potentiometer pin

int Speed, sensorVal;

void setup() {
  pinMode(RPWM, OUTPUT);
  pinMode(LPWM, OUTPUT);
  pinMode(potPin, INPUT);
}

void loop() {  
  sensorVal = analogRead(potPin);       //read user input from the potentiometer

  if(sensorVal >= 512){                 //extension 
    Speed = map(sensorVal, 512, 1023, 0, 255);
    analogWrite(RPWM, 0);
    analogWrite(LPWM, Speed);
  }

  else{                                 //retraction
    Speed = map(sensorVal, 0, 511, 255, 0);
    analogWrite(RPWM, Speed);
    analogWrite(LPWM, 0);
  }
}  

Share This Article
Tags: