Các số liệu ban đầu: Mô hình dây chuyền phân loại đai ốc ứng dụng xử lý ảnh sử dụng động cơ DC 12V, khung xây dựng bằng nhôm định hình, camera sử dụng là loại webcam C270, vi điều khiển
Trang 1BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
-
ĐỒ ÁN TỐT NGHIỆP
NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG
ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG DÂY CHUYỀN PHÂN LOẠI ĐAI ỐC ỨNG DỤNG XỬ LÝ ẢNH
GVHD: THS VÕ ĐỨC DŨNG SVTH: NGUYỄN VĂN TÀI 15141273 NGUYỄN MINH ĐỨC 15141135
Tp Hồ Chí Minh - 6/2019
Trang 3i
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
Hệ đào tạo: Đại học chính quy Mã hệ: 1
I TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG DÂY CHUYỀN PHÂN LOẠI
ĐAI ỐC ỨNG DỤNG XỬ LÝ ẢNH
II NHIỆM VỤ
1 Các số liệu ban đầu:
Mô hình dây chuyền phân loại đai ốc ứng dụng xử lý ảnh sử dụng động cơ DC 12V, khung xây dựng bằng nhôm định hình, camera sử dụng là loại webcam C270,
vi điều khiển sử dụng STM32F103C8T6, phần xử lý ảnh dùng máy vi tính Giao tiếp giữa máy tính và vi điều khiển qua IC PL2303 dựa trên giao tiếp UART
Chương trình xử lý ảnh trên máy tính viết bằng ngôn ngữ C++ dựa trên bộ thư viện
mã nguồn mở OpenCV và được tạo giao diện bằng phần mềm QT Creator
2 Nội dung thực hiện:
- Tìm hiểu cách thức hoạt động của các hệ thống phân loại dùng xử lý ảnh
- Tìm hiểu chuẩn giao tiếp UART, động cơ DC, cảm biến hồng ngoại, encoder
- Tìm hiểu về vi điều khiển STM32F103C8T6
- Thiết kế và thi công mô hình dây chuyền phân loại
- Thiết kế và thi công mạch điện cho hệ thống
- Viết chương trình xử lý ảnh trên máy tính dùng phần mềm QT Creator
- Viết chương trình điều khiển cho vi điều khiển STM32F103C8T6
- Chạy thử nghiệm mô hình, chỉnh sửa và hoàn thiện hệ thống
- Thực hiện viết luận văn báo cáo
- Tiến hành báo cáo đề tài tốt nghiệp
III NGÀY GIAO NHIỆM VỤ: 18/2/2019
IV NGÀY HOÀN THÀNH NHIỆM VỤ: 20/6/2019
V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Võ Đức Dũng
CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
Trang 4TRƯỜ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
Tp HCM, ngày 18 tháng 02 năm 2019
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP
Họ tên sinh viên 1: Nguyễn Minh Đức Lớp: 15141DT2C MSSV: 15141135
Họ tên sinh viên 2: Nguyễn Văn Tài Lớp: 15141DT2C MSSV: 15141273
Tên đề tài: THIẾT KẾ VÀ THI CÔNG DÂY CHUYỀN PHÂN LOẠI
- Gặp GVHD để nghe phổ biến yêu cầu làm đồ
án, tiến hành chọn đề tài, GVHD tiến hành xét duyệt đề tài
Trang 5- Tiến hành thi công mạch
- Kiểm tra mạch thi công
- Nộp quyển báo cáo và báo cáo đề tài
- Thiết kế Slide báo cáo
GV HƯỚNG DẪN (Ký và ghi rõ họ và tên)
Trang 6LỜI CAM ĐOAN
Đề tài này là do nhóm tự thực hiện, dựa vào một số đề tài trước đó cũng như các tài liệu tham khảo và không sao chép từ tài liệu hay công trình đã có trước đó
TP Hồ Chí Minh, ngày 20/6/2019 Người thực hiện đề tài
Nguyễn Văn Tài Nguyễn Minh Đức
Trang 7v
LỜI CẢM ƠN
Lời đầu tiên, nhóm thực hiện đề tài xin gửi lời cảm ơn chân thành đến thầy
Võ Đức Dũng - giảng viên khoa Điện-Điện tử, đã theo sát hỗ trợ và hướng dẫn nhóm một cách chi tiết trong quá trình thực hiện đề tài Thầy luôn hỗ trợ hết mình, giải đáp thắc mắc, chỉ ra sai sót cũng như gợi ý những phương án thực hiện sao cho khả thi và
dễ tiếp cận nhất
Trong quá trình thực hiện Đồ án tốt ngiệp chúng em đã nhận được sự giúp đỡ
và ủng hộ của các thầy, cô trong khoa Điện-Điện tử Sự hỗ trợ của các thầy, cô đã góp phần không nhỏ giúp chúng em hoàn thành đề tài này
Nhóm đề tài cũng xin cảm ơn các bạn sinh viên trong khoa Điện-Điện tử đã nhiệt tình giúp đỡ, hỗ trợ nhóm, chia sẻ kinh nghiệm Những đóng góp của các bạn luôn được nhóm tiếp nhận và xem xét kĩ lưỡng
Cuối cùng, nhóm xin cảm ơn chân thành và sâu sắc đến những người thân đặc biệt là quý phụ huynh - những người luôn bên cạnh hỗ trợ hết mình về tài chính cũng như tinh thần trong suốt quá trình học tập cũng như thực hiện đề tài này
Dù đã cố gắng và nỗ lực tuy nhiên với những hạn chế về kiến thức và kinh nghiệm, đề tài không thể tránh được còn nhiều thiếu sót Nhóm mong nhận được sự đóng góp, nhận xét để của các thầy, cô và bạn bè để có thể hoàn thiện đề tài hơn Xin chân thành cảm ơn!
Người thực hiện đề tài
Nguyễn Văn Tài Nguyễn Minh Đức
Trang 8MỤC LỤC
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP ii
LỜI CAM ĐOAN iv
LỜI CẢM ƠN v
LIỆT KÊ HÌNH viii
LIỆT KÊ BẢNG x
TÓM TẮT xi
Chương 1 TỔNG QUAN 1
1.1 ĐẶT VẤN ĐỀ 1
1.2 MỤC TIÊU VÀ GIỚI HẠN 2
1.3 NỘI DUNG NGHIÊN CỨU 2
1.4 GIỚI HẠN 3
1.5 BỐ CỤC 3
Chương 2 CƠ SỞ LÝ THUYẾT 5
2.1 TỔNG QUAN VỀ XỬ LÝ ẢNH 5
2.1.1 Giới thiệu về ảnh số 5
2.1.2 Phương pháp thu nhận ảnh 6
2.1.3 Giới thiệu về thư viện OpenCV và camera Logitech C270 6
2.1.4 Điều chỉnh độ sáng và độ tương phản 7
2.1.5 Lọc nhiễu ảnh 8
2.2 TÌM ĐƯỜNG BIÊN CỦA ẢNH 13
2.3 GIAO TIẾP UART 15
2.4 VI ĐIỀU KHIỂN STM32F103C8T6 17
2.4.1 Tổng quan 17
2.4.2 Cấu trúc hệ thống 18
2.4.3 Tìm hiểu GPIO 21
2.4.4 Timer và PWM 23
2.5 ĐỘNG CƠ DC 25
2.6 ENCODER 26
2.7 CẢM BIẾN HỒNG NGOẠI 29
Chương 3 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG 31
3.1 THIẾT KẾ SƠ ĐỒ KHỐI 31
3.2 TÍNH TOÁN THIẾT KẾ MẠCH 32
3.2.1 Khối vi điều khiển và giao tiếp máy tính 32
Trang 9vii
3.2.2 Khối cảm biến và encoder 35
3.2.3 Khối công suất điều khiển tải 35
3.2.4 Khối nguồn 39
3.2.5 Mạch PCB 41
3.2.6 Sơ đồ nguyên lý toàn mạch 43
3.3 TÍNH TOÁN THIẾT KẾ MÔ HÌNH 44
3.3.1 Cơ cấu cấp phôi 44
3.3.2 Băng tải 46
3.3.3 Cơ cấu phân loại 46
3.3.4 Hộp điện 49
Chương 4 THI CÔNG HỆ THỐNG 50
4.1 GIỚI THIỆU 50
4.2 THI CÔNG MẠCH ĐIỆN 50
4.2.1 Linh kiện sử dụng trong mạch điện 50
4.2.2 Lắp ráp và kiểm tra mạch điện 51
4.3 THI CÔNG MÔ HÌNH 52
4.3.1 Vật liệu, linh kiện sử dụng 52
4.3.2 Các bước thi công 53
4.4 LẬP TRÌNH HỆ THỐNG 57
4.4.1 Lưu đồ giải thuật cho vi điều khiển 57
4.4.2 Lưu đồ giải thuật cho chương trình xử lý ảnh 63
4.4.3 Phần mềm QT Creator 65
4.4.4 Trình biên dịch Keil µVision 5 70
Chương 5 KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ 75
Chương 6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 81
6.1 KẾT LUẬN 81
6.2 HƯỚNG PHÁT TRIỂN 81
TÀI LIỆU THAM KHẢO 82
PHỤ LỤC 83
Trang 10LIỆT KÊ HÌNH
Hình 2 1 Các bước xử lý ảnh 5
Hình 2 2 Hình ảnh Webcam Logitech C270 7
Hình 2 3 Một mặt nạ lọc kích thước 3x3 9
Hình 2 4 Ví dụ về phần tử trung vị 10
Hình 2 5 Các hướng xét giá trị 15
Hình 2 6 Sơ đồ cấu trúc các khối của STM32F103C8T6 18
Hình 2 7 Sơ đồ nguồn xung clock của STM32F103C8T6 20
Hình 2 8 Thanh ghi cấu hình chức năng chân GPIO của port 22
Hình 2 9 Thanh ghi đọc giá trị ngõ vào 23
Hình 2 10 Thanh ghi chọn giá trị ngõ ra của port 23
Hình 2 11 Động cơ GA25 26
Hình 2 12 Đĩa encoder tương đối kiểu quay 28
Hình 2 13 Hình ảnh encoder quang 100 xung 28
Hình 2 14 Led phát hồng ngoại 29
Hình 2 15 Kí hiệu đi-ốt quang 29
Hình 2 16 Kí hiệu transistor quang 30
Hình 2 17 Cảm biến hồng ngoại E18-D80NK 30
Hình 3 1 Sơ đồ khối của hệ thống 31
Hình 3 2 Sơ đồ mạch vi điều khiển 33
Hình 3 3 Mạch chuyển USB UART PL2303 34
Hình 3 4 Cổng domino kết nối cảm biến và encoder 35
Hình 3 5 Sơ đồ kết nối cảm biến và encoder 35
Hình 3 6 Sơ đồ mạch công suất điều khiển động cơ DC dùng PWM 36
Hình 3 7 Sơ đồ mạch công suất điều khiển động cơ DC bằng relay 37
Hình 3 8 Sơ đồ mạch công suất điều khiển servo 38
Hình 3 9 Sơ đồ mạch công suất điều khiển led rọi 38
Hình 3 10 Sơ đồ mạch led báo trạng thái các tải 39
Hình 3 11 Sơ đồ mạch nguồn 41
Hình 3 12 Hình ảnh mạch PCB 41
Hình 3 13 Hình ảnh 3D của mạch in mặt trên 42
Hình 3 14 Hình ảnh 3D của mạch in nhìn nghiêng 42
Hình 3 15 Sơ đồ nguyên lý toàn mạch 43
Hình 3 16 Hình ảnh con lăn thiết kế 44
Hình 3 17 Hình ảnh bánh răng thiết kế 45
Hình 3 18 Mặt trước puly 46
Hình 3 19 Trục phụ của đĩa quay 47
Hình 3 20 Puly trục đĩa 48
Hình 3 21 Sơ đồ nối dây hộp điện 49
Trang 11ix
Hình 4 1 Mạch sau khi hàn linh kiện 51
Hình 4 2 Hình ảnh bánh răng thực tế 53
Hình 4 3 Hình ảnh cơ cấu cấp phôi sau khi thi công 53
Hình 4 4 Băng tải mặt bên 54
Hình 4 5 Băng tải mặt trên 54
Hình 4 6 Cảm biến hồng ngoại phát hiện phôi 55
Hình 4 7 Hộp camera và khung đĩa quay 55
Hình 4 8 Cơ cấu gạt phôi 56
Hình 4 9 Encoder và puly truyền động cho đĩa quay 56
Hình 4 10 Mô hình nhìn từ phía trước 57
Hình 4 11 Mô hình nhìn từ trên xuống 57
Hình 4 12 Lưu đồ chương trình chính 58
Hình 4 13 Lưu đồ hàm khởi tạo GPIO 59
Hình 4 14 Lưu đồ hàm khởi tạo UART 60
Hình 4 15 Lưu đồ hàm xử lý PWM 61
Hình 4 16 Lưu đồ hàm điều khiển Servo 62
Hình 4 17 Lưu đồ hàm nhận dữ liệu 63
Hình 4 18 Lưu đồ chương trình chính xử lý ảnh 64
Hình 4 19 Cửa sổ làm việc của QT Creator 66
Hình 4 20 Giao diện khởi động QT Creator 67
Hình 4 21 Cửa sổ tạo New Project 67
Hình 4 22 Đặt tên và chọn đường dẫn lưu project 68
Hình 4 23 Giao diện chương trình sau khi tạo project mới 68
Hình 4 24 Thêm đường dẫn thư viện OpenCV vào project 69
Hình 4 25 Giao diện lập trình UI của QT Creator 69
Hình 4 26 Biểu tượng trình biên dịch Keil µVision 5 70
Hình 4 27 Giao diện của trình biên dịch Keil µVision 5 70
Hình 4 28 Thư viện cho STM32F1 71
Hình 4 29 Cây thư mục chứa project 71
Hình 4 30 Tạo project mới 72
Hình 4 31 Menu dùng để chọn chip STM32F103C8 72
Hình 4 32 Cửa sổ cấu hình cho project 73
Hình 4 33 Tạo thư mục main.c 74
Hình 4 34 Cây thư mục của project 74
Hình 5 1 Cấp nguồn cho mô hình 75
Hình 5 2 Giao diện chương trình xử lý ảnh trên máy tính 75
Hình 5 3 Đai ốc từ lồng cấp phôi rơi xuống băng tải 76
Hình 5 4 Đai ốc sau khi được chụp bởi camera 77
Hình 5 5 Các đai ốc từ băng tải tới đĩa phân loại 77
Hình 5 6 Thanh gạt đai ốc đạt yêu cầu 78
Trang 12Hình 5 7 Servo gạt vật không đạt yêu cầu 78
Hình 5 8 Các hình chụp được lưu lại trong thư mục 79
LIỆT KÊ BẢNG Bảng Trang Bảng 3 1 Bảng cấu hình chế độ nạp của vi điều khiển 33
Bảng 3 2 Điện áp hoạt động và dòng tiêu thụ của một số linh kiện 40
Bảng 4 1 Danh sách các linh kiện 50
Bảng 4 2 Các linh kiện, vật liệu được sử dụng trong mô hình 52
Trang 13xi
TÓM TẮT
Ứng dụng thị giác máy vào đời sống và sản xuất là một điều tất yếu hiện nay nhằm giúp tăng năng suất và đảm bảo sự tin cậy, chính vì vậy nhằm tiếp cận các kiến thức mới và theo kịp sự phát triển của kỹ thuật, nhóm quyết định thực hiện đề tài
“Thiết kế và thi công dây chuyền phân loại đai ốc ứng dụng xử lý ảnh”, đây là mô hình phân loại sản phẩm Hoạt động của mô hình dựa trên nguyên lý xử lý tín hiệu số (hình ảnh) với ngôn ngữ lập trình C++ và thư viện OpenCV nhằm phân biệt các đai
ốc không đúng kích thước, sau đó chuyển tín hiệu về cho mạch điện trung tâm xử lý điều khiển các cơ cấu chấp hành Mục tiêu của đề tài là thi công một mô hình dây chuyền có thể phân loại các đai ốc kích cỡ khác nhau Việc xử lý hình ảnh được máy tính đảm nhiệm nhằm đảm bảo tốc độ xử lý Chương trình xử lý được viết thành phần mềm có giao diện để trực quan và dễ quản lý
Trang 14Chương 1 TỔNG QUAN
1.1 ĐẶT VẤN ĐỀ
Công nghiệp ngày càng phát triển, các nhà máy được xây dựng khắp nơi Trong các nhà máy thì dây chuyền tự động hóa cũng ngày càng phổ biến, thay thế cho việc sử dụng nhân công, giảm công sức bỏ ra nhưng lại đạt được hiệu quả cao hơn Đi kèm với các dây truyền sản xuất tự động luôn là vấn đề phân loại sản phẩm Đây là vấn đề không mới và có mặt ở hầu hết mọi nhà máy nó không chỉ giúp tiết giảm nhân lực mà còn giúp đảm bảo chất lượng của sản phẩm trước khi xuất xưởng
Phân loại sản phẩm có nhiều cách, tùy vào yếu tố cần phân loại và sản phẩm mà
ta có thể chọn lựa cách thức phù hợp như phân loại theo kích thước, theo màu sắc, theo hình dạng, theo lỗi… Trong đó phân loại theo sản phẩm lỗi là phức tạp nhất tuy nhiên đây cũng là vấn đề xuất hiện ở tất cả các dây chuyền sản xuất Để có thể phân loại theo sản phẩm lỗi ta có thể sử dụng thị giác máy tính cụ thể là phương pháp xử lý hình ảnh, với phương pháp này có thể xử lý nhanh và chính xác các lỗi mà ngay cả mắt thường cũng khó nhận biết, với những sản phẩm nhiều chi tiết, các lỗi phức tạp thì ta cần kết hợp với các phương pháp như mạng nơ-ron, học máy… để xử lý đạt được hiệu quả [1-2]
Hiện nay đã có nhiều nghiên cứu về phân loại sản phẩm dùng thị giác máy mà cụ thể
là xử lý ảnh, các công ty cũng cho ra đời nhiều loại smart camera tích hơp sẵn bộ xử lý hình ảnh ứng dụng cho công nghiệp Tuy nhiên giá thành các camera này là rất cao và chỉ phù hợp cho các nhà máy lớn với những dây chuyền hiện đại Ngoài ra cũng đã có nhiều đề tài của sinh viên nghiên cứu về ứng dụng xử lý ảnh hoặc về điều khiển động
cơ, dây chuyền Phan Văn Phương và Trần Trí Tâm nghiên cứu đề tài “Ứng dụng xử lý ảnh cảnh báo tài xế ngủ gật” sử dụng thư viện OpenCV lập trình trên nền tảng Window
và Linux (kit Raspberry) để cảnh báo tài xế ngủ gật qua việc xử lý hình chụp để xác định tài xế nhắm hay mở mắt, có cảnh báo nếu tài xế ngủ gật [3] Phan Trọng Thuật và Nguyễn Văn Đúng thực hiện đề tài “Phân loại sản phẩm dùng camera” qua đó nghiên cứu các phương thức ứng dụng xử lý ảnh để phân loại đối tượng [4] Lê Quốc Nhật và Châu Thái Bảo thực hiện “Nhận dạng thứ tự màu cho cáp kết nối trong công nghiệp dùng xử lý ảnh”, sử dụng thư viện OpenCV và phần mềm Visual Studio 2013 (C++) để
Trang 15nhận diện thứ tự màu cho dây cáp kết nối, hệ thống có giao diện thống kê thông số màu, kiểm tra sai số so với màu chuẩn [5] Trần Thanh Sang và Trần Mạnh Hùng thực hiện
đề tài “Thiết kế hệ thống nhận dạng biển số xe” từ đó đưa ra những phương pháp phát hiện biển số xe dựa trên việc xử lý hình ảnh [6] Lê Doãn Thắng với đề tài “Thiết kế thi công bộ điều khiển máy chạy bộ điện” đã nghiên cứu kit STM32F103VET6 và sử dụng kit này để điều khiển tốc độ động cơ động cơ DC của máy chạy bộ [7]
Với mục đích nghiên cứu, học hỏi và áp dụng những kiến thức đã được học về xử lý ảnh, vi điều khiển, điện tử cơ bản…, chúng em quyết định thực hiện đề tài “Thiết kế và thi công dây chuyền phân loại đai ốc ứng dụng xử lý ảnh” Dây chuyền sử dụng vi điều khiển trung tâm là STM32F103C8T6, cảm biến hồng ngoại, động cơ DC, USB camera
để lấy ảnh, đèn led chiếu sáng mẫu, máy tính với hệ điều hành Window để xử lý ảnh sử dụng thư viện mã nguồn mở OpenCV Dây chuyền có thể phân loại các đai ốc bị sai kích thước, bị lệch tâm, bị méo Các thông số của dây chuyền có thể cài đặt và giám sát qua phần mềm trên máy tính Ưu điểm của việc sử dụng USB camera kết hợp máy tính cùng bộ xử lý dùng vi điều khiển là giá thành rẻ, nhỏ gọn, có thể thực hiện, vận hành và sửa chữa dễ dàng [8]
1.2 MỤC TIÊU VÀ GIỚI HẠN
Thiết kế và thi công một dây chuyền có thể phân loại đai ốc ứng dụng xử lý ảnh dùng thư viện mã nguồn mở OpenCV viết trên ngôn ngữ C++ Dây chuyền có thể phân loại các đai ốc bị sai kích thước, bị méo Các thông số của dây chuyền có thể cài đặt và giám sát qua phần mềm trên máy tính sử dụng hệ điều hành Window Máy tính sẽ giao tiếp với vi điều khiển thông qua giao tiếp UART
1.3 NỘI DUNG NGHIÊN CỨU
- Tìm hiểu cách thức hoạt động của các hệ thống phân loại dùng xử lý ảnh
- Tìm hiểu chuẩn giao tiếp UART, động cơ DC, cảm biến hồng ngoại, encoder
- Tìm hiểu về vi điều khiển STM32F103C8T6
- Thiết kế và thi công mô hình dây chuyền phân loại
- Thiết kế và thi công mạch điện cho hệ thống
- Viết chương trình xử lý ảnh trên máy tính dùng phần mềm QT Creator
- Viết chương trình điều khiển cho vi điều khiển STM32F103C8T6
Trang 16- Chạy thử nghiệm mô hình, chỉnh sửa và hoàn thiện hệ thống
- Thực hiện viết luận văn báo cáo
- Tiến hành báo cáo đề tài tốt nghiệp
- Dây chuyền chỉ dừng ở mức mô hình, kích thước nhỏ
- Dây chuyền sử dụng động cơ giảm tốc DC 12V
1.5 BỐ CỤC
Chương 1: TỔNG QUAN
Trình bày, đặt vấn đề dẫn nhập lý do chọn đề tài, mục tiêu, nội dung nghiên cứu, các giới hạn thông số và bố cục đồ án
Chương 2: CƠ SỞ LÝ THUYẾT
Giới thiệu các cơ sở lý thuyết gồm lý thuyết về xử lý ảnh, các linh kiện và thiết bị sử dụng để thiết kế hệ thống và trình bày các chuẩn truyền, giao thức
Chương 3: TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG
Thiết kế sơ đồ khối của hệ thống, đưa ra sơ đồ nguyên lí của các khối trong hệ thống
và thực hiện việc tính toán thiết kế
Chương 4: THI CÔNG HỆ THỐNG
Trình bày về thiết kế lưu đồ, đưa ra giải thuật và viết chương trình Quá trình thi công mạch điện, mô hình hệ thống hoàn chỉnh
Chương 5: KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ
Đưa ra kết quả đạt được sau khi thi công mô hình, rút ra những nhận xét, đánh giá toàn bộ hệ thống
Trang 17Chương 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Trình bày những kết luận về hệ thống những phần đã làm và chưa làm, đồng thời nêu
ra hướng phát triển cho hệ thống
Trang 18Chương 2 CƠ SỞ LÝ THUYẾT
2.1 TỔNG QUAN VỀ XỬ LÝ ẢNH
Xử lý ảnh là quá trình xử lý số tín hiệu ở đây là tín hiệu hình ảnh Hiện nay xử lý ảnh đang phát triển rất mạnh mẽ, vì ứng dụng của nó rất rộng và hữu ích bao gồm ở rất nhiều lĩnh vực: sản xuất, kinh tế, đời sống, y tế, quân sự… Chúng ta có thể chia xử lý ảnh thành bốn nhóm ứng với bốn lĩnh vực chính: xử lý nâng cao chất lượng ảnh, nhận dạng ảnh, truy vấn ảnh và nén ảnh Trong đề tài này sẽ tìm hiểu về lĩnh vực nhận dạng
ảnh Các bước cơ bản của xử lý ảnh như hình 2.1
2.1.1 Giới thiệu về ảnh số
Ảnh số là tập hợp các điểm ảnh (Pixel) có giá trị mức xám xác định dùng để mô
tả ảnh gần với ảnh thật, trong đề tài này chỉ xét đến ảnh 2 chiều, một ảnh sau khi được
số hóa có thể được mô tả như một ma trận điểm A[M, N] trong không gian hai chiều trong đó M và N là số cột và số hàng của các điểm ảnh Một điểm ảnh bất kì lúc này sẽ
có tọa độ A(x, y) với 0=<x<=M-1 và 0=<y<=N-1 Số điểm ảnh xác định độ phân giải của ảnh Ảnh có độ phân giải càng cao thì ảnh càng trở nên chân thực và sắc nét hơn Giá trị của mỗi điểm ảnh sẽ quyết định màu sắc của ảnh ta gọi là mức xám của điểm ảnh, giá trị này có thể là một số (ảnh nhị phân, ảnh xám) hoặc một tập hợp các giá trị (ảnh màu) Xử lý ảnh là ta xử lý các giá trị này trong ma trận ảnh để được một kết quả mong muốn Số bit của một bức ảnh chính là số các giá trị mức xám có thể có, ví dụ một ảnh 8bit sẽ có 28=256 giá trị mức xám từ 0 đến 255 tương tự ảnh 16bit thì sẽ có 216 giá trị
Tùy theo giá trị dùng để biểu diễn điểm ảnh mà ta có thể phân ra 3 loại ảnh chính thông dụng:
+ Ảnh nhị phân: giá trị mỗi điểm ảnh là 0 hoặc 1, nghĩa là trắng hoặc đen Chính
vì vậy mà còn gọi là ảnh đen trắng
Hình 2.1 Các bước xử lý ảnh Hình 2 1 Các bước xử lý ảnh 1
Trang 19+ Ảnh xám: giá trị mỗi điểm ảnh nằm trong giải giá trị từ 0 đến 255, nghĩa là cần
8 bits hay 1 byte để biểu diễn mỗi điểm ảnh này
+ Ảnh màu RGB: mỗi điểm ảnh có giá trị gồm 3 màu đỏ (Red) + xanh lục (Green) + xanh dương (Blue) Mỗi màu có giá trị từ 0 đến 255, nghĩa là mỗi điểm ảnh cần 24bits hay 3bytes để biểu diễn Ngoài hệ màu RGB còn có nhiều hệ màu khác phù hợp với những mục đích khác nhau như hệ CMYK, hệ HSV…
đề tài này sử dụng camera loại webcam để thu nhận hình ảnh thực tế
2.1.3 Giới thiệu về thư viện OpenCV và camera Logitech C270
Thư viện OpenCV
OpenCV (Open Computer Vision) là một thư viện mã nguồn mở hàng đầu cho
xử lý về thị giác máy tính, machine learning, xử lý ảnh OpenCV đươc viết bằng C/C++,
vì vậy có tốc độ tính toán rất nhanh, có thể sử dụng với các ứng dụng liên quan đến thời gian thực Opencv có thể hỗ trợ cho C/C++, Python Java vì vậy hỗ trợ được cho Window, Linux, MacOs lẫn Android, iOS OpenCV có cộng đồng hơn 47 nghìn người dùng và
số lượng download vượt quá 6 triệu lần và vẫn đang mở rộng liên tục
Trang 20OpenCV vẫn đang được đóng góp và phát triển liên tục, nó đặc biệt phù hợp cho
những ứng dụng xử lý hình ảnh đơn giản vì thư viện dễ sử dụng và nhiều hỗ trợ từ cộng đồng
Camera Logitech C270
Webcam Logitech C270 chụp hình và quay film có thể đạt độ phân giải HD 720p (1280 x 720 pixel) Với độ phân giải này hình ảnh thu được trung thực và khá sắc nét Ngoài ra, Webcam C270 có chế độ chỉnh sáng tự động sẽ giúp hình ảnh sáng hơn kể cả trong điều kiện ánh sáng tối, góc chụp lên tới 60 độ Tốc độ khung hình đạt 30fps (30 khung hình một giây) tốc độ này giúp việc chụp các vật chuyển động với tốc độ không quá nhanh được thực hiện chính xác Sử dụng chuẩn giao tiếp USB nên việc kết nối với
máy tính rất dễ dàng
2.1.4 Điều chỉnh độ sáng và độ tương phản
Độ sáng của ảnh phụ thuộc vào giá trị của mỗi pixel tạo nên ảnh Vì vậy để thay đổi độ sáng ảnh ta thay đổi giá trị mức sáng các pixel Với g và f là ảnh trước và sau khi biến đổi ta có công thức điều chỉnh độ sáng như sau:
g(x,y) = a*f(x,y)+b (2.1)
a, b: hằng số tự chọn
f(x,y): mức sáng của pixel trong ảnh tại điểm có tọa độ (x,y)
g(x,y): mức sáng của pixel trong ảnh tại điểm có toạ độ (x,y) sau khi biến đổi
Hình 2 2 Hình ảnh Webcam Logitech C270
Trang 21Ngoài việc thay đổi bằng phần mềm ta có thể tăng độ sáng ảnh bằng phần cứng như lắp thêm đèn rọi, dùng tấm nền màu sáng…
2.1.5 Lọc nhiễu ảnh
Một ảnh khi được chụp thường kèm theo các nhiễu, các nhiễu này có nhiều nguyên nhân gây nên: ánh sáng không đủ, chất lượng thiết bị thu không tốt, ảnh hưởng
do các yếu tố môi trường xung quanh, do sai số lượng tử hóa hay sai số truyền … Một
số loại nhiễu phổ biến thường xuất hiện trong ảnh:
Nhiễu độc lập với dữ liệu ảnh:
- Là một loại nhiễu cộng (additive noise): ảnh thu được f(i,j) là tổng của ảnh đúng (true image) và nhiễu n(i,j): f(i,j) = s(i,j) + n(i,j)
- Thông tin ảnh có tần số thấp, còn nhiễu ảnh hưởng đến tần số cao và ảnh hưởng này có thể được giảm đi khi sử dụng bộ lọc thông thấp
Nhiễu phụ thuộc vào dữ liệu:
- Nhiễu xuất hiện khi có sự bức xạ đơn sắc nằm rải rác trên bề mặt ảnh, độ lởm chởm trên bề mặt tùy thuộc vào bước sóng của điểm ảnh
- Do có sự giao thoa giữa các sóng ảnh nên làm xuất hiện những vết lốm đốm trên ảnh
Nhiễu muối – tiêu (Salt & Pepper noise):
- Là một loại nhiễu xung, sinh ra do xảy ra sai số trong quá trình truyền dữ liệu
- Những điểm ảnh có thể mang giá trị cực đại hoặc cực tiểu Với ảnh xám nếu một điểm ảnh có giá trị cực đại (tức cường độ sáng bằng 255) thì nó sẽ tạo ra một đốm trắng trên ảnh, trông giống như hạt “muối” Và ngược lại nếu một điểm ảnh
Trang 22có giá trị cực tiểu (tức cường độ sáng bằng 0) thì sẽ tạo ra một đốm đen, giống như “tiêu” Vậy nên còn gọi là ảnh muối tiêu
Để có thể xử lý một cách chính xác và hiệu quả, ảnh cần được lọc nhiễu Nguyên tắc chung của các phương pháp lọc ảnh số là cho ma trận ảnh nhân chập với một ma trận lọc (Kernel) hay còn được gọi là các phép tính nhân chập trên ảnh Ma trận lọc lọc (Kernel) còn có thể được gọi là cửa số chập, cửa sổ lọc, mặt nạ
Hình 2 3 Một mặt nạ lọc kích thước 3x3
Trang 23các điểm ảnh trong cửa sổ này theo thứ tự (tăng dần hoặc giảm dần tùy ý) Cuối cùng, gán điểm ảnh nằm chính giữa (trung vị) của dãy giá trị điểm ảnh đã được sắp xếp ở trên cho giá trị điểm ảnh đang xét của ảnh đầu ra output
Cho một dãy số 𝑋1, 𝑋2, 𝑋3, , 𝑋𝑛 được sắp xếp theo thứ tự tăng dần hoặc giảm dần Khi đó 𝑋𝑡𝑣 được tính bởi công thức sau:
Các bước thực hiên khi sử dụng bộ lọc trung vị:
- Quét ma trận lọc lên các thành phần của ảnh gốc, điền các giá trị được quét vào
ma trận lọc
- Lấy các thành phần trong của sổ lọc để xử lý
- Sắp xếp theo thứ tự các thành phần trong cửa sổ lọc
- Lưu lại thành phần trung vị, gán cho ảnh output
Ví dụ cho ảnh I kích thước 5x5 như sau:
Trang 24Kết quả 3 chính là giá trị trung vị cần tìm, lúc này ta gán giá trị 3 cho pixel tại vị trí I(3,3) trong ảnh
Vì phải sắp xếp lại mỗi khi ma trận lọc di chuyển đến một pixel nên bộ lọc này
có tốc độ không cao, hiệu quả giảm nếu ảnh có kích thước lớn Tuy nhiên bộ lọc trung
vị có nhiều ưu điểm như giúp loại bỏ nhiễu nhưng vẫn đảm bảo độ phân giải, nó khá hiệu quả đối với hai loại nhiễu: nhiễu đốm (speckle noise) và nhiễu muối tiêu (salt-pepper noise)
Lọc trung bình
Lọc trung bình là loại lọc tuyến tính, với phương pháp thay thế giá trị mỗi điểm ảnh bằng trung bình trọng số của các điểm trong vùng lân cận Giả sử rằng dùng một ma trận lọc (3x3) quét qua từng điểm ảnh của ảnh đầu vào Tại vị trí mỗi điểm ảnh lấy giá trị của các điểm ảnh tương ứng trong vùng (3x3) của ảnh gốc đặt vào ma trận lọc Giá trị điểm ảnh của ảnh đầu ra là giá trị trung bình của tất cả các điểm trong ảnh trong ma trận lọc
Các bước thực hiện lọc trung bình với ảnh đầu vào I và I(x,y) là điểm ảnh đang xét,
mộ ngưỡng α:
- Bước 1: Quét ma trận lọc lên các thành phần của ảnh gốc, điền các giá trị được
quét vào ma trận lọc
- Bước 2: Tính tổng các thành phần trong ma trận lọc, chia tổng này với số lượng
các phần tử của cửa sổ lọc ra một giá trị Itb = (x, y)
- Bước 3: Hiệu chỉnh:
+ Nếu I(x, y) - Itb(x, y) > α thì I(x,y) = Itb(x, y)
Trang 25+ Nếu I(x, y) - Itb(x, y) ≤ α thì I(x,y) = I(x,y)
Giá trị ngưỡng α có thể có hoặc không tùy vào mục đích sử dụng
Vậy I(3,3) sau khi lọc sẽ có giá trị 3
Sau khi sử dụng bộ lọc trung bình, chênh lệch độ sáng các điểm ảnh sẽ giảm xuống nghĩa là sẽ không có sự đột biến về giá trị của các điểm ảnh lân cận nhau Vì các nhiễu ngẫu nhiên thường là các điểm có giá trị đột biến mạnh so với điểm xung quanh nên bộ lọc trung bình sẽ giúp giảm các nhiễu này hiệu quả ví dụ như nhiễu muối tiêu Tuy nhiên bởi vì các cạnh hoặc đường biên trong ảnh cũng đặc trưng bởi quá trình biến đổi mạnh về cường độ nên lọc trung bình có thể làm mờ các cạnh và đường biên
Lọc Gauss
Bộ lọc Gauss là một bộ lọc rất hữu ích và thông dụng, được thực hiện bằng cách nhân chập ảnh đầu vào với một ma trận lọc Gauss sau đó cộng chúng lại để tạo thành ảnh đầu ra Vì biến đổi Fourier của một Gaussian sẽ tạo ra một Gaussian khác cho nên
Trang 26nếu xét trên miền tần số thì phương pháp này sẽ làm giảm các thành phần có tần số cao trong hình Hay nói cách khác đây là một bộ lọc tần số cao (low pass filter: chỉ giữ lại các thành phần tần số thấp)
Ứng dụng của bộ lọc Gaussian là làm mịn ảnh, nó khác với bộ lọc trung bình ở chổ: thứ nhất, mức độ làm mịn được điều khiển bởi sự lựa chọn các tiêu chuẩn thông số độ lệch, chứ không phải bởi giá trị tuyệt đối của kích thước hạt nhân, thứ hai, hàm Gaussian
có một thuộc tính khá đặc biệt, đó là biến đổi Fourier của nó là một hàm Gaussian, điều
đó rất thuận tiện cho việc phân tích miền tần số của bộ lọc
2.2 TÌM ĐƯỜNG BIÊN CỦA ẢNH
Một điểm được coi là điểm biên nếu có sự thay đổi nhanh hoặc đột ngột về mức xám, tuy nhiên một điểm nhiễu cũng có đặc trưng giống như một điểm biên, tập hợp các điểm biên liên tiếp được gọi là đường biên hoặc đường bao Đường biên có thể dùng để xác định hình dạng một vật thể, hoặc ngăn cách giữa các khu vực có mức xám khác nhau
Tìm đường biên của ảnh là làm nổi lên những điểm ảnh mà tại đó có sự biến đổi lớn về giá trị độ sáng Từ đó ta có các phương pháp tìm đường biên ảnh:
Phát hiện biên trực tiếp
Phát hiện biên gián tiếp
Phát hiện biên dựa vào trung bình cục bộ
Phát hiện biên dựa vào các phép toán hình thái
Phương pháp phổ biến là phát hiện biên trực tiếp mà hiệu quả hơn cả là việc lấy đạo hàm bậc nhất của f(x,y) điều này sẽ làm nổi bật lên đường biên của ảnh dựa vào sự biến thiên độ sáng Việc lấy đạo hàm bậc nhất này gọi là phương pháp Gradient
Trang 27Gradient là một vector có các thành phần biểu thị tốc độ thay đổi giá trị của điểm
ảnh theo 2 hướng x, y; đại diện cho sự thay đổi về hướng và độ lớn của một vùng ảnh
(2.6)
Một kĩ thuật tiêu biểu ứng dụng Gradient là kĩ thuật Canny, kĩ thuật này cho ra kết
quả đường biên mảnh và khá chính xác, phân biệt được điểm biên và điểm nhiễu
Các bước thực hiện kĩ thuật Canny:
Bước 1: Loại bỏ nhiễu trong ảnh và làm mờ ảnh bằng cách nhân chập với một bộ lọc
Gaussian
Bước 2: Tính toán giá trị Gradient trong ảnh, ta có thể sử dụng bộ lọc Sobel hoặc Prewitt
theo hai hướng x, y gọi là Gx, Gy
Bước 3: Tính độ lớn Gradient trong ảnh:
𝐺 = √𝐺𝑥2+ 𝐺𝑦2 và θ = arctan(𝐺𝑥
𝐺 𝑦) (2.7) Trong đó 𝐺𝑥, 𝐺𝑦 là đạo hàm theo hướng x, y của điểm ảnh đang xét Góc θ sẽ
được làm tròn theo các hướng thẳng đứng, nằm ngang và chéo tương ứng với các giá trị
0, 45, 90 và 135 độ
( , )( , )
f
f x y x
f x y y
Trang 28Bước 4: Loại bỏ những điểm không phải cực đại nhằm xóa bỏ những điểm không thuộc
biên Trong bước này ta sẽ so sánh giá trị Gradient của điểm ảnh với các điểm lân cận
theo 4 hướng đã nói ở trên
Với θ = 0, điểm A sẽ là biên độ nếu Gradient tại A lớn hơn Gradient tại A3 và A7 Với θ = 45, điểm A sẽ là biên độ nếu Gradient tại A lớn hơn Gradient tại A2 và A6 Với θ = 90, điểm A sẽ là biên độ nếu Gradient tại A lớn hơn Gradient tại A1 và A5 Với θ = 135, điểm A sẽ là biên độ nếu Gradient tại A lớn hơn Gradient tại A8 và A4
Bước 5: Chọn ra biên của đối tượng trong ảnh
Sau các bước trên ta thu được một tập các điểm tương ứng trên đường biên khá mỏng Vì những điểm có giá trị gradient lớn bao giờ cũng có xác suất là biên thật sự hơn những điểm có giá trị của gradient nhỏ do đó để xác định chính xác hơn nữa biên của các đối tượng ta sử dụng các ngưỡng Theo đó bộ lọc canny sẽ sử dụng một ngưỡng trên
và một ngưỡng dưới nếu gradient tại một điểm trong ảnh có giá trị lớn hơn ngưỡng trên thì ta xác nhận đó là một điểm trên biên của ánh Nếu giá trị này nhỏ hơn ngưỡng dưới thì đó không phải là điểm biên, trong trường hợp giá trị gradient nằm giữa ngưỡng trên
và dưới thì nó chỉ được tính là điểm trên biên khi các điểm bên cạnh của nó có giá trị gradient lớn hơn ngưỡng trên
2.3 GIAO TIẾP UART
USART là viết tắt của cụm từ Universal synchronous asynchronous receiver transmitter nghĩa là bộ truyền nhận nối tiếp đồng bộ và không đồng bộ Thuật ngữ UART nói đến bộ truyền nhận nối tiếp không đồng bộ Đây là một ngoại vi cơ bản và thường
Hình 2 5 Các hướng xét giá trị
Trang 29dùng trong các quá trình giao tiếp với máy tính, với các vi điều khiển khác và với các module như: RF, Wifi, Bluetooth…
Nếu ta sử dụng một dây để đồng bộ xung CLK giữa 2 thiết bị thì lúc này giao tiếp UART sẽ trở thành giao tiếp đồng bộ và không dùng sẽ là chuẩn giao tiếp không đồng bộ
Ưu điểm của giao tiếp UART là tiết kiệm chân vi điều khiển vì chỉ cần sử dụng
2 chân là TX và RX, đây là ngoại vi mà tất cả các vi điều khiển đều có, ngoài ra thì cũng
có khá nhiều module, cảm biến dùng UART để truyền nhận dữ liệu Tuy vậy nhược điểm của UART là tốc độ chậm, quá trình truyền nhận dễ xảy ra lỗi làm mất, sai dữ liệu nên trong quá trình truyền nhận cần tuân thủ các tiêu chuẩn và cần có các phương pháp
để kiểm tra (thường là truyền thêm bit hoặc byte kiểm tra lỗi)
Tốc độ Baud
Vì không sử dụng chung xung CLK nên để có thể truyền và nhận dữ liệu ta cần thống nhất tốc độ giữa 2 thiết bị, tốc độ này được tạo độc lập ở mỗi thiết bị, tốc độ này được đặt trước, gọi là tốc độ Baud được định nghĩa là số bit truyền được trong một giây, và
có một số giá trị thường dùng như 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400,
56000, 57600, 115200
Khung truyền
Một trong những vấn đề quan trọng khi sử dụng UART là việc đảm bảo dữ liệu truyền nhận không bị lỗi, thiếu hoặc sai lệch vì đặc điểm của nó là không sử dụng chung nguồn xung Để có thể giao tiếp được thì ngoài việc thiết lập chung tốc độ Baud thì khung truyền cũng là một yếu tố không thể thiếu Khung truyền (Frame) là một luật quy định về số bit trong mỗi lần truyền và việc có các bit đặc biệt như Start, Stop, Parity hay không
- Start bit là bit đầu tiên được truyền trong một frame truyền, bit này có chức năng
báo cho thiết bị nhận biết rằng có một gói dữ liệu sắp được truyền tới Start là bit bắt buộc phải có trong khung truyền, và nó là một bit thấp (0)
- Data bits hay dữ liệu cần truyền là thông tin chính mà chúng ta cần gởi và nhận
Số lượng bit data tùy thuộc vào các loại vi điều khiển khác nhau, thường thì data
Trang 30có 8bit Trong truyền thông nối tiếp UART, bit có trọng số nhỏ nhất (LSB – Least Significant Bit, bit bên phải) của data sẽ được truyền trước và cuối cùng là bit có trọng số lớn nhất (MSB – Most Significant Bit, bit bên trái) Tuy nhiên thứ tự truyền này có thể được cài đặt bởi người dùng
- Parity bit là bit dùng để kiểm tra dữ liệu truyền có bị sai không Có 2 loại parity
là parity chẵn (even parity) và parity lẻ (odd parity) Parity chẵn nghĩa là số lượng
số “1” trong dữ liệu bao gồm bit parity luôn là số chẵn Ngược lại tổng số lượng các số “1” trong parity lẻ luôn là số lẻ Ví dụ: nếu dữ liệu cần truyền là 10111011,
có tất cả 6 bit có giá trị “1” trong dữ liệu này, nếu quy định parity chẵn được dùng, bit parity sẽ mang giá trị 0 để đảm bảo tổng các số “1” là số chẵn Nếu quy định parity lẻ thì giá trị của parity bit là 1 Sau khi truyền chuỗi dữ liệu kèm theo
cả bit parity trên, bên nhận thu được và kiểm tra lại tổng số số “1” (bao gồm cả bit parity), nếu sai so với quy định parity đã đặt trước thì ta khẳng định là dữ liệu nhận được là sai, tuy nhiên nếu đúng thì ta cũng không thể khẳng định được dữ liệu truyền đúng Parity bit không phải là bit bắt buộc và vì thế chúng ta có thể loại bit này khỏi khung truyền
- Stop bits là một hoặc nhiều bit báo cho thiết bị nhận rằng một gói dữ liệu đã được
gởi xong Sau khi nhận được stop bits, thiết bị nhận sẽ tiến hành kiểm tra khung truyền để đảm bảo tính chính xác của dữ liệu Stop bits là các bit bắt buộc phải
có trong khung truyền
2.4 VI ĐIỀU KHIỂN STM32F103C8T6
2.4.1 Tổng quan
STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thông dụng như F0, F1, F2, F3, F4… Stm32F103 thuộc họ F1 với lõi là ARM COTEX M3 STM32F103 là vi điều khiển 32 bit, tốc độ tối đa là 72Mhz Giá thành cũng khá rẻ so với các loại vi điều khiển có chức năng tương tự Mạch nạp cũng như công cụ lập trình khá đa dạng và dễ sử dụng
Một số ứng dụng chính: dùng cho driver để điều khiển ứng dụng, điều khiển ứng dụng thông thường, thiết bị cầm tay và thuốc, máy tính và thiết bị ngoại vi chơi game, GPS cơ bản, các ứng dụng trong công nghiệp, thiết bị lập trình PLC, biến tần, máy in, máy quét, hệ thống cảnh báo, thiết bị liên lạc nội bộ…
Trang 31Phần mềm lập trình: có khá nhiều trình biên dịch cho STM32 như IAR Embedded Workbench, Keil C…
Thư viện lập trình: có nhiều loại thư viện lập trình cho STM32 như: STM32snippets, STM32Cube LL, STM32Cube HAL, Standard Peripheral Libraries, Mbed core Mỗi thư viện đều có ưu và khuyết điểm riêng, ở đây nhóm sử dụng bộ thư viện chuẩn của ST là Standard Peripheral Libraries vì nó ra đời khá lâu và thông dụng, hỗ trợ nhiều ngoại vi
và cũng như dễ hiểu rõ bản chất của lập trình
Mạch nạp: có khá nhiều loại mạch nạp như: ULINK, J-LINK, CMSIS-DAP, STLINK…thông dụng và giá thành thấp nhất là STlink
2.4.2 Cấu trúc hệ thống
Dòng ARM Cortex là một bộ xử lí thế hệ mới đưa ra một kiến trúc chuẩn cho nhu cầu đa dạng về công nghệ Không giống như các chip ARM khác, dòng Cortex là một lõi xử lí hoàn thiện, đưa ra một chuẩn CPU và kiến trúc hệ thống chung Dòng Cortex gồm có 3 phân nhánh chính:
Hình 2 6 Sơ đồ cấu trúc các khối của STM32F103C8T6
Trang 32+ Dòng A dành cho các ứng dụng cao cấp,
+ Dòng R dành cho các ứng dụng thời gian thực như các đầu đọc
+ Dòng M dành cho các ứng dụng vi điều khiển và chi phí thấp
STM32F103C8T6 được thiết kế dựa trên dòng Cortex-M3, dòng Cortex-M3 được thiết kế đặc biệt để nâng cao hiệu suất hệ thống, kết hợp với tiêu thụ năng lượng thấp, CortexM3 được thiết kế trên nền kiến trúc mới, do đó chi phí sản xuất đủ thấp để cạnh tranh với các dòng vi điều khiển 8 và 16-bit truyền thống, xung clock tối đa là 72Mhz
Bộ nhớ
Bộ nhớ Flash được tổ chức như là 1 khối chính (main block) và 1 khối thông tin (information block) lên đến 64 Kb (hoặc 128 Kb) chia thành 128 pages, mỗi page 1 Kbytes (medium-density devices) Ngoài ra bộ nhớ SRAM có dung lượng 20 kbytes
Clock, reset và quản lý nguồn
- Điện áp hoạt động 2.0V -> 3.6V
- Có các chế độ quản lý nguồn như Power on reset(POR), Power down reset(PDR) và programmable voltage detector (PVD)
- Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz
- Sử dụng thạch anh ngoài 32.768khz được sử dụng cho RTC
Trang 33- Single mode hay Continuous mode
- Tự động calib và có thể điều khiển hoạt động ADC bằng xung Trigger
- Thời gian chuyển đổi nhanh: 1us tại tần số 65Mhz
- Có bộ DMA giúp tăng tốc độ xử lí
Khối timer
- Có 7 timer
- 3 timer 16 bit hỗ trợ các mode IC/OC/PWM
Hình 2 7 Sơ đồ nguồn xung clock của STM32F103C8T6
Trang 34- 1 timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo vệ như ngắt input, dead-time
- Watchdog timer dùng để bảo vệ và kiểm tra lỗi
- 1 sysTick timer 24 bit đếm xuống
Hỗ trợ 9 kênh giao tiếp bao gồm:
- 2 bộ I2C (SMBus/PMBus)
- 3 bộ USART (ISO 7816 interface, LIN, IrDA capability, modem control)
- 2 SPIs (18 Mbit/s)
- 1 bộ CAN interface (2.0B Active)
- USB 2.0 full-speed interface
2.4.3 Tìm hiểu GPIO
GPIO là từ viết tắt của General purpose I/O ports là nơi giao tiếp chung giữa tín hiệu
ra và tín hiệu vào Ở STM32 thì các chân GPIO chia ra làm nhiều Port như PortA, PortB
Số lượng Port phụ thuộc vào số lượng chân (pin) và cách gọi phụ thuộc vào nhà sản xuất (ví dụ có loại vi điều khiển có PortA mà lại không có PortD) Mỗi Port thường có 16 chân đánh số từ 0 -> 15 tương ứng với mỗi chân là 1bit Mỗi chân có 1 chức năng khác nhau như analog input, external interrupt hay đơn thuần chỉ là xuất tín hiệu on/off ở mức 0,1 Chức năng của mỗi chân được cung cấp trong datasheet của nhà sản xuất Các chế độ hoạt động với GPIO của STM32:
- Input floating: cấu hình chân I/O là ngõ vào và để nổi
- Input pull-up: cấu hình chân I/O là ngõ vào, có trở kéo lên nguồn
- Input-pull-down: cấu hình chân I/O là ngõ vào, có trở kéo xuống GND
- Analog: cấu hình chân I/O là Analog
- Output open-drain: cấu hình chân I/O là ngõ ra, khi output control = 0 thì N-MOS
sẽ dẫn, chân I/O sẽ nối VSS, còn khi output control = 1 thì P-MOS và N-MOS đều không dẫn, chân I/O được để nổi
- Output push-pull: cấu hình chân I/O là ngõ ra, khi output control = 0 thì N-MOS
sẽ dẫn, chân I/O sẽ nối VSS, còn khi output control = 1 thì P-MOS dẫn, chân I/O được nối VDD
Trang 35- Alternate function push-pull: sử dụng chân I/O vừa là ngõ ra và vừa là ngõ vào, tuy nhiên sẽ không có trở kéo lên và kéo xuống ở input, chức năng output giống Output push-pull
- Alternate function push-pull: sử dụng chân I/O vừa là ngõ ra và vừa là ngõ vào, tuy nhiên sẽ không có trở kéo lên và kéo xuống ở input, chức năng output giống Output open-drain
Các thanh ghi cấu hình GPIO trong stm32F103C8T6
Thanh ghi cấu hình port GPIOx_CRx
Mỗi chân GPIO có 2 cặp bit để cài đặt CNF quyết định là chế độ là analog, floating, pull-up… còn MODE quyết định là ngõ vào hay ngõ ra Ngõ ra với tốc độ bao nhiêu Thông số cài đặt chi tiết như sau:
2bit mode:
- 00: Input mode (reset state)
- 01: Output mode, max speed 10 MHz
- 10: Output mode, max speed 2 MHz
- 11: Output mode, max speed 50 MHz
Trang 36- 01: Floating input (reset state)
- 10: Input with pull-up / pull-down
- 11: Reserved
• Khi là output:
- 00: General purpose output push-pull
- 01: General purpose output Open-drain
- 10: Alternate function output Push-pull
- 11: Alternate function output Open-drain
Thanh ghi đọc giá trị ngõ vào- GPIOx_IDR với x là tên port
Đây là thanh ghi đọc giá trị đầu vào của từng chân Khi đầu vào ở chân nào đó có mức logic là 1 thì bit tương ứng với chân đó sẽ có giá trị là 1 Và ngược lại là 0
Thanh ghi chọn giá trị ngõ ra của port- GPIOx_ODR với x là tên port
Đây là thanh ghi quyết định mức logic của đầu ra trên chân STM32 tương ứng với mode output Giá trị của bit nào ở mức cao thì output của nó sẽ ở mức cao nếu sử dụng mode output push pull và ngược lại Riêng mode output open drain thì có chút khác biệt
2.4.4 Timer và PWM
STM32F103C8 có tất cả 7 timer nhưng trong đó bao gồm 1 systick timer, 2 watchdog timer nên chỉ còn lại 4 timer dùng cho các chức năng khác như ngắt, PWM,
Hình 2 9 Thanh ghi đọc giá trị ngõ vào
Hình 2 10 Thanh ghi chọn giá trị ngõ ra của port
Trang 37Encoder, Input capture… Trong đó TIM1 là Timer đặc biệt, chuyên dụng cho việc xuất xung với các mode xuất xung, các mode bảo vệ đầy đủ hơn so với các timer khác TIM1 thuộc khối clock APB2, còn các TIM2, TIM3, TIM4 thuộc nhóm APB1
Có 3 vấn đề cần quan tâm khi sử dụng timer đó là:
- Timer clock
- Prescaler
- Auto Reload Value
Prescaler là bộ chia tần số của timer Bộ chia này có giá trị tối đa là 16 bit tương ứng với giá trị là 65535 Các giá trị này có thể được thay đổi và điều chỉnh bằng lập trình
Tần số sau bộ chia này sẽ được tính là:
𝑓CK_CNT =𝑓CK_PSC
𝑃𝑆𝐶+1 (2.8) Trong đó:
𝑓CK_CNT: tần số sau bộ chia
𝑓CK_PSC: tần số clock đầu vào cấp cho timer
PSC: giá trị truyền vào được lập trình bằng phần mềm
Auto Reload Value là giá trị bộ đếm tối đa có thể được điều chỉnh để nạp vào cho timer Giá trị bộ đếm này được cài đặt tối đa là 16bit tương ứng với giá trị là 65535.Từ các thông số trên ta rút ra công thức cần tính cuối cùng đó là:
𝐹TIMER = 𝑓SYSTEM
(𝑃𝑆𝐶+1)(𝑃𝐸𝑅𝐼𝑂𝐷+1) (2.9)
𝐹TIMER : là giá trị cuối cùng của bài toán, đơn vị là hz
𝑓SYSTEM : tần số clock hệ thống được chia cho timer sử dụng, đơn vị là hz PSC: giá trị nạp vào cho bộ chia tần số của timer Tối đa là 65535
Period: giá trị bộ đếm nạp vào cho timer Tối đa là 65535
Trang 38Ngắt timer: khi giá trị đếm của bộ đếm timer (thanh ghi CNT) vượt qua giá trị của Auto Reload Value thì cờ báo tràn sẽ được kích hoạt Trình phục vụ ngắt tràn sẽ xảy
ra nếu được cấu hình cho phép trước đó
bộ phận đặc biệt là bộ cổ góp và chổi than tiếp xúc cổ góp, điều này giúp cấp điện cho động cơ kể cả khi động cơ quay Vì là bộ phận tiếp xúc nên sau một thời gian chổi quét
sẽ bị mài mòn và cần phải thay thế Động cơ DC thường có tốc độ cao, đáp ứng nhanh kích thước nhỏ gọn, momen cao dù ở tốc độ nhỏ nên được sử dụng phổ biến trong các
mô hình, các máy móc, thiết bị, đồ gia dụng, dùng khởi động các động cơ xe
Dòng điện chạy qua động cơ được tính như sau:
𝐼Độ𝑛𝑔 𝑐ơ =𝑉𝑁𝑔𝑢ồ𝑛−𝑉đ𝑖ệ𝑛 độ𝑛𝑔
𝑅𝑃ℎầ𝑛 ứ𝑛𝑔 (2.10) Công suất động cơ được tính như sau:
𝑃độ𝑛𝑔 𝑐ơ = 𝐼Độ𝑛𝑔 𝑐ơ∗ 𝑉đ𝑖ệ𝑛 độ𝑛𝑔 (2.11) Trong đó 𝑉đ𝑖ệ𝑛 độ𝑛𝑔 là sức điện động của rotor sinh ra khi quay
𝑅𝑃ℎầ𝑛 ứ𝑛𝑔 là điện trở nội của các cuộn dây
Dòng điện khi khởi động của động cơ thường bằng 4-7 lần dòng điện hoạt động định mức, khi tính toán dòng cho động cơ cần chú ý đến dòng khởi động để đảm bảo an toàn cho mạch điện
Phương pháp điều khiển động cơ DC
Để điều khiển động cơ DC thì phương pháp phổ biến nhất là điều khiển điện áp rotor vì tốc độ quay của động cơ DC sẽ tỉ lệ thuận với điện áp nguồn Chiều quay có
Trang 39Để điều khiển điện áp DC cấp cho động cơ ta có thể dùng phương pháp thay đổi thời gian cấp điện - 𝑡𝑂𝑁, nghĩa là dòng điện được đóng và ngắt liên tục để qua đó thay đổi điện áp trung bình Để làm được điều này ta cần dùng các phần tử chuyển mạch có điều khiển như transistor hoặc MOSFET Giả sử điện áp cấp là 24V và thời gian 𝑡𝑂𝑁 là 50% thì điện áp trung bình là 12V Phương pháp này được gọi là phương pháp điều biến
độ rộng xung (pulse width modulation- PWM) Tùy vào công suất động cơ mà ta chọn loại linh kiện chuyển mạch cho phù hợp
Trong đề tài, nhóm sử dụng động cơ DC có bộ giảm tốc loại GA25 có các thông
số như sau:
- Điện áp hoạt động trong khoảng 6 - 18V, điện áp định mức 12V
- Tốc độ sau bộ giảm tốc 17rpm
- Dòng không tải 50mA, dòng có tải là 240mA
- Momen xoắn khi có tải là 14kg.cm
2.6 ENCODER
Encoder ở các hệ thống điều khiển tự động là bộ phận để đo lường dịch chuyển thẳng hoặc góc, đồng thời chuyển đổi vị trí góc/vị trí thẳng mà nó ghi nhận được thành
Hình 2 11 Động cơ GA25
Trang 40tín hiệu nhị phân Chính nhờ những tín hiệu nhị phân này mà hệ thống vi tính cho ta biết được vị trí chính xác
Cấu tạo và nguyên lý hoạt động
Nguyên lý cơ bản của encoder, đó là một đĩa tròn xoay, quay quanh trục Trên đĩa có các lỗ (rãnh) Dùng một đèn led để chiếu lên mặt đĩa Khi đĩa quay, chỗ không có
lỗ, đèn led không chiếu xuyên qua được, chỗ có lỗ (rãnh), đèn led sẽ chiếu xuyên qua Khi đó, phía mặt bên kia của đĩa, đặt một con mắt thu Với các tín hiệu có hoặc không
có ánh sáng chiếu qua, thì ghi nhận được đèn led có chiếu qua lỗ hay không Như vậy là encoder sẽ tạo ra các tín hiệu xung vuông và các tín hiệu xung vuông này được cắt từ ánh sáng xuyên qua lỗ Nên tần số của xung đầu ra sẽ phụ thuộc vào tốc
độ quay của tấm tròn đó Đối với encoder nhóm đang dùng thì nó có 2 tín hiệu ra lệch pha nhau 90 Hai tín hiệu này có thể xác định được chiều quay của động cơ
Phân loại
Ecoder được phân hai loại chính:
- Encoder tuyệt đối: sử dụng đĩa theo mã nhị phân hoặc mã Gray
- Encoder tương đối: có tín hiệu tăng dần hoặc theo chu kỳ
Ecoder tuyệt đối
Encoder kiểu tuyệt đối có kết cấu gồm những phần sau: Bộ phát ánh sáng, đĩa mã hóa (có chứa dải băng mang tín hiệu), một bộ thu ánh sáng nhạy với ánh sáng phát ra Đĩa mã hóa ở encoder tuyệt đối được chế tạo từ vật liệu trong suốt, người ta chia mặt đĩa thành các góc đều nhau và các đường tròn đồng tâm
Ecoder tương đối
Về cơ bản thì Encoder kiểu tương đối đều giống nhau, chỉ khác ở đĩa mã hóa Ở encoder tương đối thì đĩa mã hóa gồm 1 dải băng tạo xung Ở dải băng này được chia làm nhiều lỗ bằng nhau và cách đều nhau (có thể chất liệu trong suốt để ánh sáng chiếu qua)