0.png (62.69 KB, 下載次數: 98)
下載附件
2016-9-26 12:58 上傳
論文和源碼等所有完整資料下載:
健身自行車.rar
(1.35 MB, 下載次數: 41)
2016-9-26 12:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
下面是部分內容預覽:
------------------------------------------------------------------------------------------------------------------
東南大學電工電子實驗中心 實驗報告 課程名稱:數字邏輯設計實踐 第六次實驗 實驗名稱:可編程數字系統設計 院 (系):電工電子實驗中心 專 業:吳健雄學院 姓 名:凌 昕 彤學 號:61009323 實 驗 室: 103實驗組別: 同組人員:實驗時間:2010年1月1日 評定成績:審閱教師: 1、申請題目:
2、狀態機設計思路:
- 啟動控制器 :在初始狀態下,按下“F”鍵即能啟動
- 選擇手動或者計時模式:通過按“1”或者“2”選擇手動或者計時模式
- 改變訓練強度:在手動或者計時模式下,通過數字鍵輸入選擇相應的模式
- 動態調整訓練強度:在訓練中,通過按下“A”或者“B”來增加或者減小阻力值
- 設置訓練時間:在計時模式下,逐位輸入數字,能夠設置訓練時間
- 訓練時間有誤可清零修改:如果使用者輸錯了時間,可以按“C”清除,顯示恢復00的狀態。
- 計數器的倒計時功能:能從給定的數字開始倒計時至00:00,并且從00:03開始使蜂鳴器響半秒,停半秒。
- 正確按鍵LED燈發光:每次按下正確的按鍵,LED亮一下,這可以提示使用者按鈕是否成功按下。
- 訓練時間有誤自動報錯:時間有誤自動報錯,顯示“EE”一秒,并退回到上一個狀態。
- 選擇自定義模式:通過按“A”或者“B”選擇或者設置訓練強度和時間
- 預設模式可以設置或者存儲訓練模式
1. 當使用者剛騎上自行車時,控制器處于初始狀態。按“F”鍵啟動控制器。 2. 使用者從鍵盤輸入 1或2 以選擇“手動”、“計時”模式,按“E”鍵確認。 3. 如果使用者輸入“1”(手動模式),顯示器顯示“9”,用戶可以輸入從0到9中的任意數字,以改變訓練強度,按“E”鍵確認。訓練強度選擇完成之后, 按下“F”按鈕開始訓練。 此時顯示器在高2位顯示阻力值。 4. 如果使用者輸入“2”(計時模式),控制器將提示用戶輸入從0到9中的任意數字,以選擇需要的訓練強度,按“E”鍵確認。訓練強度選擇完成之后,顯示器顯示“00:00”。通過數字鍵盤輸入數字, 以決定訓練的時間,輸入時數字順序是從左到右。例如,輸入1、0、2、3應該在顯示器上上顯示“10:23”,表示訓練時間被設定為10分23秒,如果輸入正確,按下“E”鍵確認。如果使用者輸錯了時間,可以按“C”清除,顯示恢復00的狀態。訓練時間輸入完成后,按下“開始”開始訓練。此時6位數碼管的高2位顯示阻力值,低四位倒計時顯示時間一直到“00:00”。在最后3秒時,蜂鳴器響3下,規律為響半秒停半秒。 當計時到00:00時,控制器恢復到初始狀態,此時定時器是“00:00”,阻力為前面設定的值。 5. 每次按下正確的按鍵,LED亮一下,這可以提示使用者按鈕是否成功按下。 6. 在計時模式下,如果輸入的時間大于“60:00”或小于“01:00”,在按下“E”鍵確認后,顯示器顯示 EE,同時LED亮1秒,然后顯示返回00的狀態。 7. 增加動態調整訓練強度功能,在訓練過程中按“上”或“下”按鈕,實時增加或減少訓練強度。 8. 計時模式提供預設模式功能,可存儲10種訓練模式(訓練強度和時間預先設定好),設定過程如下: 1) 在基本功能2中,輸入A,選擇“自定義”模式,顯示“0”,直接按下“E”鍵,表示選擇“0”號預置訓練模式,此時顯示該模式的訓練強度和訓練時間。也可用鍵盤輸入“0”到“9”中的任何數字選擇相應預置訓練模式,按“E”確認,此時顯示該模式的訓練強度和訓練時間。選擇完成后按“開始”按鈕開始訓練。 2) 在基本功能2中,輸入B,選擇“自定義”模式,顯示“0”,用鍵盤輸入“0”到“9”中的任何數字選擇要設置的預置訓練模式,按下“預設”按鈕,顯示該模式原來預置的訓練強度值,參考基本功能3,重設預置訓練強度,按“E”確認,顯示器顯示該模式原來預置的訓練時間值,參考基本功能3,重設訓練時間,按下“E”鍵確認,再按下“預設”按鈕存儲預設值,回到基本功能初始狀態。 輸入:鍵盤 輸出:6位數碼管、代表蜂鳴器的LED燈和表示正確按鍵的LED燈
3、實現方案: 問題1:大量狀態的轉換問題。由于該數字系統狀態復雜,如果算入各類大小狀態,共有28個,之間的轉換難以處理。 問題2:模60計數器難以同時實現模的設置和置數功能 問題3:鍵盤如何給出區別兩次相同按鍵而不是一次按鍵 問題4:實現訓練模式的寄存和調用 問題5:當輸入時間有誤,在按下“E”鍵確認后,顯示器顯示 EE,同時LED亮1秒,然后顯示返回00的狀態。 問題1解決方案A:考慮到28個狀態,可以將部分子狀態歸結給一個大狀態,比如輸入四位時間的四個子狀態可以歸一為狀態機的一個狀態。通過這種方法,狀態機一共需要產生的狀態只剩15種,而且當中大部分都是順序狀態轉移的,只有四處需要非順序狀態轉移。所以決定使用一個模16計數器74161來實現功能。配合一個16選1數據選擇器控制使能端,和若干與非門和數據選擇器通過同步置數方式來實現非順序狀態轉移。通過控制置零端實現狀態清零,比如倒計時到0.該方案并不難想到,但是實現還是有一定難度,主要是因為當中復雜的邏輯關系造成的。其思路并不是非常清晰,而且修改一部分可能會影響整體。但是實際電路設計中就使用了這方案。 問題1解決方案B:使用Rom。這個思路非常清晰,便于修改,實現方便。只需要將當前狀態和當前鍵盤輸入一起輸入到Rom的輸入端,即可以得到相應的狀態。對狀態數量、轉移方式均沒有要求,但是由于規定,沒有選擇這套方案。 問題2解決方案A:通過兩片74168模十加減計數器級聯。低位片的置數端特殊處理,使用74257八選四數據選擇器。當置數端信號有效時,將置數的起點選擇到置數端。而當置數信號無效時,到0101輸入到置數端。從而解決上述問題。 問題2解決方案B:直接使用Quartus內部產生的函數器件,使其分別產生模為六和十的計數器,通過同步置數法解決問題。顯然,此法更加方便,優于上述方案。 問題3解決方案A:將鍵盤的四位Col輸入通過一個與門和7474消抖電路輸出。使其能夠在按下一個鍵后,產生一個上升沿。而這個上升沿可以作為之后電路的時鐘信號。但是這個理論上可行的方案,在實際操作中產生了嚴重的問題。由于電路中的延遲情況未知,出現了大量上次按下的信號在本次按鍵中生效的現象。通過多種途徑分析電路,最終將鍵盤輸出的上升沿通過觸發器延遲一定時間后輸出效果明顯提高。但是這種方法直到最后來存在著一定的小問題沒有很好解決。 問題3解決方案B:和方案A相似地,通過觸發器使按下一個按鍵后產生一個單脈沖,寬度為一個正常的時鐘周期。而這個輸出作為使能端輸入到之后的電路模塊中,而之后的電路模塊的時鐘信號還是連接正常時鐘信號。這樣可以確保在按下一次按鍵,在模塊使能的時間里有且僅有一個上升沿。理論上說,本方案會優于A方案,但是依然是延遲的問題。如上方案輸出的單脈沖依然落后與按鍵的信號,同時還產生了眾多競爭和毛刺,使電路變得十分不穩定。所以最后方案B還是被放棄了。 問題4解決方案:最先由于不知道有器件Ram,導致設想的方案需要使用幾十片計數器當寄存器使用。但是知道了Ram之后,Ram顯然是不二選擇。當設置狀態時,即將置數的信號輸入到顯示端的同時,輸入到Ram。而在調用狀態時,從鍵盤輸入的信號改為從Ram輸入。 問題5解決方案:通過Quartus內部產生的函數器件判斷當前的輸出,當符合條件時,Error輸出為1。通過一個信號控制數據選擇器使顯示端輸出的值為EE,并且使狀態機狀態轉移。這從理論上來說,是可以實現的。但是在實際過程中還是會出現各種問題需要解決。
4、系統結構:
1.002.jpg (24.77 KB, 下載次數: 95)
下載附件
2016-9-26 12:57 上傳
鍵盤:輸出列掃描信號,接收行信號,并通過寄存器記下四位行信號和四位列信號。將上述八位信號輸入至一個預先寫好的Rom,將其轉換為四位二進制碼。其對應關系為0000-1,0001-2,……,1001-0,1010-A,1011-B,……并且根據鍵盤是否被按下,輸出一個上升沿信號。相似地,能夠輸出一個提示正確按鍵的信號。電路圖如下:
1.003.jpg (50.58 KB, 下載次數: 99)
下載附件
2016-9-26 12:57 上傳
控制器:接受來自鍵盤的按鍵信號和上升沿信號。以上升沿為時鐘,通過觸發器和組合電路實現狀態的轉移。最后給出當前的狀態值。同時能夠接受時間顯示器的進位反饋信號,當計時至0時,異步將狀態清零。電路圖如下;
1.004.jpg (44.62 KB, 下載次數: 97)
下載附件
2016-9-26 12:57 上傳
力度顯示器:接受來自控制器的當前狀態值,鍵盤產生的上升沿信號以及通過濾過器后有鍵盤產生的信號(該信號只為數字,即0~9)。力度最終所有的輸出都顯示在前兩位數碼管上。在合適的狀態下,將數字信號輸入到Rom并使其通過最后兩片74169的置數使其顯示。同時通過“A”“B”鍵能動態地控制顯示結果,即當前阻力值。電路圖如下:
1.005.jpg (72.08 KB, 下載次數: 499)
下載附件
2016-9-26 12:57 上傳
時間顯示器:時間顯示器相對復雜。在輸入時間的大狀態下,需要有四個子狀態來控制具體是哪位時間值在被設置。需要使用一個74194作為次狀態機,來控制四位數碼管信號的置數信號。并且需要計數到00:00時,能給出一個借位信號,使狀態機狀態清零。同時由于預設功能和倒計時功能的存在,需要多處使用數據選擇器。同時由于清零功能、報錯功能、末三秒提示功能等需要實現結構異常復雜。在此,為了簡化其復雜性,將當前狀態值輸入至一個Rom。而將Rom的輸出給至各位控制端、選擇端以及使能端,控制時間顯示器的工作。但是不管怎么樣,僅從電路的結構和規模看出,時間顯示器是最復雜的一個模塊。電路圖如下:
1.006.jpg (21.99 KB, 下載次數: 95)
下載附件
2016-9-26 12:57 上傳
鍵盤:輸入:列掃描信號; 輸出:行掃描信號、上升沿信號、鍵盤碼四位信號 控制器:輸入:上升沿信號、鍵盤碼四位信號、計數借位信號 輸出:四位當前狀態 力度顯示器:輸入:四位當前狀態、上升沿信號、鍵盤碼四位信號(判斷是否為“A”“B”) 輸出:力度顯示的兩位數碼管 時間顯示器:輸入:四位當前狀態、上升沿信號、鍵盤碼四位信號(判斷是否為“A”“B”) 輸出:時間顯示的四位數碼管以及四位數碼管的使能信號、借位信號
5、狀態流程圖: 0000:初始狀態 0001:手動/計時模式選擇狀態 0010:輸入力度 0011:確認 0100:開始訓練 0101:輸入力度 0110:輸入時間 0111:確認 1000:開始訓練 1001:選擇預設的訓練模式 1010:確認 1011:開始訓練 1100:選擇需要設置的訓練模式號 1101:輸入時間 1110:輸入力度
(框中的編號即是對應著一個狀態,同時也是狀態機產生的具體狀態編碼。)
1.007.jpg (35.04 KB, 下載次數: 101)
下載附件
2016-9-26 12:57 上傳
6、各主要模塊圖與仿真波形
- 各模塊的仿真波形,詳細注釋輸入輸出功能端口,波形意義
鍵盤波形圖:
1.008.jpg (15.02 KB, 下載次數: 106)
下載附件
2016-9-26 12:57 上傳
CLKF:快速時鐘信號,頻率較高 CLK:正常時鐘信號,有CLKF通過分頻器產生,頻率大約為前者的1/16 Ip_Row:行輸出掃描信號 Ip_Col:列輸入信號 OEN:鍵盤給出的上升沿信號 q:鍵盤的四位二進制編碼
控制器波形圖:
1.009.jpg (12.72 KB, 下載次數: 91)
下載附件
2016-9-26 12:57 上傳
A:當前狀態值 CLR:清零信號 RCO:借位信號 ERROR:錯誤信號 KEY_EN:鍵盤上升沿信號 KEY:鍵盤按鍵信號
力度顯示器波形圖:
1.010.jpg (13.41 KB, 下載次數: 99)
下載附件
2016-9-26 12:57 上傳
CLKF:快速時鐘信號 Q:鍵盤給出的四位二進制編碼 STATE_CODE:狀態編碼信號 KEY_EN:鍵盤上升沿信號 FH:力度數碼管的高位 FL:力度數碼管的低位
時間顯示器波形圖:
1.011.jpg (20.3 KB, 下載次數: 98)
下載附件
2016-9-26 12:57 上傳
CLKF:快速時鐘信號 CLK_1Hz:用于計時的1Hz方波信號 S:當前狀態碼 Q:鍵盤輸入的四位二進制編碼 QHH,QHL,QLH,QLL:依次為時間數碼管顯示的數字,順序是由高位到低位 RCO:借位信號 ERROR:錯誤信號 SOUND_EN:蜂鳴器使能信號
7、設計總結 從上述設計過程中,可以看出原先是打算一次性將提高和基礎部分做完的,但是畢竟通過電腦編程,畫線路圖對我們而言來說陌生的。當中經歷了多次挫折,花了很多時間,也正是由于時間關系,最終做出了艱難的選擇:放棄了預設部分。但是在整個設計過程中,預設等內容,包括狀態和器件,都已經基本完成了設計。但是由于時間原因,最后沒有將已經完成的預設部分調試成功。這也是本次實驗遺憾的地方;蛟S,當初在構思的時候,就可以選擇先完成基礎部分,然后再通過部分修改的形式增加提高部分。這種思路應該更加符合可編程數字系統設計的,而不是像我這樣企圖一口氣吃成胖子。
調試過程中,出現的一個最明顯的問題就是鍵盤給的上升沿信號的位置一直有問題,導致置數一直不正確。出現本次按鍵置上一次按鍵的數的情況。但是在之后,通過多種方式增加了該上升沿的延遲,使其出現時,鍵盤信號已經明顯穩定后才輸出。最終基本上解決了這個問題。
由于我們制作的系統是一個和我們生活很近的操作系統。因而提高方向應該更加人性化、更加便于操作、更加接近我們使用的電子控制系統。在此,我主要有幾個設想: - 在具體輸入某一位時間時,該位時間處于閃爍狀態。
- 每次按鍵有蜂鳴器發音提示
- 可以選擇具體數位修改時間
事實上,設想1已經努力使用電路去實現(但最后還是未能實現)。而設想2則通過正確按鍵提示燈改造即可實現。
雖然不用親自動手搭電路,省去了許多搭線之苦,但是必須掌握對quartus軟件的熟練使用方法。在設計電路時,尤其是所需的器件較多,各部分聯系比較復雜時,必須采用模塊化設計。在調試過程中,必須先分模塊調試,最后進行總的調試編譯。在調試過程中,警告一般可以忽略。 由于沒有使用器件的限制,因此可以最大程度的利用好quartus內部提供的器件,以此來簡化電路設計。 |