ค้นหาโค้ด

โค้ด Arduino สำหรับโมดูลควบคุมมอเตอร์ DC คู่ L9110

โค้ด Arduino สำหรับโมดูลควบคุมมอเตอร์ DC คู่ L9110

ในบทช่วยสอนนี้ เราจะสำรวจวิธีการควบคุมมอเตอร์ DC สองตัวโดยใช้โมดูลควบคุมมอเตอร์คู่ L9110 ร่วมกับ Arduino โปรเจกต์นี้จะช่วยให้คุณจัดการทิศทางและความเร็วของมอเตอร์แต่ละตัวได้ ทำให้สามารถนำไปประยุกต์ใช้ได้หลากหลาย เช่น หุ่นยนต์และระบบอัตโนมัติ เมื่อจบคำแนะนำนี้ คุณจะเข้าใจวิธีการเชื่อมต่ออุปกรณ์และเขียนโค้ดที่จำเป็นเพื่อให้มอเตอร์ทำงานได้อย่างราบรื่น หากต้องการคำอธิบายเพิ่มเติม โปรดดูวิดีโอ (ในวิดีโอที่ 00:00)

อธิบายฮาร์ดแวร์

โมดูลควบคุมมอเตอร์ DC คู่ L9110 ช่วยให้คุณควบคุมมอเตอร์สองตัวพร้อมกันได้ โดยมีวงจร H-bridge สองชุด ซึ่งช่วยให้คุณกลับขั้วแรงดันไฟฟ้าของมอเตอร์ได้ ซึ่งหมายความว่าคุณสามารถเปลี่ยนทิศทางของมอเตอร์แต่ละตัวได้ง่ายๆ โดยการสลับสถานะของพินควบคุม โมดูลนี้มีพินหลักสี่พิน: สองพินสำหรับมอเตอร์แต่ละตัวเพื่อควบคุมทิศทางการหมุน เมื่อคุณตั้งพินหนึ่งเป็น HIGH และอีกพินเป็น LOW มอเตอร์จะหมุนในทิศทางหนึ่ง การกลับสถานะพินจะทำให้มอเตอร์หมุนในทิศทางตรงกันข้าม ความยืดหยุ่นนี้จำเป็นสำหรับการใช้งานเช่นหุ่นยนต์ ซึ่งคุณต้องการการควบคุมการเคลื่อนที่ของมอเตอร์อย่างแม่นยำ

รายละเอียดจาก Datasheet

ผู้ผลิตSTMicroelectronics
หมายเลขชิ้นส่วนL9110
แรงดันไฟฟ้าลอจิก/IO2.5–5.5 V
แรงดันไฟฟ้าจ่าย2.5–12 V
กระแสเอาต์พุต (ต่อช่อง)1 A
กระแสสูงสุด (ต่อช่อง)2 A
คำแนะนำความถี่ PWM10 kHz
เกณฑ์ลอจิกอินพุต0.8 V (ต่ำ), 2.0 V (สูง)
แรงดันตก / RDS(on) / ความอิ่มตัว0.3 V ที่ 1 A
ขีดจำกัดความร้อน150 °C
แพ็คเกจDIP-16
หมายเหตุ / รุ่นต่างๆนิยมใช้ในโปรเจกต์หุ่นยนต์ขนาดเล็ก

  • ตรวจสอบให้แน่ใจว่ามีการระบายความร้อนที่เหมาะสมสำหรับการทำงานต่อเนื่อง
  • รักษาสัญญาณ PWM ให้ต่ำกว่า 10 kHz เพื่อประสิทธิภาพที่ดีที่สุด
  • ใช้ตัวเก็บประจุแยกสัญญาณใกล้กับขั้วจ่ายไฟเพื่อลดสัญญาณรบกวน
  • ระวังการต่อขั้วกลับด้าน ซึ่งอาจทำให้โมดูลเสียหายได้
  • ตรวจสอบขีดจำกัดกระแสที่กำหนดเสมอเพื่อหลีกเลี่ยงความร้อนสูงเกินไป

