Mục lục:
- Bước 1: Sơ đồ hộp đen
- Bước 2: Máy trạng thái
- Bước 3: Bảng Sự thật Máy trạng thái, Phương trình Kích thích và Phương trình Đầu ra
- Bước 4: Gói, Mô-đun con và Ràng buộc
- Bước 5: Cổng I / O cho đèn LED
Video: L I G H T S: 5 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:35
Mục đích của dự án cuối cùng này là tạo ra thứ gì đó tập trung vào tính bền vững và thực hiện các khái niệm thiết kế kỹ thuật số, và để làm được điều này, tôi quyết định thiết kế một hệ thống tiết kiệm điện có thể mở rộng sử dụng vhdl và được tạo cho Basys 3 Board (Artix-7 35T series). Có thể mở rộng vì có thể đặt bất kỳ số lượng cảm biến nào trong một căn phòng và bất kỳ số lượng hệ thống này có thể được đặt xung quanh một tòa nhà hoặc một ngôi nhà. Những gì hệ thống này sẽ làm, về mặt lý thuyết là tiết kiệm hàng nghìn đô la trong các tòa nhà thương mại và giảm tỷ lệ tiêu thụ năng lượng lớn trong các cộng đồng dân cư nhỏ hơn bằng cách triển khai một hệ thống được kết nối với đèn, bộ dò chuyển động, bộ hẹn giờ được hiển thị trên bảy màn hình phân đoạn và các công tắc điều khiển. Ví dụ này đề cập đến một hệ thống duy nhất với ba bộ phát hiện chuyển động, một công tắc chính, một công tắc thủ công / bình thường, bốn màn hình bảy phân đoạn và một đèn duy nhất mà hệ thống điều khiển.
Ví dụ: trong một căn phòng đã chọn, một số thiết bị phát hiện chuyển động sẽ được đặt xung quanh (thiết kế ví dụ này có ba) và mỗi thiết bị sẽ gửi tín hiệu (1) nếu phát hiện chuyển động và (0) nếu không phát hiện ra. Nếu ít nhất một trong các thiết bị phát hiện chuyển động phát hiện chuyển động, đèn sẽ bật nếu chưa bật và vẫn bật nếu đã bật. Tại bất kỳ thời điểm nào, tất cả các thiết bị phát hiện chuyển động không phát hiện ra bất kỳ điều gì, bộ hẹn giờ sẽ bắt đầu đếm ngược trong một khoảng thời gian đã định (có thể điều chỉnh bằng mã) và đèn vẫn sáng trong khi bộ đếm thời gian đếm ngược. Khi đồng hồ đếm ngược kết thúc, đồng hồ sẽ dừng và đèn sẽ tắt. Nếu ít nhất một bộ dò chuyển động phát hiện chuyển động trong khi bộ đếm thời gian đang đếm ngược, bộ hẹn giờ sẽ dừng và đặt lại. Và nếu ít nhất một máy dò chuyển động phát hiện chuyển động trong khi đèn tắt, đèn sẽ ngay lập tức bật sáng.
Hệ thống này có hai chế độ, một với bộ đếm thời gian như đã nêu ở trên, và một chế độ thứ hai có công tắc điều khiển đèn bằng tay (bỏ qua cảm biến). Có một công tắc chính cho phép người dùng chọn chế độ họ muốn sử dụng dựa trên chế độ nào mà họ cảm thấy sẽ tiết kiệm nhiều năng lượng hơn. Bán tại. Một căn phòng như hành lang có thể được hưởng lợi từ chế độ hẹn giờ thụ động - người dùng không chắc khi nào mọi người sẽ đi qua, nhưng việc bật và tắt đèn mỗi khi họ ra vào sẽ là một sự bất tiện, trong khi một căn phòng như vậy như một phòng ngủ với một người dùng sẽ được vận hành theo cách thủ công tốt hơn. Và công tắc chính sẽ hữu ích trong các trường hợp chẳng hạn như nếu người sống trong phòng ngủ phải rời đi trong một khoảng thời gian dài, thì công tắc chính có thể được tắt và chế độ hẹn giờ sẽ hoạt động để tiết kiệm năng lượng hiệu quả hơn.
Vì vậy, trong hệ thống này, có hai máy trạng thái, một máy trạng thái chính và một máy khác dùng cho đồng hồ đếm ngược. Máy trạng thái chính có năm trạng thái được xác định như: 1. "bật sáng, phát hiện chuyển động" (id = 000), 2. "bật sáng, không phát hiện chuyển động" (id = 001), 3. "đèn tắt, không chuyển động được phát hiện "(id = 010), 4." được bật theo cách thủ công "(id = 011) và 5." được tắt theo cách thủ công "(id = 100). Máy trạng thái chính này có bốn đầu vào: công tắc chính (ms), công tắc thủ công / bình thường (ns), tín hiệu cao khi ít nhất một công tắc phát hiện chuyển động và tín hiệu thấp nếu không (orx) và tín hiệu cao khi bộ đếm thời gian được thực hiện và thấp nếu không (td). Máy trạng thái chính có hai đầu ra: đèn (đèn) và tín hiệu cho biết thời điểm bật đồng hồ đếm ngược (hẹn giờ) hoặc (t) (cả hai đều được sử dụng thay thế cho nhau).
Máy trạng thái thứ hai, đồng hồ đếm ngược, có 12 trạng thái: 10 trong số chúng có id được liên kết với số mà bảy phân đoạn đang hiển thị- “seg 10” (id = 1010), “seg 9” (id = 1001), […], “Seg 2” (id = 0010), “seg 1” (id = 0001) và hai trạng thái còn lại đều hiển thị số 0, đại diện cho bộ hẹn giờ đang tắt- vì vậy sẽ có ô trống đầu tiên "trống 1" (id = 1111) và ô trống thứ hai "trống 2" (id = 0000). Đồng hồ đếm ngược có một đầu vào: bộ đếm thời gian (t) và ba đầu ra: số được hiển thị dưới dạng nhị phân với bốn bit (bin) và một tín hiệu cho biết bộ đếm thời gian đã hoàn thành (td).
Bước 1: Sơ đồ hộp đen
Đây là tổng quan về cách toàn bộ hệ thống được cho là hoạt động và được mô tả bằng sơ đồ hộp đen.
- Đồng hồ được sử dụng để xung nhịp máy trạng thái chính và bộ giải mã bảy đoạn; cần có xung nhịp chậm hơn cho bộ đếm xuống, vì vậy có một mô-đun phân chia xung nhịp lấy đầu vào xung nhịp và đầu ra xung nhịp chậm hơn cho bộ đếm xuống.
- Biến trung gian (orx) trong trình bao bọc được gắn với các cảm biến chuyển động và sẽ cao nếu ít nhất một trong các cảm biến phát hiện điều gì đó và thấp hơn nếu không; phương trình boolean cho điều đó chỉ là orx = s (2) hoặc s (1) hoặc s (0).
-
Fsm chính kiểm soát trạng thái chung của hệ thống, tùy thuộc vào các đầu vào (orx, ms, ns, td) và đầu ra trạng thái hiện tại mà nó đang ở (sm) được hiển thị đơn giản hóa với hai tín hiệu được sử dụng cho (bộ hẹn giờ và đèn).
- (bộ đếm thời gian) là một tín hiệu bao bọc được gửi đến fsm bộ đếm xuống làm đầu vào của nó và được điều khiển bởi trạng thái hiện tại của fsm chính. Nó cho biết thời điểm bật bộ hẹn giờ.
- (đèn) là một tín hiệu bao bọc được sử dụng để điều khiển đèn led và được điều khiển bởi trạng thái hiện tại của fsm chính.
-
Bộ đếm xuống fsm kiểm soát những gì mà bảy phân đoạn hiển thị tùy thuộc vào đầu vào (bộ đếm thời gian) và đầu ra trạng thái hiện tại mà nó ở (sd) được hiển thị đơn giản hóa với hai tín hiệu được sử dụng cho (td và bin).
- (td) là tín hiệu trình bao bọc được gửi đến fsm chính làm đầu vào của nó và được điều khiển bởi trạng thái hiện tại của bộ đếm xuống của fsm. Nó hoạt động như một tín hiệu phản hồi cho biết khi bộ hẹn giờ được thực hiện.
- (bin) là tín hiệu trình bao bọc bốn bit được ghép với bốn bit 0 (“0000” & bin) và tám bit kết hợp được gửi tới (q), một tín hiệu trình bao bọc tám bit, lần lượt được gửi đến bảy bộ giải mã phân đoạn trong (ALU_VAL).
-
Mô-đun bảy phân đoạn là mô-đun giống như trên Polylearn; các đầu vào chính của nó lấy một số 8 bit (bin) đến (ALU_VAL) để hiển thị trên bốn màn hình bảy đoạn khác nhau bằng cách sử dụng các đầu ra (SEGMENTS) đến tín hiệu trình bao bọc (seg) và (DISP_EN) tới trình bao bọc (disp_en).
- Vì hai hoặc nhiều hơn bảy màn hình hiển thị phân đoạn không thể hiển thị các chữ số khác nhau cùng một lúc, nên cần có đồng hồ để quay vòng qua bốn sseg, hiển thị chữ số thích hợp tại một thời điểm cho mỗi sseg được bật riêng lẻ và đạp xe đủ nhanh khiến ssegs dường như có trên tất cả cùng một lúc.
- (dấu hiệu và hợp lệ) là không đổi trong suốt chương trình này, vì vậy (dấu hiệu) được đặt vĩnh viễn ở mức thấp và (hợp lệ) được đặt vĩnh viễn ở mức cao.
- (ALU_VAL) lấy tín hiệu trình bao bọc (q) làm đầu vào, đại diện cho số sẽ được hiển thị trên màn hình bảy đoạn ở dạng nhị phân.
- Đầu ra (SEGMENTS) được gửi tới tín hiệu trình bao bọc tám bit (seg) và (DISP_EN) tới tín hiệu trình bao bọc bốn bit (disp_en).
-
Ngoài ra còn có một mô-đun flip flop D không được hiển thị rõ ràng trong biểu đồ nhưng cần thiết cho hai máy trạng thái làm mô-đun con và giúp chuyển đổi trạng thái một cách đồng bộ.
- (3) trong số này là cần thiết cho fsm chính vì 2 ^ (3) = 8> 5 trạng thái để mã hóa
- (4) trong số này là cần thiết cho bộ đếm xuống fsm vì 2 ^ 4 = 16> 12 trạng thái để mã hóa
Bước 2: Máy trạng thái
Để thiết kế đúng hai máy trạng thái, các trạng thái riêng lẻ cần được xác định rõ ràng, với các đầu ra của nó và trạng thái mà nó chuyển sang dựa trên các đầu vào khác nhau có thể có.
Các trạng thái fsm chính:
“Đèn sáng, phát hiện chuyển động” (id = 000)
Đèn đang sáng, ít nhất một trong các bộ phát hiện chuyển động phát hiện chuyển động, vì vậy orx phải ở mức cao và ms được bật.
- Kết quả đầu ra: đèn = 1 và bộ hẹn giờ = 0
- Giữ nguyên trạng thái này khi ms = 1 và orx = 1.
- Chuyển sang trạng thái “đèn sáng, không phát hiện chuyển động” nếu ms = 1 và orx = 0.
- Chuyển sang trạng thái “bật thủ công” nếu ms = 0 và ns = 1.
- Chuyển sang trạng thái “tắt theo cách thủ công” nếu ms = 0 và ns = 0.
“Đèn sáng, không phát hiện chuyển động” (id = 001)
Đèn đang sáng, không phát hiện chuyển động nào từ bất kỳ máy dò chuyển động nào, vì vậy orx phải ở mức thấp và ms được bật. Cũng trong thời gian đầu của trạng thái này, đồng hồ đang được đặt ở mức cao cho fsm đếm ngược bắt đầu đếm ngược, tiến hành đếm ngược và dừng đếm ngược khi fsm đếm ngược cho fsm này biết rằng nó đã đếm xong.
- Đầu ra: đèn = 1 và bộ hẹn giờ = 1.
- Giữ nguyên trạng thái này khi ms = 1 và orx = 0 và td (bộ đếm thời gian được thực hiện) = 0.
- Chuyển sang trạng thái “bật đèn, phát hiện chuyển động” nếu ms = 1 và orx = 1.
- Chuyển sang trạng thái "đèn tắt, không phát hiện chuyển động" nếu ms = 1 và orx = 0 và td = 1.
- Chuyển sang trạng thái “bật thủ công” nếu ms = 0 và ns = 1.
- Chuyển sang trạng thái “tắt theo cách thủ công” nếu ms = 0 và ns = 0.
“Đèn tắt, không phát hiện chuyển động” (id = 010)
Đèn tắt, không phát hiện chuyển động từ bất kỳ cảm biến chuyển động nào và đồng hồ đếm ngược đã hoàn thành, do đó orx phải ở mức thấp, ms được bật và td tắt.
- Đầu ra: đèn = 0 và hẹn giờ = 0.
- Giữ nguyên trạng thái này khi ms = 1 và orx = 0.
- Chuyển sang trạng thái “bật đèn, phát hiện chuyển động” nếu ms = 1 và orx = 1.
- Chuyển sang trạng thái “bật thủ công” nếu ms = 0 và ns = 1.
- Chuyển sang trạng thái “tắt theo cách thủ công” nếu ms = 0 và ns = 0.
“Bật theo cách thủ công” (id = 011)
Đèn đang sáng, bộ phát hiện chuyển động không liên quan, vì vậy ms bị tắt và ns được bật.
- Đầu ra: đèn = 1 và bộ hẹn giờ = 0.
- Giữ nguyên trạng thái này khi ms = 0 và ns = 1.
- Chuyển sang trạng thái “tắt theo cách thủ công” nếu ms = 0 và ns = 0.
- Chuyển sang trạng thái “đèn tắt, không phát hiện chuyển động nếu ms = 1.
“Tắt theo cách thủ công” (id = 100)
Đèn tắt, máy dò chuyển động không liên quan, do đó ms bị tắt, và ns bị tắt.
- Đầu ra: đèn = 0 và hẹn giờ = 0.
- Giữ nguyên trạng thái này khi ms = 0 và ns = 0.
- Chuyển sang trạng thái “bật thủ công” nếu ms = 0 và ns = 1.
- Chuyển sang trạng thái “đèn tắt, không phát hiện chuyển động nếu ms = 1.
Các trạng thái của bộ đếm giảm:
“Seg 10” (id = 1010)
Màn hình bảy đoạn hiển thị điểm 10.
- Kết quả đầu ra: bin = “1010” và td = 0.
- Chuyển đến trạng thái “seg 9” nếu timer = 1.
- Chuyển sang trạng thái “trống 2” nếu timer = 0.
“Seg 9” (id = 1001)
Màn hình bảy đoạn hiển thị số 9.
- Kết quả đầu ra: bin = “1001” và td = 0.
- Chuyển đến trạng thái “seg 8” nếu timer = 1.
- Chuyển sang trạng thái “trống 2” nếu timer = 0.
(Các trạng thái từ "Seg 8" đến "Seg 2" bị bỏ qua vì chúng tuân theo cùng một mẫu với "Seg 10" và "Seg 9" và không cần giải thích)
“Seg 1” (id = 0001)
Màn hình bảy đoạn hiển thị 1.
- Kết quả đầu ra: bin = “0001” và td = 0.
- Chuyển đến trạng thái “trống 2” trên cạnh lên tiếp theo của đồng hồ (không cần đầu vào).
“Trống 2” (id = 1111)
Màn hình bảy đoạn hiển thị 0. Mục đích của trạng thái trống thứ hai là để có một trạng thái riêng biệt khi td = 1 để đảm bảo an toàn.
- Kết quả đầu ra: bin = “1111” và td = 1.
- Chuyển đến trạng thái “trống 1” trên cạnh lên tiếp theo của đồng hồ (không cần đầu vào).
“Trống 1” (id = 0000)
Màn hình bảy đoạn hiển thị 0. Đây là trạng thái hệ thống duy trì khi máy trạng thái chính ở trạng thái “đèn tắt, không phát hiện chuyển động”.
- Kết quả đầu ra: bin = “0000” và td = 0.
- Chuyển đến trạng thái “seg 10” nếu timer = 1.
Bước 3: Bảng Sự thật Máy trạng thái, Phương trình Kích thích và Phương trình Đầu ra
Bước tiếp theo là tạo bảng chân trị cho hai máy trạng thái và phương trình kích thích và phương trình đầu ra cho mỗi fsm. Đối với mỗi phương trình kích thích fsm, cần có phương trình cho mỗi bit được mã hóa trạng thái tiếp theo về trạng thái hiện tại và tín hiệu đầu vào của nó. Đối với mỗi phương trình đầu ra fsm, cần có phương trình cho mỗi tín hiệu đầu ra về trạng thái hiện tại. Tất cả bốn bộ phương trình có thể được rút ra từ các bảng chân trị được mô tả. (qn là bit mã hóa trạng thái tiếp theo cho mỗi máy trạng thái và q là trạng thái hiện tại)
(000) tương đương với q (2) 'q (1)' q (0) 'và (0000) tương đương với q (3)' q (2) 'q (1)' q (0) '
(ví dụ: (0101) là q (3) 'q (2) q (1)' q (0) và (110) là q (2) q (1) q (0) ')
Phương trình kích thích cho fsm chính:
- qn (2) = (ms) '(ns)
- qn (1) = (ms) '(ns)' + (ms) (orx) '[(td) (001) + (010)] + (ms) [(011) + (100)]
- qn (0) = (ms) '(ns)' + (ms) (orx) '[(000) + (td)' (001)]
Phương trình đầu ra cho fsm chính:
- đèn = (000) + (001) + (100)
- bộ đếm thời gian = (001)
Phương trình kích thích cho fsm bộ đếm xuống:
- qn (3) = t [(0000) + (1010) + (1001) + (0001)]
- qn (2) = t [(1000) + (0111) + (0110) + (0101) + (0001)]
- qn (1) = t [(0000) + (1000) + (0111) + (0100) + (0011) + (0001)]
- qn (0) = t [(1010) + (1000) + (0110) + (0100) + (0010) + (0001)]
Phương trình đầu ra cho fsm bộ đếm xuống:
- td = (1111)
- bin (3) = (1010) + (1001) + (1000) + (1111) + (0000)
- bin (2) = (0111) + (0110) + (0101) + (0100) + (1111) + (0000)
- bin (1) = (1010) + (0111) + (0110) + (0011) + (0010) + (1111) + (0000)
- bin (0) = (1001) + (0111) + (0101) + (0011) + (0001) + (1111) + (0000)
Bước 4: Gói, Mô-đun con và Ràng buộc
Như đã giải thích ở Bước 1, các mô-đun này là cần thiết cho dự án này và tất cả đều được gắn với nhau bằng mô-đun trình bao bọc có tiêu đề "final_proj.vhd". Tệp ràng buộc có tiêu đề "Basys3_Master.xdc" được sử dụng để liên kết tất cả các đầu vào và đầu ra của trình bao bọc với các thiết bị chuyển mạch, bảy phân đoạn và cổng I / O trên bảng Basys 3. Công tắc chính phải là công tắc trên bảng gần với mặt dây nhất được bật, công tắc bình thường / thủ công là công tắc gần thứ hai và ba công tắc đại diện cho ba cảm biến chuyển động là ba công tắc ngay bên cạnh công tắc bình thường / thủ công. Tất cả mã (phương trình boolean, khai báo mô-đun, v.v.) đã được viết sẵn trong tệp, vì vậy bạn không cần phải viết bất kỳ điều gì khác để làm cho điều này hoạt động.
Bước 5: Cổng I / O cho đèn LED
Bước cuối cùng cho dự án này là sử dụng đèn led để hiển thị (đèn) có thực sự bật và tắt hay không. Hệ thống dây điện được hiển thị trong hai hình ảnh. Đảm bảo có một điện trở mắc nối tiếp với đèn led (ít nhất là 330 ohms) để không làm cháy đèn led và đảm bảo chân dài của đèn led được kết nối với cùng một đầu cái trên bảng nền như dây màu đỏ được hiển thị (trên cùng ngoài cùng bên phải) và chốt ngắn hơn được nối với đất, cùng một đầu cái với dây màu đen được hiển thị (trên cùng, thứ hai từ trái sang).
Đề xuất:
Động cơ bước Điều khiển động cơ bước Không cần vi điều khiển !: 6 bước
Động cơ bước Điều khiển động cơ bước Không cần vi điều khiển !: Trong phần Hướng dẫn nhanh này, chúng tôi sẽ tạo một bộ điều khiển động cơ bước đơn giản bằng cách sử dụng động cơ bước. Dự án này không yêu cầu mạch phức tạp hoặc vi điều khiển. Vì vậy, không cần thêm ado, chúng ta hãy bắt đầu
Động cơ bước được điều khiển Động cơ bước không có vi điều khiển (V2): 9 bước (có hình ảnh)
Động cơ bước được điều khiển bằng động cơ bước Không cần vi điều khiển (V2): Trong một trong những Hướng dẫn trước đây của tôi, tôi đã chỉ cho bạn cách điều khiển động cơ bước bằng cách sử dụng động cơ bước mà không cần vi điều khiển. Đó là một dự án nhanh chóng và thú vị nhưng nó đi kèm với hai vấn đề sẽ được giải quyết trong Có thể hướng dẫn này. Vì vậy, hóm hỉnh
Đầu máy mô hình điều khiển động cơ bước - Động cơ bước như một bộ mã hóa quay: 11 bước (có hình ảnh)
Đầu máy mô hình điều khiển động cơ bước | Động cơ bước làm bộ mã hóa quay: Trong một trong những phần Hướng dẫn trước, chúng ta đã học cách sử dụng động cơ bước làm bộ mã hóa quay. Trong dự án này, bây giờ chúng ta sẽ sử dụng bộ mã hóa quay động cơ bước đó để điều khiển đầu máy mô hình bằng vi điều khiển Arduino. Vì vậy, không có fu
Âm thanh bay bổng với Arduino Uno Từng bước (8 bước): 8 bước
Acoustic Levitation With Arduino Uno Step-by-by-by (8 bước): bộ chuyển đổi âm thanh siêu âm L298N Dc cấp nguồn cho bộ chuyển đổi âm thanh nữ với chân cắm một chiều nam Arduino UNOBreadboard Cách hoạt động: Đầu tiên, bạn tải mã lên Arduino Uno (nó là một vi điều khiển được trang bị kỹ thuật số và các cổng tương tự để chuyển đổi mã (C ++)
Động cơ bước Điều khiển động cơ bước Động cơ bước - Động cơ bước như một bộ mã hóa quay: 11 bước (có hình ảnh)
Động cơ bước Điều khiển động cơ bước Động cơ bước | Động cơ bước như một bộ mã hóa quay: Có một vài động cơ bước nằm xung quanh và muốn làm điều gì đó? Trong Có thể hướng dẫn này, hãy sử dụng động cơ bước làm bộ mã hóa quay để điều khiển vị trí của động cơ bước khác bằng vi điều khiển Arduino. Vì vậy, không cần phải quảng cáo thêm, chúng ta hãy