1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO cáo bài tập NHÓM môn hệ thống điều khiển nhúng chương 1 THIẾT kế PHẦN CỨNG DÙNG FPGA

20 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 2,89 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài làm: Ta dùng một bộ đếm lpm_counter0, với xung clock là xung CLK1us, xung PulseIn đóng vai trò Reset bộ đếm xung đi qua cổng NOT đảo giá trị tín hiệu cung cấp cho chân aclr.. - Khi x

Trang 1

ĐẠI HỌC QUỐC GIA ĐẠI HỌC BÁCH KHOA TP.HCM

- 

-BÁO CÁO BÀI TẬP NHÓM

Môn: Hệ thống điều khiển nhúng

Chương 1: THIẾT KẾ PHẦN CỨNG DÙNG FPGA

GVHD: TS Nguyễn Vĩnh Hảo

Nhóm 1 - Lớp L02

TP HCM, ngày 22 tháng 9 năm 2021

Trang 2

Mục lục

Bài 1 Đo độ rộng xung ……… …… 1

Bài 2 Hiển thị led 7 đoạn ……… 4

Bài 3 Điều rộng xung ……… 6

Bài 4 Vẽ lại mạch giải mã ở Slide15 trên Quartus/Block Diagram ………9

Bài 5 Vẽ lại mạch giải mã ở và Slide19 trên Quartus/ Block Diagram ………… 14

Trang 3

Bài tập nhóm chương 1 Bài 1: Đo độ rộng xung

- Đầu vào xung PulseIn, clk (1us)

- Đầu ra D[15:0] chỉ độ rộng xung PulseIn (đơn vị us)

- Sử dụng Khối lpm_counter trong Megafunctions\Arithmetic

Bài làm:

Ta dùng một bộ đếm lpm_counter0, với xung clock là xung CLK(1us), xung PulseIn đóng vai trò Reset bộ đếm (xung đi qua cổng NOT đảo giá trị tín hiệu cung cấp cho chân aclr)

- Khi xung PulseIn bằng 1 thì bộ đếm sẽ đếm lên, cứ sau khi ngõ vào CLK là cạnh lên thì ngõ ra sẽ tăng lên một giá trị

- Khi xung PulseIn bằng 0 thì chân aclr nhận mức 1 Reset bộ đếm (ngõ ra giữ giá trị 0)

Sơ đồ thiết kế:

Mô phỏng:

Đặt giá trị ngõ vào CLK, PulseIn: CLK là xung clock có độ rộng 1us, PulseIn là xung

ta muốn đo chiều dài

1

Trang 4

Kết quả mô phỏng:

Nhận xét:

➢ Nhìn vào kết quả mô phỏng chúng ta có thể thấy được kết quả tương đối chính xác Tại các cạnh xuống của xung PulseIn ngõ ra D[15 0] của bộ đếm được Reset về

0 và tiếp tục đếm lên nếu có cạnh lên của xung PulseIn ( trong khi bộ đếm được Reset thì ngõ ra Q các IC chốt sẽ giữ giá trị đếm được của ngõ ra D của bộ đếm)

➢ Trong một số trường hợp độ dài xung đếm được sẽ có sai số Độ dài xung thực tế

có thể lớn hơn hoặc nhỏ hơn, độ chênh lệch lớn nhất là 1us Nguyên nhân là vì giá trị đếm

sẽ thay đổi khi có cạnh lên của xung CLK vì vậy trong một số trường hợp điểm bắt đầu và kết thúc của xung PulseIn nằm trước hay nằm sau các cạnh lên của xung CLK sẽ cho sai

số khác nhau (độ chênh lệch lớn nhất xấp xỉ 1us)

Trang 5

Cụ thể như 2 kết quả dưới đây:

Độ dài xung PulseIn khoảng 2,6us nhưng đọc được chỉ là 2us

Độ dài xung PulseIn khoảng 2,2us nhưng đọc được là 3us

Kết luận: Độ rộng thực tế của một xung dao động xung quanh giá trị đọc được với biên

độ xấp xỉ bằng một chu kì xung CLK, vì vậy chúng ta chỉ biết được độ rộng xung một cách tương đối Để độ chính xác càng cao thì ta nên đưa xung CLK với chu kì nhỏ

3

Trang 6

Bài 2: Hiển thị LED 7 đoạn

- Đầu vào xung clk (1us)

- Đầu ra D[6:0]: dữ liệu LED 7 đoạn (cực âm chung)

- Số LED hiển thị: 1

- Hiển thị từ 0ms – 9ms, sau đó lặp lại

- Giải mã LED bằng IC 7447

Bài làm:

Ta dùng bộ đếm lpm_counter0 đầu vào xung clock CLK(1us) đếm lên giá trị 999

để tạo xung 1ms cấp cho lpm_counter1 Bộ đếm lpm_counter0 và lpm_counter1 tự Reset về 0 khi đạt ngưỡng giá trị ta đã cài đặt (Modulus = 1000 và Modulus = 10) Ngõ ra của bộ đếm lpm_counter1 (giá trị đếm từ 0 - 9) được kết nối đến các chân

A, B, C, D của IC 7447 để thực hiện giải mã sang tín hiệu LED Các tín hiệu ở ngõ ra

IC 7447 đi qua cổng NOT cung cấp cho các chân LED có cực âm chung

