《數字邏輯》實驗報告
實驗名稱 | 項目三 電梯控制器設計 | |||||
一、實驗目的 ??? 設計一個多樓層的電梯控制器系統,并能在開發板上模擬電梯運行狀態。可以利用按鍵作為呼叫按鍵,數碼管顯示電梯運行時電梯所在樓層,led燈顯示樓層叫梯狀態。 | ||||||
二、實驗項目內容 本項目設計并完成了1.電梯的模擬邏輯控制 2.將電梯的運行狀態顯示在數碼管上,包含電梯此時的運行狀態(上升、下降與暫停)與當前電梯所處樓層;以及LED燈顯示樓層叫梯狀態 | ||||||
三、實驗設計 參考信息樓電梯設計,電梯由內部與外部控制信號驅動,外部控制信號包含上升與下降,本設計中額外增添停止按鈕;內部控制信號包含電梯的具體目標樓層。 故取四位撥碼開關模擬目的地為不同樓層的信號,由此模擬為高度為4樓的電梯控制器;取三位按鍵模擬控制電梯上升、下降與暫停運行狀態的按鍵;其中模擬按鍵需要進行消抖處理。 狀態轉移圖為: s,u,d分別代表此時電梯 | ||||||
四、實驗過程或算法(關鍵步驟、核心代碼注解等) 文件結構 頂層文件串聯起對應的模塊,消抖模塊用于消除按鍵抖動,lift模塊用于實現電梯的運行狀態轉換與樓層移動,并輸出電梯此時的運行狀態;show模塊在數碼管中顯示電梯此時運行狀態。 頂層文件: Key表示三個控制電梯運行狀態的信號,自高到低位分別為up,down與stop,通過消抖模塊消抖后傳入電梯模擬模塊中;floor_call表示4個不同樓層里的叫樓情況,若呼叫電梯(或目的地為該樓),則相應位上的信號為1.并直接在led燈上顯示出來。 按鍵消抖模塊: 思路為設置多個信號記錄按鍵的輸入信號,如果在一定的時間內,檢測到信號都相同,那么就可以認為按鍵在這一段時間內保持穩定,也就是穩定,認為可以使用此時記錄的信號 信號聲明:clk為系統時鐘,rst為復位信號,call與call_real分別代表實際按鍵輸入的信號以及最后輸出的認為是按鍵穩定后的信號 此部分負責分頻,產生一些短暫的延遲,在這些延遲后進行取樣。 此部分設置三個寄存器,用來連續記錄,目的就是實現檢測輸入的值是否穩定 最后輸出就是,如果三個寄存器寄存的值都相同,那么就可以認為按鍵已經穩定 模擬電梯模塊: 信號聲明: Clk為時鐘信號,reset為復位信號,up,down,stop為電梯控制信號;狀態聲明中,s表示電梯此時運行狀態為停止,u表示此時狀態為上升,d表示此時狀態為下降(之所以設置為4位是與floor信號統一,為了方便后續數碼管顯示此時電梯運行狀態),floor為位寬為4的信號,采用獨熱編碼,只保留1位為1,表示電梯此時停留在相應位的樓層上。 分頻,模擬電梯實際運行速度。 判斷是否可上行或下行。 電梯狀態轉移邏輯: 即復位時調回停止狀態;處于停止狀態時,根據控制使能信號進行狀態變化;處于上升狀態時,若當前樓層被呼叫,則進入停止狀態,直到相應位上撥碼開關關閉,即停止繼續呼叫該層才會繼續電梯移動,當到達最高層且該層無人呼叫時,則自動進入下降狀態,回到第一層的位置;處于下降狀態時與上升狀態時基本一致,只是當處于最底層(1樓)時,不再進入上升狀態,而是保持停止。 樓層轉移邏輯: 在dclk分頻時鐘上升沿觸發,即經歷一段時間后改變樓層狀態;復位時,回歸第一樓;移動取決于電梯此時運行狀態,采用移位的方式進行操作,可以保持floor寄存器中始終存在一位1。 Show模塊: | ||||||
五、實驗過程中遇到的問題及解決情況(主要問題及解決情況) 如何完成電梯控制的邏輯設計? 解決情況:完全解決。 如何在數碼管中顯示電梯此時的運行狀態(包含運行狀況與當前樓層)? 解決情況:完全解決。 如何讓電梯在閑置時自動進入最底層待機? 解決情況:完全解決。 | ||||||
六、實驗結果及分析和(或)源程序調試過程 生成電路圖為: 最終實現效果為, 圖示為呼叫樓層(或目的)樓層為3樓與4樓,此時電梯運行狀態為U即向上UP,當到達三樓時保持S停止狀態,直至三樓的撥碼關閉并控制電梯繼續向上才會運動。 R2為復位開關, V17~W17從左至右為叫樓(或目的地)樓層信號;數碼管最左側顯示當前電梯運行狀況,為D(0)時,表示為DOWN,即下降,為U時,表示為UP,為S(5)時,表示為STOP;最右側顯示為當前電梯所在樓層。按鈕自上至下表示為UP,STOP,DOWN等控制信號。 當電梯到達所在樓層后,需要將該樓層的撥碼開關關閉,以停止對該樓層的持續呼叫;之后按按鈕對電梯進行繼續控制,當達到最高層后自動進入下降狀態,若無繼續呼叫,則最終停留在最底層。 樓層間的轉換大約需要1~2秒。 七、小組分工情況說明 本實驗全部由賈軻20220669完成 ????????????????????????????????????? | ||||||