Professional Documents
Culture Documents
Baocao
Baocao
Bài 5. Vẽ lại mạch giải mã ở và Slide19 trên Quartus/ Block Diagram …………..14
i
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
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).
2
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.
3
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…
4
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
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.
6
Kết quả mô phỏng:
Khi Ton = 0:
Khi Ton = 1:
Khi Ton = 2:
7
Khi Ton = 5:
Khi Ton = 9:
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ừ 10→0)
8
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
• Sơ đồ kết nối trên Quartus (giải mã đến module)
10
2. Module DAC
3. Module PWM
11
4. Module Encoder
5. Module DI
12
• 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
CS_DI: 0x40 – 0x41
13
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:
14
Module_DAC:
Module_PWM:
15
Module_ENC:
Module_DI:
16
Module_DO:
Module_CAP:
Module_SPI:
17
Module_I2C:
18