Đồ án tốt nghiệp có nội dung nghiên cứu, tìm hiểu về cơ cấu của stator động cơ điện một chiều không chổi than (BLDC), vi điều khiển STM32F4103, cách kết nối, giao tiếp với máy tính, đọc tín hiệu,xuất xung. Tìm hiểu về các linh kiện, thiết bị sử dụng trong mô hình điều khiển: driver AC servo, Step motor, cảm biến sợi quang, motor quay... Nghiên cứu giải thuật, viết chương trình điều khiển. Dựa trên những nghiên cứu tìm hiểu về các linh kiện, thiết bị điện cũng như cơ cấu của động cơ điện, tiến hành tính toánthiết kế và thi công mô hình (tủ điện, cơ khí...). Mời các bạn cùng tham khảo.
TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC o0o -Tp HCM, ngày tháng , năm 2019 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Ngô Thị Hồng Vương Chuyên ngành: Công Nghệ Kỹ Thuật Điện Tử Truyền Thông Mã ngành: Hệ đào tạo: Đại học quy Mã hệ: Khóa: 2014 Lớp: 1414DT1B I TÊN ĐỀ TÀI: MSSV: 14141377 41 THIẾT KẾ VÀ THI CÔNG MÁY TỰ ĐỘNG QUẤN DÂY CHO STATOR ĐỘNG CƠ BLDC II NHIỆM VỤ Các số liệu ban đầu: Tìm hiểu tài liệu động BLDC Nội dung thực hiện: Nội dung 1: nghiên cứu, tìm hiểu cấu stator động điện chiều không chổi than (BLDC) Nội dung 2: Nghiên cứu, tìm hiểu vi điều khiển STM32F4103, cách kết nối, giao tiếp với máy tính, đọc tín hiệu, xuất xung Nội dung 3: Tìm hiểu linh kiện, thiết bị sử dụng mơ hình điều khiển: driver AC servo, Step motor, cảm biến sợi quang, motor quay… Nội dung 4: Nghiên cứu giải thuật, viết chương trình điều khiển Nội dung 5: Dựa nghiên cứu tìm hiểu linh kiện, thiết bị điện cấu động điện, tiến hành tính tốn thiết kế thi cơng mơ hình (tủ điện, khí…) Nội dung 6: Viết báo cáo thực đồ án Nội dung 7: Bảo vệ đề tài tốt nghiệp III NGÀY GIAO NHIỆM VỤ: IV NGÀY HOÀN THÀNH NHIỆM VỤ: V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: Th.S Nguyễn Thanh Bình CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH i LỜI CAM ĐOAN Đề tài tự thực dựa vào số tài liệu trước khơng chép từ tài liệu hay cơng trình có trước Những người thực đề tài Ngơ Thị Hờng Vương BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ii LỜI CẢM ƠN Nhóm thực xin gởi lời cảm ơn sâu sắc đến Thầy Nguyễn Thanh Bình_Giảng viên môn Vi Xử Lý trực tiếp hướng dẫn tận tình giúp đỡ tạo điều kiện để chúng em hồn thành tốt đề tài Nhóm thực gửi lời chân thành cảm ơn quý thầy cô Khoa Điện-Điện Tử tạo điều kiện tốt cho em hồn thành đề tài Nhóm thực gửi lời cảm ơn chân thành đến Công ty Trách nhiệm Hữu hạn Avant Garde Việt Nam Công ty Trách nhiệm Hữu hạn Trí Việt hỗ trợ, tạo điều kiện cho nhóm em thực đề tài Xin chân thành cảm ơn! Những người thực đề tài Ngô Thị Hờng Vương BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH iii DANH SÁCH HÌNH Hình 2.1: Stator động BLDC Hình 2.2: Rotor có nam châm gắn bề mặt Hình 2.3: Rotor có nam châm ẩn bên lõi Hình 2.4: Các loại rotor động BLDC .6 Hình 2.5: Sơ đờ ngun lý hình ảnh chip STM32F103C8T6 Hình 2.6: Ng̀n tổ ong 24V .12 Hình 2.7: Động bước 13 Hình 2.8: Driver điều khiển động bước .14 Hình 2.9: Cấu tạo động AC Servo 16 Hình 2.10: Sơ đồ mô tả kết nối thiết bị điều khiển Driver động AC Servo 17 Hình 2.11: Hình minh họa thành phần Driver 17 Hình 2.12: Bộ lọc nhiểm điện áp xoay chiều 19 Hình 2.13: Hình ảnh Xi lanh .20 Hình 2.14: Cảm biến hành trình D-Z73 20 Hình 2.15: Sơ đồ mạch điều khiển 20 Hình 2.16: Cảm biến quang EE-SX671 21 Hình 2.17: Sơ đờ ngun lý cảm biến quang EE-SX671 22 Hình 2.18: Hình ảnh MCB 22 Hình 2.19: Hình ảnh Contactor 23 Hình 3.1: Hình ảnh mơ máy quấn dây 24 Hình 3.2: Sơ đờ khối máy tự động quấn dây 25 Hình 3.3: Hình ảnh mơ tả kết nối thiết bị 26 Hình 3.4: Sơ đờ kết nối cảm biến D-Z73 26 Hình 3.5: Sơ đờ kết nối cảm biến quang 27 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH iv Hình 3.6: Sơ đờ khối mạch ngõ 28 Hình 3.7: Đồ thị thể mối liên hệ Ic Vce opto TLP-280 28 Hình 3.8: Sơ đồ nguyên lý kênh mạch ngõ 29 Hình 3.9: Sơ đồ khối mạch ngõ vào .30 Hình 3.10: Sơ đồ nguyên lý mạch ngõ vào .30 Hình 3.11: Sơ đờ nguyên lý mạch vi xử lý .31 Hình 3.12: Sơ đờ khối mạch nguồn 32 Hình 3.13: Sơ đờ nối dây thiết bị tủ điện 33 Hình 4.1: Tạo dự án 35 Hình 4.2: Đặt tên dự án chọn nơi lưu dự án 36 Hình 4.3: Thanh cơng cụ Libraries nút Libraries 37 Hình 4.4: Cửa sổ “Available Libraries” 38 Hình 4.5: Board PCB ban đầu 39 Hình 4.6: Chuyển sơ đờ ngun lý sang sơ đồ PCB 39 Hình 4.7: Cửa số “Engineering Change Order” 40 Hình 4.8: Các linh kiện chưa xếp 40 Hình 4.9: Lớp board mạch 41 Hình 4.10: Lớp board mạch .42 Hình 4.11: Hình mơ mặt board mạch chưa có linh kiện 42 Hình 4.12: Hình mơ mặt board mạch chưa có linh kiện 43 Hình 4.13: Hình mơ 3D mặt board 43 Hình 4.14: Hình mô 3D mặt board 44 Hình 4.15: Kiểm tra ng̀n cấp vào cho mạch điều khiển 48 Hình 4.16: Kiểm tra ng̀n 3.3v cấp cho vi xử lý .48 Hình 4.17: Sơ đờ bố trí thiết bị tủ điện 50 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH v Hình 4.18: Tủ điện sau hồn thiện 51 Hình 4.19: Kiểm tra điện áp ngõ MCB VOM .52 Hình 4.20: Vị trí thiết bị cấu quấn 53 Hình 4.21: Vị trí cảm biến quang 53 Hình 4.22: Vị trí cảm biến hành trình xilanh .53 Hình 4.23: Phía hộp nhựa 54 Hình 4.24: Nắp hộp nhựa 54 Hình 4.25: Lưu đờ giải thuật chương trình .55 Hình 4.26: Lưu đờ trở vị trí ban đầu .56 Hình 4.27: Lưu đờ chương trình bắt đầu quấn .57 Hình 4.28: Lưu đờ Chương trình quấn cuộn 58 Hình 4.29: Lưu đờ quấn cuộn .59 Hình 4.30: Lưu đờ chương trình CachQuan 60 Hình 4.31: Lưu đồ cách quấn lớp 62 Hình 4.32: Lưu đờ chương trình MayQuanDay1_Handle() 63 Hình 4.33: Lưu đờ chương trình chỉnh góc quấn 64 Hình 4.34: Lưu đờ chương trình lưu góc 65 Hình 4.35: Màn hình Download Arduino IDE 66 Hình 4.36: Mở chương trình cài đặt .66 Hình 4.37: Màn hình cài đặt “License Agreemen” 67 Hình 4.38: Màn hình cài đặt “Installation Options” 67 Hình 4.39: Màn hình chờ cài đặt 68 Hình 4.40: Màn hình cài đặt driver 68 Hình 4.41: Màn hình cài đặt hồn thành 69 Hình 4.42: Tạo project 69 BỘ MÔN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH vi Hình 4.43: Màn hình viết code .70 Hình 4.44: Biên dịch code 71 Hình 4.45: Kết nối với cổng COM3 71 Hình 4.46: Màn hình biên dịch thành cơng 72 Hình 4.47: Giao diện phần mềm Microsoft Vitual Studio 72 Hình 4.48: Cách tạo dự án .73 Hình 4.49: Chọn mơi trường soạn thảo phần mềm 73 Hình 4.50: Giao diện soạn thảo phần mềm 74 Hình 4.51: Thanh công cụ Toolbox .74 Hình 4.52: Thanh cơng cụ Properties 75 Hình 4.53: Giao diện sau thiết kế 76 Hình 4.54: Lập trình hoạt động cửa sổ “Form1.cs” .76 Hình 4.55: Vị trí đặt lõi sắt mâm xoay .77 Hình 4.56: Vị trí thiết bị cấu quấn 77 Hình 4.57: Vị trí MCB tủ điện 78 Hình 4.58: Các nút nhấn dùng để điều khiển máy 78 Hình 4.59: Cuộn dây quấn hoàn thiện 79 Hình 5.1: Khung máy sau hồn thành 81 Hình 5.2: Bàn làm việc máy .82 Hình 5.3: Lõi sắt sau quấn hoàn thiện 83 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH vii DANH SÁCH BẢNG Bảng 2.1: So sánh động BLDC với động điện chiều thông thường Bảng 2.2: Cài đặt cường độ dòng điện 15 Bảng 2.3: Cài đặt vi bước cho driver .15 Bảng 3.1: Các ngõ vào sử dụng 34 Bảng 3.2: Các ngõ sử dụng .34 Bảng 4.1: Danh sách linh kiện .44 Bảng 4.2: Danh sách thiết bị 49 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH viii DANH MỤC CÁC TỪ VIẾT TẮT BLDC: Brushless Direct Current UART: Universal Asynchronous Receiver – Transmitter USART: Universal Synchronous/Asynchronous Receiver/Transmitter MCB: Miniature Circuit Breaker LSB: Least Significant Bit BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ix MỤC LỤC NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP i Chương TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU 1.3 NỘI DUNG NGHIÊN CỨU 1.4 GIỚI HẠN 1.5 BỐ CỤC Chương CƠ SỞ LÝ THUYẾT 2.1 TỔNG QUAN VỀ ĐỘNG CƠ BLDC (BRUSHLESS DIRECT CURRENT) 2.2 GIỚI THIỆU PHẦN CỨNG 2.2.1 Vi điều khiển STM32F103C8T6 2.2.2 Cấu hình chi tiết STM32F103C8T6: 2.2.3 Giao Tiếp UART: a Các khái niệm liên quan đến giao tiếp qua module UART gồm: b Giới thiệu chuẩn giao tiếp RS-485 c Một số vấn đề liên quan đến chuẩn RS-485 10 2.2.4 Nguồn tổ ong 24V-5A: 12 2.2.5 Động bước 13 2.2.6 Mạch Điều Khiển Động Cơ Bước TB6600 14 2.2.7 Động AC Servo (Megatorque Motor): 15 a Tính năng: 15 b Thông số kỹ thuật: 16 c Thông số kỹ thuật 18 2.2.8 Bộ lọc nhiễu: 18 2.2.9 Xi lanh 19 2.2.10 Cảm biến hành trình xi lanh D-Z73 20 Chương TÍNH TỐN VÀ THIẾT KẾ 24 3.1 GIỚI THIỆU 24 3.2 TÍNH TỐN VÀ THIẾT KẾ HỆ THỐNG 25 3.2.1 Thiết kế sơ đồ khối hệ thống 25 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH x PHỤ LỤC if(lst_CylinderMainState != CylinderMainState) { SetCylinderMainState(CylinderMainState); lst_tick_ms = GetTickCount(); } break; case CL_Up: if(lst_CylinderMainState != CylinderMainState) { SetCylinderMainState(CylinderMainState); lst_tick_ms = GetTickCount(); Cylinder_Up(); } if(Cylinder_SensorUP_Actived()) { SetCylinderMainState(CL_Idle); } if(GetTickCount() - lst_tick_ms > Cylinder_UP_Timeout) { setError(ERR_Cylinder_UPTimeout); SetCylinderMainState(CL_Error); } break; case CL_Down: if(lst_CylinderMainState != CylinderMainState) { SetCylinderMainState(CylinderMainState); lst_tick_ms = GetTickCount(); Cylinder_Down(); } if(Cylinder_SensorDOWN_Actived()) { SetCylinderMainState(CL_Idle); } if(GetTickCount() - lst_tick_ms > Cylinder_DOWN_Timeout) { setError(ERR_Cylinder_DOWNTimeout); SetCylinderMainState(CL_Error); } break; case CL_Error: break; } } void MachineHoming(void) { // In-Out Arm // RotateTable //Dung Arm SetMotor1MainState(MT1_Idle); //Dùng Cylanh SetCylinderMainState(CL_Up); //cho cylanh len cao de tranh ket may while(CylinderMainState != CL_Idle) { Cylinder_Handle(); } //Cho arm ve home SetMotor1MainState(MT1_GoHome); while(Motor1MainState != MT1_Idle) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 88 PHỤ LỤC Motor1_Handle(); } //Cho mam xoay ve home SetMotor2MainState(MT2_GoHome); while(Motor2MainState != MT2_Idle) { Motor2_Handle(); } } void setup() { Serial1.begin(9600); pinMode(SSerialTxControl, OUTPUT); pinMode(PA11, OUTPUT); // buzz digitalWrite(PA11, HIGH); pinMode(PA3, INPUT); pinMode(PB0, INPUT); pinMode(PB1, INPUT); pinMode(PB2, INPUT); pinMode(PB15, OUTPUT); digitalWrite(PB15, HIGH); pinMode(PB13, OUTPUT); pinMode(PB14, OUTPUT); pinMode(PB12, OUTPUT); // In-Out Arm // RotateTable stepper1.setMinPulseWidth(120); stepper1.setMaxSpeed(1000.0); stepper1.setAcceleration(1000.0); stepper2.setMaxSpeed(5000.0); stepper2.setAcceleration(5000.0); MachineHoming(); } //Di chuyen ban xoay theo void RotateTable_MoveTo(float deg) { int32_t _stepToMove = 0; //3600 xung => vong = 3600/360 = 10 _stepToMove = (int32_t)(deg*10.0); stepper2.moveTo(_stepToMove); } uint32_t RotateTable_DistantToGo(void) { return stepper2.distanceToGo(); } ////////////////////////// //di chuyen canh tay theo mm void InOutArm_MoveTo(float dist) { int32_t _stepToMove = 0; //16000 xung 25mm ==> 640 xung/mm //hanh trinh 140mm if(dist > 140.0) dist = 140.0; _stepToMove = dist*640; stepper1.moveTo(_stepToMove); } uint32_t InOutArm_DistantToGo(void) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 89 PHỤ LỤC return stepper1.distanceToGo(); } //////////////////////// void UnderGround_Functions(void) { Motor1_Handle(); Cylinder_Handle(); Motor2_Handle(); } /////////////////////////// uint8_t MQD1_MainState = 0, lst_MQD1_MainState = 1; uint8_t MQD2_MainState = 0, lst_MQD2_MainState = 1; void SetMQD1_MainState(uint8_t st) { lst_MQD1_MainState = MQD1_MainState; MQD1_MainState = st; } //////// float beta=30; float A = 5; float B = 65; float C = 125; float D = 185; float E = 245; float F = 305; int Chieu; float Arm1; //float DuongKinhDay; const int ConstArm1 =67; //vi tri xuong cylanh khong bi ket float keoday=0; // Tha dây /////////////////////// void Quan1cuon(int a, int Buoc, int Vong){ SetMQD1_MainState(a); CachQuan(Buoc, Vong); switch (a) { case 0: mocday(A, B, C); break; case 1: mocday(B, C, D); break; case 2: mocday(C, D, E); break; case 3: mocday(D, E, F); break; case 4: mocday(E, F, A+360); break; case 5: //mocday(E, F, A+360); break; } } void Quan6cuon(float Buoc, int Vong) { //while(!Start_Actived()); //chờ nhấn nút start Quan1cuon(0, Buoc, Vong); Quan1cuon(1, Buoc, Vong); Quan1cuon(2, Buoc, Vong); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 90 PHỤ LỤC Quan1cuon(3, Buoc, Vong); Quan1cuon(4, Buoc, Vong); Quan1cuon(5, Buoc, Vong); Buzz(); while(!Start_Actived()); MachineHoming(); } int Table_angle_start; ///////// const int Sovongday= 60; ///////// char val; int len; /////////////////////////////////////////// void Suachua(){ char buffer[6]; Serial1.setTimeout(20000L) ; // wait until 20 seconds for input from serial len = Serial1.readBytesUntil('#', (char *) buffer, 6) ; // Read chuoi tu phan mem C# gui xuong cho arduino //for (int i = len; i < 6; i++) buffer[i] = ' '; // Neu chuoi duoc gui ngan hon 752 thi ghi phim trang len cac ky tu // String binString; if (isDigit(buffer[0])) { binString += (char)buffer[0]; } if (isDigit(buffer[1])) { binString += (char)buffer[1]; } if (isDigit(buffer[2])) { binString += (char)buffer[2]; } // int b= binString.toInt(); ///////////// String ainString; if (isDigit(buffer[3])) { ainString += (char)buffer[3]; } if (isDigit(buffer[4])) { ainString += (char)buffer[4]; } // int a1= ainString.toInt(); float a= a1*0.1; ///////////// String cinString; if (isDigit(buffer[5])) { cinString += (char)buffer[5]; } // int c= cinString.toInt(); if (c==0) { digitalWrite(PA11, LOW); } else { digitalWrite(PA11, HIGH); } SetMQD1_MainState(c); CachQuan(a, b); Buzz(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 91 PHỤ LỤC while(!Start_Actived()); MachineHoming(); } ////////////////// void Chinhgoc(){ char buffer[4]; Serial1.setTimeout(20000L) ; // wait until 20 seconds for input from serial len = Serial1.readBytesUntil('#', (char *) buffer, 4) ; // Read chuoi tu phan mem C# gui xuong cho arduino //for (int i = len; i < 4; i++) buffer[i] = ' '; // Neu chuoi duoc gui ngan hon 752 thi ghi phim trang len cac ky tu // String binString; if (isDigit(buffer[0])) { binString += (char)buffer[0]; } if (isDigit(buffer[1])) { binString += (char)buffer[1]; } if (isDigit(buffer[2])) { binString += (char)buffer[2]; } if (isDigit(buffer[3])) { binString += (char)buffer[3]; } // int b= binString.toInt(); float a= b*0.1; InOutArm_MoveTo(ConstArm1); while(InOutArm_DistantToGo() != 0) { UnderGround_Functions(); } ///////////// RotateTable_MoveTo(a); while(RotateTable_DistantToGo() != 0) { UnderGround_Functions(); } } //////// void Luu() { char buffer[24]; Serial1.setTimeout(20000L) ; // wait until 20 seconds for input from serial len = Serial1.readBytesUntil('#', (char *) buffer, 24) ; // Read chuoi tu phan mem C# gui xuong cho arduino //for (int i = len; i < 24; i++) buffer[i] = ' '; // Neu chuoi duoc gui ngan hon 752 thi ghi phim trang len cac ky tu // String ainString; String binString; String cinString; String dinString; String einString; String finString; for (int i=0; i 0) { val = Serial1.read(); switch (val) { case '1': Batdauquan(); break; case '2': Suachua(); break; case '3': Chinhgoc(); break; case '4': Luu(); break; default: break; } } /////////// } Code chương trình Batdauquan: void Batdauquan(){ char buffer[5]; Serial1.setTimeout(20000L) ; serial // wait until 20 seconds for input from BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 93 PHỤ LỤC len = Serial1.readBytesUntil('#', (char *) buffer, 5) ; // Read chuoi tu phan mem C# gui xuong cho arduino //Dữ liệu nhận kiểu ký tự //Cần chuyển sang kiểu số //đổi sang kiểu chuổi //Số Vòng Quấn String binString; if (isDigit(buffer[0])) { binString += (char)buffer[0]; } if (isDigit(buffer[1])) { binString += (char)buffer[1]; } if (isDigit(buffer[2])) { binString += (char)buffer[2]; } //Đổi từ kiểu chuỗi sang kiểu số int b= binString.toInt(); /////////////////////////// //Bước dây String ainString; if (isDigit(buffer[3])) { ainString += (char)buffer[3]; } if (isDigit(buffer[4])) { ainString += (char)buffer[4]; } int a1= ainString.toInt(); float a= a1*0.1; /////////////////////////// Quan6cuon(a, b); //UnderGround_Functions(); //không cần thiết } Code chương trình CachQuan: void CachQuan(float Buocday, int Sovong) { int a, b, c, d, e, f; a = (8.5*1)/Buocday; b = (8.5*0.75)/Buocday; c = (8.5*0.6)/Buocday; d = (8.5*0.4)/Buocday; e = (8.5*0.25)/Buocday; f = Sovong - 2*(a +b +c +d +e); Chieu =-1; Arm1=ConstArm1; InOutArm_MoveTo(ConstArm1); while(InOutArm_DistantToGo() != 0) { UnderGround_Functions(); } CachQuan1Lop(a, Buocday); CachQuan1Lop(b, Buocday); CachQuan1Lop(c, Buocday); CachQuan1Lop(d, Buocday); CachQuan1Lop(e, Buocday); if (f>0) { for (int j=0; j Motor1_GoHome_Timeout) //30s timeout { _homingState = 0xFF; } break; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 97 PHỤ LỤC case 3: // move forward a bit until sensor unactivated if(!Motor1_HomeSensor_Actived()) { _homingState = 4; } if(GetTickCount() - lst_tick_ms > Motor1_GoHome_Timeout) //30s timeout { _homingState = 0xFF; } break; case 4: //done stepper1.stop(); stepper1.setCurrentPosition(0); stepper1.setMaxSpeed(10000.0); stepper1.setAcceleration(10000.0); SetMotor1MainState(MT1_Idle); break; default: //take too long to go home SetMotor1MainState(MT1_Error); setError(ERR_MOTOR1_GoHomeTimeOut); break; } break; case MT1_Running: break; case MT1_Error: break; } stepper1.run(); } Code chương trình Motor2_Handle: void Motor2_Handle(void) { static uint32_t lst_tick_ms; switch(Motor2MainState) { case MT2_Idle: if(lst_Motor2MainState != Motor2MainState) { SetMotor2MainState(Motor2MainState); lst_tick_ms = GetTickCount(); } lst_tick_ms = GetTickCount(); break; case MT2_GoHome: static uint8_t _homingState = 0; if(lst_Motor2MainState != Motor2MainState) { SetMotor2MainState(Motor2MainState); lst_tick_ms = GetTickCount(); _homingState = 0; } switch(_homingState) { case 0: //finding home sensor stepper2.setMaxSpeed(1000.0); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 98 PHỤ LỤC stepper2.setAcceleration(500.0); stepper2.moveTo(-16000); _homingState = 1; if(Motor2_HomeSensor_Actived()) { _homingState = 2; } if(GetTickCount() - lst_tick_ms > Motor2_GoHome_Timeout) //30s timeout { _homingState = 0xFF; } break; case 1: //waiting for home sensor if(Motor2_HomeSensor_Actived()) { _homingState = 2; } if(GetTickCount() - lst_tick_ms > Motor2_GoHome_Timeout) //30s timeout { _homingState = 0xFF; } break; case 2: //catch home sensor stepper2.stop(); stepper2.setCurrentPosition(0); stepper2.setMaxSpeed(50.0); stepper2.setAcceleration(10.0); stepper2.moveTo(1000); _homingState = 3; if(!Motor2_HomeSensor_Actived()) { _homingState = 4; } if(GetTickCount() - lst_tick_ms > Motor2_GoHome_Timeout) //30s timeout { _homingState = 0xFF; } break; case 3: // move forward a bit until sensor unactivated if(!Motor2_HomeSensor_Actived()) { _homingState = 4; } if(GetTickCount() - lst_tick_ms > Motor2_GoHome_Timeout) //30s timeout { _homingState = 0xFF; } break; case 4: //done stepper2.stop(); stepper2.setCurrentPosition(0); stepper2.setMaxSpeed(10000.0); stepper2.setAcceleration(10000.0); SetMotor2MainState(MT2_Idle); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 99 PHỤ LỤC break; default: //take too long to go home SetMotor2MainState(MT2_Error); setError(ERR_MOTOR2_GoHomeTimeOut); break; } break; case MT2_Running: break; case MT2_Error: break; } stepper2.run(); } Code chương trình Quan1vongDay: void Quan1vongDay(float a, float b) { stepper2.setMaxSpeed(10000.0); stepper2.setAcceleration(10000.0); Cylinder_Up(); while(!Cylinder_SensorUP_Actived()); InOutArm_MoveTo(Arm1-keoday); while(InOutArm_DistantToGo() != 0) { UnderGround_Functions(); } RotateTable_MoveTo(a-beta); while(InOutArm_DistantToGo() != || RotateTable_DistantToGo() != 0) { UnderGround_Functions(); } InOutArm_MoveTo(Arm1); while(InOutArm_DistantToGo() != 0) { UnderGround_Functions(); } RotateTable_MoveTo(a); while(InOutArm_DistantToGo() != || RotateTable_DistantToGo() != 0) { UnderGround_Functions(); } Cylinder_Down(); while(!Cylinder_SensorDOWN_Actived()); InOutArm_MoveTo(Arm1-keoday); while(InOutArm_DistantToGo() != 0) { UnderGround_Functions(); } RotateTable_MoveTo(b+beta); while(RotateTable_DistantToGo() != 0) { UnderGround_Functions(); } InOutArm_MoveTo(Arm1); while(InOutArm_DistantToGo() != 0) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 100 PHỤ LỤC UnderGround_Functions(); } //delay(1000); RotateTable_MoveTo(b); while(InOutArm_DistantToGo() != || RotateTable_DistantToGo() != 0) { UnderGround_Functions(); } Cylinder_Up(); while(!Cylinder_SensorUP_Actived()); } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 101 TÀI LIỆU THAM KHẢO Tài Liệu Tham Khảo: [1] Nguyễn Đình Phú, Nguyễn Trường Duy, Giáo trình: Kỹ Thuật Số, nhà xuất Đại học Quốc Gia Tp Hờ Chí Minh, năm 2013 [2] Nguyễn Đình Phú, Trương Ngọc Anh, Giáo trình: Vi Xử Lý, nhà xuất Đại học Quốc gia Tp Hờ Chí Minh, năm 2013 [3] Trần Thu Hà, Trương Thị Bích Ngà, Nguyễn Thị Lưỡng, Giáo trình: Điện Tử Cơ Bản, nhà xuất Đại học Quốc gia Tp Hờ Chí Minh, năm 2013 [4] Quyền Huy Ánh, Giáo trình: An Toàn Điện, nhà xuất Đại học Quốc gia Tp Hờ Chí Minh, năm 2007 [5] Cộng đờng Arduino Việt Nam, “Giới thiệu Arduino Mega2560”, http://arduino.vn [6] STM32 with Arduino, https://github.com/rogerclarkmelbourne/Arduino_STM32 [7] Giới thiệu chuẩn giao tiếp RS485, http://www.ytuongnhanh.vn BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 102 ... Thi t kế thi công máy tự động quấn dây cho stator động BLDC Đề tài hội để nhóm thực áp dụng kiến thức học trường vào nhìn nhận giải vấn đề tờn trình sản xuất thực tế 1.2 MỤC TIÊU Thi t kế thi. .. SINH x 3.2.2 Tính tốn thi t kế mạch 26 a Thi t kế khối cảm biến 26 b Thi t kế khối ngõ ra: 27 c Thi t kế khối ngõ vào: 29 d Thi t kết khối vi xử lý: ... Thi t kế thi công máy tự động quấn dây cho stator động BLDC Máy vận hành hoạt động ổn định quấn sản phẩm hoàn thi n 1.3 NỘI DUNG NGHIÊN CỨU NỘI DUNG 1: nghiên cứu, tìm hiểu cấu stator động điện