Điều khiển động cơ bước

Cập nhật vào : Thứ bảy - 05/01/2019 02:37


Enable pin - chân khởi động - nối vào GND sẽ giúp ta bật động cơ bước, nối vô VCC động cơ bước được thả ra. Nôm na: GND = servo.attach, VCC = servo.detach

Nối dây driver, động cơ bước và Arduino

 

Hình 2

Nạp code cho Arduino

Bạn nạp đoạn code sau cho Arduino.

​// Run a A4998 Stepstick from an Arduino UNO.
// Paul Hurley Aug 2015 - http://www.instructables.com/id/Drive-a-Stepper-Motor-with-an-Arduino-and-a-A4988-/
int x; 
#define BAUD (9600)

void setup() 
{
  Serial.begin(BAUD);
  pinMode(6,OUTPUT); // Enable pin - chân khởi động - nối vào GND sẽ giúp ta bật động cơ bước, nối vô VCC động cơ bước được thả ra. Nôm na: GND = servo.attach, VCC = servo.detach
  pinMode(5,OUTPUT); // Step pin
  pinMode(4,OUTPUT); // Dir - pin
  digitalWrite(6,LOW); // Set Enable low
}

void loop() 
{
  digitalWrite(6,LOW); // Đặt Enable ở trạng thái LOW
  digitalWrite(4,HIGH); // Đặt Dir  ở trạng thái HIGH
  Serial.println("Cho chay 200 steps (1 vong)");
  for(x = 0; x < 200; x++) // Cho chay 1 vong
  {
    digitalWrite(5,HIGH); // Output high
    delay(10); // chờ
    digitalWrite(5,LOW); // Output low
    delay(100); // chờ
  }
  Serial.println("Pause");
  delay(1000); // dừng 1 s rồi quay tiếp
}

Nhớ gắn điện 12V vô nha​

Để bật chức năng này (micro stepping - vi bước), bạn sẽ phải nối ba chân MS1, MS2, MS3 vào VCC!

Nói một cách nôm na, cứ mỗi chân MS1, MS2, MS3 được nối vô VCC, nó sẽ tăng số bước của động cơ bước lên. Nghĩa là thay vì hồi xưa bạn chỉ cần quay 200 bước là đươc một vòng. Bây giờ bạn sẽ phải quay nhiều hơn, lúc đó sẽ có độ chính xác cao hơn!

MS1

MS2

MS3

Vi bước

Không nối

Không nối

Không nối

1

VCC

Không nối

Không nối

1/2

Không nối

VCC

Không nối

1/4

VCC

VCC

Không nối

1/8

VCC

VCC

VCC

1/16

Thứ nối MS1, MS2, MS3, ta sẽ đươc vi bước 1/16, nghĩa là với động cơ bước có 200 bước thì ta sẽ chia nhỏ mỗi bước ra thành 16 bước => Tổng số bước của động cơ lúc này là 200 * 16 = 3200. Quá đã phải không nào? Thử chạy ví dụ trên, bạn sẽ thấy ngay sự khác biệt. Nhưng lúc này, stepper sẽ hơi nóng, vì vậy, đừng quên tản nhiệt nha!

Nếu là một người thích sự hoàn hảo thì khi bạn nhìn vào code trên thì sẽ thấy cần rất nhiều dòng code chỉ để làm 1 động cơ bước hoạt động, và với những dòng delay như vậy thì chắc hẳn, bạn sẽ hiểu rằng, chả có cách nào chạy những tiến trình khác khi động cơ bước đang chạy. 

Arduino có hỗ trợ sẵn bộ thư viện stepper trong file example. Nhưng nếu bạn đã từng thử thì hẳn biết một điều là, thư viện đó cũng delay như code kia. Nghĩa là trong quá trình động cơ bước hoạt động thì cả chương trình sẽ phải dừng đợi nó hoạt động theo (cơ chế này gọi là cơ chế đồng bộ - sync).

Để điều khiển được nhiều động cơ bước thì chúng ta phải biết ngõ xử lý bất đồng bộ, nghĩa là sao? Nghĩa là phải biết thay hàm delay bằng cách khác, và đó chính là dùng timer, chính là dùng hàm millis(). Và ý tưởng đó đã được thể hiện trong thư viện AccelStepper, thư viện này đã ứng dụng nguyên lý xử lý bất đồng bộ (async) để làm nên nó - một thư viện cực kì hữu ích!

Để tài về thư viện này, các bạn hãy click vào đây (mirror).

Và đây là đoạn code mẫu của thư viện này.

Bạn nhớ nối Enable xuống GND nhé.

​#include <AccelStepper.h>
AccelStepper stepper(1,5,4);// pin 5 step, pin 4 dir

void setup() {
  Serial.begin(9600);
  pinMode(6,OUTPUT); // Enable
  digitalWrite(6,LOW); // Dặt Enable xuống low để khởi động động cơ
}

void loop() {
  if (stepper.distanceToGo() == 0)  //kiểm tra thử động cơ bước có còn đang chạy hay không, nếu không còn chạy thì...
  {  
    delay(1000);
    stepper.moveTo(rand() % 400); //chuyển đến tọa độ 0 - 399 (Random)
    stepper.setMaxSpeed((rand() % 400) + 200);  //chỉnh tốc độ. 
    stepper.setAcceleration((rand() % 200) + 100); //chỉnh gia tốc.
    //kiến thức về tốc độ và gia tốc là kiến thức cơ bản vật lý lớp 10, vì vậy, các bạn lớp 9 trở xuống muốn dùng động cơ bước thì nhớ tìm hiểu khái niệm này nhé. hehe
  }

  Serial.println(stepper.distanceToGo());
  stepper.run();  // phải có hàm này ở hàm loop với mỗi biến stepper thì nói mới chạy được
}


Sửa lần cuối vào : Thứ bảy - 05/01/2019 03:35

 

HỖ TRỢ 24/7

Kinh doanh:

Di động: 086.924.3838

Email: info@vinagon.com

VĂN PHÒNG HÀ NỘI

  • P628 HH1A Linh Đàm - Hoàng Mai - Hà Nội
  • 086.924.3838 Fax: 086.924.3838
  • Kinh Doanh : info@vinagon.com

XƯỞNG SẢN XUẤT

  • C6,C7 Khuất Duy Tiến, Thanh Xuân Bắc, Thanh Xuân, Hà Nội.
  • Hotline: 085.99999.25