Hướng Dẫn điều Khiển động Cơ Bước Với Thư Viện Accel Stepper Và ...
Jump to navigation
Bạn đang tìm kiếm điều gì?
Thấy bài viết hữu ích? Hãy bình chọn nó ở hệ thống Rate Node dưới mỗi bài viết để động viên tác già!
Cộng đồng Arduino Việt Nam
Bạn đang ở đây
- Arduino.vn
- Nào cùng làm
- Hướng dẫn điều khiển động cơ bước với thư viện Accel Stepper và driver điều khiển động cơ bước A4988 hoặc DRV8825
Mình thấy có nhiều bạn hỏi về stepper và cách điều khiển nó. Đồng thời thấy vấn đề điều khiển động cơ bước là một vấn đề kinh điển nhưng lại chưa có trên Cộng đồng. Ngoài ra, vì chức năng điểm cộng đồng khá hay và mình cũng muốn có quà nên hôm nay mình sẽ hướng dẫn rất kỹ với các bạn! Thư viện mình dùng là thư viện AccelStepper chứ không phải thư viện stepper mặc định của Arduino nên có thể điều khiển đồng thời nhiều stepper và kết hợp với các thư viện bất đồng bộ khác.
Động cơ bước là gì?
Có rất nhiều tài liệu trên mạng nói về động cơ bước. Bạn có thể google để tìm ra nó. Tuy nhiên, mình xin đề xuất cho các bạn một số tài liệu sau để tham khảo.
- Động cơ bước trên Wikipedia
- Động cơ bước trên Google
Nôm na, động cơ bước là một loại động cơ mà ở đó bạn sẽ có thể quy định chính xác số góc quay và động cơ bước sẽ phải quay. Không giống như Servo, động cơ bước có thể quay bao nhiêu độ tùy ý và mỗi lần quay nó sẽ quay được 1 step, 1 step ở đây là bao nhiêu còn phụ thuộc vào động cơ bước của bạn. Ví dụ, động cơ bước của bạn có 72 step thì nó sẽ cần quay 72 step để hoàn thành một vòng quay. Số step này là hằng số, nhưng bạn có thể dùng công nghệ micro step để "cải thiện" số vòng quay động cơ bước của bạn.
Các thông số động cơ bước
Như mình vừa trình bày, mỗi động cơ bước sẽ có một thống cứng quan trọng nhất mà khi bạn đi đâu và hỏi mua thì phải hỏi đầu tiên. Đó là, động cơ bước này có bao nhiêu step! Theo như mình biết thì động cơ bước trên thị trường Việt Nam mà giới DIY chúng ta hay dùng có số step là 200.
Ngoài ra, nó còn có các thông số khác mà mình sẽ kèm theo ví dụ cụ thể về loại mình dùng:
Rated Current/phase (dòng tiêu thụ tối đa mỗi pha) | 2.0A |
Phase Resistance (điện trở từng pha) | 1.4ohms |
Voltage (hiệu điện thế) | 2.8V |
Trong đó, tham số Rated Current/phase thể hiện dòng điện tối đa mà mỗi pha có thể nhận được, nếu driver điều khiển nào có dòng điện mỗi pha cao hơn thì sẽ hỏng. Nên lựa loại driver cho dòng ra xấp xỉ 80 - 90% thông số này. Điện trở mỗi pha là hằng số (bạn xem trong datasheet của động cơ bước mà bạn mua). Còn con số voltage là hiệu điện thế tối ưu để làm stepper hoạt động ổ định (2.0 * 1.4 = 2.8V)
Phần cứng cần chuẩn bị
- Arduino UNO hoặc mạch Arudino nào cũng được ha.
- Driver điều khiển động cơ A4988 hoặc DRV8825.
- Breadboard
- Nguồn cấp 12V (tối thiểu 1A).
- Dây breadboard.
Nối dây driver, động cơ bước và Arduino
Hình 1
Hình 2
Hình 3
Cái driver sẽ được gắn lên breadboard như hình 3, sau đó bạn nối dây vào như hình 1 và 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
Tăng sức mạnh cho động cơ bước bằng vi bước (micro stepping)
Để 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!
Điều khiển nhiều động cơ bước với thư viện AccelStepper
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.
#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 }Bạn nhớ nối Enable xuống GND nhé .
Lời cuối
Chúc các bạn thành công, nếu có dự án gì hay thì hãy chia sẻ với cộng đồng qua phần bài viết truyền cảm hứng nhé. Thấy bài này hay thì cho mình một like và một Rate node động viên để tháng 8 có lúa kỳ 1 nha haha.
Đóng góp từ Cộng đồng
Những hình ảnh về dự án:Đóng góp từ bạn Heart về cách tìm thông số động cơ bước khi mất mạc
Trong thời gian làm cái máy cắt rút tỉa dc 1 số điều
Thường trên mạc (nhãn motor) có ghi số Volt , bước/độ (1.8DEG như trên kia) , Ampe và Ohm , nếu mất mạc thì sao :D , nếu chỉ để quay vòng vòng thì bạn ko cần quan tâm cái vụ độ/bước , mình đau đầu nghĩ mãi làm sao biết cái Volt với cái Ampe (Ohm thì có thể đo)
Sau khi đọc kỹ trang chủ của bên làm driver thì có 1 thông tin thú vị là Driver có chỉnh dòng giới hạn , nó chỉ ra nhiêu đó Ampe thôi cho nên thông số Volt gần như vứt đi đối với loại Driver này (i=U/R >> i giảm >> U giảm , 2 thằng này tỉ lệ thuận ) do đó cần nghiên cứu kỹ cái Driver :D
Giờ chỉ còn lại việc mò để set Ampe cho đúng thôi , dựa vào số Ohm đo dc ta nhắm khoãng A mà nó sẽ cần sài , như cái thông số ở trên 2A , 1.4Ohm >> ?A , 5Ohm >>khoãng 500mA , bật lên mà motor ko kêu tiếng lạ , chạy trong thời gian dài ko nóng là ngon rồi , kéo yếu quá tăng A :D , À mà dư quá thì lại nóng :D
À Driver mình có là DRV8825 nhá , bên trang chủ của nó có chỉ rõ cách set luôn
- Với iNut cảm biến bạn đã có thể làm được gì? Dự án kiểm soát nhiệt độ, độ ẩm và điều khiển relay từ xa
- Nghiêng lắc điện thoại để điều kiển ô tô bạn đã thử chưa ???
- ESP8266 kết nối Internet - Phần 4: Kết nối Internet cho dự án không cần NAT Port, không cần mua server, không cần Blynk
- Cube LED 8x8x8 Arduino Promini - Phần 1
- ST7565 | Chuyển động trong lập trình Game và đồ họa | Phần 2
- Ngôn ngữ Wolfram - Nhấp nháy LED với GPIO
- 1 trên 47
- sau ›
Select any filter and click on Apply to see results
Các bài viết cùng tác giả Bạn có một DỰ ÁN hay giống thế này? Chia sẻ nhé!Python được biết đến như là ngôn ngữ chính để lập trình IO cho RPi nhưng bạn cũng hoàn toàn có thể sử dụng các ngôn ngữ khác để thực hiện điều này. Tuy sẽ khó khăn hơn so với việc sử dụng Python nhưng cũng sẽ có những ưu điểm khác bù lại. Sau đây, ta sẽ đánh giá khả năng IO của RPi khi chạy chương trình bằng ngôn ngữ Python và C.
Rate node lên5 thành viên đã đánh giá bài viết này hữu ích. Bạn có một DỰ ÁN hay giống thế này? Chia sẻ nhé!Raspberry Pi 2 có cấu tạo giống như một máy tính thu nhỏ. Chúng ta cùng điểm qua các cấu hình phần cứng của nó nhé.
Rate node lên2 thành viên đã đánh giá bài viết này hữu ích.Cửa cuốn thông minh
Đăng nhập Tên người dùng * Mật khẩu *- Tạo tài khoản mới
- Yêu cầu mật khẩu mới
mã số thuế
Thành viên trực tuyến
Hiện đang có 3 người trực tuyến.
- ngoduckien
- vũ thành nam
- Nguyễn Tấn Thông
- vũ thành nam
- Thanhquyen1234
- Pham Gia Kiet
- ngoduckien
- Linh so cutee
- Svhuce
- Nguyễn Tấn Thông
- nam1256
Arduino.vn được xây dựng trên nền tảng Drupal 7, phiên bản hiện tại 2.3 tên mã Chia sẻ tình yêu với Arduino.
Đây là trang thông tin phi lợi nhuận ra đời hướng tới cộng đồng trẻ, những chủ nhân tương lai của đất nước. Tìm hiểu thêm
Lấy tin RSS Nội dung trên trang Arduino.vn được phân phối theo giấy phép Creative Commons Attribution-ShareAlike 4.0 International License.Vui lòng ghi rõ nguồn và link về bài gốc nếu bạn tham khảo nội dung từ website này.Bạn ơi ^_^!
Mục lục
Hãy trở thành thành viên của Cộng đồng Arudino Việt Nam để mở khóa chức năng này.
Mục lục Bạn ơiCùng đăng nhập vào Cộng đồng Arduino Việt Nam để mở hết các chức năng của Cộng đồng nhé.
Từ khóa » Thư Viện Accelstepper
-
AccelStepper Library For Arduino - AirSpayce
-
Arduino | Sử Dụng Thư Viện AccelStepper Điều Khiển Động Cơ Bước
-
Thư Viện Accelstepper điều Khiển Các động Cơ Bước (Tối ưu Cho ...
-
AccelStepper - Arduino Reference
-
Accel Stepper | Cộng đồng Arduino Việt Nam
-
AccelStepper - Arduino Library List
-
Hướng Dẫn Điều Khiển Động Cơ Bước Với Thư Viện Accel Stepper ...
-
Anh Chị Trong Group Ai Rành Về Arduino Và Thư Viện AccelStepper Cho ...
-
Cộng đồng Arduino Việt Nam | Facebook
-
“Tài Chính 2022” Hướng Dẫn Điều Khiển Động Cơ Bước Với Thư ...
-
Hướng Dẫn Thêm Mới Thư Viện Trong Arduino IDE (Cập Nhật 2022)
-
Hướng Dẫn Sử Dụng Microstep Driver - Hàng Hiệu Giá Tốt
-
Hướng Dẫn Sử Dụng Microstep Driver