找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4554|回復(fù): 0
收起左側(cè)

FPGA健身自行車控制器 可編程數(shù)字系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)報(bào)告

[復(fù)制鏈接]
ID:137190 發(fā)表于 2016-9-26 13:00 | 顯示全部樓層 |閱讀模式
0.png

論文和源碼等所有完整資料下載:
健身自行車.rar (1.35 MB, 下載次數(shù): 41)

下面是部分內(nèi)容預(yù)覽:
------------------------------------------------------------------------------------------------------------------
東南大學(xué)電工電子實(shí)驗(yàn)中心
實(shí)驗(yàn)報(bào)
課程名稱:數(shù)字邏輯設(shè)計(jì)實(shí)踐
次實(shí)驗(yàn)
實(shí)驗(yàn)名稱:可編程數(shù)字系統(tǒng)設(shè)計(jì)
院 (系):電工電子實(shí)驗(yàn)中心              專    業(yè):吳健雄學(xué)院
姓    名:凌 昕 彤學(xué)    號(hào):61009323
實(shí) 驗(yàn) 室: 103實(shí)驗(yàn)組別:
同組人員:實(shí)驗(yàn)時(shí)間:201011
評(píng)定成績:審閱教師:
1、申請題目:





    • 題目:健身自行車控制器

2狀態(tài)機(jī)設(shè)計(jì)思路




    • 功能、指標(biāo)、規(guī)模
  • 啟動(dòng)控制器 :在初始狀態(tài)下,按下“F”鍵即能啟動(dòng)
  • 選擇手動(dòng)或者計(jì)時(shí)模式通過按“1”或者“2”選擇手動(dòng)或者計(jì)時(shí)模式
  • 改變訓(xùn)練強(qiáng)度在手動(dòng)或者計(jì)時(shí)模式下,通過數(shù)字鍵輸入選擇相應(yīng)的模式
  • 動(dòng)態(tài)調(diào)整訓(xùn)練強(qiáng)度在訓(xùn)練中,通過按下“A”或者“B”來增加或者減小阻力值
  • 設(shè)置訓(xùn)練時(shí)間在計(jì)時(shí)模式下,逐位輸入數(shù)字,能夠設(shè)置訓(xùn)練時(shí)間
  • 訓(xùn)練時(shí)間有誤可清零修改如果使用者輸錯(cuò)了時(shí)間,可以按“C”清除,顯示恢復(fù)00的狀態(tài)。
  • 計(jì)數(shù)器的倒計(jì)時(shí)功能能從給定的數(shù)字開始倒計(jì)時(shí)至0000,并且從0003開始使蜂鳴器響半秒,停半秒。
  • 正確按鍵LED燈發(fā)光每次按下正確的按鍵,LED亮一下,這可以提示使用者按鈕是否成功按下。
  • 訓(xùn)練時(shí)間有誤自動(dòng)報(bào)錯(cuò)時(shí)間有誤自動(dòng)報(bào)錯(cuò),顯示“EE”一秒,并退回到上一個(gè)狀態(tài)。
  • 選擇自定義模式通過按“A”或者“B”選擇或者設(shè)置訓(xùn)練強(qiáng)度和時(shí)間
  • 預(yù)設(shè)模式可以設(shè)置或者存儲(chǔ)訓(xùn)練模式





    • 面板(顯示)、操作、規(guī)則
