fbpx

Cách để điều khiển động cơ bước với Arduino và driver A4988

Trong Hướng dẫn Arduino này, chúng ta sẽ tìm hiểu cách điều khiển động cơ bước bằng Driver A4988. Bạn có thể xem video sau hoặc đọc hướng dẫn dưới đây.

Tổng quan


A4988 là một trình điều khiển vi bước để điều khiển động cơ bước lưỡng cực có bộ dịch tích hợp để vận hành dễ dàng. Điều này có nghĩa là chúng ta có thể điều khiển động cơ bước chỉ với 2 chân từ bộ điều khiển của chúng ta hoặc một chân để điều khiển hướng quay và chân kia để điều khiển các bước.

A4988-Trình điều khiển bước

Driver cung cấp năm độ phân giải bước khác nhau: bước đủ, ½ bước, ¼ bước, 1/8 bước và 1/16 bước. Ngoài ra, nó có một biến trở để điều chỉnh đầu ra hiện tại, tắt khi nhiệt độ quá cao và bảo vệ dòng điện chéo.

Nguồn vào của nó là từ 3 đến 5,5 V và dòng điện tối đa trên mỗi pha là 2A nếu được làm mát bổ sung tốt hoặc dòng điện liên tục 1A mỗi pha mà không cần tản nhiệt hoặc làm mát.

A4988-Thông số kỹ thuật

Chân ra Driver A4988  


Bây giờ, hãy nhìn kỹ vào sơ đồ chân của trình điều khiển và nối nó với động cơ bước và bộ điều khiển. Vì vậy, chúng tôi sẽ bắt đầu với 2 chân ở nút bên phải để cấp nguồn cho trình điều khiển, chân VDD và Ground mà chúng tôi cần kết nối chúng với nguồn điện từ 3 đến 5,5 V và trong trường hợp của chúng tôi sẽ là bộ điều khiển của chúng tôi, Arduino Board sẽ cung cấp 5 V. 4 chân sau đây để kết nối động cơ. Các chân 1A và 1B sẽ được kết nối với một cuộn dây của động cơ và chân 2A và 2B với cuộn dây khác của động cơ. Để cung cấp năng lượng cho động cơ, chúng tôi sử dụng 2 chân tiếp theo, Ground và VMOT mà chúng tôi cần kết nối chúng với Nguồn cung cấp từ 8 đến 35 V và chúng tôi cũng cần sử dụng tụ tách rời với ít nhất 47 PhaF để bảo vệ board điều khiển khỏi các xung điện áp.

A4988-Sơ đồ nối dây

Hai chân tiếp theo, Step và Direction là các chân mà chúng ta thực sự sử dụng để điều khiển chuyển động của động cơ. Chân Direction điều khiển hướng quay của động cơ và chúng ta cần kết nối nó với một trong các chân kỹ thuật số trên vi điều khiển, hoặc trong trường hợp của tôi, tôi sẽ kết nối nó với chân số 4 của Board Arduino.

Với chân Step, chúng ta điều khiển mirosteps của động cơ và với mỗi xung được gửi tới chân này, động cơ sẽ di chuyển một bước. Vì vậy, điều đó có nghĩa là không cần bất kỳ chương trình phức tạp, board chuyển pha, dòng điều khiển tần số, v.v., vì trình dịch tích hợp của Driver A4988 đảm nhiệm mọi thứ. Ở đây chúng ta không nên nối chúng trong chương trình của mình.

Tiếp theo là chân SLEEP và mức logic thấp đặt board ở chế độ nghỉ để giảm thiểu mức tiêu thụ điện khi động cơ không được sử dụng.

Tiếp theo, chân RESET đặt trình dịch sang trạng thái Home được xác định trước. Trạng thái Home hoặc Vị trí Microstep Home này có thể được nhìn thấy từ Board dữ liệu A4988. Vì vậy, đây là vị trí ban đầu từ nơi động cơ khởi động và chúng khác nhau tùy thuộc vào độ phân giải microstep. Nếu trạng thái đầu vào của chân này ở mức logic thấp, tất cả các đầu vào STEP sẽ bị bỏ qua. Chân Reset là một chân nổi, vì vậy nếu chúng ta không có ý định điều khiển nó trong chương trình của mình, chúng ta cần kết nối nó với chân SLEEP để đưa nó lên mức cao và bật board.

3 chân tiếp theo (MS1, MS2 và MS3) là để chọn một trong năm độ phân giải theo board ở trên. Các chân này có điện trở bên trong, vì vậy nếu chúng ta ngắt kết nối, board sẽ hoạt động ở chế độ bước đủ.

Cuối cùng, chân ENABLE được sử dụng để bật hoặc tắt các đầu ra FET. Vì vậy, mức cao sẽ giữ cho đầu ra bị vô hiệu hóa.

Các linh kiện cần thiết:


  • Động cơ bước (Nema17)
  • Trình điều khiển A4988 Stepper Driver
  • Bộ chuyển đổi 12V/2A
  • Bộ nguồn
  • Board Arduino
  • Breadboard và dây dẫn

Sơ đồ mạch


