Hľadať kód

Arduino kód pre L9110 duálny modul ovládača jednosmerných motorov

Arduino kód pre L9110 duálny modul ovládača jednosmerných motorov

V tomto návode si ukážeme, ako ovládať dva jednosmerné motory pomocou modulu L9110 s dvoma motorovými ovládačmi a Arduinom. Tento projekt vám umožní riadiť smer a rýchlosť každého motora, čo umožňuje všestranné aplikácie, ako je robotika a automatizácia. Na konci tejto príručky budete jasne rozumieť, ako zapojiť komponenty a napísať kód potrebný na plynulý chod vašich motorov. Ak potrebujete objasnenie, určite si pozrite video (vo videu o 00:00).

Vysvetlenie hardvéru

Modul L9110 s dvoma motorovými ovládačmi pre jednosmerné motory vám umožňuje ovládať dva motory súčasne. Obsahuje dva H-moskové obvody, ktoré vám umožňujú obrátiť polaritu napätia motora. To znamená, že môžete ľahko zmeniť smer každého motora prepínaním riadiacich pinov. Modul má štyri kľúčové piny: dva pre každý motor na riadenie smeru otáčania. Keď nastavíte jeden pin na vysokú úroveň a druhý na nízku, motor sa otáča jedným smerom; obrátenie stavov pinov spôsobí otáčanie opačným smerom. Táto flexibilita je nevyhnutná pre aplikácie, ako je robotika, kde potrebujete presné riadenie pohybov motora.

Podrobnosti z datasheetu

VýrobcaSTMicroelectronics
Označenie súčiastkyL9110
Logické/IO napätie2,5–5,5 V
Napájacie napätie2,5–12 V
Výstupný prúd (na kanál)1 A
Špičkový prúd (na kanál)2 A
Odporúčaná frekvencia PWM10 kHz
Logické prahové hodnoty vstupu0,8 V (nízka), 2,0 V (vysoká)
Pokles napätia / RDS(on) / saturácia0,3 V pri 1 A
Tepelné limity150 °C
PuzdroDIP-16
Poznámky / variantyBežne používané v malých robotických projektoch.

  • Zabezpečte správne chladenie pre nepretržitú prevádzku.
  • Udržujte PWM signály pod 10 kHz pre optimálny výkon.
  • Použite oddeľovacie kondenzátory blízko napájacích pripojení na minimalizáciu šumu.
  • Pozor na obrátenú polaritu pripojení; môže poškodiť modul.
  • Vždy kontrolujte menovité prúdové limity, aby ste predišli prehriatiu.

Pokyny na zapojenie

Na zapojenie modulu L9110 s dvoma motorovými ovládačmi pre jednosmerné motory s Arduinom začnite pripojením napájacích pinov. Pripojte pin VCC na L9110 k 5V výstupu na Arduine a pin GND pripojte k jednému z uzemňovacích pinov Arduina. Ďalej pre motor A pripojte pin A1A k digitálnemu pinu 2 na Arduine a pin A1B k digitálnemu pinu 3. Potom pre motor B pripojte pin B1A k digitálnemu pinu 8 a pin B1B k digitálnemu pinu 9. Uistite sa, že motory sú správne pripojené k ich príslušným výstupom na module L9110.
Arduino-wirign-for-L9110-motor-driver

Príklady kódu a vysvetlenie

Vo funkcii setup musíme definovať riadiace piny ako výstupy. To je nevyhnutné, aby Arduino mohlo efektívne riadiť smery motorov:
void setup() {
  pinMode(B1A,OUTPUT);// definovať pin ako výstup
  pinMode(B1B,OUTPUT);
  
  pinMode(A1A,OUTPUT);
  pinMode(A1B,OUTPUT);    
  delay(3000);
}
Tento úryvok kódu nastaví riadiace piny motorov, čím zabezpečí, že Arduino môže posielať signály do modulu L9110. Hlavná slučka programu riadi motory volaním funkcií `motorA` a `motorB` s rôznymi parametrami na zmenu smerov:
void loop() {
  motorA('R');// Otočiť motor A DOPRAVA
  delay(2000);
  motorA('L');// Otočiť motor A DOĽAVA
  delay(2000);   
  motorA('O');// Vypnúť motor A
  delay(2000); 
  ...
}
V tomto úryvku sa motory otáčajú doprava a doľava, s oneskoreniami medzi tým, aby ste mohli pozorovať zmeny smeru. Funkcia `motorA` je definovaná na riadenie motora A na základe zadaného smeru:
void motorA(char d) {
  if(d =='R'){
    digitalWrite(A1A,LOW);
    digitalWrite(A1B,HIGH); 
  } else if (d =='L'){
    digitalWrite(A1A,HIGH);
    digitalWrite(A1B,LOW);    
  } else {
    digitalWrite(A1A,LOW);
    digitalWrite(A1B,LOW);    
  }
}
Táto funkcia skontroluje zadaný smer a podľa toho nastaví riadiace piny na otáčanie motora v požadovanom smere alebo jeho vypnutie.

