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
| Fabrikant | STMicroelectronics |
|---|---|
| Onderdeelnummer | L9110 |
| Logica/IO-spanning | 2,5–5,5 V |
| Voedingsspanning | 2,5–12 V |
| Uitgangsstroom (per kanaal) | 1 A |
| Piekstroom (per kanaal) | 2 A |
| PWM-frequentierichtlijn | 10 kHz |
| Ingangslogische drempels | 0,8 V (laag), 2,0 V (hoog) |
| Spanningsval / RDS(on) / verzadiging | 0,3 V bij 1 A |
| Thermische limieten | 150 °C |
| Behuizing | DIP-16 |
| Opmerkingen / varianten | Vaak 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.
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).
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
-
Amazon
-
eBay
-
AliExpressPurchase L9110 motor driver from AliExpress-2s.click.aliexpress.com
Hulpmiddelen en referenties
Nog geen middelen.
Bestanden📁
Datasheet (pdf)
-
L9110 Motor driver module datasheetL9110 motor driver module datasheet covering pinout, specifications, and application circuit for driving DC motors.
robojax_L9110_datasheet.pdf0.20 MB
Fritzing-bestand
-
L9110 H-bridge Motor driver module
L9110 H-bridge module.fzpz0.04 MB