Đây là sơ đồ mạch hoàn chỉnh. Tôi sẽ sử dụng ổ đĩa ở bước đủ vì vậy tôi sẽ ngắt kết nối 3 chân MS và chỉ kết nối các chân Direction và chân của ổ đĩa với các chân số 3 và 4 trên Board Arduino và cả chân Ground và 5 V để cấp nguồn cho board. Ngoài ra, tôi sẽ sử dụng một tụ 100uF để tách rời và bộ chuyển đổi 12V, 1.5A để cấp nguồn cho động cơ. Tôi sẽ sử dụng Động cơ bước Nema 17 và các dây A và C của nó sẽ được kết nối với các chân 1A và 1B và dây B và D với các chân 2A và 2B.

Sơ đồ điều khiển-động cơ-mạch-động cơ

Giới hạn dòng điện

Trước khi kết nối động cơ, chúng ta nên điều chỉnh giới hạn dòng điện của trình điều khiển để chắc chắn rằng dòng điện nằm trong giới hạn hiện tại của động cơ. Chúng ta có thể làm điều đó bằng cách điều chỉnh điện áp tham chiếu bằng biến trở trên board và xem xét phương trình này:

Giới hạn dòng điện = VRef x 2

Tuy nhiên phương trình này không phải lúc nào cũng đúng vì có các nhà sản xuất board điều khiển A4988 khác nhau. Đây là một minh chứng cho trường hợp của tôi: Tôi đã điều chỉnh biến trở và đo điện áp tham chiếu 0,6V. Vì vậy, giới hạn dòng điện phải là giá trị 0,6 * 2, bằng 1,2 A.

Bây giờ vì tôi đang sử dụng Trình điều khiển ở Chế độ STEP và theo Board dữ liệu A4988 ở chế độ này, dòng điện của cuộn dây chỉ có thể đạt tới 70% giới hạn dòng điện, 1,2A * 0,7 sẽ bằng 0,84A. Để kiểm tra điều này, tôi đã tải lên một code đơn giản với mức cao liên tục ở chân STEP (để chúng ta có thể nhận thấy dòng điện tốt hơn) và kết nối đồng hồ của mình nối tiếp với một cuộn dây của động cơ và cấp nguồn cho nó. Những gì tôi nhận được là dòng 0,5A có nghĩa là phương trình không đúng với trường hợp này.

Code Arduino và A4988


Đây là một code ví dụ. Đầu tiên chúng ta phải xác định các chân STEP và DIRECTION. Trong trường hợp này, chúng là các chân 3 và 4 trên Board Arduino và chúng được đặt tên là stepPin và dirPin và phần thiết lập chúng ta phải xác định chúng đầu ra.

// defines pins numbers
const int stepPin = 3; 
const int dirPin = 4; 
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}
void loop() {
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(500); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(500); 
  }
  delay(1000); // One second delay
  
  digitalWrite(dirPin,LOW); //Changes the rotations direction
  // Makes 400 pulses for making two full cycle rotation
  for(int x = 0; x < 400; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
  }
  delay(1000);
}

Trong phần vòng lặp đầu tiên, chúng ta sẽ đặt chân Direction ở trạng thái cao cho phép động cơ di chuyển theo một hướng cụ thể. Bây giờ bằng cách sử dụng vòng lặp này, chúng ta sẽ làm cho động cơ thực hiện một vòng lặp đầy đủ. Khi trình điều khiển được đặt ở Chế độ bước đủ và Động cơ bước có góc bước 1,8 độ hoặc 200 bước, chúng ta cần gửi 200 xung vào chân Step để thực hiện một vòng quay toàn chu kỳ. Vì vậy, vòng lặp for sẽ có 200 lần lặp và mỗi lần nó sẽ đặt chân Step ở mức cao và sau đó ở mức thấp để tạo xung. Giữa mỗi DigitalWrite, chúng ta cần thêm một số delay để rang buộc tốc độ của động cơ.

Sau vòng quay toàn chu kỳ này, chúng ta sẽ thực hiện delay một giây, sau đó thay đổi hướng quay bằng cách đặt dirPin ở mức thấp và bây giờ thực hiện 2 vòng quay toàn chu kỳ với vòng lặp 400 lần lặp. Vào cuối hàm có thêm một giây delay. Bây giờ hãy tải lên code và xem nó sẽ hoạt động như thế nào.

Tôi đã làm thêm một ví dụ cho hướng dẫn này, nơi tôi điều khiển tốc độ của động cơ bằng biến trở. Đây là code của ví dụ đó:

// Defines pins numbers
const int stepPin = 3;
const int dirPin = 4; 

int customDelay,customDelayMapped; // Defines variables
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
 
  digitalWrite(dirPin,HIGH); //Enables the motor to move in a particular direction
}
void loop() {
  
  customDelayMapped = speedUp(); // Gets custom delay values from the custom speedUp function
  // Makes pules with custom delay, depending on the Potentiometer, from which the speed of the motor depends
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(customDelayMapped);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(customDelayMapped);
}
// Function for reading the Potentiometer
int speedUp() {
  int customDelay = analogRead(A0); // Reads the potentiometer
  int newCustom = map(customDelay, 0, 1023, 300,4000); // Convrests the read values of the potentiometer from 0 to 1023 into desireded delay values (300 to 4000)
  return newCustom;  
}

Dịch từ: https://howtomechatronics.com/tutorials/arduino/how-to-control-stepper-motor-with-a4988-driver-and-arduino/

 

 

 

 

 

One thought on “Module rơle với Arduino

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *