Module điều khiển CNC 3 trục vẽ hình trên giấy

Một phần của tài liệu đồ án tốt nghiệp khảo sát thiết kế và thi công máy CNC 3 trục vẽ hình trên giấy (Trang 45)

- Board Arduino CNC shield v3 là board mở rộng của Arduino UNO R3 dùng để điều khiển các máy CNC mini. Board có 4 khay dùng để cắm các mô đun điều khiển động cơ bước A4988, khi đó board có thể điều khiển3 trục X, Y, Z và thêm một trục thứ 4 tùy chọn trên các máy CNC mini.

- Các tính năng nổi bật :

+Tương thích GRBL (mã nguồn mở chạy trên Arduino UNO R3 để điều khiển CNC mini)

+Hỗ trợ lên tới 4 trục (trục X, Y, Z và một trục thứ tư tùy chọn) +Hỗ trợ tới 2 Endstop cho mỗi trục

+Tính năng điều khiển spindle, công suất laser

+Tính năng điều khiển dung dịch làm mát khi máy hoạt động

+Sử dụng các mô đun điều khiển động cơ bước, giúp tiết kiệm chi phí khi thay thế, nâng cấp. Thiết lập độ phân giải bước động cơ bằng jump đơn giản

+Thiết kế nhỏ gọn, các đầu nối tiêu chuẩn thông dụng +Điện áp nguồn cấp đa dạng từ 12V tới 36V

4.4.5. Driver điều khiển động cơ bước IM483

-Module điều khiển động cơ bước IM483 là một trình điều khiển động cơ vi bước hoàn chỉnh với việc tích hợp bộ dịch cho hoạt động dễ dàng. Sản phẩm này hỗ trợ nhiều chế độ hoạt động của động cơ bước lưỡng cực như: Full, Half, ¼, 1/8 và 1/16.

- Thông số kỹ thuật:

- Công suất lái ngõ ra lên tới 35V và ± 1A.

-Bao gồm một bộ điều chỉnh dòng cố định chạy giữa hai chu kỳ, thời gian mà máy chạy không, dòng này rất nhỏ và hoặc bị phân rã

-Phù hợp với bộ vi xử lý phức tạp: giao tiếp với IM483 phù hợp với các dòng vi xử lý phức tạp

-Tự động lựa chọn: trong hoạt động vi bước, bộ chopping bên trong IM483 sẽ tự động chọn chế độ sâu hiện tại (thấp hoặc là mix giữa các mode)

-Mạch điều khiển điều chỉnh bên trong được cung cấp nhằm cải thiện hoạt động của bộ PWM để giảm việc tiêu thụ điện.

- Ưu điểm:

+ Làm việc ổn định trong môi trường khắc nghiệt, kích thước gọn nhẹ. + Đáp ứng nhanh, điều khiển trực tiếp qua máy tính dễ dàng.

- Nhược điểm:

+ Giá thành cao.

+ Phải có phần mềm để điều khiển các driver thông qua giao tiếp cổng USB hay LPT của máy tính.

4.5 Xác định, sơ đồ nối dây

-Kết nối phần cứng (Arduino UNO R3 + CNC + IM483) để điều khiển động cơ bước dẫn động các trục X,Y và Z.

4.6 Các phần mềm cần dùng

4.6.1 Phần mềm tạo file mạch in

-Hiện có rất nhiều phần mềm tạo file mạch in PCB như: Altium, Eagle, Proteus, Orcad,… Sau đó vẽ mạch và xuất ra mạch in dạng file PDF

4.6.2 Phần mềm tạo G-code

- Trước khi tạo G-code thì cần phải chuyển file pdf của mạch in sang dạng file bitmap. - Ta có thể dùng các phần mềm như Photoshop hay PDF converter ,…

- JDPaint là một phần mềm mạnh mẽ được thiết kế cho thiết kế sản xuất và định tuyến, cho phép bạn vẽ, cắt và tạo các mô hình 2D, 3D chi tiết. JDPaint được các kiến trúc sư sử dụng rộng rãi để tạo các mô hình như tấm trang trí và cửa ra vào, bản in kiến trúc, và nhiều hơn nữa. Aspire có một giao diện tương tác và dễ sử dụng, do đó bạn sẽ nhanh chóng thay đổi hình dạng và đặc điểm của từng bộ phận, và xây dựng một thiết kế phức tạp bằng cách sử dụng một bộ đơn giản các hình dạng 2D, 3D.

mới trong chế độ xem 3D, bóng đổ bóng mới, mới được tối ưu hóa cho hệ thống 64-bit , trình duyệt clipart mới bố trí, cứu trợ mới bù đắp và nhiều hơn nữa.

- Phần mềm tạo G-code để chạy máy CNC thì chúng em dùng JDPaint

4.6.3 Chương trình điều khiển máy CNC ( NCStudio )