1. 當(dāng)使用者剛騎上自行車時(shí),控制器處于初始狀態(tài)。按“F”鍵啟動(dòng)控制器。
2. 使用者從鍵盤輸入 1或2 以選擇“手動(dòng)”、“計(jì)時(shí)”模式,按“E”鍵確認(rèn)。
3. 如果使用者輸入“1”(手動(dòng)模式),顯示器顯示“9”,用戶可以輸入從0到9中的任意數(shù)字,以改變訓(xùn)練強(qiáng)度,按“E”鍵確認(rèn)。訓(xùn)練強(qiáng)度選擇完成之后, 按下“F”按鈕開始訓(xùn)練。 此時(shí)顯示器在高2位顯示阻力值。
4. 如果使用者輸入“2”(計(jì)時(shí)模式),控制器將提示用戶輸入從0到9中的任意數(shù)字,以選擇需要的訓(xùn)練強(qiáng)度,按“E”鍵確認(rèn)。訓(xùn)練強(qiáng)度選擇完成之后,顯示器顯示“00:00”。通過數(shù)字鍵盤輸入數(shù)字, 以決定訓(xùn)練的時(shí)間,輸入時(shí)數(shù)字順序是從左到右。例如,輸入1、0、2、3應(yīng)該在顯示器上上顯示“10:23”,表示訓(xùn)練時(shí)間被設(shè)定為10分23秒,如果輸入正確,按下“E”鍵確認(rèn)。如果使用者輸錯(cuò)了時(shí)間,可以按“C”清除,顯示恢復(fù)00的狀態(tài)。訓(xùn)練時(shí)間輸入完成后,按下“開始”開始訓(xùn)練。此時(shí)6位數(shù)碼管的高2位顯示阻力值,低四位倒計(jì)時(shí)顯示時(shí)間一直到“00:00”。在最后3秒時(shí),蜂鳴器響3下,規(guī)律為響半秒停半秒。 當(dāng)計(jì)時(shí)到00:00時(shí),控制器恢復(fù)到初始狀態(tài),此時(shí)定時(shí)器是“00:00”,阻力為前面設(shè)定的值。
5. 每次按下正確的按鍵,LED亮一下,這可以提示使用者按鈕是否成功按下。
6. 在計(jì)時(shí)模式下,如果輸入的時(shí)間大于“60:00”或小于“01:00”,在按下“E”鍵確認(rèn)后,顯示器顯示 EE,同時(shí)LED亮1秒,然后顯示返回00的狀態(tài)。
7. 增加動(dòng)態(tài)調(diào)整訓(xùn)練強(qiáng)度功能,在訓(xùn)練過程中按“上”或“下”按鈕,實(shí)時(shí)增加或減少訓(xùn)練強(qiáng)度。
8. 計(jì)時(shí)模式提供預(yù)設(shè)模式功能,可存儲(chǔ)10種訓(xùn)練模式(訓(xùn)練強(qiáng)度和時(shí)間預(yù)先設(shè)定好),設(shè)定過程如下:
1) 在基本功能2中,輸入A,選擇“自定義”模式,顯示“0”,直接按下“E”鍵,表示選擇“0”號(hào)預(yù)置訓(xùn)練模式,此時(shí)顯示該模式的訓(xùn)練強(qiáng)度和訓(xùn)練時(shí)間。也可用鍵盤輸入“0”到“9”中的任何數(shù)字選擇相應(yīng)預(yù)置訓(xùn)練模式,按“E”確認(rèn),此時(shí)顯示該模式的訓(xùn)練強(qiáng)度和訓(xùn)練時(shí)間。選擇完成后按“開始”按鈕開始訓(xùn)練。
2) 在基本功能2中,輸入B,選擇“自定義”模式,顯示“0”,用鍵盤輸入“0”到“9”中的任何數(shù)字選擇要設(shè)置的預(yù)置訓(xùn)練模式,按下“預(yù)設(shè)”按鈕,顯示該模式原來預(yù)置的訓(xùn)練強(qiáng)度值,參考基本功能3,重設(shè)預(yù)置訓(xùn)練強(qiáng)度,按“E”確認(rèn),顯示器顯示該模式原來預(yù)置的訓(xùn)練時(shí)間值,參考基本功能3,重設(shè)訓(xùn)練時(shí)間,按下“E”鍵確認(rèn),再按下“預(yù)設(shè)”按鈕存儲(chǔ)預(yù)設(shè)值,回到基本功能初始狀態(tài)。





    • 輸入、輸出接口
輸入:鍵盤
輸出:6位數(shù)碼管、代表蜂鳴器的LED燈和表示正確按鍵的LED燈


3、實(shí)現(xiàn)方案





    • 核心問題