Demonštrácia / Čo očakávať

Keď spustíte kód, mali by ste vidieť, ako sa motory striedavo otáčajú doľava a doprava. Oneskorenia vám umožňujú jasne pozorovať zmeny smeru. Buďte opatrní na bežné chyby, ako sú obrátené pripojenia, ktoré môžu viesť k neočakávanému správaniu alebo poškodeniu komponentov. Okrem toho sa uistite, že vaše napájanie je dostatočné pre motory, ktoré používate (vo videu o 00:00).

Obrázky

L9110_motor_driver_module-1
L9110_motor_driver_module-1
L9110_motor_driver_module-12
L9110_motor_driver_module-12
L9110_motor_driver_module-3
L9110_motor_driver_module-3
Arduino-wirign-for-L9110-motor-driver
Arduino-wirign-for-L9110-motor-driver
107-Arduino code for an L9110 dual DC motor controller module
Jazyk: C++
/*
 * Display number on a seven-segment display with Arduino
 * Written by Ahmad Shamshiri for Robojax.com
Date modified: Jun 11, 2018 at 17:20 in Ajax, Ontario, Canada
Watch video instructions for this code: https://youtu.be/-g6Q9lSHDzg

Code is provided for free AS IS without warranty. 
You can share this code as long as you keep the above note intact.
 */

const int A1A = 2;//define pin 2 for A1A
const int A1B = 3;//define pin 3 for A1B

const int B1A = 8;//define pin 8 for B1A
const int B1B = 9;//define pin 9 for B1B




void setup() {
  pinMode(B1A,OUTPUT);// define pin as output
  pinMode(B1B,OUTPUT);
  
  pinMode(A1A,OUTPUT);
  pinMode(A1B,OUTPUT);    
  delay(3000);
}

void loop() {

  motorA('R');// Turn motor A to RIGHT
  delay(2000);
   motorA('L');// Turn motor A to LEFT
  delay(2000);   
  motorA('O');// Turn motor A OFF
  delay(2000); 
    
  motorB('R');// Turn motor B to RIGHT
  delay(2000);
   motorB('L');// Turn motor B to LEFT
  delay(2000); 
  motorB('O');// Turn motor B OFF
  delay(2000); 
   
  motorA('R');// Turn motor A to RIGHT
  motorB('R'); // Turn motor A to RIGHT 
  delay(2000);
  motorA('L');// Turn motor A to LEFT
  motorB('L');// Turn motor B to LEFT     
  delay(3000);
  motorA('O');// Turn motor A OFF
  motorB('O');// Turn motor B OFF
  delay(5000);
   
}

/*
 * @motorA
 * Activation rotation of motor A
 * d is the direction
 * R = Right
 * L = Left
 */
void motorA(char d)
{
  if(d =='R'){
    digitalWrite(A1A,LOW);
    digitalWrite(A1B,HIGH); 
  }else if (d =='L'){
    digitalWrite(A1A,HIGH);
    digitalWrite(A1B,LOW);    
  }else{
    //Robojax.com L9110 Motor Tutorial
    // Turn motor OFF
    digitalWrite(A1A,LOW);
    digitalWrite(A1B,LOW);    
  }
}// motorA end


/*
 * @motorB
 * Activation rotation of motor B
 * d is the direction
 * R = Right
 * L = Left
 */
void motorB(char d)
{

    if(d =='R'){
      digitalWrite(B1A,LOW);
      digitalWrite(B1B,HIGH); 
    }else if(d =='L'){
      digitalWrite(B1A,HIGH);
      digitalWrite(B1B,LOW);    
    }else{
    //Robojax.com L9110 Motor Tutorial
    // Turn motor OFF      
      digitalWrite(B1A,LOW);
      digitalWrite(B1B,LOW);     
    }

}// motorB end

Veci, ktoré by ste mohli potrebovať

Zdroje a referencie

Zatiaľ žiadne zdroje.

Súbory📁

Datasheet (pdf)

  • L9110 Motor driver module datasheet
    L9110 motor driver module datasheet covering pinout, specifications, and application circuit for driving DC motors.
    robojax_L9110_datasheet.pdf 0.20 MB

Súbor Fritzing