Sử dụng GRBL 0.9 trên Arduino CNC Shield v3
GRBL là một firmware sử dụng cho một số mạch điều khiển máy CNC. Với đặc điểm mã nguồn mở, cực kỳ dễ sử dụng, đặc biệt hỗ trợ mạch Arduino (Arduino UNO R3 và CNC Shield), GRBL là một trong những lựa chọn hàng đầu khi xây dựng các dạng máy CNC mini.
So với các phiên bản trước (0.8; 0.7; …), GRBL phiên bản 0.9 có thêm nhiều tính năng bổ sung rất hiệu quả. Một số tính năng tiêu biểu của firmware GRBL 0.9 có thể kể tới:
- Tương thích 100% với board Arduino CNC Shield v3 (chỉ cần đảo chân tín hiệu, chi tiết sẽ được trình bày trong bài)
- Tốc độ truyền nhận dữ liệu với máy tính, Baud Rate = 115200
- Tính năng Probing (đo độ cao bề mặt phôi và tự bù lại khi gia công)
- Có thể thay đổi theo Gcode tốc độ spindle, công suất laser bằng PWM
Kết nối phần cứng (Arduino UNO R3 + CNC Shield + A4988/DRV8825):
Các máy CNC (laser) mini có thể sử dụng một bộ mạch điều khiển gồm có:
Các mạch nêu trên ghép nối với nhau rất dễ dàng, chỉ cần lưu ý chiều của môđun động cơ bước như trong hình sau (với A4988 và với DRV8825):
Ở bản 0.9, GRBL bổ sung thêm tính năng điều khiển tốc độ spindle hoặc (cường độ laser) bằng PWM (điều chỉnh độ rộng xung), do vậy có một sự thay đổi nhỏ trong thiết lập chân ra của firmware. Khi sử dụng GRBL 0.9 với CNC shield, chỉ cần lưu ý đảo 2 chân Z+ (Z-) và chân SpnEn như hình sau:
Như vậy khi dùng GRBL 0.9 với CNC shield: chân Z+ (vốn đã được nối thông mạch sẵn với Z-) sẽ được dùng để điều khiển tốc dộ spindle (hoặc cường độ tia laser). Còn chân SpnEn sẽ được dùng để cắm dây tín hiệu của cảm biến Endstop trục Z.
Nạp firmware GRBL vào Arduino UNO R3:
Trước tiên, download fỉmware GRBL bản mới nhất tại địa chỉ: https://github.com/grbl/grbl . Tính tời thời điểm viết bài này, firmware mới nhất là “Grbl v0.9j Atmega328p 16mhz 115200baud with generic defaults”, cập nhật ngày 2015-09-30. Định dạng file là *.hex. Bản 0.9j có thể download tại link sau: download
Tiếp theo, download phần mềm XLoader để nạp trực tiếp file hex vào Arduino UNO: download
Kết nối Arduino UNO với máy tính, mở phần mềm XLoader, chọn file hex vừa tải về, chọn thiết bị là Uno(ATmega328), chọn cổng COM ứng với board Arduino UNO, chọn Baud rate 115200 như hình dưới. Sau đó click Upload.
Sau vài giây, phần mềm XLoader sẽ có thông báo Upload firmware thành công vào mạch Arduino Uno.
Cài đặt thông số máy CNC (laser) mini vào firmware GRBL bằng Universal Gcode Sender:
Universal Gcode Sender (UGS) là phần mềm miễn phí có thể dùng để điều khiển máy CNC (laser) mini sử dụng firmware GRBL. Download UGS phiên bản mới nhất theo đường link sau: https://github.com/winder/Universal-G-Code-Sender . Phiên bản mới nhất tính tới ngày viết bài hướng dẫn này là 1.0.8 (download), sau khi giải nén file download về thu được thư mục chứa file “UniversalGcodeSender.jar”
Để sử dụng được UGS, máy tính cần phải cài Java, download Java theo đường link sau: https://java.com/en/download/
Sau khi cài Java, kết nối board Arduino UNO với máy tính, click vào file “UniversalGcodeSender.jar”, giao diện UGS sẽ hiện ra như sau:
- Port: tên cổng COM của kết nối giữa board Arduino UNO với máy tính.
- Baud: chọn 115200
Click Open để kết nối UGS với Arduino UNO. Nếu kết nối thành công, trong mục Console sẽ có thông báo
**** Connected to COM7 @ 115200 baud ****
Grbl 0.9j [‘$’ for help]
Vào mục Settings => Firmware Settings => GRBL để thiết lập các thông số của máy.
- $0: thời gian mỗi xung cấp tới động cơ bước, tính bằng micro giây. Mỗi một động cơ có đặc tính thông số thời gian kéo dài của xung điện áp khác nhau. Quy tắc điều chỉnh là giảm thời gian mỗi xung xuống càng thấp càng tốt miễn là động cơ chạy ổn định. Giá trị mặc định là 10 us.
- $1: thời gian đợi để tắt động cơ, tính bằng mili giây. Sau khi động cơ hoàn thành xong một chuyển động hoặc dừng hẳn, mạch điều khiển vẫn tiếp tục cấp điện cho động cơ trong thời gian ứng với giá trị $1. Nếu muốn để mạch điều khiển luôn luôn cấp nguồn cho động cơ (động cơ luôn ở chế độ được cấp điện), đặt giá trị $1 = 255. Thông thường với những máy sử dụng đai GT2, có thể đặt giá trị $1 = 255, tuy nhiên khi đó động cơ có thể nóng hơn bình thường một chút.
- $2: thiết lập đảo mức điện áp tín hiệu điều khiển động cơ bước. Chức năng này sử dụng để đảo ngược mức tín hiệu (5V 0V) của tín hiệu điều khiển động cơ. Thông thường thiết lập này không cần sử dụng tới trừ trường hợp với một vài driver đặc biệt.
Cách sử dụng $2 như bảng trên: ví dụ khi muốn đảo mức tín hiệu điều khiển động cơ bước của trục Z, các trục X và Y không thay đổi, ta thiết lập: $2 = 4.
- $3: thiết lập đảo mức tín hiệu điều khiển hướng động cơ của mỗi trục. Thiết lập này tương đương với đảo thứ tự toàn bộ chân các dây điều khiển của động cơ bước và dùng để đảo chiều chuyển động ( âm hoặc dương) của động cơ. Cách thiết lập trục nào sẽ bị đảo hướng chuyển động cũng giống như đối với $2. Ví dụ muốn đảo hướng chuyển động của trục Y, ta sửa giá trị $3 = 2.
- $4: thiết lập dảo ngược tín hiệu kích hoạt động cơ cho tất cả các trục. Thông thường thiết lập này không cần sử dụng và có thể để mặc định $4 = 0.
- $5: thiết lập đảo ngược tín hiệu kích hoạt Endstop (cảm biến giới hạn hành trình máy) cho tất cả các trục. Nếu $5 = 0, mạch điều khiển sẽ xem tín hiệu kích hoạt Endstop là mức 0 (0V). Nếu $5 = 1, mạch điều khiển sẽ xem tín hiệu kích hoạt Endstop là mức 1 (+5V).
- $6: thiết lập đảo ngược tín hiệu kích hoạt cảm biến dò bề mặt phôi. Khi sử dụng chức năng dò bề mặt phôi (kiểm tra độ cao các điểm trên bề mặt phôi để bù lại khi gia công), nếu $6 = 0 mạch điều khiển sẽ xem tín hiệu kích hoạt đầu dò là mức 0 (0V). Nếu $6 = 1 mạch điều khiển sẽ xem tín hiệu kích hoạt đầu dò là mức 1 (+5V). Lưu ý, khi đặt $6 = 1, cần phải bổ sung thêm một trở nối đất cho chân tín hiệu đầu dò.
- $10: thiết lập phản hồi trạng thái của máy khi đang chạy:
Mục đích của thiết lập là cho phép người dùng chọn lựa/loại bỏ một số thông tin trạng thái của máy cần theo dõi. Thông thường càng ít thông số cần theo dõi càng tiết kiệm được tài nguyên của mạch điều khiển. Các thông số có thể chọn/loại bỏ trình bày như trong hình trên gồm có: Machine Position (vị trí máy); Work Position (vị trí gia công); Planner Buffer (bộ nhớ đệm lưu các bước gia công tiếp theo); RX Buffer (bộ nhớ đệm nhận tín hiệu); Limit Pins (trạng thái các chân tín hiệu Endstop).
Cách sử dụng: ví dụ nếu muốn mạch điều khiển chỉ gửi về thông số Machine Position và Work Position, đặt giá trị: $6 = 1+2 = 3.
- $11: thiết lập giá trị gia tốc của dao khi di chuyển qua các điểm nối giữa các cạnh cần gia công. Giá trị gia tốc này càng cao, máy chạy càng nhanh nhưng khả năng xảy ra sai lệch kích thước càng lớn và ngược lại.
- $12: thiết lập độ chính xác gia công các cung tròn/đoạn cong, tính theo milimét. Thông thường giá trị này không cần phải thay đổi trừ khi cần giá trị khác. Nếu muốn gia công các cung tròn nhanh hơn, có thể tăng giá trị $12 lên một chút.
- $13: thiết lập thông báo trạng thái làm việc của máy theo đơn vị Inch hay không. Nếu $13 = 0, máy sẽ báo trạng thái làm việc theo đơn vị mm. Nếu $13 = 0, máy sẽ báo trạng thái làm việc theo đơn vị inch.
- $20: thiết lập chức năng giới hạn hành trình bằng phần mềm. Khi kích hoạt tính năng này (bằng cách đặt giá trị $20 = 1), mạch điều khiển sẽ chỉ cho phép dao di chuyển trong giới hạn cho phép (xem $130; $131; $132) tính từ gốc tọa độ. Khi muốn dùng tính năng này bắt buộc phải bật tính năng về gốc tọa độ ($22) trước.
- $21: thiết lập chức năng giới hạn hành trình bằng Endstop. Khi kích hoạt tính năng này (bằng cách đặt giá trị $21 = 1), mạch điều khiển sẽ tự động dừng toàn bộ máy khi có bất kỳ Endstop nào kích hoạt. Thông thường tính năng này không cần dùng đến, trừ một số trường hợp đặc biệt.
- $22: thiết lập chức năng về gốc tọa độ. Khi kích hoạt tính năng này (bằng cách đặt giá trị $22 = 1), mỗi lần khởi động máy, dao sẽ được tự động di chuyển về gốc tọa độ (được xác định bằng 3 Endstop ứng với trục X; Y; Z). Trong quá trình di chuyển về gốc tọa độ, mạch điều khiển sẽ không thực hiện bất cứ một lệnh nào khác cho tới khi về tới vị trí của 3 Endstop.
- $23: thiết lập hướng di chuyển về gốc tọa độ (sử dụng khi đảo ngược hướnglắp Endstop trên trục). Cách sử dụng giống như với $2.
- $24: tốc độ về gốc tọa độ chậm (mm/phút). Khi về gốc tọa độ, đầu tiên dao sẽ di chuyển nhanh (tốc độ về gốc tọa độ nhanh $25) từ vị tri hiện tại. Khi gặp Endstop, dao sẽ được di chuyển ngược lại và sau đó di chuyển chậm (tốc độ về gốc tọa độ chậm $24) để đảm bảo độ chính xác. Giá trị $24 càng nhỏ thì vị trí xác định khi gặp Endstop càng chính xác, tuy nhiên càng mất thời gian hơn.
- $25: tốc độ về gốc tọa độ nhanh (mm/phút). Xem giải thích tại $24.
- $26: thiết lập độ trễ (delay, mili giây) khi kiểm tra tín hiệu Endstop khi về gốc tọa độ. Để giảm ảnh hưởng do nhiễu tín hiệu điện, mạch điều khiển sẽ tạo một thời gian trễ khi nhận được tín hiệu kích hoạt từ Endstop. Thông thường giá trị này nằm trong khoảng 5 – 25 ms.
- $27: thiết lập di chuyển sau khi đã về gốc tọa độ (mm). Sau khi đã về gốc tọa độ, dao sẽ được di chuyển theo chiều ngược lại một quãng bằng giá trị $27 theo tất cả các trục.
- $100; $101; $102: thiết lập số bước của động cơ ứng với 1mm theo các trục X; Y; Z tương ứng.
- $110; $111; $112: thiết lập tốc độ di chuyển cực đại của dao theo mỗi trục X; Y; Z tương ứng (mm/phút). Khi kiểm tra máy, ban đầu có thể đặt giá trị này thật thấp, sau đó tăng dần tới khi động cơ hoạt động mượt nhất.
- $120; $121; $122: thiết lập gia tốc di chuyển dao ứng với mỗi trục X; Y; Z tương đương (mm/s2). Nếu đặt giá trị gia tốc quá thấp, dao có thể không bao giờ tăng tới vận tốc cao nhất được. Tuy nhiên nếu để gia tốc quá cao, động cơ có thể bị mất mốt số bước khi hoạt động.
- $130; $131; $132: thiết lập hành trình tối đa (kích thước gia công tối đa) theo các trục X; Y; Z tương ứng (mm). Các thiết lập này chỉ cần thiết khi đã kích hoạt tính năng $20.
Sau khi chọn xong các giá trị ứng với các chức năng, click Save để lưu các thiết lập vào mạch điều khiển.