คำแนะนำการเดินสายไฟ

ในการเชื่อมต่อโมดูลควบคุมมอเตอร์คู่ L9110 กับ Arduino ให้เริ่มต้นด้วยการเชื่อมต่อพินจ่ายไฟ เชื่อมต่อพิน VCC บน L9110 เข้ากับเอาต์พุต 5V บน Arduino และเชื่อมต่อพิน GND เข้ากับพินกราวด์หนึ่งตัวของ Arduino จากนั้น สำหรับมอเตอร์ A ให้เชื่อมต่อพิน A1A เข้ากับดิจิทัลพิน 2 บน Arduino และพิน A1B เข้ากับดิจิทัลพิน 3 จากนั้น สำหรับมอเตอร์ B ให้เชื่อมต่อพิน B1A เข้ากับดิจิทัลพิน 8 และพิน B1B เข้ากับดิจิทัลพิน 9 ตรวจสอบให้แน่ใจว่ามอเตอร์เชื่อมต่อกับเอาต์พุตที่เกี่ยวข้องบนโมดูล L9110 อย่างถูกต้อง
Arduino-wirign-for-L9110-motor-driver

ตัวอย่างโค้ดและคำอธิบาย

ในฟังก์ชัน setup เราจำเป็นต้องกำหนดพินควบคุมเป็นเอาต์พุต ซึ่งจำเป็นสำหรับ Arduino ในการควบคุมทิศทางมอเตอร์อย่างมีประสิทธิภาพ:
void setup() {
  pinMode(B1A,OUTPUT);// กำหนดพินเป็นเอาต์พุต
  pinMode(B1B,OUTPUT);
  
  pinMode(A1A,OUTPUT);
  pinMode(A1B,OUTPUT);    
  delay(3000);
}
โค้ดส่วนนี้ตั้งค่าพินควบคุมมอเตอร์ เพื่อให้แน่ใจว่า Arduino สามารถส่งสัญญาณไปยังโมดูล L9110 ได้ ลูปหลักของโปรแกรมควบคุมมอเตอร์โดยเรียกใช้ฟังก์ชัน `motorA` และ `motorB` ด้วยพารามิเตอร์ต่างๆ เพื่อเปลี่ยนทิศทาง:
void loop() {
  motorA('R');// หมุนมอเตอร์ A ไปทางขวา
  delay(2000);
  motorA('L');// หมุนมอเตอร์ A ไปทางซ้าย
  delay(2000);   
  motorA('O');// ปิดมอเตอร์ A
  delay(2000); 
  ...
}
ในส่วนนี้ มอเตอร์จะถูกทำให้หมุนไปทางขวาและซ้าย โดยมีดีเลย์คั่นเพื่อสังเกตการเปลี่ยนแปลงทิศทาง ฟังก์ชัน `motorA` ถูกกำหนดขึ้นเพื่อควบคุมมอเตอร์ A ตามทิศทางที่ป้อนเข้า:
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);    
  }
}
ฟังก์ชันนี้ตรวจสอบทิศทางที่กำหนดและตั้งค่าพินควบคุมตามนั้นเพื่อหมุนมอเตอร์ในทิศทางที่ต้องการหรือปิดมอเตอร์

การสาธิต / สิ่งที่คาดหวัง

เมื่อคุณรันโค้ด คุณควรเห็นมอเตอร์สลับระหว่างการหมุนซ้ายและขวา ดีเลย์ช่วยให้คุณสังเกตการเปลี่ยนแปลงทิศทางได้ชัดเจน ระวังข้อผิดพลาดทั่วไป เช่น การต่อขั้วกลับด้าน ซึ่งอาจทำให้เกิดพฤติกรรมที่ไม่คาดคิดหรือความเสียหายต่ออุปกรณ์ นอกจากนี้ ตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟเพียงพอสำหรับมอเตอร์ที่คุณใช้ (ในวิดีโอที่ 00:00)

ภาพ

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
ภาษา: 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

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ยังไม่มีทรัพยากรเลย

ไฟล์📁

แผ่นข้อมูล (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