Tìm kiếm mã

Mã Arduino cho Module Điều khiển Động cơ DC kép L9110

Mã Arduino cho Module Điều khiển Động cơ DC kép L9110

Trong hướng dẫn này, chúng ta sẽ khám phá cách điều khiển hai động cơ DC bằng mô-đun điều khiển động cơ kép L9110 với Arduino. Dự án này sẽ cho phép bạn quản lý hướng và tốc độ của từng động cơ, cho phép các ứng dụng linh hoạt như robot và tự động hóa. Đến cuối hướng dẫn này, bạn sẽ hiểu rõ cách kết nối các linh kiện và viết mã cần thiết để làm cho động cơ của bạn chạy trơn tru. Nếu bạn cần làm rõ, hãy nhớ xem video (trong video tại 00:00).

Phần cứng được giải thích

Mô-đun điều khiển động cơ DC kép L9110 cho phép bạn điều khiển hai động cơ cùng lúc. Nó có hai mạch cầu H, cho phép bạn đảo ngược cực tính của điện áp động cơ. Điều này có nghĩa là bạn có thể dễ dàng thay đổi hướng của từng động cơ bằng cách chuyển đổi các chân điều khiển. Mô-đun có bốn chân chính: hai chân cho mỗi động cơ để điều khiển hướng quay. Khi bạn đặt một chân ở mức cao và chân kia ở mức thấp, động cơ quay theo một hướng; đảo ngược trạng thái chân sẽ làm cho nó quay theo hướng ngược lại. Sự linh hoạt này rất cần thiết cho các ứng dụng như robot, nơi bạn cần điều khiển chính xác chuyển động của động cơ.

Chi tiết từ bảng dữ liệu

Nhà sản xuấtSTMicroelectronics
Số bộ phậnL9110
Điện áp logic/IO2.5–5.5 V
Điện áp cung cấp2.5–12 V
Dòng điện đầu ra (mỗi kênh)1 A
Dòng điện đỉnh (mỗi kênh)2 A
Hướng dẫn tần số PWM10 kHz
Ngưỡng logic đầu vào0.8 V (thấp), 2.0 V (cao)
Sụt áp / RDS(on) / bão hòa0.3 V tại 1 A
Giới hạn nhiệt150 °C
Đóng góiDIP-16
Ghi chú / biến thểThường được sử dụng trong các dự án robot nhỏ.

  • Đảm bảo tản nhiệt thích hợp cho hoạt động liên tục.
  • Giữ tín hiệu PWM dưới 10 kHz để có hiệu suất tối ưu.
  • Sử dụng tụ điện tách rời gần các kết nối nguồn để giảm nhiễu.
  • Cẩn thận với các kết nối đảo cực; chúng có thể làm hỏng mô-đun.
  • Luôn kiểm tra giới hạn dòng điện định mức để tránh quá nhiệt.

Hướng dẫn kết nối

Để kết nối mô-đun điều khiển động cơ DC kép L9110 với Arduino, hãy bắt đầu bằng cách kết nối các chân nguồn. Kết nối chân VCC trên L9110 với đầu ra 5V trên Arduino và kết nối chân GND với một trong các chân nối đất của Arduino. Tiếp theo, đối với động cơ A, kết nối chân A1A với chân kỹ thuật số 2 trên Arduino và chân A1B với chân kỹ thuật số 3. Sau đó, đối với động cơ B, kết nối chân B1A với chân kỹ thuật số 8 và chân B1B với chân kỹ thuật số 9. Đảm bảo rằng các động cơ được kết nối đúng với các đầu ra tương ứng của chúng trên mô-đun L9110.
Arduino-wirign-for-L9110-motor-driver

Ví dụ mã & hướng dẫn chi tiết

Trong hàm setup, chúng ta cần định nghĩa các chân điều khiển là đầu ra. Điều này rất cần thiết để Arduino điều khiển hướng động cơ một cách hiệu quả:
void setup() {
  pinMode(B1A,OUTPUT);// định nghĩa chân là đầu ra
  pinMode(B1B,OUTPUT);
  
  pinMode(A1A,OUTPUT);
  pinMode(A1B,OUTPUT);    
  delay(3000);
}
Đoạn mã này thiết lập các chân điều khiển động cơ, đảm bảo rằng Arduino có thể gửi tín hiệu đến mô-đun L9110. Vòng lặp chính của chương trình điều khiển các động cơ bằng cách gọi các hàm `motorA` và `motorB` với các tham số khác nhau để thay đổi hướng:
void loop() {
  motorA('R');// Quay động cơ A sang PHẢI
  delay(2000);
  motorA('L');// Quay động cơ A sang TRÁI
  delay(2000);   
  motorA('O');// TẮT động cơ A
  delay(2000); 
  ...
}
Trong đoạn trích này, các động cơ được làm quay sang phải và trái, với thời gian trễ ở giữa để quan sát sự thay đổi hướng. Hàm `motorA` được định nghĩa để điều khiển động cơ A dựa trên hướng đầu vào:
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);    
  }
}
Hàm này kiểm tra hướng được cung cấp và đặt các chân điều khiển tương ứng để quay động cơ theo hướng mong muốn hoặc tắt nó.

Trình diễn / Điều gì sẽ xảy ra

Khi bạn chạy mã, bạn sẽ thấy các động cơ xen kẽ giữa quay trái và quay phải. Thời gian trễ cho phép bạn quan sát rõ ràng sự thay đổi hướng. Hãy cẩn thận với các lỗi thường gặp như kết nối đảo ngược, có thể dẫn đến hành vi bất ngờ hoặc làm hỏng các linh kiện. Ngoài ra, hãy đảm bảo rằng nguồn điện của bạn đủ cho các động cơ bạn đang sử dụng (trong video tại 00:00).

Hình ảnh

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
Ngôn ngữ: 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

Nghĩ bạn có thể cần

Tài nguyên & tài liệu tham khảo

Chưa có tài nguyên nào.

Tập tin📁

Bảng dữ liệu (pdf)

Tập tin Fritzing