問題1大量狀態(tài)的轉(zhuǎn)換問題。由于該數(shù)字系統(tǒng)狀態(tài)復(fù)雜,如果算入各類大小狀態(tài),共有28個(gè),之間的轉(zhuǎn)換難以處理。
問題2模60計(jì)數(shù)器難以同時(shí)實(shí)現(xiàn)模的設(shè)置和置數(shù)功能
問題3鍵盤如何給出區(qū)別兩次相同按鍵而不是一次按鍵
問題4實(shí)現(xiàn)訓(xùn)練模式的寄存和調(diào)用
問題5當(dāng)輸入時(shí)間有誤,在按下“E”鍵確認(rèn)后,顯示器顯示 EE,同時(shí)LED亮1秒,然后顯示返回00的狀態(tài)。






    • 解決方案
問題1解決方案A考慮到28個(gè)狀態(tài),可以將部分子狀態(tài)歸結(jié)給一個(gè)大狀態(tài),比如輸入四位時(shí)間的四個(gè)子狀態(tài)可以歸一為狀態(tài)機(jī)的一個(gè)狀態(tài)。通過這種方法,狀態(tài)機(jī)一共需要產(chǎn)生的狀態(tài)只剩15種,而且當(dāng)中大部分都是順序狀態(tài)轉(zhuǎn)移的,只有四處需要非順序狀態(tài)轉(zhuǎn)移。所以決定使用一個(gè)模16計(jì)數(shù)器74161來實(shí)現(xiàn)功能。配合一個(gè)16選1數(shù)據(jù)選擇器控制使能端,和若干與非門和數(shù)據(jù)選擇器通過同步置數(shù)方式來實(shí)現(xiàn)非順序狀態(tài)轉(zhuǎn)移。通過控制置零端實(shí)現(xiàn)狀態(tài)清零,比如倒計(jì)時(shí)到0.該方案并不難想到,但是實(shí)現(xiàn)還是有一定難度,主要是因?yàn)楫?dāng)中復(fù)雜的邏輯關(guān)系造成的。其思路并不是非常清晰,而且修改一部分可能會(huì)影響整體。但是實(shí)際電路設(shè)計(jì)中就使用了這方案。
問題1解決方案B使用Rom。這個(gè)思路非常清晰,便于修改,實(shí)現(xiàn)方便。只需要將當(dāng)前狀態(tài)和當(dāng)前鍵盤輸入一起輸入到Rom的輸入端,即可以得到相應(yīng)的狀態(tài)。對(duì)狀態(tài)數(shù)量、轉(zhuǎn)移方式均沒有要求,但是由于規(guī)定,沒有選擇這套方案。
問題2解決方案A通過兩片74168模十加減計(jì)數(shù)器級(jí)聯(lián)。低位片的置數(shù)端特殊處理,使用74257八選四數(shù)據(jù)選擇器。當(dāng)置數(shù)端信號(hào)有效時(shí),將置數(shù)的起點(diǎn)選擇到置數(shù)端。而當(dāng)置數(shù)信號(hào)無效時(shí),到0101輸入到置數(shù)端。從而解決上述問題。
問題2解決方案B直接使用Quartus內(nèi)部產(chǎn)生的函數(shù)器件,使其分別產(chǎn)生模為六和十的計(jì)數(shù)器,通過同步置數(shù)法解決問題。顯然,此法更加方便,優(yōu)于上述方案。
問題3解決方案A將鍵盤的四位Col輸入通過一個(gè)與門和7474消抖電路輸出。使其能夠在按下一個(gè)鍵后,產(chǎn)生一個(gè)上升沿。而這個(gè)上升沿可以作為之后電路的時(shí)鐘信號(hào)。但是這個(gè)理論上可行的方案,在實(shí)際操作中產(chǎn)生了嚴(yán)重的問題。由于電路中的延遲情況未知,出現(xiàn)了大量上次按下的信號(hào)在本次按鍵中生效的現(xiàn)象。通過多種途徑分析電路,最終將鍵盤輸出的上升沿通過觸發(fā)器延遲一定時(shí)間后輸出效果明顯提高。但是這種方法直到最后來存在著一定的小問題沒有很好解決。
問題3解決方案B和方案A相似地,通過觸發(fā)器使按下一個(gè)按鍵后產(chǎn)生一個(gè)單脈沖,寬度為一個(gè)正常的時(shí)鐘周期。而這個(gè)輸出作為使能端輸入到之后的電路模塊中,而之后的電路模塊的時(shí)鐘信號(hào)還是連接正常時(shí)鐘信號(hào)。這樣可以確保在按下一次按鍵,在模塊使能的時(shí)間里有且僅有一個(gè)上升沿。理論上說,本方案會(huì)優(yōu)于A方案,但是依然是延遲的問題。如上方案輸出的單脈沖依然落后與按鍵的信號(hào),同時(shí)還產(chǎn)生了眾多競爭和毛刺,使電路變得十分不穩(wěn)定。所以最后方案B還是被放棄了。
問題4解決方案:最先由于不知道有器件Ram,導(dǎo)致設(shè)想的方案需要使用幾十片計(jì)數(shù)器當(dāng)寄存器使用。但是知道了Ram之后,Ram顯然是不二選擇。當(dāng)設(shè)置狀態(tài)時(shí),即將置數(shù)的信號(hào)輸入到顯示端的同時(shí),輸入到Ram。而在調(diào)用狀態(tài)時(shí),從鍵盤輸入的信號(hào)改為從Ram輸入。
問題5解決方案:通過Quartus內(nèi)部產(chǎn)生的函數(shù)器件判斷當(dāng)前的輸出,當(dāng)符合條件時(shí),Error輸出為1。通過一個(gè)信號(hào)控制數(shù)據(jù)選擇器使顯示端輸出的值為EE,并且使?fàn)顟B(tài)機(jī)狀態(tài)轉(zhuǎn)移。這從理論上來說,是可以實(shí)現(xiàn)的。但是在實(shí)際過程中還是會(huì)出現(xiàn)各種問題需要解決。


