ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA BÁO CÁO BÀI TẬP NHÓM Môn: Hệ thống điều khiển nhúng Chương 3: ỨNG DỤNG FPGA TRONG THIẾT KẾ CÁC MODULE ĐIỀU KHIỂN GVHD:
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
BÁO CÁO BÀI TẬP NHÓM Môn: Hệ thống điều khiển nhúng Chương 3: ỨNG DỤNG FPGA TRONG THIẾT KẾ CÁC
MODULE ĐIỀU KHIỂN
GVHD: TS Nguyễn Vĩnh Hảo Nhóm 10 – Lớp L01
TP Hồ Chí Minh, 27 tháng 03 năm 2024
Trang 2MỤC LỤC
Bài 1: Module đọc xung encoder 1 Bài 2: Module đọc cảm biến siêu âm: 4 Bài 3 Module nội suy cho máy CNC, Robot: 6
Trang 3Bài 1: Module đọc xung encoder
• Yêu cầu:
- Đầu vào xung clk, encA, encB, rst, mode
- Đầu ra 16 bit D[15:0]
- Khi rst = 1: D[15:0] = 16’h8000
- Khi rst = 0: D[15:0] đếm lên, xuống theo xung encA, encB
- Đếm x1, x2, x4
• Chương trình verilog:
• Mô phỏng:
- Trường hợp đếm lên các mode x1, x2, x4:
Trang 4- Trường hợp đếm xuống các mode x1, x2, x4:
Trang 5- Nhận xét: chương trình đã chạy đúng với yêu cầu đặt ra Khi khởi động giá trị đếm sẽ bắt đầu từ 32768 Khi A nhanh pha hơn B thì đếm lên và khi B nhanh pha hơn A thì đếm xuống Khi rst ở mức cao thì bộ đếm được reset về giá trị ban đầu
Trang 6Bài 2: Module đọc cảm biến siêu âm:
• Yêu cầu:
- Đầu vào clk (1us), EchoPulse
- Đầu ra 16 bit D[15:0], Trigger
- Chân Trigger có độ rộng xung 10us, lặp lại với chu kỳ T = 50ms (Chỉnh T = 1ms
khi mô phỏng)
• Chương trình verilog
Trang 7• Mô phỏng:
Chân Trigger có độ rộng xung 10us, lặp lại với chu kỳ T = 1ms
Ngõ ra D[15:0] cập nhật khi có cạnh xuống của EchoPulse
Nếu trong chu kỳ T=1ms không có xung EchoPulse phản hồi thì ngõ ra D sẽ xuất ra giá trị
65536 (0xFFFF)
Trang 8Bài 3 Module nội suy cho máy CNC, Robot:
• Yêu cầu:
- Viết cho 2 trục X, Y
- Khi có xung cạnh lên của WR, Nx nạp giá trị mới Nhưng giá trị này không tác động ở chu kì T hiện tại, mà tác động ở chu kỳ T kế tiếp
- Khi không ghi giá trị Nx ( không xuất xung WR) ở chu kì T hiện tại, chu
kỳ T kế tiếp không được xuất xung ra chân Pulse.( không được lấy giá trị
cũ để rải tiếp)
- Khi mô phỏng, add thêm 1 ngõ ra flag_T để kiểm tra hết mỗi chu kỳ T
- Mô phỏng N = 10, cố định ( không đổi N)
- Clk = 1us, clk1 = 100us, xuất xung dựa vào clk1, các tín hiệu khác dựa vào clk
- Cho phép buffer tối đa 4 xung WR trong 1 chu kỳ flag_T, không lưu buffer nếu xung WR thứ 5 xảy ra, Nbuff = 4 Khi ghi đủ 4 giá trị cờ flag_full = 1 Kiểm tra chỉ khi flag_full = 0 (khi Nbuff = 3,2,1,0) mới được WR tiếp
Trang 9• Chương trình Verilog:
Trang 12• Mô phỏng
- Khi không có xung WR ở chu kì T hiện tại, thì chu kì T kế tiếp không xuất xung
- Ở chu kỳ có xung WR và Nx = 4, giá trị được lưu vào buffer và được xuất xung khi tới chu kỳ kế tiếp
- Thanh ghi buffer lưu lần lượt giá trị 0,4,2,7 khi có xung WR, trừ trường hợp 5 xung ở cuối cùng Cùng lúc khi thanh ghi buffer lưu đủ 4 giá trị thì ngõ ra flag_full lên mức 1
- Xuất lần lượt 0,4,2,7 xung theo đúng thứ tự và chu kì T
Trang 13- Trường hợp Nx[7] = 1, thì ngõ ra Dir lên mức cao, điều khiển đảo chiều quay động cơ
- Khi ngõ ra LS = 1 thì sẽ không cho phép rải xung
Trang 14- Sử dụng kết hợp 2 module trong Block Diagram/Schematic File để điều khiển đồng thời 2 trục X,Y