Báo cáo bài tập lớn chương 1 môn Hệ thống Điều khiển Nhúng, Đại học Bách Khoa ĐHQG TPHCM, do thầy Ts. Nguyễn Vĩnh Hảo phụ trách. Đo độ rộng xung Hiển thị LED 7 đoạn Điều rộng xung Vẽ lại mạch giải mã ở Slide15 trên QuartusBlock Diagram Vẽ lại mạch giải mã ở và Slide19 trên Quartus Block Diagram
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 LỚN CHƯƠNG I
GVGD: Nguyễn Vĩnh Hảo Lớp: L02
Nguyễn Tấn Lộc (1914023)
Vương Gia Long (1810311)
TPHCM, tháng 9 năm 2021
Link full source: https://drive.google.com/file/d/1OkE0N1Xbp9W6UgzPhAntY (Ph ầ n đ uôi ở
cu ố i tài li ệ u)
Trang 2BÀ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%:
Trang 3Xung PulseIn có chu kì 100us, duty cycle = 50%:
Trang 4Kế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
Trang 52 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
Trang 6Số
Số nhị phân
HEX
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:
Trang 7Nhậ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
3 Điều rộng xung
- Đầu vào T (8bit), Ton (8bit), clk (1us)
- Đầu ra PwmOut
Trang 8- Độ 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
Trang 9Nhận xét:
Khi T=10, Ton=0 thì duty cycle=0%, xung PWM=0
- Với T=10, Ton=1
Trang 10Nhậ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
Trang 11Nhậ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ẽ luôn 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
Trang 12CS_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
Trang 13CS_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: https://drive.google.com/file/d/1OkE0N1Xbp9W6UgzPhAntYQBR-mmerXyh/view?usp=sharing