BÀI TẬP NHÓM CHƯƠNG 3

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

ĐẠ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

Họ và tên Mã số sinh viên


Trịnh Quang Huy 2110211
Nguyễn Đăng Khoa 2111529
Hoàng Công Sang 2247803
Nguyễn Minh Tuấn 2247834

TP Hồ Chí Minh, 27 tháng 03 năm 2024


MỤ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
Bà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:

1
- Trường hợp đếm xuống các mode x1, x2, x4:

2
- 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.

3
Bà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)
- Ngõ ra D[15:0] cập nhật khi có cạnh xuống của EchoPulse. (Đơn vị đo us).
- Nếu D = 0xFFFF thì không được tăng D.
• Chương trình verilog

4
• 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).

5
Bà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.

6
• Chương trình Verilog:

7
8
9
• 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.

10
- 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.

11
- 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

12

You might also like