Các trục X, Y của một máy CNC được điều khiển bởi các động cơ bước, chính vì vậy mà việc điều khiển sự di chuyển của con cảm biến gắn lên trục CNC sẽ chính là việc điều khiển động cơ bước. Có nhiều cách để điều khiển động cơ, trong bài này tôi chọn Arduino kết hợp Sheild CNC V3 bởi vì có thể dễ dàng điều khiển động cơ bước, setup hệ thống điều khiển trong các ứng dụng CNC cỡ nhỏ 1 cách dễ dàng, mạch tương thích với phần mềm điều khiển GRBL và có cách sử dụng đơn giản, chất lượng gia công tốt, độ bền cao.
2.1.4.5. Arduino và sơ đồ kết nối chân điều khiển động cơ a) Tổng quan về Arduino
Arduino là một board mạch Vi Điều Khiển sử dụng chip AVR 8bit như ATmega328, Atmega168, ATmega8 của Atmel. Board mạch Arduino
18 sử dụng dòng vi xử lý 8-bit megaAVR của Atmel với hai chip phổ biến nhất là ATmega328 và ATmega2560. Các dòng vi xử lý này cho phép lập trình các ứng dụng điều khiển phức tạp do được trang bị cấu hình mạnh với các loại bộ nhớ ROM, RAM và Flash, các ngõ vào ra digital I/O trong đó có nhiều ngõ có khả năng xuất tín hiệu PWM, các ngõ đọc tín hiệu analog và các chuẩn giao tiếp đa dạng như UART, SPI, TWI (I2C).
- Sức mạnh xử lý:
o Xung nhịp: 16MHz
o EEPROM: 1KB (ATmega328) và 4KB (ATmega2560)
o SRAM: 2KB (Atmega328) và 8KB (Atmega2560)
o Flash: 32KB (Atmega328) và 256KB (Atmega2560)
- Đọc tín hiệu cảm biến ngõ vào:
Digital:
Các board mạch Arduino đều có các cổng digital có thể cấu hình làm ngõ vào hoặc ngõ ra bằng phần mềm. Do đó người dùng có thể linh hoạt quyết định số lượng ngõ vào và ngõ ra. Tổng số lượng cổng digital trên các mạch dùng Atmega328 là 14, và trên Atmega2560 là 54.
Analog:
Các board mạch Arduino đều có trang bị các ngõ vào analog với độ phân giải 10-bit (1024 phân mức, ví dụ với điện áp chuẩn là 5V thì độ phân giải khoảng 0.5mV). Số lượng cổng vào analog là 6 đối với Atmega328, và 16 đối với Atmega2560. Với tính năng đọc analog, người dùng có thể đọc nhiều loại cảm biến như nhiệt độ, áp suất, độ ẩm, ánh sáng, gyro, accelerometer…
- Xuất tín hiệu điều khiển ngõ ra:
Digital output:
Tương tự như các cổng vào digital, người dùng có thể cấu hình trên phần mềm để quyết định dùng ngõ digital nào là ngõ ra. Tổng số lượng cổng digital trên các mạch dùng Atmega328 là 14, và trên Atmega2560 là 54.
PWM output
Trong số các cổng digital, người dùng có thể chọn một số cổng dùng để xuất tín hiệu điều chế xungPWM. Độ phân giải của các tín hiệu PWM này là 8- bit. Số lượng cổng PWM đối với các board dùng Atmega328 là 6, và đối với các
19 board dùng Atmega2560 là 14. PWM có nhiều ứng dụng trong viễn thông, xử lý âm thanh hoặc điều khiển động cơ mà phổ biến nhất là động cơ servos trong các máy bay mô hình.
- Chuẩn giao tiếp:
Serial:
Đây là chuẩn giao tiếp nối tiếp được dùng rất phổ biến trên các board mạch Arduino. Mỗi board có trang bị một số cổng Serial cứng (việc giao tiếp do phần cứng trong chip thực hiện). Bên cạnh đó, tất cả các cổng digital còn lại đều có thể thực hiện giao tiếp nối tiếp bằng phần mềm (có thư viện chuẩn,người dùng không cần phải viết code). Mức tín hiệu của các cổng này là TTL 5V. Lưu ý cổng nối tiếp RS-232 trên các thiết bị hoặc PC có mức tín hiệu là UART 12V. Để giao tiếp được giữa hai mức tín hiệu, cần phải có bộ chuyển mức, ví dụ như chip MAX232. Số lượng cổng Serial cứng của Atmega328 là 1 và của Atmega2560 là 4. Với tính năng giao tiếp nối tiếp, các bo Arduino có thể giao tiếp được với rất nhiều thiết bị như PC, touchscreen, các game console…
USB:
Các board Arduino tiêu chuẩn đều có trang bị một cổng USB để thực hiện kết nối với máy tính dùng cho việc tải chương trình. Tuy nhiên các chip AVR không có cổng USB, do đó các board Ardunino phải trang bị thêm phần chuyển đổi từ USB thành tín hiệu UART. Do đó máy tính nhận diện cổng USB này là cổng COM chứ không phải là cổng USB tiêu chuẩn.
SPI:
Đây là một chuẩn giao tiếp nối tiếp đồng bộ có bus gồm có 4 dây. Với tính năng này các board Arduino có thể kết nối với các thiết bị như LCD, bộ điều khiển video game, bộ điều khiển cảm biến các loại, đọc thẻ nhớ SD và MMC…
TWI (I2C):
Đây là một chuẩn giao tiếp đồng bộ khác nhưng bus chỉ có hai dây. Với tính năng này, các bo Arduino có thể giao tiếp với một số loại cảm biến như thermostat của CPU, tốc độ quạt, một số màn hình OLED/LCD, đọc real-time clock, chỉnh âm lượng cho một số loại loa…
20
b) Sơ đồ kết nối chân với Arduino
Hình 2.5: Kết nối Arduino với driver động cơ bước
Step Pulse X-Axis/ Step Pulse Y-Axis/ Step Pulse Z-Axis: chân cấp xung cho driver động cơ bước (tương ứng với trục X, Y).
Direction Pulse X-Axis/Direction Pulse Y-Axis/Direction Pulse Z-Axis: chân chiều quay cho driver động cơ bước (tương ứng với trục X, Y).
Stepper Enable/Disable: chân cho phép/không cho phép chạy động cơ bước.
Direction Pulse X-Axis/Direction Pulse Y-Axis/Direction: chân chiều quay cho driver động cơ bước (tương ứng với trục X, Y).
Limit X-Axis/Limit Y-Axis/Limit Z-Axis: chân kết nối công tắc hành trình.
Variable Spindle PWM (*): chân cấp PWM cho spindle (điều khiển tốc độ động cơ cho máy CNC).
Spindle Direction: chân chiều quay cho động cơ spindle.
b) Module điều khiển động cơ A4988
Để điều khiển động cơ, tôi sử dụng module A4988, đây là một con IC thông dụng dùng trong điều khiển motor bước [4]. 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.
21
Hình 2.6: Trình điều khiển bước A4988
Driver cung cấp năm độ phân giải bước khác nhau: bước đủ, 1/2 bước, 1/4 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.
Hình 2.7: Thông số kĩ thuật của A4988
Chân ra driver A4988
Hình 2.8: Sơ đồ nối dây A4988
Hai chân VMOT và GND cung cấp nguồn cho động cơ và sử dụng tụ tách rời 47 uF để bảo vệ board điều khiển khỏi các xung điện áp. Các chân 1A, 1B,
22 2A, 2B kết nối với các chân của con motor. Hai chân tiếp theo là Step và Direction là các chân 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 của vi điều khiển, tôi 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 microsteps 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ứ. 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. Ba chân tiếp theo MS1, MS2 và MS3 là để chọn một trong năm chế độ của động cơ như trong hình… ở 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 đủ.
Hình 2.9: Các chế độ điều khiển của động cơ
Như vậy A4988 là một module phù hợp để điều khiển động cơ bước. Ngoài ra module còn có các chế độ tự ngắt khi quá nhiệt, điều khiển động cơ với 5 chế độ full bước, 1/2 bước, 1/4 bước, 1/8 bước và 1/16 bước [5].
c) Arduino CNC shield V3
Arduino CNC shield V3 là shield mở rộng dành cho Arduino Uno, cho phép điều khiển các máy khắc laser, máy phay cnc hoặc máy in 3D mini. Shield cho phép điều khiển tối đa 4 động cơ bước thông qua driver A4988 hoặc DRV8825 (có các jumper để điều khiển động cơ bước theo chế độ full step, haft step, 1/4, 1/8 hoặc 1/16). Ngoài ra còn có thể gắn thêm các công tắc hành trình
23 cho các trục X, Y, Z, E (dành riêng cho máy in 3D) hay điều khiển đầu khắc CNC, đầu khắc laser và quạt tản nhiệt [6].
Thông số kĩ thuật:
Hỗ trợ firmware GRBL
Điều khiển tối đa 4 động cơ bước
Tương thích driver: A4988 hoặc DRV8825
Thêm jumper để điều khiển full step, haft step, 1/4, 1/8, 1/16 Công tắc hành trình các trục X, Y, Z, E
Điều khiển đầu khắc CNC, đầu khắc laser Điều khiển quạt tản nhiệt
Nguồn cấp: 12-36V (nguồn độc lập với với Arduino Uno) Kích thước: 70 x 55mm
Hình 2.10: Cấu tạo hệ thống chuyển động Shield CNC
2.1.4.6. Nạp cấu hình grbl và giao diện phần mềm điều khiển động cơ a) Nạp cấu hình grbl
Thư viện GRBL [7] là thư viện nguồn mở có hiệu năng hoạt động cao, nó là giải pháp thay thế cho việc sử dụng cổng parallel-port-based được dùng phổ biến trong các máy phay CNC. Thư viện GRBL có thể hoạt động trên hầu hết các board mạch Arduino Classic hiện nay (Arduino UNO, Nano, Pro mini, mini…). Bạn chỉ cần một mạch Arduino có bộ nhớ lưu trử 30KB trở lên là có thể làm một máy CNC hoạt động được ngay.
24 Thư viện điều khiển được viết bằng ngôn ngữ C được tối ưu hóa để có thể hoạt động với hiệu năng cao và tận dụng hết những khả năng của dòng chip AVR để đạt được thời gian chính xác và hoạt động đa nhiệm (không đồng bộ).
Thư viện GRBL sử dụng các tập lệnh G-Code cơ bản và hoạt động chính xác trên nhiều dòng máy CNC mà không hề có bất kỳ lỗi nào.
Cách nạp cấu hình GRBL và Arduino: Thêm thư viện grbl vào thư viện Arduino.
Copy file thư viện GRBL rồi paste vào thư mục có địa chỉ: C:\Program Files (x86)\Arduino\libraries.
Mở Arduino IDE lên, vào menu File -> Examples -> grbl -> grblUpload, sau đó upload code xuống board mạch.
25
b) Giao diện phần mềm điều khiển động cơ Universal G Code Sender
Sau khi kết nối Arduino với máy tính, mở phần mềm Universal G code Sender lên chọn cổng com, baud rate 115200 và nhấn open. Giao diện phần mềm như hình…
Hình 2.12: Giao diện phần mềm Universal G Code Sender
Giao diện phần mềm:
Vùng Connection: Chọn cổng COM (tùy máy mà khi cắm Arduino vào sẽ tạo ra, nhấn vào mũi tên hướng xuống để chọn cổng đúng), baud (mặc định 115200), nút Open/Close để tắt/mở cổng.
Vùng Common Actions: Cài đặt lại gốc tọa độ, đưa con trỏ CNC về vị trí gốc tọa độ…
Màn hình Console: Hiển thị các lệnh đã nạp và các thông báo.
Vùng Send Progress: Hiển thị thời gian dừng, thời gian chạy của động cơ các trục.
Vùng Controller State: Thông báo trạng thái (Active Status) và vị trí máy, vị trí làm việc.
Tab Jog Controller: Điều khiển máy di chuyển thủ công (thường dùng cân chỉnh máy, dò phôi), nhập khoảng cách cần di chuyển vào Step size và nhấn vào trục cần di chuyển, chọn đơn vị milimetters.
Màn Visualizer: hiển thị vị trí máy theo thời gian thực trong không gian. Thiết lập GRBL phù hợp với máy CNC [6]:
26
Hình 2.13: Thiết lập cấu hình GRBL
Vào Machine -> Firmware Settings -> GRBL
Hình 2.14: Giá trị mô tả cho cấu hình GRBL
Bảng thiết lập thông số hiện ra: thứ tự các thông số để cấu hình sẽ bắt đầu bằng $, chúng ta sẽ nhập giá trị lựa chọn vào Value, phần Description là phần diễn giải.
Các thông số trong Description là bool là nhập vào 0 hoặc 1, còn giá trị nhập vào kiểu mask là kiểu nhị phân 0b00000 [thong so 3] [thong so 2] [thong so 1], [thong so 1/2/3] tương ứng là của trục X/Y/Z.
Ví dụ: lựa chọn có sự tác động lên X và Z: 0b00000101, vậy giá trị nhập vào là 5
27 Các thông số:
$0: Thời gian mỗi xung cấp cho driver để chạy động cơ, mặc định là 10uS
$1: Thời gian giữ động cơ sau mỗi loạt chuyển động, muốn động cơ luôn được giữ cho thông số bằng 255, giá trị mặc định 25mS
$2: Chọn mức tín hiệu xung ra cho driver điều khiển, chỉ chỉnh khi sử dụng driver có opto cho phép ngõ vào cao hoặc thấp (như driver TB6560/6600...) $3: Chọn hướng chuyển động cho động cơ mỗi trục.Ví dụ sau khi ráp ta thấy trục Z chạy ngược với mong muốn (nhấn Z+ nó đi xuống và Z- nó đi lên), ta thiết lập lại: $3=4 (0b00000100), hoặc đổi trục X và Z: $3=5 (0b00000101)
$4: Chọn đảo mức tín hiệu cho cho phép chạy động cơ (tương tự $2 và $3).
$5: Chọn đảo mức tín hiệu cho Endstop (công tắc hành trình – các chân Limit), mặc định $5=0, endstop sẽ bị kích hoạt khi chân endstop tương ứng bị tác động mức thấp (0V), nếu chọn $5=1, endstop sẽ bị kích hoạt khi chân endstop tương ứng bị tác động mức cao (5V)
$6: Chọn đảo mức tín hiệu cho cảm biến dò bề mặt phô
$10: Chọn chế độ phản hồi thông tin khi máy chạy, mặc đinh: $10=3 (chỉ phản hồi vị trí máy và vị trí gia công)
$11: Chọn gia tốc của dao khi gia công, thông số càng lớn dao đi càng nhanh nhưng dễ bị sai số, giá trị mặc định 0.01mm
$12: Chọn sai số khi đi cung tròn, số càng nhỏ đi càng mịn, giá trị mặc định 0.002mm
$13: Chọn chế độ thông báo trạng thái làm việc theo đơn vị Inch, giá trị mặc định là 0 (không chọn Inch, máy sẽ báo về đơn vị mm)
$20: Chọn chế độ giới hạn hành trình bằng phần mềm, sau khi chọn hành trình gia công (thiết lập hành trình gia công này ở $130, $131, $132), máy chỉ cho phép dao chạy trong hành trình này tính từ gốc tọa độ, do đó để chức năng này hoạt động được phải bật cho phép về gốc tọa độ ở $22 (đương nhiên máy phải có endstop)
$21: Chọn chế độ giới hạn hành trình bằng bằng công tắc endstop, bất kỳ công tắc endstop nào bị tác động máy sẽ dừng lại
28 $22: Chọn cho phép về gốc tọa độ nếu $22=1, sau khi chọn chức năng này, máy sẽ báo Alarm mỗi lần Open, nhấn vào nút $H và $X để tiếp tục.
$23: Chọn hướng di chuyển về gốc tọa độ (giống như $3)
$24: Chọn tốc độ di chuyển trước khi chạm endstop lần 2, giá trị mặc định 20mm/min
$25: Chọn tốc độ di chuyển trước khi chạm endstop lần 1, giá trị mặc định 100mm/min
$26: Chọn thời gian chờ endstop, giá trị mặc định 250mS
$27: Chọn khoảng di chuyển ngược endstop để chạm lần 2, giá trị mặc định 5mm
Các giá trị $24, $25, $26, $27 là nhằm đảm bảo xác định gốc tọa độ chính xác.Giá trị $25 nhỏ sẽ rất tốn thời gian về gốc tọa độ, nhưng nếu giá trị cao sẽ nhanh làm hỏng endstop, giá trị $26 là đảm bảo tránh hiện tượng endstop bị nhiễu (giá trị càng cao càng tốt nhưng tốn thời gian), sau khi chạm endstop nó sẽ không gọi ngay điểm đó là gốc mà nó sẽ di chuyển ngược lại 1 đoạn như đã chọn ở $27, sau đó lại chạy vào gốc với tốc độ của $24 (coi như nó chỉ gọi điểm đó là gốc nếu 2 lần chạm giống nhau, điều này giúp tránh hiện tượng endstop tự nhảy do rung động hoặc nhiễu)
$100, $101, $102: chọn số xung cấp cho động cơ tương ứng với di chuyển thẳng 1mm. Do động cơ bước chuyển động xoay (mỗi xung cấp cho động cơ sẽ xoay 1 góc – gọi là 1 bước), chúng ta sẽ dùng các cơ cấu như chuyển động đai kéo, vít-me..để chuyển đổi chuyển động xoay này thành chuyển động thẳng,