-Trong công nghệ cơ khí ứng dụng công nghệ cao thì phần mềm NCStudio được sử dụng

chính trong ứng dụng máy tiện CNC. NCStudio sẽ chịu trách nhiệm chính trong việc ra lệnh máy CNC sẽ thực hiện theo công việc ý muốn của bạn. Nhiệm vụ chính của phần mềm này là mô tả sự chuyển động của trục chính trên bề mặt vật liệu để máy CNC có thể hiểu và thực hiện lập trình có sẵn.

- Phần mềm NCStudio có thể kết hợp với một số phần mềm khác như JDPaint hoặc JD Soft Artcam để giúp người cắt có thể hoàn thiện sản phẩm của mình theo đúng yêu cầu của khách hàng, mang lại bề mặt cắt gần như chính xác tuyệt đối.

Các tính năng chính của NCStudio:

+ Gửi lệnh G-code tới máy CNC.

+ Chế độ vận hành bằng tay hoặc tự động. + Giao diện người dùng đơn giản.

+ Cắt vật thể với độ chính xác cao. + Tích hợp công cụ G-code JDPaint.

4.7 Chương trình điều khiển:

4.7.1. Đoạn chương trình điều khiển giao tiếp giữa máy vi tính và máy CNC

Chương trình điều khiển Arduino sử dụng để điều khiển “máy CNC 3 trục vẽ hình trên giấy ” đòi hỏi độ chính xác rất cao. Do khả năng lập trình còn hạn chế, thời gian thực hiện đề tài gấp rút. Để đảm bảo hoàn thành đúng tiến độ được giao, hệ thống hoạt động đảm bảo những yêu cầu thiết kế đặt ra. Nhóm xin phép được sử dụng code chương trình đã được nguyên cứu và thử nghiệm thành công.

#include <Servo.h> #include <Stepper.h>

#define LINE_BUFFER_LENGTH 512 const int penZUp = 180;

const int penZDown = 155; const int penServoPin = 6;

const int stepsPerRevolution = 20; Servo penServo;

Stepper myStepperX(stepsPerRevolution, 8,9,10,11); struct point {

float x; float y; float z; };

struct point actuatorPos; float StepInc = 1;

int StepDelay = 0; int LineDelay = 50; int penDelay = 50; float StepsPerMillimeterX = 6.0; float StepsPerMillimeterY = 6.0; float Xmin = 0; float Xmax = 40; float Ymin = 0; float Ymax = 40; float Zmin = 0; float Zmax = 1; float Xpos = Xmin; float Ypos = Ymin; float Zpos = Zmax;