4、系統(tǒng)結(jié)構(gòu):






    • 系統(tǒng)框圖
1.002.jpg





    • 模塊功能描述

鍵盤:輸出列掃描信號(hào),接收行信號(hào),并通過寄存器記下四位行信號(hào)和四位列信號(hào)。將上述八位信號(hào)輸入至一個(gè)預(yù)先寫好的Rom,將其轉(zhuǎn)換為四位二進(jìn)制碼。其對(duì)應(yīng)關(guān)系為0000-1,0001-2,……,1001-0,1010-A,1011-B,……并且根據(jù)鍵盤是否被按下,輸出一個(gè)上升沿信號(hào)。相似地,能夠輸出一個(gè)提示正確按鍵的信號(hào)。電路圖如下:
1.003.jpg

控制器:接受來自鍵盤的按鍵信號(hào)和上升沿信號(hào)。以上升沿為時(shí)鐘,通過觸發(fā)器和組合電路實(shí)現(xiàn)狀態(tài)的轉(zhuǎn)移。最后給出當(dāng)前的狀態(tài)值。同時(shí)能夠接受時(shí)間顯示器的進(jìn)位反饋信號(hào),當(dāng)計(jì)時(shí)至0時(shí),異步將狀態(tài)清零。電路圖如下;
1.004.jpg

力度顯示器:接受來自控制器的當(dāng)前狀態(tài)值,鍵盤產(chǎn)生的上升沿信號(hào)以及通過濾過器后有鍵盤產(chǎn)生的信號(hào)(該信號(hào)只為數(shù)字,即0~9)。力度最終所有的輸出都顯示在前兩位數(shù)碼管上。在合適的狀態(tài)下,將數(shù)字信號(hào)輸入到Rom并使其通過最后兩片74169的置數(shù)使其顯示。同時(shí)通過“A”“B”鍵能動(dòng)態(tài)地控制顯示結(jié)果,即當(dāng)前阻力值。電路圖如下:
1.005.jpg

