Tải bản đầy đủ (.pdf) (13 trang)

Báo cáo bài tập lớn chương 1 Hệ thống điều khiển nhúng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.49 MB, 13 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
------

Link full source: đuôi ở
cuối tài liệu)

BÁO CÁO BÀI TẬP LỚN CHƯƠNG I

GVGD: Nguyễn Vĩnh Hảo Lớp: L02
Nhóm: 6
Sinh viên:
Nguyễn Tấn Lộc (1914023)
Vương Gia Long (1810311)
Lê Bá Nam (1810335)
Nguyễn Ngọc Nhân (1810387)

TPHCM, tháng 9 năm 2021

BÀI TẬP LỚN CHƯƠNG 1
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
Mạch schematic:

Giải thích:
Bộ lpm_counter: chế độ counter up 16 bit. Khi chân PulseIn lên 1, qua cổng not sẽ làm
chân clear về 0, cho phép bộ đếm đếm lên theo chu kì xung clock. Ngõ ra của bộ đếm
(Q[15:0]) sẽ nối tới dữ liệu vào (D[8:1]) của hai mạch chốt 74374 (tương ứng byte cao và
byte thấp của ngõ ra bộ đếm) để chốt số xung đếm được.


IC 74374: Khi PulseIn có xung cạnh xuống qua cổng not sẽ đưa vào chân CLK của hai
IC74374 cho phép IC này chốt kết quả đếm của khối lpm_counter (byte cao và byte thấp).
Chân OEN (output enabled được nối đất (luôn cho phép chốt dữ liệu, chỉ phụ thuộc vào tín
hiệu xung clock).
Tiến hành mơ phỏng:
Xung clk có chu kì 1us, duty cycle = 50%:

Xung PulseIn có chu kì 100us, duty cycle = 50%:

Kết quả thực hiện:
Khi PulseIn có xung cạnh xuống, dữ liệu được chốt ra ngõ ra Q của hai IC74374
Ngõ ra D[15:0] của bộ lpm_counter:

Ngõ ra Q[15:0] được chốt có giá trị nhị phân 00110010 tương đương giá trị thập phân là
50

Nhận xét: Mạch schematic cho kết quả mô phỏng đúng theo lý thuyết, PulseIn có chu kì
100us và duty cycle = 50%, nên độ rộng xung là 50us tương ứng với 50 chu kì xung clock.

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
Mạch schematic

Giải thích:
Bộ lpm_counter0: chế độ counter up 10bit, đếm lên modulus 1000 (0 – 999). Có nhiệm vụ
chuyển đổi 1us ➔ 1ms. cout của lpm_counter0 sẽ lên mức 1 khi lpm_counter0 đếm đủ

modulus 1000, đồng thời sẽ là xung kích hoạt cho lpm_counter1.
Bộ lpm_counter1: chế độ counter up 4bit, đếm lên modulus 10 (0 – 9). Có nhiệm vụ đếm
từ 0ms – 9ms. Ngõ ra q[3..0] sẽ có giá trị từ 0 – 9 được nối tới ICgiải mã LED 7447
IC 7447: Giải mã BCD sang LED 7 đoạn. Ngõ vào q[3..0] cho DCBA, các chân LTN,
RBIN, BIN kích hoạt mức thấp ➔ nối lên Vcc. Do yêu cầu cực âm chung ➔ cần thêm
cổng not ở ngõ ra của IC 7447.
Bảng mô tả cách tạo ra các chữ để hiển thị lên LED 7 đoạn cực âm chung

Số nhị phân

Số 7 6 5 4 3 2 1 0 HEX

dp g f e d c b a

0 0 0 1 1 1 1 1 1 0x3F

1 0 0 0 0 0 1 1 0 0x06

2 0 1 0 1 1 0 1 1 0x5B

3 0 1 0 0 0 0 0 0 0x40

4 0 1 1 0 0 1 1 0 0x66

5 0 1 1 0 1 1 0 1 0x6D

6 0 1 1 1 1 1 0 1 0x7D

7 0 0 0 0 0 1 1 1 0x07


8 0 1 1 1 1 1 1 1 0x7F

9 0 1 1 0 1 1 1 1 0x6F

Tiến hành mô phỏng:
Cài đặt xung clock 1us, thời gian mô phỏng 20ms

Kết quả mô phỏng trong 20ms:

Nhận xét: Kết quả ngõ ra của LED giống với bảng mô tả led 7 đoạn cực âm chung. Tuy
nhiên có 2 số khác biệt

Thơng thường (0x7D) IC 7447 (0x7C)

Thông thường (0x6F) IC 7447 (0x67)

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
Mạch schematic:

Giải thích:
Điều rộng xung PWM bằng cách sử dụng 2 khối lpm_compare, 1 khối lpm_counter và
IC74374 để chốt dữ liệu khi Ton thay đổi và cập nhật ở chu kì sau:
- Khối lpm_counter0 thực hiện mode đếm lên binary 8 bit và sẽ được được reset về 0 khi
chân aclr=1

- Khối lmp_compare0 sẽ tạo ra xung PWM có chu kì T bằng cách so sánh giữa giá trị
đếm của lpm_counter0 (D[7..0]) và giá trị T, khi D[7..0]=T thì sẽ làm tích cực chân aclr
và lmp_counter0 sẽ thực hiện đếm lên lại từ 0
- Khối lpm_compare1 sẽ thực hiện so sánh Ton và D[7..0], nếu D[7..0]  Ton thì xung
PWM có giá trị bằng 1 và ngược lại xung PWM bằng 0
- IC74374 thực hiện chốt dữ liệu khi Ton thay đổi và cập nhật ở chu kì tiếp theo.
Kết quả mô phỏng:
- Với T=10, Ton=0

Nhận xét:
Khi T=10, Ton=0 thì duty cycle=0%, xung PWM=0

- Với T=10, Ton=1

Nhận xét: Khi T=10, Ton=1 thì duty cycle=10%, thời gian mức 1 của xung PWM nhỏ hơn
so với thời gian mức 0.
- Với T=10, Ton=9

Nhận xét: Khi T=10, Ton=9 thì duty cycle=90%, thời gian mức 1 của xung PWM lớn hơn
thời gian mức 0.
- Với T=10, thực hiện thay đổi Ton

Nhận xét:

Khi T=10, thực hiện thay đổi giá trị của Ton ở chu kì thứ 2 từ 5 → 8 thì giá trị Ton=8 được
cập nhật ở chu kì thứ 3 của xung PWM, ở chu kì thứ 3 cũng thực hiện hay đổi Ton từ 8 →
5 → 1 → 4 giá trị Ton =4 được cập nhật ở chu kì thứ 4 (Do Ton sẽ được cập nhật ở chu kì
sau của xung PWM nên tất cả các trường hợp mơ phỏng thì xung PWM sẽ ln bằng 0 ở
chu kì đầu tiên).


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

- Số kênh nhiều nhất là 6 (module PWM và Encoder) nên cần 3 đường địa chỉ để giải mã
các kênh A[2..0]

- Có tất cả 5 module nên cần 3 đường địa chỉ để giải mã các module A[6..4]

- Dùng IC74138 để giải mã địa chỉ đến từng Module:

+ A[6:4] nối vào các ngõ vào C, B, A, còn dư lại A[7] nối vào ngõ G2AN tích cực thấp,
chỉ cho phép IC hoạt động khi A[7]=0, khi bit này lên mức cao thì IC bị bất hoạt

+ Các ngõ vào cho phép G1, G2BN còn lại lần lượt nối lên VCC và GND để cho phép IC
luôn hoạt động và chỉ phụ thuộc vào bit A[7].

+ 5 ngõ ra từ Y0N – Y4N nối đến chân CS của từng module.

- Tầm địa chỉ hoạt động của các module:

CS_ADC: 0x00 – 0x03

CS_DAC: 0x10 – 0x11

CS_PWM: 0x20 – 0x25

CS_ENC: 0x30 – 0x35

CS_DI: 0x40 – 0x41

Mạch Schematic:


Nhận xét:

Thực hiện compile trên quartus không xuất hiện lỗi, mạch được vẽ đúng.

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

- Số kênh nhiều nhất là 16 kênh (module ADC) nên cần 4 đường địa chỉ A[3..0] để giải
mã các kênh.

- Có tất cả 9 module nên cần 4 đường địa chỉ A[7..4] để giải mã các module.

- Dùng IC74138 và 1 cổng NOT để giải mã địa chỉ đến từng Module:

+ A[6:4] nối vào các ngõ vào C, B, A; A[7] vừa qua cổng NOT làm đường giải mã địa chỉ
module thứ 9, vừa nối vào ngõ vào cho phép G2AN để chỉ cho phép tại 1 địa chỉ có 1
module hoạt động (khi A[7]=0, IC giải mã 8 module đầu; khi A[7]=1, IC bị bất hoạt làm
cho chỉ có module thứ 9 hoạt động)

+ Các ngõ vào cho phép G1, G2AN, G2BN lần lượt nối lên VCC và GND như hình để cho
phép IC luôn hoạt động.

+ Các ngõ ra từ nối đến các module.

-Tầm địa chỉ hoạt động của các 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

Mạch Schematic:

Nhận xét:
Thực hiện compile trên quartus không xuất hiện lỗi, mạch được vẽ đúng

Link full source: />

×