Sơ đồ thiết kế:

Mô phỏng:

Đặt giá trị ngõ vào CLK là xung clock có độ rộng 1us Các ngõ ra LED_A, LED_B…

Trang 7

Kết quả mô phỏng:

Nhận xét:

➢ Kết quả mô phỏng chính xác, tín hiệu 7 đoạn LED có giá trị thể hiện đúng các con

số muốn hiển thị trên LED 7 đoạn

➢ Thời gian hiển thị của các giá trị từ 0 đến 9 đúng với yêu cầu 1ms, ngoại trừ giá trị hiển thị 0 đầu tiên khi chương trình khởi động có thời gian chưa chính xác

(thực tế chỉ được 998,5us)

➔ Nguyên nhân là vì cạnh lên đầu tiên của xung CLK bộ đếm có giá trị là 1, nên thời gian từ khi chương trình hoạt động đến khi bộ đếm nhảy lên giá trị 999 (lpm_counter1 nhảy lên 1) thì tổng thời gian chỉ là 998,5us

5

Trang 8

Bài 3: Điều rộng xung

- Đầu vào T (8bit), Ton (8bit), clk (1us)

- Đầu ra PwmOut - Độ phân giải 8 bit (255 mức)

- Ton, T chỉ thay đổi 1 lần đầu lúc khởi động, T =10 hoặc 1 giá trị bất kỳ Ton = 0 – T

- Sử dụng Khối lpm_counter và lpm_compare trong Megafunctions\Arithmetic

Bài làm:

Ta dùng bộ đếm lpm_counter0 chế độ up counter đầu vào xung clock CLK(1us) và ngõ ra cấp cho lpm_campare1 và lpm_campare0

lpm_campare1 so sánh cho T (ngõ ra chế động agb- “>”) và lpm_campare0 lần lượt là lpm so sánh cho Ton (chế độ aleb – “< hoặc =”) lpm_campare2 so sánh giữa Ton và số 0,

và cổng and2 để and ngõ ra giữa lpm_campare2 và lpm_campare0 và đầu ra là Output PWMout Ta thêm vào ngõ ra của lpm_counter output Val[7 0] để kiểm tra xem giá trị của lpm_counter

Sơ đồ thiết kế:

Mô phỏng dạng sóng: set clk với chu kì 1us, T=10 và Ton= 0- 10

Trang 9

Kết quả mô phỏng:

Khi Ton = 0:

Khi Ton = 1:

Khi Ton = 2:

7

Trang 10

Khi Ton = 5:

Khi Ton = 9:

Khi Ton = 10:

Nhận xét:

➢ Khi Ton = 0 thì giá trị PWMout = 0 toàn bộ (Do ta đã dùng bộ lpm_campare để

so sánh với 0 kết hợp and để giá trị ra luôn luôn = 0 khi Ton bằng 0)

➢ Khi Ton =1 đến 9 Độ rộng xung sẽ tăng dần (như hình).

➢ Khi Ton =10 Ngõ ra =1 toàn bộ quá trình, vẫn có gai tại điểm 10→

0 (Clear từ

Trang 11

Bài 4: Vẽ lại mạch giải mã ở slide15 trên Quartus/Block Diagram

Yêu cầu thiết kế

Bài làm:

Dựa trên giải mã địa chỉ trên slide

9

Trang 12

Sơ đồ kết nối trên Quartus (giải mã đến module)

Sơ đồ chốt dữ liệu và chọn chip /CS trong từng

module 1 Module ADC

Trang 13

2 Module DAC

3 Module PWM

11

Trang 14

4 Module Encoder

5 Module DI

Trang 15

Kết quả khi build chương trình thiết kế

Nhận xét:

➢ Đã hoàn thành nhiệm vụ của bài tập là giải mã đến module

➢ Chương trình khi build không xảy ra lỗi

Địa chỉ của từng module:

CS_ADC: 0x00 – 0x03

CS_DAC: 0x10 – 0x11

CS_PWM: 0x20 – 0x25

CS_ENC: 0x30 – 0x35

13

Trang 16

Bài 5 Mạch giải mã ở Slide19 trên Quartus/ Block Diagram

Bài làm:

Sơ đồ thiết kết

Module_ADC:

Trang 17

Module_PWM:

15

Trang 18

Module_DI:

Trang 19

Module_CAP:

Module_SPI:

17

Trang 20

Nhận xét: Biên dịch thành công!

Địa chỉ từng module:

CS_ADC: 0x00 - 0x0F

CS_DAC: 0x10 - 0x11

CS_PWM: 0x20 - 0x23

CS_ENC: 0x30 - 0x33

CS_DI: 0x40 - 0x43

CS_DO: 0x50 - 0x51

CS_CAP: 0x60 - 0x65

CS_SPI: 0x70

CS_I2C: 0x80

Ngày đăng: 31/12/2021, 04:46

HÌNH ẢNH LIÊN QUAN

➢ Khi Ton =1 đến 9. Độ rộng xung sẽ tăng dần (như hình). - BÁO cáo bài tập NHÓM môn hệ thống điều khiển nhúng chương 1 THIẾT kế PHẦN CỨNG DÙNG FPGA
hi Ton =1 đến 9. Độ rộng xung sẽ tăng dần (như hình) (Trang 10)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w