時(shí)間顯示器:時(shí)間顯示器相對(duì)復(fù)雜。在輸入時(shí)間的大狀態(tài)下,需要有四個(gè)子狀態(tài)來控制具體是哪位時(shí)間值在被設(shè)置。需要使用一個(gè)74194作為次狀態(tài)機(jī),來控制四位數(shù)碼管信號(hào)的置數(shù)信號(hào)。并且需要計(jì)數(shù)到00:00時(shí),能給出一個(gè)借位信號(hào),使?fàn)顟B(tài)機(jī)狀態(tài)清零。同時(shí)由于預(yù)設(shè)功能和倒計(jì)時(shí)功能的存在,需要多處使用數(shù)據(jù)選擇器。同時(shí)由于清零功能、報(bào)錯(cuò)功能、末三秒提示功能等需要實(shí)現(xiàn)結(jié)構(gòu)異常復(fù)雜。在此,為了簡化其復(fù)雜性,將當(dāng)前狀態(tài)值輸入至一個(gè)Rom。而將Rom的輸出給至各位控制端、選擇端以及使能端,控制時(shí)間顯示器的工作。但是不管怎么樣,僅從電路的結(jié)構(gòu)和規(guī)�?闯觯瑫r(shí)間顯示器是最復(fù)雜的一個(gè)模塊。電路圖如下:
1.006.jpg








    • 模塊接口標(biāo)注(參數(shù)、協(xié)議)
鍵盤:輸入:列掃描信號(hào);
輸出:行掃描信號(hào)、上升沿信號(hào)、鍵盤碼四位信號(hào)
控制器:輸入:上升沿信號(hào)、鍵盤碼四位信號(hào)、計(jì)數(shù)借位信號(hào)
輸出:四位當(dāng)前狀態(tài)
力度顯示器:輸入:四位當(dāng)前狀態(tài)、上升沿信號(hào)、鍵盤碼四位信號(hào)(判斷是否為“A”“B”)
輸出:力度顯示的兩位數(shù)碼管
時(shí)間顯示器:輸入:四位當(dāng)前狀態(tài)、上升沿信號(hào)、鍵盤碼四位信號(hào)(判斷是否為“A”“B”)
輸出:時(shí)間顯示的四位數(shù)碼管以及四位數(shù)碼管的使能信號(hào)、借位信號(hào)




5、狀態(tài)流程圖:






    • 系統(tǒng)工作狀態(tài)流程
0000:初始狀態(tài)
0001:手動(dòng)/計(jì)時(shí)模式選擇狀態(tài)
0010:輸入力度
0011:確認(rèn)
0100:開始訓(xùn)練
0101:輸入力度
0110:輸入時(shí)間
0111:確認(rèn)
1000:開始訓(xùn)練
1001:選擇預(yù)設(shè)的訓(xùn)練模式
1010:確認(rèn)
1011:開始訓(xùn)練
1100:選擇需要設(shè)置的訓(xùn)練模式號(hào)
1101:輸入時(shí)間
1110:輸入力度

(框中的編號(hào)即是對(duì)應(yīng)著一個(gè)狀態(tài),同時(shí)也是狀態(tài)機(jī)產(chǎn)生的具體狀態(tài)編碼。)

1.007.jpg
6、各主要模塊圖與仿真波形






    • 各模塊的仿真波形,詳細(xì)注釋輸入輸出功能端口,波形意義
鍵盤波形圖:
1.008.jpg
CLKF:快速時(shí)鐘信號(hào),頻率較高
CLK:正常時(shí)鐘信號(hào),有CLKF通過分頻器產(chǎn)生,頻率大約為前者的1/16
Ip_Row:行輸出掃描信號(hào)
Ip_Col:列輸入信號(hào)
OEN:鍵盤給出的上升沿信號(hào)
q:鍵盤的四位二進(jìn)制編碼

控制器波形圖:
1.009.jpg
A:當(dāng)前狀態(tài)值
CLR:清零信號(hào)
RCO:借位信號(hào)
ERROR:錯(cuò)誤信號(hào)
KEY_EN:鍵盤上升沿信號(hào)
KEY:鍵盤按鍵信號(hào)

力度顯示器波形圖:
1.010.jpg
CLKF:快速時(shí)鐘信號(hào)
Q:鍵盤給出的四位二進(jìn)制編碼
STATE_CODE:狀態(tài)編碼信號(hào)
KEY_EN:鍵盤上升沿信號(hào)
FH:力度數(shù)碼管的高位
FL:力度數(shù)碼管的低位

