Hướng dẫn cách điều khiển động cơ bước với driver A4988

 

Trong Hướng dẫn Arduino này, chúng ta sẽ học cách điều khiển Động cơ bước bằng Trình điều khiển bước A4988. Bạn có thể xem video sau hoặc đọc hướng dẫn bằng văn bản bên dưới.

 

Tổng quát

 


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ộ phiên dịch tích hợp để vận hành dễ dàng. Điều này có nghĩa là chúng tôi 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 tôi hoặc một chân để điều khiển hướng quay và một chân để điều khiển các bước.

 

 

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

Trình điều khiển cung cấp năm độ phân giải bước khác nhau: bước đầy đủ, bước cao hơn, bước một phần tư, bước tám và bước thứ mười sáu. Ngoài ra, nó có một chiết áp để điều chỉnh đầu ra hiện tại, ngắt nhiệt quá nhiệt và bảo vệ dòng điện chéo.

Điện áp logic 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 cung cấp làm mát bổ sung tốt hoặc dòng điện liên tục 1A trên 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

Sơ đồ chân của trình điều khiển bước A4988


Bây giờ chúng ta hãy quan sát sơ đồ chân của trình điều khiển và kết 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 ở phía bên phải của nút để 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 Bo mạch cung cấp 5 V. 4 chân sau dùng để 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ơ. Để cấp nguồn cho động cơ, chúng ta sử dụng 2 chân tiếp theo, Ground và VMOT, chúng ta cần kết nối chúng với Nguồn điện từ 8 đến 35 V và chúng ta cũng cần sử dụng tụ tách có ít nhất 47 µF để bảo vệ bo mạch điều khiển khỏi tăng điện áp.

A4988-Hệ thống dây điện-Sơ đồ

Hai chân tiếp theo, Step và Direction là những 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 tôi cần kết nối nó với một trong các chân kỹ thuật số trên bộ vi điều khiển của chúng tôi, hoặc trong trường hợp của chúng tôi, tôi sẽ kết nối nó với chân số 4 của Bảng Arduino của tôi.

Với chân Step, chúng tôi điều khiển các bước của động cơ và với mỗi xung được gửi đến chân này, động cơ sẽ di chuyển một bước. Vì vậy, điều đó có nghĩa là chúng ta không cần bất kỳ lập trình phức tạp nào, bảng thứ tự pha, đường điều khiển tần số, v.v., bởi vì trình biên dịch tích hợp của Trình điều khiển A4988 sẽ đảm nhiệm mọi thứ. Ở đây chúng ta cũng cần đề cập rằng 2 chân này không được kéo đến bất kỳ điện áp nào bên trong, vì vậy chúng ta không nên để chúng trôi nổi trong chương trình của chúng ta.

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

Tiếp theo, chân ĐẶT LẠI đặt bộ dịch sang trạng thái Trang chủ được xác định trước. Trạng thái nhà hoặc Vị trí microstep nhà này có thể được nhìn thấy từ các Hình này từ Biểu dữ liệu A4988. Vì vậy, đây là những 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 cho chân này là mức logic thấp thì tất cả các đầu vào STEP sẽ bị bỏ qua. Chân Reset là một chân nổi nên 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 cao và kích hoạt bo mạch.

A4988-Truth-Table1

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

Chân 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ột mức logic cao sẽ giữ cho các đầu ra bị vô hiệu hóa.

 

Sơ đồ mạch


Đây là sơ đồ mạch hoàn chỉnh. Tôi sẽ sử dụng ổ đĩa ở Chế độ Toàn bước vì vậy tôi sẽ để 3 chân MS bị ngắt kết nối và chỉ kết nối các chân Hướng và Bước của ổ đĩa với các chân số 3 và 4 trên Bảng Arduino cũng như Mặt đất và 5 V chân để cấp nguồn cho bo mạch. Ngoài ra, tôi sẽ sử dụng một tụ điện 100µF để tách 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 lưỡng cực NEMA 17 và dây A và C của nó sẽ được kết nối với chân 1A và 1B và dây B và D vào chân 2A và 2B.

Điều khiển-Bước-Động cơ-Mạch-Sơ đồ

Giới hạn hiện tại


Trước khi kết nối động cơ, chúng ta nên điều chỉnh giới hạn hiện tại của trình điều khiển để chúng ta 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 chiết áp trên bảng và xem xét phương trình này:

Giới hạn hiện tại = VRef x 2

Tham chiếu-Điện áp-Đo lường3

Tuy nhiên, phương trình này không phải lúc nào cũng đúng vì có nhiều nhà sản xuất bo mạch trình đ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 chiết áp và đo điện áp tham chiếu 0,6V. Vì vậy, giới hạn hiện tại phải là giá trị đó là 0,6 * 2, bằng 1,2 A.

Tham chiếu-Điện áp-Đo lường 4

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

Tham chiếu-Điện áp-Đo lường5

Mã Arduino và A4988


Đây là một mã 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 của chúng tôi, chúng là các chân số 3 và 4 trên Bảng Arduino và chúng được đặt tên là stepPin và dirPin và phần thiết lập chúng tôi phải xác định chúng như một đầu ra.

 

 

/*     Simple Stepper Motor Control Exaple Code
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */

// 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 tôi sẽ đặt chân Hướng ở trạng thái cao để cho phép động cơ di chuyển theo một hướng cụ thể. Bây giờ sử dụng vòng lặp for này, chúng tôi sẽ làm cho động cơ thực hiện một vòng quay đầy đủ. Vì trình điều khiển được đặt ở Chế độ toàn bước và Động cơ bước của chúng tôi có góc bước 1,8 độ hoặc 200 bước, chúng tôi cần gửi 200 xung vào Chân bước để thực hiện một vòng quay đầy đủ. Vì vậy, vòng lặp for sẽ có 200 lần lặp và mỗi lần lặp lại, nó sẽ đặt chân Step ở trạng thái cao và sau đó là trạng thái thấp để tạo xung. Giữa mỗi DigitalWrite, chúng ta cần thêm một số độ trễ mà từ đó tốc độ của động cơ sẽ phụ thuộc.

Sau khi quay toàn bộ chu kỳ này, chúng ta sẽ thực hiện chậm trễ một giây, sau đó thay đổi hướng quay bằng cách đặt dirPin ở trạng thái thấp và bây giờ thực hiện 2 vòng quay đầy đủ với vòng lặp 400 lần này. Khi kết thúc, có thêm một giây chậm trễ. Bây giờ chúng ta hãy tải lên mã 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 cách sử dụng chiết áp. Đây là mã nguồn của ví dụ đó:

/*     Simple Stepper Motor Control Exaple Code
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */
 
// 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;  
}

Link gốc:

https://howtomechatronics.com/tutorials/arduino/how-to-control-stepper-motor-with-a4988-driver-and-arduino/

Chia sẻ bài viết:

Bài viết liên quan