Bối cảnh và vấn đề nghiên cứu
Trong xu thế phát triển của khoa học kỹ thuật và công nghệ hiện đại, các hệ thống điều khiển tự động đóng vai trò thiết yếu trong nhiều lĩnh vực như máy công cụ, kỹ thuật không gian, hệ thống quân sự, mạng lưới giao thông, năng lượng và robot. Tự động hóa ngày càng được ứng dụng rộng rãi nhằm thay thế con người thực hiện các nhiệm vụ tại môi trường nguy hiểm, độc hại hoặc những khu vực khó tiếp cận. Khi xây dựng một hệ sinh thái tự động, yêu cầu then chốt là lựa chọn cấu trúc điều khiển và phương thức thu thập dữ liệu phù hợp với điều kiện vận hành thực tế.
Đề tài "Thiết kế xe tự hành tránh vật cản dùng PIC" được thực hiện trong khuôn khổ học phần Thiết kế môn học Vi xử lý tại Bộ môn Cơ khí, Trường Đại học Giao thông Vận tải (TP. Hồ Chí Minh, hoàn thành vào tháng 5/2024). Đề tài do nhóm sinh viên gồm Hà Thiên Phúc, Lê Duy Tiến, Nguyễn Gia Lâm, Nguyễn Văn Điền và Lương Gia Huy thực hiện dưới sự hướng dẫn của giảng viên Phan Xuân Hiển.
Nhiệm vụ nghiên cứu và triển khai của đồ án tập trung vào các nội dung cụ thể sau:
- Nghiên cứu cấu trúc phần cứng, tập lệnh và các ngoại vi tích hợp của vi điều khiển PIC16F877A.
- Tìm hiểu nguyên lý hoạt động, phương pháp phát xung và xử lý tín hiệu phản xạ của cảm biến siêu âm SRF-05.
- Nghiên cứu giải pháp điều khiển động cơ một chiều (DC) thông qua vi mạch tích hợp L293D kết hợp cơ cấu lái góc bằng động cơ servo SG92R.
- Thiết kế sơ đồ nguyên lý, sơ đồ khối, thi công mạch phần cứng và lập trình giải thuật máy trạng thái (State Machine) trên trình biên dịch CCS C để điều khiển xe tự hành phát hiện và tránh vật cản tự động trong phạm vi giới hạn.
Đối tượng nghiên cứu là mô hình xe tự hành hai bánh chủ động kết hợp cơ cấu cảm biến siêu âm quét đa hướng. Phạm vi nghiên cứu giới hạn ở thiết kế mạch nhúng dùng vi điều khiển PIC16F877A, mô phỏng trên phần mềm Proteus và thi công mô hình phần cứng thực tế.
Cơ sở lý thuyết và phương pháp
Đề tài sử dụng phương pháp thiết kế hệ thống nhúng kết hợp lý thuyết điều khiển tự động và mô hình hóa trạng thái hữu hạn. Cơ sở lý thuyết và nền tảng kỹ thuật bao gồm:
- Kiến trúc vi điều khiển 8-bit PIC16F877A: Hoạt động với tập lệnh 35 lệnh 14-bit (kiến trúc RISC), tần số thạch anh 20 MHz. Không gian bộ nhớ gồm 8K words Flash ROM (từ trang 0 đến trang 3, quản lý bởi bộ đếm chương trình PC 13-bit
PC<12:0>), 368 bytes RAM (phân bổ trên 4 bank nhớ, chứa các thanh ghi chức năng đặc biệt SFR và thanh ghi đa dụng GPR), 256 bytes bộ nhớ EEPROM và bộ nhớ ngăn xếp (Stack) 8 mức hoạt động theo cơ chế vòng xoay.
- Hệ thống định thời và điều chế độ rộng xung (PWM): Sử dụng Timer0 (8-bit, chia tần số với Watchdog Timer), Timer1 (16-bit, lưu trong
TMR1H:TMR1L để tạo ngắt định thời cho servo), Timer2 (8-bit, kết hợp bộ chia trước Prescaler và bộ chia sau Postscaler với thanh ghi PR2 để tạo xung PWM điều khiển tốc độ qua khối CCP1 và CCP2).
- Nguyên lý định khoảng cách bằng sóng siêu âm: Dựa trên tốc độ truyền âm trong không khí $v = 344\text{ m/s} = 0{,}0344\text{ cm/\mu s}$. Khoảng cách $L$ từ cảm biến đến vật cản được xác định qua thời gian truyền $T$ ($\mu\text{s}$) của chùm sóng phản hồi qua công thức:
$$L = \frac{v \times T}{2} = \frac{0{,}0344 \times T}{2} = \frac{T}{58}$$
- Phương pháp thực nghiệm và thiết kế: Sử dụng phần mềm Proteus để mô phỏng kiểm chứng hoạt động của mạch nguyên lý; lập trình mã nguồn điều khiển trên phần mềm CCS C Compiler (phiên bản 5.008); lắp ráp phần cứng trên khung xe thực tế với nguồn cấp pin Li-ion 18650 qua mạch giảm áp LM7805.
Thiết kế và triển khai
Hệ thống phần cứng của xe tự hành được phân chia thành 4 khối chức năng liên kết chặt chẽ:
+-------------------------------------------------------------+
| KHỐI NGUỒN |
| 3x Pin 18650 Panasonic (12V - 2A) -> LM7805 (5V) |
+------------------------------+------------------------------+
|
v
+------------------------------+------------------------------+
| KHỐI XỬ LÝ TRUNG TÂM |
| Vi điều khiển PIC16F877A |
| - Đọc cảm biến qua PORTB (RB1 Trigger, RB2 Echo) |
| - Điều khiển góc quét Servo SG92R qua PIN_B0 |
| - Xuất PWM và hướng quay động cơ qua PORTC, PORTD |
+---------------+------------------------------+--------------+
| |
v v
+---------------+--------------+ +-------------+--------------+
| KHỐI TÍN HIỆU | | KHỐI CHẤP HÀNH |
| Cảm biến siêu âm SRF-05 | | - IC điều khiển L293D |
| - Đo cự ly vật cản (2-400cm) | | - 2x Động cơ DC giảm tốc |
| - Gắn trên trục Servo SG92R | | - 1x Servo SG92R chỉnh góc|
+------------------------------+ +----------------------------+
Bảng phân bổ linh kiện và kết nối chân phần cứng
| Tên linh kiện / Khối |
Thông số kỹ thuật chính |
Kết nối chân trên PIC16F877A |
Chức năng trong hệ thống |
| PIC16F877A |
40 chân, DIP, 20 MHz, 8K Flash |
Trung tâm điều khiển |
Nhận dữ liệu cảm biến, tính toán và xuất tín hiệu điều khiển |
| Cảm biến SRF-05 |
Dải đo 3 cm – 4 m, 5VDC |
Trigger: PIN_B1 Echo: PIN_B2 |
Phát xung siêu âm và đo độ rộng xung phản xạ để tính cự ly |
| Servo SG92R |
Điện áp 4.8V, trọng lượng 9g, dây 25cm |
Tín hiệu PWM: PIN_B0 |
Xoay cảm biến siêu âm sang các góc 90° (thẳng), 55° (phải), 120° (trái) |
| IC L293D |
Cầu H kép, cấp nguồn động cơ |
IN1: PIN_D3
IN2: PIN_D2
IN3: PIN_C4
IN4: PIN_C5 |
Đảo chiều quay và đóng ngắt cho 2 động cơ DC |
| Khối điều xung PWM |
Khối CCP1 & CCP2, tần số 5 kHz |
CCP1 (RC2), CCP2 (RC1) |
Băm xung điều khiển tốc độ động cơ DC trái và phải |
| Khối nguồn Pin |
3 cell 18650 Panasonic 3.7V (1100mAh) |
Nối tiếp tạo nguồn 12VDC - 2A |
Cấp nguồn động lực cho L293D và cấp qua LM7805 tạo nguồn 5V cho vi điều khiển |
| IC Ổn áp LM7805 |
Điện áp ra ổn định 5VDC, kết hợp tụ 10uF |
Cấp nguồn VDD (chân 11, 32) |
Chuyển đổi 12V từ pin xuống 5V nuôi PIC16F877A, servo và cảm biến |
Thuật toán điều khiển chuyển động (State Machine)
Chương trình điều khiển được xây dựng dưới dạng máy trạng thái hữu hạn gồm 5 trạng thái vận hành: FORWARD, CHECK_RIGHT, CHECK_LEFT, BACKWARD, ROTATE.
// Cấu trúc trạng thái hoạt động của robot trong mã nguồn
enum RobotState { FORWARD, CHECK_RIGHT, CHECK_LEFT, BACKWARD, ROTATE };
Quá trình luân chuyển giữa các trạng thái được thực thi như sau:
- Trạng thái
FORWARD: Robot di chuyển thẳng (move_forward(600, 600)), góc servo duy trì ở hướng chính diện (count_quy_goc = 90). Kích hoạt hàm _CAM_BIEN_SIEU_AM() đo khoảng cách. Nếu phát hiện vật cản ở cự ly $L < 15\text{ cm}$, hệ thống dừng động cơ (move_stop()) và chuyển sang trạng thái CHECK_RIGHT.
- Trạng thái
CHECK_RIGHT: Servo quay cảm biến sang phải (count_quy_goc = 55), tạo trễ 500 ms và đo khoảng cách. Nếu đường bên phải thông thoáng ($L \ge 15\text{ cm}$), chuyển sang trạng thái ROTATE để rẽ phải. Nếu bên phải có vật cản ($L < 15\text{ cm}$), chuyển sang trạng thái CHECK_LEFT.
- Trạng thái
CHECK_LEFT: Servo quay cảm biến sang trái (count_quy_goc = 120), tạo trễ 500 ms và đo khoảng cách. Nếu bên trái thông thoáng ($L \ge 15\text{ cm}$), chuyển sang ROTATE để rẽ trái. Nếu cả hai hướng đều bị chắn ($L < 15\text{ cm}$), chuyển sang trạng thái BACKWARD.
- Trạng thái
BACKWARD: Robot lùi lại phía sau (move_backward(800, 800)) trong khoảng thời gian 200 ms, dừng xe và chuyển về CHECK_RIGHT để tiến hành quét lại môi trường.
- Trạng thái
ROTATE: Căn cứ vào giá trị góc quét trước đó: nếu count_quy_goc == 55, xe kích hoạt động cơ xoay phải (move_xoay(800, -800)); nếu count_quy_goc == 120, xe xoay trái (move_xoay(-800, 800)). Thời gian xoay là 500 ms, sau đó dừng và chuyển về trạng thái FORWARD.
Nội dung chính theo từng chương
Chương 1. Giới thiệu đề tài
Chương 1 trình bày tổng quan về tầm quan trọng của hệ thống điều khiển tự động và kỹ thuật robot trong sản xuất công nghiệp cũng như đời sống hiện đại. Đặt vấn đề nghiên cứu về việc thay thế sức người trong các môi trường làm việc độc hại, nguy hiểm thông qua các thiết bị tự hành. Mục 1.2 nêu sơ đồ nguyên lý tổng quát của xe tự hành: cảm biến siêu âm thu thập dữ liệu khoảng cách gửi về PIC16F877A xử lý, sau đó vi điều khiển phát lệnh điều khiển qua mạch cầu H để điều hướng động cơ DC tránh chướng ngại vật.
Chương 2. Giới thiệu về vi điều khiển PIC16F877A và một số linh kiện khác
Chương này trình bày chi tiết về thông số kỹ thuật, cấu tạo phần cứng của các linh kiện sử dụng trong đề tài:
- Tổng quan PIC16F877A: Phân tích tập lệnh 35 lệnh, chu kỳ lệnh 20 ns ở tần số thạch anh 20 MHz. Cấu trúc bộ nhớ chương trình 8K Flash ROM với Reset Vector tại địa chỉ
0000h và Interrupt Vector tại 0004h. Bộ nhớ dữ liệu 368 bytes chia thành 4 bank chứa các thanh ghi STATUS, OPTION_REG, INTCON, PIE1, PIR1, PIE2, PIR2, PCON và vùng GPR. Khảo sát cấu trúc 5 cổng I/O (PORTA đến PORTE) và các thanh ghi điều khiển hướng TRISA đến TRISE.
- Các khối ngoại vi chuyên dụng: Khảo sát chi tiết nguyên lý đếm và ngắt của Timer0 (8-bit), Timer1 (16-bit hỗ trợ đếm đồng bộ/bất đồng bộ), Timer2 (8-bit có hỗ trợ
PR2 và bộ chia postscaler), bộ biến đổi tín hiệu tương tự sang số ADC 10-bit trên 8 ngõ vào, và giao thức truyền thông nối tiếp đồng bộ SPI (chế độ Master-Slave với 4 đường tín hiệu MOSI, MISO, SCK, SS).
- Module cảm biến siêu âm SRF-05: Phân tích cấu trúc chân (
VCC, Trigger, Echo, GND, OUT), hai chế độ hoạt động (chế độ tách biệt chân và chế độ dùng chung một chân kích hoạt/phản hồi) cùng công thức tính cự ly dựa trên độ rộng xung Echo.
- Các linh kiện chấp hành và phụ trợ: Giới thiệu IC cầu H L293D dùng kích động cơ; Pin sạc 18650 Panasonic (3.7V, 1100 mAh); Động cơ servo SG92R (điện áp 4.8V, dải nhiệt 0–55°C, trọng lượng 9g); IC ổn áp LM7805, tụ điện lọc nguồn 10uF 50V, diode bảo vệ và động cơ DC giảm tốc 5V.
Chương 3. Kết quả mô phỏng và thiết kế phần cứng
Chương 3 tập trung vào khâu thiết kế mạch và triển khai phần mềm:
- Sơ đồ khối và mạch nguyên lý: Mô tả chi tiết cấu trúc liên kết giữa khối nguồn (12VDC - 2A hạ áp qua LM7805 cấp 5V), khối xử lý trung tâm (PIC16F877A), khối cảm biến (SRF-05 kết hợp Servo) và khối chấp hành (IC L293D kéo 2 động cơ DC).
- Thiết kế và thi công mạch: Thể hiện bản vẽ mạch in và hình ảnh lắp ráp thành phẩm thực tế của mô hình xe tự hành.
- Mã nguồn điều khiển (Code CCS): Cung cấp toàn bộ mã nguồn lập trình bằng ngôn ngữ C trên nền tảng CCS C Compiler: cấu hình cầu chì (
HS, NOWDT, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT), cấu hình xung nhịp 20 MHz, thiết lập ngắt Timer1 tạo xung điều khiển Servo (SERVO_PWM tại PIN_B0), cấu hình Timer2 phát xung PWM tần số 5000 Hz trên hai kênh CCP1 và CCP2 để điều tốc động cơ, cùng thuật toán rẽ nhánh theo máy trạng thái RobotState.
Chương 4. Kết luận, ứng dụng và hướng phát triển
- Kết luận: Đánh giá các mục tiêu đã đạt được bao gồm: làm chủ kỹ thuật lập trình vi điều khiển PIC16F877A; nắm vững nguyên lý điều khiển động cơ DC qua L293D và đọc cảm biến SRF-05; sử dụng thành thạo phần mềm biên dịch CCS C (v5.008) và phần mềm mô phỏng Proteus. Đồng thời chỉ rõ các điểm chưa hoàn thiện của mô hình thực tế.
- Ứng dụng thực tiễn: Nêu định hướng ứng dụng cho xe tự hành chở hàng trong nhà máy công nghiệp, robot dò phá bom mìn, robot thám hiểm địa hình.
- Hướng phát triển: Đề xuất tích hợp các giao thức điều khiển từ xa bằng sóng RF hoặc Bluetooth để tăng tính linh hoạt; ứng dụng phục vụ công tác chữa cháy từ xa, vận hành trong môi trường hóa chất, phóng xạ độc hại hoặc trạm biến áp điện cao thế.
Kết quả và đóng góp
Đề tài đã hoàn thành việc thiết kế, chế tạo và thử nghiệm mô hình xe tự hành tránh vật cản với các kết quả cụ thể:
- Kết quả kỹ thuật đạt được:
- Thiết kế hoàn chỉnh phần cứng trên vi điều khiển PIC16F877A hoạt động ổn định ở tần số xung nhịp 20 MHz.
- Triển khai giải thuật đọc tín hiệu thời gian thực từ cảm biến SRF-05 qua Timer0 với độ chính xác đạt ngưỡng xử lý theo công thức $L = T/58$.
- Điều khiển quét góc linh hoạt bằng động cơ servo SG92R qua ngắt Timer1 với các vị trí đặt góc: 90° (chính diện), 55° (phải), 120° (trái).
- Tạo xung PWM tần số 5000 Hz qua khối CCP1/CCP2 phối hợp Timer2 để điều khiển hai động cơ DC độc lập, cho phép xe thực hiện các thao tác: tiến, lùi, quay phải, quay trái và dừng khẩn cấp khi gặp vật cản ở cự ly dưới 15 cm.
- Đóng góp về mặt học thuật và thực tiễn:
- Cung cấp sơ đồ thiết kế mạch nguyên lý, sơ đồ bố trí chân và mã nguồn lập trình CCS C hoàn chỉnh cho hệ thống xe tự hành tránh vật cản dùng vi điều khiển 8-bit họ PIC.
- Hiện thực hóa mô hình máy trạng thái (Finite State Machine) trong xử lý đa nhiệm (kết hợp đọc cảm biến, quét servo và điều khiển động cơ DC bằng PWM) trên hệ thống phần cứng tài nguyên hạn chế.
Hạn chế và hướng nghiên cứu tiếp
- Hạn chế được tác giả ghi nhận:
- Do giới hạn về thời gian, kiến thức chuyên sâu và kinh phí thực hiện, hệ sinh thái sản phẩm mới chỉ dừng lại ở quy mô mô hình thực nghiệm trong phòng lab.
- Chương trình điều khiển chưa được tối ưu hóa triệt để, vẫn còn xuất hiện một số lỗi trong quá trình xử lý tín hiệu phản xạ và phân nhánh trạng thái.
- Khối nguồn pin chưa tích hợp mạch giám sát điện áp: khi dung lượng pin sụt giảm, hệ thống vi điều khiển và cơ cấu chấp hành gặp hiện tượng phản hồi chậm hoặc hoạt động không ổn định (lag).
- Hướng nghiên cứu phát triển tiếp theo:
- Tích hợp thêm module truyền thông không dây (sóng RF hoặc Bluetooth) để bổ sung chế độ điều khiển thủ công từ xa kết hợp với chế độ tự hành.
- Nâng cấp thuật toán xử lý để ứng dụng vào các phương tiện chuyên dụng như robot chữa cháy từ xa, thiết bị khảo sát môi trường hóa chất, vùng phóng xạ độc hại hoặc thiết bị đóng cắt trạm biến áp.
Giá trị tham khảo
Đồ án là tài liệu kỹ thuật có giá trị tham khảo đối với:
- Sinh viên ngành Kỹ thuật Cơ điện tử, Kỹ thuật Điều khiển & Tự động hóa, Kỹ thuật Ô tô hoặc Kỹ thuật Điện - Điện tử đang thực hiện các đồ án môn học Vi xử lý, Đồ án Hệ thống nhúng hoặc Đồ án Robot di động.
- Người nghiên cứu muốn tìm hiểu tài liệu mẫu về cấu hình thanh ghi phần cứng PIC16F877A, cách viết ngắt Timer tạo xung PWM cho Servo, và phương pháp ghép nối IC cầu H L293D với cảm biến siêu âm SRF-05 trên trình biên dịch CCS C.
Câu hỏi thường gặp
1. Hệ thống sử dụng tiêu chuẩn khoảng cách nào để quyết định chuyển hướng tránh vật cản?
Theo mã nguồn điều khiển trong đồ án, ngưỡng khoảng cách phát hiện vật cản được thiết lập cố định là $L < 15\text{ cm}$. Khi khoảng cách từ cảm biến SRF-05 đến chướng ngại vật nhỏ hơn 15 cm, xe dừng di chuyển thẳng và kích hoạt chu trình quét servo sang hai hướng phải và trái.
2. Tín hiệu điều khiển động cơ Servo SG92R được tạo ra bằng phương pháp nào trong vi điều khiển PIC16F877A?
Tín hiệu PWM điều khiển servo tại chân PIN_B0 được tạo ra thông qua ngắt tràn Timer1 (#INT_TIMER1). Chương trình nạp giá trị ban đầu 0xCEFF vào thanh ghi Timer1 và sử dụng biến đếm count để so sánh với biến góc đặt count_quy_goc (90 cho hướng thẳng, 55 cho góc quét bên phải, 120 cho góc quét bên trái).
3. Khối nguồn động lực của mô hình xe tự hành được thiết kế như thế nào?
Khối nguồn sử dụng 3 cell pin sạc 18650 Panasonic (mỗi cell có điện áp danh định 3.7V, sạc đầy 4.2V, dung lượng 1100 mAh) mắc nối tiếp, cung cấp nguồn tổng 12VDC - 2A. Nguồn 12V này cấp trực tiếp cho IC công suất L293D để nuôi động cơ DC, đồng thời cấp qua IC ổn áp LM7805 để tạo nguồn 5VDC ổn định nuôi PIC16F877A, servo và cảm biến siêu âm.
4. Khối điều khiển động cơ DC sử dụng linh kiện gì và tần số điều chế độ rộng xung (PWM) là bao nhiêu?
Hệ thống sử dụng IC điều khiển cầu H L293D kết hợp với 2 khối ngoại vi CCP1 và CCP2 của PIC16F877A. Tần số băm xung PWM được thiết lập thông qua Timer2 là 5000 Hz (PWM1_Init(5000) và PWM2_Init(5000)).
5. Giải thuật xử lý khi cả hai hướng quét (bên phải và bên trái) đều có vật cản dưới 15 cm là gì?
Khi quét góc phải (count_quy_goc = 55) và góc trái (count_quy_goc = 120) đều trả về cự ly $L < 15\text{ cm}$, hệ thống chuyển sang trạng thái BACKWARD: kích hoạt 2 động cơ DC chạy lùi (move_backward(800, 800)) trong thời gian 200 ms, dừng lại và chuyển về trạng thái CHECK_RIGHT để tiến hành quét lại đường đi.
Kết luận
Đồ án "Thiết kế xe tự hành tránh vật cản dùng PIC" của nhóm sinh viên Trường Đại học Giao thông Vận tải đã giải quyết trọn vẹn bài toán thiết kế một hệ thống robot tự hành cơ bản dựa trên vi điều khiển 8-bit PIC16F877A. Bằng việc kết hợp cảm biến siêu âm SRF-05 trên trục xoay servo SG92R và mạch công suất L293D, nhóm nghiên cứu đã xây dựng thành công giải thuật máy trạng thái điều hướng linh hoạt cho phương tiện khi gặp chướng ngại vật. Toàn bộ sơ đồ nguyên lý, cấu hình ngoại vi và mã nguồn CCS C trong đồ án phản ánh quy trình nghiên cứu thực nghiệm chặt chẽ, đóng vai trò là tài liệu tham khảo hữu ích cho các đề tài học phần vi xử lý và kỹ thuật điều khiển tự động.