Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 58 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
58
Dung lượng
1,22 MB
Nội dung
TRƯỜNG ĐẠI HỌC LÂM NGHIỆP KHOA CƠ ĐIỆN VÀ CÔNG TRÌNH BỘ MƠN KỸ THUẬT ĐIỆN TỬ & TỰ ĐỘNG HÓA - KHÓA LUẬN TỐT NGHIỆP NGHIÊN CỨU, CHẾ TẠO THỬ NGHIỆM MẠCH ĐIỀU KHIỂN ROBOT SỬ DỤNG IC PIC18F46K22 NGÀNH : CÔNG NGHỆ KỸ THUẬT CƠ ĐIỆN TỬ Giáo viên hướng dẫn : ThS Lê Minh Đức Sinh viên thực : Đặng Đình Hùng Mã sinh viên : 1851080049 Lớp : K63 - CĐT Khóa học : 2018 - 2022 Hà Nội - 2022 LỜI NÓI ĐẦU Cùng với phát triển không ngừng ngành khoa học kỹ thuật, ngành công nghiệp phát triển nhanh chóng Việc áp dụng máy móc đại vào sản suất yêu cầu thiếu nhà máy nhằm tăng suất, tăng chất lượng giảm giá thành sản phẩm Song song với phát triển đó, cơng nghệ chế tạo Robot phát triển nhanh chóng đặc biệt nước phát triển nhằm đáp ứng nhu cầu sản xuất, sinh hoạt, quốc phịng… Robot thực cơng việc mà người khó thực chí khơng thực như: làm cơng việc địi hỏi độ xác cao, làm việc môi trường nguy hiểm thám hiểm không gian vũ trụ… Với mong muốn hiểu thêm máy móc thiết bị nguyên lí thiết kế, điều khiển em thực đề tài “Nghiên cứu, chế tạo thử nghiệm mạch điều khiển Robot sử dụng IC PIC18F46K22” Khóa luận tốt nghiệp em gồm chương: Chương 1: Giới thiệu chung Chương 2: Cơ sở lý thuyết Chương 3: Thiết kế lắp ráp mơ hình Chương 4: Vận hành thử nghiệm mơ hình Kết thúc thời gian giao để hồn thành khóa luận, số kiến thức hạn hẹp đặc biệt với giúp đỡ tận tình anh Phạm Hồng Dương giám đốc Công Ty Điện Tử Anh Việt thầy Lê Minh Đức, em hoàn thành thời hạn khóa luận Do thời gian có hạn, kiến thức cịn hạn chế nên đề tài khơng thể tránh khỏi thiếu sót Em mong nhận đóng góp ý kiến thầy để đề tài khóa luận hồn thiện Em xin chân thành cảm ơn thầy giáo ThS.Lê Minh Đức, thầy cô giáo môn kỹ thuật điện tự động hóa Trường Đại Học Lâm Nghiệp Việt Nam tạo điều kiện giúp đỡ em thời gian thực đề tài tốt nghiệp Hà Nội, ngày tháng năm 2022 Sinh viên thực Đặng Đình Hùng i NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Họ tên sinh viên: Mã sinh viên: Lớp: Kết luận: Đồng ý/Không đồng ý cho sinh viên… ………nộp báo cáo khóa luận tốt nghiệp Hà Nội, ngày…… tháng……năm…… GIÁO VIÊN HƯỚNG DẪN (Chữ ký, Họ tên) ii NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ tên sinh viên: Mã sinh viên: Lớp: GIÁO VIÊN PHẢN BIỆN (Chữ ký, Họ tên) iii MỤC LỤC LỜI NÓI ĐẦU i MỤC LỤC iv DANH MỤC CÁC BẢNG BIỂU .v DANH MỤC CÁC HÌNH VẼ vi CHƯƠNG 1: GIỚI THIỆU CHUNG 1.1 Giới thiệu điều khiển Robot sóng NRF24L01 .1 1.2 Một số loại Robot thị trường .2 1.3 Đề xuất hệ thống Robot 1.4 Thực đề tài CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Nguyên lý điều khiển Robot 2.1.1 Sử dụng vi điều khiển để điều khiển Robot 2.1.2 Sử dụng thu phát hồng ngoại BFD-1000 dẫn đường cho Robot 2.2 Thu phát sóng RF (Radio Frequency) 2.2.1 Điều chế giải điều chế tín hiệu vào sóng mang RF 2.2.2 Truyền tín hiệu song cơng viba 2.3 Truyền liệu NRF24L01 14 CHƯƠNG 3: THIẾT KẾ, LẮP RÁP MƠ HÌNH 15 3.1 Sơ đồ khối mơ hình điều khiển Robot 15 3.2 Sử dụng khối mơ hình 15 3.3 Quá trình lắp ráp chi tiết 17 3.4 Thiết kế mạch điều khiển Robot Controller .17 3.4.1 Thiết kế mạch phần mềm Altium 17 3.4.2 Chuẩn bị linh kiện để hàn mạch .18 CHƯƠNG 4: VẬN HÀNH THỬ NGHIỆM 36 4.1 Quá trình vận hành .36 4.1.1 Quá trình kiểm tra 36 4.2 Kết vận hành 37 KẾT LUẬN, KIẾN NGHỊ 39 PHỤ LỤC TÀI LIỆU THAM KHẢO iv DANH MỤC CÁC BẢNG BIỂU Bảng 3.1: Dữ liệu tham khảo 28 Bảng 4.1: Các phím điều khiển Robot chạy tay .37 Bảng 4.2: Các phím điều khiển Robot chạy tự động 38 v DANH MỤC CÁC HÌNH VẼ Hình 2.1: Bộ thu phát hồng ngoại BFD-1000 .4 Hình 2.2: Tần số sóng mang Hình 2.3: Điều chế biên độ (AM) .8 Hình 2.4: Điều chế biên độ (FM) Hình 2.5: Sóng viba Hình 2.6: Cảm biến đo mức radar GRLM-70 Dinel 10 Hình 2.7: Băng tần sóng viba 11 Hình 2.8: Thu phát sóng anten 12 Hình 2.9: Anten vơ hướng .13 Hình 2.10: Các loại anten định hướng 13 Hình 2.11: Phân cực Patch antenna 14 Hình 2.12: Anten lưới .14 Hình 3.1: Sơ đồ khối mơ hình điều khiển Robot 15 Hình 3.2: Mơ hình robot 16 Hình 3.3: Module L298 V3 .16 Hình 3.4: Đấu nối mơ hình 17 Hình 3.5: Thiết kế mạch điều khiển 18 Hình 3.6: Mắc nối dây mơ 18 Hình 3.7: Pic18F46K22 21 Hình 3.8: Sơ đồ khối Pic18F46K22 22 Hình 3.9: Sơ đồ chân PIC sử dụng điều khiển 24 Hình 3.10: Cảm biến dò đường BFD-1000 ngõ .26 Hình 3.11: nRF24L01 với thành phần bên ngồi .28 Hình 3.12: Các chân nối NRF24LO1 29 Hình 3.13: Human Machine Interface .30 Hình 3.14: 74HC125N DIP14 31 Hình 3.15: IC 74HC125 32 Hình 3.16: XH2.54 đực chân thẳng .33 Hình 3.17: XH2.54 đực chân thẳng .34 Hình 3.18: Mạch hàn tay 35 Hình 4.1: Sơ đồ trình kiểm tra 36 Hình 4.1: Bàn phím HMI điều khiển Robot chạy tay 37 Hình 4.2: Bàn phím HMI điều khiển Robot chạy Tự động 38 vi CHƯƠNG 1: GIỚI THIỆU CHUNG 1.1 Giới thiệu điều khiển Robot sóng NRF24L01 Thuật ngữ Robot suất vào năm 1920 tác phẩm văn học nhà văn Tiệp Khắc có tên Karel Capek Thuật ngữ IR (Inducstrial Robot) - xuất Mỹ công ty AMF (American Manchine and Foundry company) quảng cáo mô tả thiết bị mang dáng dấp có số chức tay người điều khiển tự động để thực số thao tác sản xuất thiết bị có tên gọi Versatran Q trình phát triển IR tóm tắt sau: - Từ năm 50 Mỹ xuất viện nghiên cứu - Đang đầu năm 60 xuất sản phẩm tên Versatran công ty AMF - Ở Anh người ta bắt đầu nghiên cứu chế tạo IR theo quyền Mỹ từ năm 1967; - Ở nước Tây Âu khác như: Đức, Ý, Pháp, Thụy Điển, từ năm 70 - Châu Á có Nhật bắt đầu nghiên cứu ứng dụng IR từ năm 1968 Trong công nghiệp người ta sử dụng đặc điểm khác robot để giúp cho việc nhận xét dễ dàng Có yếu tố để phân loại robot sau: - Theo dạng hình học khơng gian hoạt động - Theo hệ robot - Theo điều khiển - Theo nguồn dẫn động Đến giới có khoảng 200 cơng ty sản xuất IR số có 80 cơng ty Nhật, 90 công ty nước Tây Âu, 30 công ty Mỹ số công ty Nga, Sec… Theo chủng loại, mức độ điều khiển khả nhận biết thông tin tay máy người máy sản xuất giới phân loại IR thành hệ sau: Thế hệ 1: Thế hệ có kiểu điều khiển theo chu trình dạng chương trình cứng khơng có khả nhận biết thơng tin Thế hệ 2: Thế hệ có kiểu điều khiển theo chu kỳ dạng chương trình mềm bước đầu đầu có khả nhận biết thơng tin Thế hệ 3: Thế hệ có kiểu điều khiển dạng tinh khơn, có khả nhận biết thơng tin bước đầu có số chức lý trí người Sự xuất robot gia tăng vai trò chúng sản xuất xã hội loài người làm xuất ngành khoa học ngành robot học (Robotic) Trên giới nhiều nước xuất viện nghiên cứu riêng robot Ở Việt Nam, từ năm thập kỷ 80 có viện nghiên cứu robot Trong thời kỳ xa xưa để vận chuyển đồ vật nặng ơng cha ta cần nhiều nhân lực vận chuyển đồ vật khỏi vị trí ban đầu Nhưng với đời sống đại nhu cầu người nhà nghiên cứu chế tạo nhiều robot để giúp người đỡ tốn sức lực đỡ tốn nhiều nhân công - Robot điều khiển sóng NRF24L01 dễ sử dụng thuận tiện cho người bước chân vào thiết kế lập trình - Robot điều khiển sóng NRF24L01 giúp nhiều cải thiện độ chuẩn xác cao làm việc với tốc độ vượt trội - NRF24L01+ thu phát 2.4GHz chip đơn với công cụ giao thức băng tần sở nhúng (Enhanced ShockBurst ™), thích hợp cho ứng dụng khơng dây cơng suất cực thấp NRF24L01 + thiết kế để hoạt động dải tần ISM rộng khắp giới với tốc độ 2.400 - 2.4835GHz 1.2 Một số loại Robot thị trường Robot ngày không phương thức di chuyển đại, tiên tiến mà phần thiếu công nghiệp, Y học Nhu cầu sử dụng Robot lớn kéo theo cạnh tranh hãng robot tiếng Trên thị trường có nhiều thương hiệu sản xuất phân chia theo loại khác để phục vụ nhu cầu khác * Phân loại robot theo công dụng: - Robot sửa chữa oto: Loại chuyên sửa nhằm mục đích giảm thiểu thời gian, tiêu hao nhân lực - Robot y tế: Loại chun làm cơng việc mà người khó xử lý - Robot lau nhà: Loại thường dùng cho hộ gia đình, giúp bà mẹ có thời gian chăm làm công việc khác - Robot lắp ráp phận: loại chuyên lắp ráp phận nặng khó thực hiện, nguy hiểm đến thân thể … 1.3 Đề xuất hệ thống Robot Với kiến thức tảng có sẵn áp dụng học trình học đại học em muốn kế thừa phát huy để chế tạo mơ hình Robot * Những ý tưởng đề xuất đem lại: - Chi phí rẻ so với thị trường - Đảm bảo an toàn có tính tương tự Robot sử dụng thị trường - Dễ dàng sửa chữa bảo dưỡng 1.4 Thực đề tài a) Mục tiêu nghiên cứu - Thiết kế, chế tạo thử nghiệm mạch điều khiển sử dụng IC PIC18F46K22 b) Đối tượng nghiên cứu - Mơ hình điều khiển Robot sóng Radio Frequency c) Phạm vi nghiên cứu - Phịng thí nghiệm d) Phương pháp nghiên cứu - Phân tích, tổng hợp lí thuyết - Chế tạo thực nghiệm 4.2 Kết vận hành * Sau hoàn thành bước kiểm tra khơng có lỗi phát sinh ta bắt đầu tiến hành thử nghiệm Robot theo trường hợp - Điều khiển Robot chạy tay: Điều khiển Robot tiến, lùi, trái, phải Hình 4.1: Bàn phím HMI điều khiển Robot chạy tay Bảng 4.1: Các phím điều khiển Robot chạy tay Stt Phím Chức Khởi động Robot 2 Tiến thẳng Rẽ trái Dừng Rẽ phải Lùi 37 - Điều khiển Robot chạy tự động: Điều khiển Robot chạy tự động Hình 4.2: Bàn phím HMI điều khiển Robot chạy Tự động Bảng 4.2: Các phím điều khiển Robot chạy tự động Stt Phím Chức L Start C Stop * Kết đạt được: - Xe chạy tốt chế độ điều khiển tay tự động - Ở chế độ điều khiển tay xe đáp ứng phím bấm nhanh - Ở chế độ tự động xe có khả chạy đến vị trí cần đặt dị đường ổn định - Khả quay trái, quay phải robot ổn định xác - Điều khiển Robot tiến thắng, lùi thẳng, rẽ trái, rẽ phải theo phím HMI kết qua thu đề 38 KẾT LUẬN, KIẾN NGHỊ Kết luận Sau thực xong nội dung nghiên cứu đề tài, em rút số kết luận sau: Phân tích hệ thống Lập trình cho Robot Tính toán, lựa chọn thiết bị điều khiển Thiết kế giao diện HMI Thiết kế mạch điều khiển Robot Kiến nghị Cần tiếp tục nghiên cứu để hồn thiện tối ưu cho mơ hình Robot Sớm đưa kết nghiên cứu vào ứng dụng thực tế * Những hạn chế đề tài: - Hạn chế mặt thời gian nên mô hình robot chưa đạt thẩm mỹ khí tối ưu lập trình - Hạn chế mặt tài nên chưa trang bị thiết bị đáp ứng điều khiển phức tạp, yêu cầu độ xác cao * Hướng phát triển đề tài: - Để robot hoạt động tốt khả linh hoạt ta dùng loại vi điều khiển cao cấp ví dụ dsPic, có nhiều module nên có khả thực nhiều việc - Dùng camera để quan sát giám sát dễ dàng hơn, nhằm much đích thám hiểm nơi mà người khó đến - Tăng khoảng cách truyền thiết bị khác Thêm số module GPS, la bàn số để xác định xác khoảng cách, tốc độ, gia tốc hướng robot cách dễ dàng - Thêm cấu khí cấu gắp vật để robot sử dụng nhiều việc - Với hướng phát triển hi vọng robot có ứng dụng cao thực tế trình tìm kiếm người bị nạn, thám nơi có thời tiết khí hậu khắc nghiệt 39 PHỤ LỤC Viết chương trình Chương trình điều khiển robot * Chương trình thiết lập khai báo biến 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 union rrc_set // RRC setup { uint8_t byte; struct rrcsetbits union rrc_sta // RRC status { uint8_t byte; struct rrcstabits { unsigned rrc_1ms unsigned rrc_10ms unsigned unsigned unsigned unsigned RrcStop unsigned RrcRun unsigned RrcAutoOperation } bits; 1; 1; 1; 1; 1; 1; 1; 1; }; union rrc_temp // RRC Co Dem phu tro { uint16_t word; struct rrctempbits { unsigned CongTacVaCham 1; unsigned CoVatCan 1; unsigned ViTriTrai 1; unsigned ViTriPhai 1; unsigned unsigned unsigned unsigned DanDuongTrai DanDuongGiua DanDuongPhai TTDung 1; 1; 1; 1; unsigned unsigned unsigned unsigned TTTienThang TTTienPhai TTTienTrai TTLuiThang 1; 1; 1; 1; TreChuyenTT CoHangLuu LenhChayTDLuu ViTriBPDLuu 1; 1; 1; 1; unsigned unsigned unsigned unsigned } bits; }; 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 union rrc_inp // RRC input { uint8_t byte; struct rrcinpbits { unsigned di0 unsigned di1 unsigned di2 unsigned di3 unsigned unsigned unsigned unsigned } bits; di4 di5 di6 di7 }; union rrc_outp // RRC output { uint8_t byte; struct rrcoutpbits { unsigned do0 unsigned do1 unsigned do2 unsigned do3 unsigned unsigned unsigned unsigned } bits; do4 do5 do6 do7 }; union Rb_StaL // Robot status { uint8_t byte; struct RbStaLbits { unsigned ViTri unsigned ViTriBPD unsigned TTChayDung unsigned CoHang } bits; }; union Rb_StaH // Robot status union Rb_CtrL // Robot Control { uint8_t byte; struct RbCtr1bits { unsigned LenhTienThang unsigned LenhTienTrai unsigned LenhTienPhai unsigned LenhLuiThang 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 1; 1; 1; 1; 1; 1; 1; 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 unsigned unsigned unsigned unsigned } bits; LenhLuiTrai LenhLuiPhai LenhDung LenhChayTD 1; 1; 1; 1; }; union Rb_CtrH // Robot Control struct rrcdat { union rrc_set rrc_set; union rrc_sta rrc_sta; union rrc_temp rrc_temp; union rrc_inp rrc_inp; union rrc_outp rrc_outp; union Rb_StaL Rb_StaL, Rb_StaLSave; union Rb_StaH Rb_StaH, Rb_StaHSave; union Rb_CtrL Rb_CtrL, Rb_CtrLSave; union Rb_CtrH Rb_CtrH, Rb_CtrHSave; // Bien trang thai sensor uint8_t BienBoLocCoHang, BienCongTacVaCham, BienBoLocCoVatCan; uint8_t BienBoLocDanDuongTrai, BienBoLocDanDuongGiua, BienBoLocDanDuon gPhai; 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 uint8_t BienBoLocViTriTrai, BienBoLocViTriPhai; // Bien tre chuyen trang thai uint8_t BienTreChuyenTT; }; #define #define #define #define #define #define #define #define #define #define #define #define void void void void void void void MTA_SetLow() DO0_SetLow() MTA_SetHigh() DO0_SetHigh() MTB_SetLow() DO1_SetLow() MTB_SetHigh() DO1_SetHigh() MTC_SetLow() DO2_SetLow() MTC_SetHigh() DO2_SetHigh() MTD_SetLow() DO3_SetLow() MTD_SetHigh() DO3_SetHigh() LedXep_SetLow() DO4_SetLow() LedXep_SetHigh() DO4_SetHigh() LedDo_SetLow() DO5_SetLow() LedDo_SetHigh()DO5_SetHigh() RrcDefaultSetup(void); RrcInitialize(void); RrcBoost(void); RrcState(void); RrcControl(void); HamDemViTri(void); RrcVarIndicator(void); * Chương trình RrcState(void) (Cài đặt trạng thái Robot) void RrcState(void) { uint8_t i = 0; rrc_dat.rrc_inp.byte = 0; if(LOAD_GetValue()) rrc_dat.rrc_inp.bits.di0 = 1; if(ISPL_GetValue()) rrc_dat.rrc_inp.bits.di1 = 1; 10 if(ISDL_GetValue()) 11 rrc_dat.rrc_inp.bits.di2 = 1; 12 if(ISDC_GetValue()) 13 rrc_dat.rrc_inp.bits.di3 = 1; 14 if(ISDR_GetValue()) 15 rrc_dat.rrc_inp.bits.di4 = 1; 16 if(ISPR_GetValue()) 17 rrc_dat.rrc_inp.bits.di5 = 1; 18 if(SWC_GetValue()) 19 rrc_dat.rrc_inp.bits.di6 = 1; 20 if(ISN_GetValue()) 21 rrc_dat.rrc_inp.bits.di7 = 1; 22 // Cam bien co hang 23 for( i = 0; i < 20; i ++) 24 { 25 if(!LOAD_GetValue()) 26 { 27 rrc_dat.BienBoLocCoHang += 1; 28 } 29 else 30 { 31 if(rrc_dat.BienBoLocCoHang > 0) 32 { 33 rrc_dat.BienBoLocCoHang -= 1; 34 } 35 } 36 } 37 if(rrc_dat.BienBoLocCoHang >= 10) 38 { 39 rrc_dat.Rb_StaL.bits.CoHang = 1; 40 } 41 else 42 { 43 rrc_dat.Rb_StaL.bits.CoHang = 0; 44 } 45 // Cam bien bao vi tri trai 46 for( i = 0; i < 20; i ++) 47 { 48 if(!ISPL_GetValue()) 49 { 50 rrc_dat.BienBoLocViTriTrai += 1; 51 } 52 else 53 { 54 if(rrc_dat.BienBoLocViTriTrai > 0) 55 { 56 rrc_dat.BienBoLocViTriTrai -= 1; 57 } 58 } 59 } 60 if(rrc_dat.BienBoLocViTriTrai >= 10) 61 { 62 rrc_dat.rrc_temp.bits.ViTriTrai = 1; 63 } 64 else 65 { 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 rrc_dat.rrc_temp.bits.ViTriTrai = 0; } // Mat dan trai for( i = 0; i < 20; i ++) { if(!ISDL_GetValue()) { rrc_dat.BienBoLocDanDuongTrai += 1; } else { if(rrc_dat.BienBoLocDanDuongTrai > 0) { rrc_dat.BienBoLocDanDuongTrai -= 1; } } } if(rrc_dat.BienBoLocDanDuongTrai >= 10) { rrc_dat.rrc_temp.bits.DanDuongTrai = 1; } else { rrc_dat.rrc_temp.bits.DanDuongTrai = 0; } // Mat dan giua for( i = 0; i < 20; i ++) { if(!ISDC_GetValue()) { rrc_dat.BienBoLocDanDuongGiua += 1; } else { if(rrc_dat.BienBoLocDanDuongGiua > 0) { rrc_dat.BienBoLocDanDuongGiua -= 1; } } } if(rrc_dat.BienBoLocDanDuongGiua >= 10) { rrc_dat.rrc_temp.bits.DanDuongGiua = 1; } else { rrc_dat.rrc_temp.bits.DanDuongGiua = 0; } // Cam bien bao vi tri phai for( i = 0; i < 20; i ++) { if(!ISDR_GetValue()) { rrc_dat.BienBoLocDanDuongPhai += 1; } else { if(rrc_dat.BienBoLocDanDuongPhai > 0) { rrc_dat.BienBoLocDanDuongPhai -= 1; } } } if(rrc_dat.BienBoLocDanDuongPhai >= 10) { rrc_dat.rrc_temp.bits.DanDuongPhai = 1; } else { 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 rrc_dat.rrc_temp.bits.DanDuongPhai = 0; } // Mat dan phai for( i = 0; i < 20; i ++) { if(!ISPR_GetValue()) { rrc_dat.BienBoLocViTriPhai += 1; } else { if(rrc_dat.BienBoLocViTriPhai > 0) { rrc_dat.BienBoLocViTriPhai -= 1; } } } if(rrc_dat.BienBoLocViTriPhai >= 10) { rrc_dat.rrc_temp.bits.ViTriPhai = 1; } else { rrc_dat.rrc_temp.bits.ViTriPhai = 0; } // Cong tac va cham for( i = 0; i < 20; i ++) { if(SWC_GetValue()) { rrc_dat.BienCongTacVaCham += 1; } else { if(rrc_dat.BienCongTacVaCham > 0) { rrc_dat.BienCongTacVaCham -= 1; } } } if(rrc_dat.BienCongTacVaCham >= 10) { rrc_dat.rrc_temp.bits.CongTacVaCham = 1; } else { rrc_dat.rrc_temp.bits.CongTacVaCham = 0; } // Clock 1ms if(rrc_dat.rrc_sta.bits.rrc_1ms) { rrc_dat.rrc_sta.bits.rrc_1ms = 0; } // Clock 10ms if(rrc_dat.rrc_sta.bits.rrc_10ms) { rrc_dat.rrc_sta.bits.rrc_10ms = 0; if(rrc_dat.Rb_CtrL.bits.LenhChayTD) { if(++rrc_dat.BienTreLenhChayTD > 50) { rrc_dat.BienTreLenhChayTD = 0; rrc_dat.Rb_CtrL.bits.LenhChayTD = 0; } } else { rrc_dat.BienTreLenhChayTD = 0; } 204 205 206 207 208 209 210 211 212 213 214 215 if(rrc_dat.rrc_temp.bits.TreRaViTriBPD) { if(++rrc_dat.BienTreRaViTriBPD > 50) { rrc_dat.BienTreRaViTriBPD = 0; rrc_dat.rrc_temp.bits.TreRaViTriBPD = 0; } } else { rrc_dat.BienTreRaViTriBPD = 0; } * Chương trình RrcState(void)(quét trạng thái) if(rrc_dat.rrc_temp.bits.ViTriTrai && rrc_dat.rrc_temp.bits.ViTriPhai) { if(!rrc_dat.rrc_temp.bits.TreRaViTriBPD) { rrc_dat.Rb_StaL.bits.ViTriBPD = 1; } } if(rrc_dat.Rb_StaL.bits.ViTriBPD) { 10 if(rrc_dat.Rb_CtrL.bits.LenhChayTD) 11 { 12 rrc_dat.Rb_StaL.bits.ViTriBPD = 0; 13 rrc_dat.rrc_temp.bits.TreRaViTriBPD = 1; 14 } * Chương trình RrcState(void)(quét điều khiển) if(rrc_dat.rrc_temp.bits.CongTacVaCham) { MenuClearLenhRobot(); rrc_dat.Rb_CtrL.bits.LenhDung = 1; rrc_dat.Rb_StaL.bits.ViTri = 0; rrc_dat.Rb_StaL.bits.ViTriBPD = 0; MenuClearAll(); menu_dat.menu_sta.bits.RrcManualOperation = 0; rrc_dat.rrc_sta.bits.RrcAutoOperation = 0; 10 } 11 if(menu_dat.menu_sta.bits.RrcManualOperation) 12 { 13 if(HmiCursorPositions == 1) 14 { 15 ChuongTrinhLaiTuDong(); 16 } 17 } 18 else if(rrc_dat.rrc_sta.bits.RrcAutoOperation) 19 { 20 ChuongTrinhLaiTuDong(); 21 } 22 else 23 { 24 MenuClearLenhRobot(); 25 rrc_dat.Rb_CtrL.bits.LenhDung = 1; 26 rrc_dat.Rb_StaL.bits.ViTri = 0; 27 rrc_dat.Rb_StaL.bits.ViTriBPD = 0; 28 } 29 if(!rrc_dat.rrc_temp.bits.ViTriBPDLuu && rrc_dat.Rb_StaL.bits.ViTriBPD ) 30 { 31 32 33 ChuongTrinhDemViTri(); } if(rrc_dat.rrc_temp.bits.ViTriBPDLuu && !rrc_dat.Rb_StaL.bits.ViTriBPD ) 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 { ChuongTrinhDemViTri(); } if(rrc_dat.Rb_CtrL.bits.LenhTienThang || \ rrc_dat.Rb_CtrL.bits.LenhTienPhai || \ rrc_dat.Rb_CtrL.bits.LenhTienTrai || \ rrc_dat.Rb_CtrL.bits.LenhLuiThang || \ rrc_dat.Rb_CtrL.bits.LenhLuiPhai || \ rrc_dat.Rb_CtrL.bits.LenhLuiTrai) { rrc_dat.Rb_StaL.bits.TTChayDung = 1; } else { rrc_dat.Rb_StaL.bits.TTChayDung = 0; } // Luu co if(rrc_dat.Rb_StaL.bits.ViTriBPD) { rrc_dat.rrc_temp.bits.ViTriBPDLuu = 1; } else { rrc_dat.rrc_temp.bits.ViTriBPDLuu = 0; } * Chương trình RrcState(void)( đếm vị trí) void ChuongTrinhDemViTri(void) { if((rrc_dat.Rb_CtrL.bits.LenhChayTD && !rrc_dat.rrc_temp.bits.LenhChay TDLuu) || (rrc_dat.Rb_StaL.bits.ViTriBPD && !rrc_dat.rrc_temp.bits.ViTriBPDLuu)) 10 11 12 13 14 15 16 17 18 19 20 21 22 23 { rrc_dat.Rb_StaL.bits.ViTri += 1; if(rrc_dat.Rb_StaL.bits.ViTri == 8) // Bo { rrc_dat.Rb_StaL.bits.ViTri = 10; } else if(rrc_dat.Rb_StaL.bits.ViTri == 12) { rrc_dat.Rb_StaL.bits.ViTri = 14; } else if(rrc_dat.Rb_StaL.bits.ViTri == 22) { rrc_dat.Rb_StaL.bits.ViTri = 24; } else if(rrc_dat.Rb_StaL.bits.ViTri == 26) { rrc_dat.Rb_StaL.bits.ViTri = 28; } else if(rrc_dat.Rb_StaL.bits.ViTri >= 28) hat 24 25 26 27 28 29 30 31 32 { rrc_dat.Rb_StaL.bits.ViTri = 1; } } // Co luu if(rrc_dat.Rb_CtrL.bits.LenhChayTD) { rrc_dat.rrc_temp.bits.LenhChayTDLuu = 1; } vao Gara so // Bo vao Gara so // Bo vao Gara so // Bo vao Gara so // Tro lai vi tri xuat p 33 34 35 36 37 38 39 40 41 42 43 44 45 } else { rrc_dat.rrc_temp.bits.LenhChayTDLuu = 0; } if(rrc_dat.Rb_StaL.bits.ViTriBPD) { rrc_dat.rrc_temp.bits.ViTriBPDLuu = 1; } else { rrc_dat.rrc_temp.bits.ViTriBPDLuu = 0; } * Chương trình RrcState(void)( lái tự động) void ChuongTrinhLaiTuDong(void) { if(rrc_dat.Rb_StaL.bits.CoHang && !rrc_dat.Rb_StaL.bits.ViTriBPD) { if(!rrc_dat.rrc_temp.bits.DanDuongTrai && rrc_dat.rrc_temp.bits.Da nDuongGiua && !rrc_dat.rrc_temp.bits.DanDuongPhai) { MenuClearLenhRobot(); rrc_dat.Rb_CtrL.bits.LenhTienThang = 1; } 10 else if(rrc_dat.rrc_temp.bits.DanDuongTrai && rrc_dat.rrc_temp.bit s.DanDuongGiua && !rrc_dat.rrc_temp.bits.DanDuongPhai) 11 { 12 MenuClearLenhRobot(); 13 rrc_dat.Rb_CtrL.bits.LenhTienPhai = 1; 14 } 15 else if(rrc_dat.rrc_temp.bits.DanDuongTrai && !rrc_dat.rrc_temp.bi ts.DanDuongGiua && !rrc_dat.rrc_temp.bits.DanDuongPhai) 16 { 17 MenuClearLenhRobot(); 18 rrc_dat.Rb_CtrL.bits.LenhTienPhai = 1; 19 } 20 else if(!rrc_dat.rrc_temp.bits.DanDuongTrai && rrc_dat.rrc_temp.bi ts.DanDuongGiua && rrc_dat.rrc_temp.bits.DanDuongPhai) 21 { 22 MenuClearLenhRobot(); 23 rrc_dat.Rb_CtrL.bits.LenhTienTrai = 1; 24 } 25 else if(!rrc_dat.rrc_temp.bits.DanDuongTrai && !rrc_dat.rrc_temp.b its.DanDuongGiua && rrc_dat.rrc_temp.bits.DanDuongPhai) 26 { 27 MenuClearLenhRobot(); 28 rrc_dat.Rb_CtrL.bits.LenhTienTrai = 1; 29 } 30 else if(!rrc_dat.rrc_temp.bits.DanDuongTrai && !rrc_dat.rrc_temp.b its.DanDuongGiua && !rrc_dat.rrc_temp.bits.DanDuongPhai) 31 { 32 MenuClearLenhRobot(); 33 rrc_dat.Rb_CtrL.bits.LenhLuiThang = 1; 34 } 35 else if(rrc_dat.rrc_temp.bits.DanDuongTrai && rrc_dat.rrc_temp.bit s.DanDuongGiua && rrc_dat.rrc_temp.bits.DanDuongPhai) 36 { 37 MenuClearLenhRobot(); 38 rrc_dat.Rb_CtrL.bits.LenhTienThang = 1; 39 } 40 else 41 { 42 MenuClearLenhRobot(); 43 rrc_dat.Rb_CtrL.bits.LenhDung = 1; 44 } 45 46 47 48 49 50 51 52 53 54 55 56 } else { MenuClearLenhRobot(); rrc_dat.Rb_CtrL.bits.LenhDung = 1; } if((rrc_dat.Rb_CtrL.byte != rrc_dat.Rb_CtrLSave2.byte) || \ (rrc_dat.Rb_CtrH.byte != rrc_dat.Rb_CtrHSave2.byte)) { rrc_dat.Rb_CtrLSave2.byte = rrc_dat.Rb_CtrL.byte; rrc_dat.Rb_CtrHSave2.byte = rrc_dat.Rb_CtrH.byte; } * Chương trình RrcControl(void) (quét trạng thái điều khiển) void RrcControl(void) { if(rrc_dat.Rb_CtrL.bits.LenhTienThang) { MTA0_SetHigh(); MTB0_SetLow(); MTC0_SetHigh(); MTD0_SetLow(); MTA1_SetHigh(); 10 MTB1_SetLow(); 11 MTC1_SetHigh(); 12 MTD1_SetLow(); 13 } 14 else if(rrc_dat.Rb_CtrL.bits.LenhTienPhai) 15 { 16 MTA0_SetHigh(); 17 MTB0_SetLow(); 18 MTC0_SetLow(); 19 MTD0_SetLow(); 20 MTA1_SetLow(); 21 MTB1_SetLow(); 22 MTC1_SetHigh(); 23 MTD1_SetLow(); 24 } 25 else if(rrc_dat.Rb_CtrL.bits.LenhTienTrai) 26 { 27 MTA0_SetLow(); 28 MTB0_SetLow(); 29 MTC0_SetHigh(); 30 MTD0_SetLow(); 31 MTA1_SetHigh(); 32 MTB1_SetLow(); 33 MTC1_SetLow(); 34 MTD1_SetLow(); 35 } 36 else if(rrc_dat.Rb_CtrL.bits.LenhLuiThang) 37 { 38 MTA0_SetLow(); 39 MTB0_SetHigh(); 40 MTC0_SetLow(); 41 MTD0_SetHigh(); 42 MTA1_SetLow(); 43 MTB1_SetHigh(); 44 MTC1_SetLow(); 45 MTD1_SetHigh(); 46 } 47 else if(rrc_dat.Rb_CtrL.bits.LenhLuiPhai) 48 { 49 MTA0_SetLow(); 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 } MTB0_SetLow(); MTC0_SetLow(); MTD0_SetHigh(); MTA1_SetLow(); MTB1_SetHigh(); MTC1_SetLow(); MTD1_SetLow(); } else if(rrc_dat.Rb_CtrL.bits.LenhLuiTrai) { MTA0_SetLow(); MTB0_SetHigh(); MTC0_SetLow(); MTD0_SetLow(); MTA1_SetLow(); MTB1_SetLow(); MTC1_SetLow(); MTD1_SetHigh(); } else if(rrc_dat.Rb_CtrL.bits.LenhDung) { MTA0_SetLow(); MTB0_SetLow(); MTC0_SetLow(); MTD0_SetLow(); MTA1_SetLow(); MTB1_SetLow(); MTC1_SetLow(); MTD1_SetLow(); } else // dung lai { MTA0_SetLow(); MTB0_SetLow(); MTC0_SetLow(); MTD0_SetLow(); MTA1_SetLow(); MTB1_SetLow(); MTC1_SetLow(); MTD1_SetLow(); } rrc_dat.rrc_outp.byte = 0; if(MTA0_GetValue()) rrc_dat.rrc_outp.bits.do0 = 1; if(MTB0_GetValue()) rrc_dat.rrc_outp.bits.do1 = 1; if(MTC0_GetValue()) rrc_dat.rrc_outp.bits.do2 = 1; if(MTD0_GetValue()) rrc_dat.rrc_outp.bits.do3 = 1; if(MTA1_GetValue()) rrc_dat.rrc_outp.bits.do4 = 1; if(MTB1_GetValue()) rrc_dat.rrc_outp.bits.do5 = 1; if(MTC1_GetValue()) rrc_dat.rrc_outp.bits.do6 = 1; if(MTD1_GetValue()) rrc_dat.rrc_outp.bits.do7 = 1; TÀI LIỆU THAM KHẢO Tiếng việt Nguyễn Mạnh Tiến (2007), Điều khiển robot công nghiệp, NXB Khoa học kỹ thuật Nguyễn Thúy Vân (1999), Kỹ thuật số, NXB Khoa học kỹ thuật Website https://www.vinabook.com/dieu-khien-robot-cong-nghiep-p28423.html 2.https://lic.haui.edu.vn/vn/gioi-thieu-sach-moi/ky-thuat-so-nguyen-thuyvan/67193