Search Code

Arduino-code voor de L9110 dubbele DC-motorcontroller-module

Arduino-code voor de L9110 dubbele DC-motorcontroller-module

In deze tutorial verkennen we hoe je twee gelijkstroommotoren kunt aansturen met de L9110 dubbele motorcontroller-module en een Arduino. Dit project stelt je in staat om de richting en snelheid van elke motor te beheren, wat veelzijdige toepassingen mogelijk maakt, zoals robotica en automatisering. Aan het einde van deze handleiding heb je een duidelijk begrip van hoe je de componenten bedraadt en de code schrijft die nodig is om je motoren soepel te laten draaien. Als je verduidelijking nodig hebt, bekijk dan zeker de video (in video op 00:00).

Hardware uitgelegd

De L9110 dubbele gelijkstroommotorcontroller-module stelt je in staat om twee motoren tegelijkertijd aan te sturen. Het beschikt over twee H-brugcircuits, waarmee je de polariteit van de motorspanning kunt omkeren. Dit betekent dat je eenvoudig de richting van elke motor kunt wijzigen door de regelpinnen om te schakelen. De module heeft vier belangrijke pinnen: twee voor elke motor om de draairichting te regelen. Wanneer je één pin hoog en de andere laag instelt, draait de motor in één richting; het omkeren van de pinstatus zorgt ervoor dat hij in de tegenovergestelde richting draait. Deze flexibiliteit is essentieel voor toepassingen zoals robotica, waar je nauwkeurige controle over motorbewegingen nodig hebt.

Datasheetdetails

FabrikantSTMicroelectronics
OnderdeelnummerL9110
Logica/IO-spanning2,5–5,5 V
Voedingsspanning2,5–12 V
Uitgangsstroom (per kanaal)1 A
Piekstroom (per kanaal)2 A
PWM-frequentierichtlijn10 kHz
Ingangslogische drempels0,8 V (laag), 2,0 V (hoog)
Spanningsval / RDS(on) / verzadiging0,3 V bij 1 A
Thermische limieten150 °C
BehuizingDIP-16
Opmerkingen / variantenVaak gebruikt in kleine robotprojecten.

  • Zorg voor goede koeling bij continu gebruik.
  • Houd PWM-signalen onder 10 kHz voor optimale prestaties.
  • Gebruik ontkoppelcondensatoren nabij de voedingsaansluitingen om ruis te minimaliseren.
  • Let op omgekeerde polariteitsaansluitingen; deze kunnen de module beschadigen.
  • Controleer altijd de nominale stroomlimieten om oververhitting te voorkomen.

Bedradingsinstructies

Om de L9110 dubbele gelijkstroommotorcontroller-module met een Arduino te bedraden, begin je met het aansluiten van de voedingspinnen. Verbind de VCC-pin op de L9110 met de 5V-uitgang op de Arduino en verbind de GND-pin met een van de aardpinnen van de Arduino. Sluit vervolgens voor motor A de A1A-pin aan op digitale pin 2 van de Arduino en de A1B-pin op digitale pin 3. Sluit daarna voor motor B de B1A-pin aan op digitale pin 8 en de B1B-pin op digitale pin 9. Zorg ervoor dat de motoren correct zijn aangesloten op hun respectievelijke uitgangen op de L9110-module.
Arduino-wirign-for-L9110-motor-driver

Codevoorbeelden en uitleg

In de setup-functie moeten we de regelpinnen als uitgangen definiëren. Dit is essentieel zodat de Arduino de motorrichtingen effectief kan aansturen:
void setup() {
  pinMode(B1A,OUTPUT);// definieer pin als uitgang
  pinMode(B1B,OUTPUT);
  
  pinMode(A1A,OUTPUT);
  pinMode(A1B,OUTPUT);    
  delay(3000);
}
Dit codefragment stelt de motorregelpinnen in, zodat de Arduino signalen naar de L9110-module kan sturen. De hoofdloop van het programma stuurt de motoren aan door de functies `motorA` en `motorB` met verschillende parameters aan te roepen om de richting te wijzigen:
void loop() {
  motorA('R');// Draai motor A naar RECHTS
  delay(2000);
  motorA('L');// Draai motor A naar LINKS
  delay(2000);   
  motorA('O');// Zet motor A UIT
  delay(2000); 
  ...
}
In dit fragment worden de motoren naar rechts en links laten draaien, met pauzes ertussen om de richtingsveranderingen te observeren. De functie `motorA` is gedefinieerd om motor A aan te sturen op basis van de ingevoerde richting:
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);    
  }
}
Deze functie controleert de opgegeven richting en stelt de regelpinnen dienovereenkomstig in om de motor in de gewenste richting te laten draaien of uit te schakelen.

Demonstratie / Wat je kunt verwachten

Wanneer je de code uitvoert, zou je moeten zien dat de motoren afwisselend naar links en rechts draaien. De pauzes stellen je in staat om de richtingsveranderingen duidelijk te observeren. Wees voorzichtig met veelvoorkomende valkuilen zoals omgekeerde aansluitingen, die kunnen leiden tot onverwacht gedrag of schade aan de componenten. Zorg er bovendien voor dat je voeding voldoende is voor de motoren die je gebruikt (in video op 00:00).

Afbeeldingen

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
Taal: 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

Dingen die je misschien nodig hebt

Hulpmiddelen en referenties

Nog geen middelen.

Bestanden📁

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

Fritzing-bestand