boolean verbose = false; void setup() { Serial.begin( 9600 ); penServo.attach(penServoPin); penServo.write(penZUp); delay(200); myStepperX.setSpeed(250); myStepperY.setSpeed(250); myStepperX.step(-250); myStepperY.step(-250);

Serial.println("Mini CNC Plotter alive and kicking!"); Serial.print("X range is from "); Serial.print(Xmin); Serial.print(" to "); Serial.print(Xmax);

Serial.println(" mm.");

Serial.print("Y range is from "); Serial.print(Ymin); Serial.print(" to "); Serial.print(Ymax);

Serial.println(" mm.");

processIncomingLine( line, lineIndex ); lineIndex = 0; } else { } lineIsComment = false; lineSemiColon = false; Serial.println("ok"); } else { if ( (lineIsComment) || (lineSemiColon) ) { if ( c == ')' ) lineIsComment = false; . } else { if ( c <= ' ' ) { } else if ( c == '/' ) { } else if ( c == '(' ) { lineIsComment = true; } else if ( c == ';' ) { lineSemiColon = true; }

else if ( lineIndex >= LINE_BUFFER_LENGTH-1 ) { Serial.println( "ERROR - lineBuffer overflow" ); lineIsComment = false;

lineSemiColon = false;}

else if ( c >= 'a' && c <= 'z' ) { line[ lineIndex++ ] = c-'a'+'A';} else {

void processIncomingLine( char* line, int charNB ) { int currentIndex = 0;

char buffer[ 64 ]; struct point newPos;

newPos.x = 0.0; newPos.y = 0.0;

while( currentIndex < charNB ) { switch ( line[ currentIndex++ ] ) { case 'U': penUp(); break; case 'D': penDown(); break; case 'G':

buffer[0] = line[ currentIndex++ ]; buffer[1] = '\0';

switch ( atoi( buffer ) ){ case 0:

case 1:

char* indexX = strchr( line+currentIndex, 'X' ); char* indexY = strchr( line+currentIndex, 'Y' ); if ( indexY <= 0 ) {

newPos.x = atof( indexX + 1); newPos.y = actuatorPos.y; }

else if ( indexX <= 0 ) { newPos.y = atof( indexY + 1); newPos.x = actuatorPos.x;

} else {

newPos.y = atof( indexY + 1); indexY = '\0';

newPos.x = atof( indexX + 1); }

drawLine(newPos.x, newPos.y ); actuatorPos.x = newPos.x; actuatorPos.y = newPos.y; break; } break; case 'M':

buffer[0] = line[ currentIndex++ ];

buffer[1] = line[ currentIndex++ ];

buffer[2] = line[ currentIndex++ ]; buffer[3] = '\0';

switch ( atoi( buffer ) ){ case 300:

{

char* indexS = strchr( line+currentIndex, 'S' ); float Spos = atof( indexS + 1); if (Spos == 30) { penDown(); } if (Spos == 50) { penUp(); } break; } case 114

Serial.print( "Absolute position : X = " ); Serial.print( actuatorPos.x ); Serial.print( " -Y=");

Serial.println( actuatorPos.y ); break;

default:

Serial.print( "Command not recognized : M"); Serial.println( buffer );

}

void drawLine(float x1, float y1) { if (verbose) { Serial.print("fx1, fy1: "); Serial.print(x1); Serial.print(","); Serial.print(y1); Serial.println(""); } if (x1 >= Xmax) { x1 = Xmax; } if (x1 <= Xmin) { x1 = Xmin; } if (y1 >= Ymax) { y1 = Ymax; } if (y1 <= Ymin) { y1 = Ymin; } if (verbose) { Serial.print("Xpos, Ypos: "); Serial.print(Xpos); Serial.print(","); Serial.print(Ypos); Serial.println(""); } if (verbose) { Serial.print("x1, y1: "); Serial.print(x1); Serial.print(",");

Serial.print(y1); Serial.println(""); } x1 = (int)(x1*StepsPerMillimeterX); y1 = (int)(y1*StepsPerMillimeterY); float x0 = Xpos;

float y0 = Ypos; long dx = abs(x1-x0); long dy = abs(y1-y0);

int sx = x0<x1 ? StepInc : -StepInc; int sy = y0<y1 ? StepInc : -StepInc; long i;

long over = 0; if (dx > dy) {

for (i=0; i<dx; ++i) { myStepperX.step(sx); over+=dy; if (over>=dx) { over- =dx; myStepperY.step(sy); } delay(StepDelay); } } else {

for (i=0; i<dy; ++i) { myStepperY.step(sy); over+=dx; if (over>=dy) { over- =dy; myStepperX.step(sx); } delay(StepDelay); } }

{ Serial.print("dx, dy:"); Serial.print(dx); Serial.print(","); Serial.print(dy); Serial.println(""); } if (verbose) { Serial.print("Going to ("); Serial.print(x0); Serial.print(","); Serial.print(y0); Serial.println(")"); } delay(LineDelay); Xpos = x1; Ypos = y1; } void penUp() { penServo.write(penZUp); delay(LineDelay); Zpos=Zmax; if (verbose) { Serial.println("Pen up!"); } } void penDown() { penServo.write(penZDown); delay(LineDelay); Zpos=Zmin;

if (verbose) { Serial.println("Pen down."); } }

4.7.2. Chương trình điều khiển chuyển động bàn xoay phôi.

#include <Servo.h> #define EN 3

#define DIR 6 #define STEP 5

#define nut 8 Servo ser; void setup() {

ser.attach(7);//chân servo chân 7 pinMode(nut, INPUT_PULLUP);

pinMode(EN, OUTPUT); pinMode(STEP, OUTPUT); // Step pin pinMode(DIR, OUTPUT); // Dir - pin digitalWrite(EN, LOW); // Set Enable low

ser.write(0); }

void loop() {

if (digitalRead(nut)) { delay(100);

while (digitalRead(nut));//chờ tới khi nút thả ra while (ser.read() != 45) ser.write(45); delay(1000); quay_DCB(); delay(1000); while (ser.read() != 0) ser.write(0); }} void quay_DCB(){

for (int i = 0; i < 52; i++){ digitalWrite(STEP, HIGH); // Output high delay(10);

digitalWrite(STEP, LOW); // Output low delay(10);

TÀI LIU THAM KHO

1) PMI ballscrews catalog, Precision motion industries, INC.

2) Linear guideway technical information, Hiwin motion control and system technology.

3) Sổ tay Công nghệ chế tạo máy - tập 1,2,3 - GS N Nguyễn Đắc Lộc - XB Khoa học và Kỹ thuật.

4) Các trang mạng thông tin: http://advancecad.edu.vn/giao- trinh-solidworks/ https://github.com/grbl/grbl/wiki

http://www.shapeoko.com/wiki/index.php/Grbl_Configuration

https://Arduino.vn

http://www.kenhsangtao.com/

Một phần của tài liệu đồ án tốt nghiệp khảo sát thiết kế và thi công máy CNC 3 trục vẽ hình trên giấy (Trang 45)