時(shí)間顯示器波形圖:
1.011.jpg
CLKF:快速時(shí)鐘信號(hào)
CLK_1Hz:用于計(jì)時(shí)的1Hz方波信號(hào)
S:當(dāng)前狀態(tài)碼
Q:鍵盤輸入的四位二進(jìn)制編碼
QHH,QHL,QLH,QLL:依次為時(shí)間數(shù)碼管顯示的數(shù)字,順序是由高位到低位
RCO:借位信號(hào)
ERROR:錯(cuò)誤信號(hào)
SOUND_EN:蜂鳴器使能信號(hào)


7設(shè)計(jì)總結(jié)






    • 預(yù)期的目標(biāo)與當(dāng)前實(shí)現(xiàn)功能的差異
從上述設(shè)計(jì)過程中,可以看出原先是打算一次性將提高和基礎(chǔ)部分做完的,但是畢竟通過電腦編程,畫線路圖對(duì)我們而言來說陌生的。當(dāng)中經(jīng)歷了多次挫折,花了很多時(shí)間,也正是由于時(shí)間關(guān)系,最終做出了艱難的選擇:放棄了預(yù)設(shè)部分。但是在整個(gè)設(shè)計(jì)過程中,預(yù)設(shè)等內(nèi)容,包括狀態(tài)和器件,都已經(jīng)基本完成了設(shè)計(jì)。但是由于時(shí)間原因,最后沒有將已經(jīng)完成的預(yù)設(shè)部分調(diào)試成功。這也是本次實(shí)驗(yàn)遺憾的地方�;蛟S,當(dāng)初在構(gòu)思的時(shí)候,就可以選擇先完成基礎(chǔ)部分,然后再通過部分修改的形式增加提高部分。這種思路應(yīng)該更加符合可編程數(shù)字系統(tǒng)設(shè)計(jì)的,而不是像我這樣企圖一口氣吃成胖子。





    • 調(diào)試過程中出現(xiàn)的問題分析及其解決措施
調(diào)試過程中,出現(xiàn)的一個(gè)最明顯的問題就是鍵盤給的上升沿信號(hào)的位置一直有問題,導(dǎo)致置數(shù)一直不正確。出現(xiàn)本次按鍵置上一次按鍵的數(shù)的情況。但是在之后,通過多種方式增加了該上升沿的延遲,使其出現(xiàn)時(shí),鍵盤信號(hào)已經(jīng)明顯穩(wěn)定后才輸出。最終基本上解決了這個(gè)問題。





    • 可以進(jìn)一步發(fā)揮提高的部分
由于我們制作的系統(tǒng)是一個(gè)和我們生活很近的操作系統(tǒng)。因而提高方向應(yīng)該更加人性化、更加便于操作、更加接近我們使用的電子控制系統(tǒng)。在此,我主要有幾個(gè)設(shè)想:
  • 在具體輸入某一位時(shí)間時(shí),該位時(shí)間處于閃爍狀態(tài)。
  • 每次按鍵有蜂鳴器發(fā)音提示
  • 可以選擇具體數(shù)位修改時(shí)間
事實(shí)上,設(shè)想1已經(jīng)努力使用電路去實(shí)現(xiàn)(但最后還是未能實(shí)現(xiàn))。而設(shè)想2則通過正確按鍵提示燈改造即可實(shí)現(xiàn)。






    • 設(shè)計(jì)體會(huì)

雖然不用親自動(dòng)手搭電路,省去了許多搭線之苦,但是必須掌握對(duì)quartus軟件的熟練使用方法。在設(shè)計(jì)電路時(shí),尤其是所需的器件較多,各部分聯(lián)系比較復(fù)雜時(shí),必須采用模塊化設(shè)計(jì)。在調(diào)試過程中,必須先分模塊調(diào)試,最后進(jìn)行總的調(diào)試編譯。在調(diào)試過程中,警告一般可以忽略。
由于沒有使用器件的限制,因此可以最大程度的利用好quartus內(nèi)部提供的器件,以此來簡化電路設(shè)計(jì)。

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表