eda課程設(shè)計--直流電機測控儀_第1頁
已閱讀1頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  1 緒論</b></p><p>  1.1 FPGA背景</p><p>  目前以硬件描述語言(Verilog或VHDL)描述的邏輯電路,可以利用邏輯綜合和布局、布線工具軟件,快速地?zé)浿罠PGA上進行測試,這一過程是現(xiàn)代集成電路設(shè)計驗證的技術(shù)主流。這些可編程邏輯元件可以被用來實現(xiàn)一些基本的邏輯門數(shù)字電路(比如與門、或門、異或門、非門

2、)或者更復(fù)雜一些的組合邏輯功能,比如譯碼器等。在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件,例如觸發(fā)器(Flip-flop)或者其他更加完整的記憶塊,從而構(gòu)成時序邏輯電路。</p><p>  系統(tǒng)設(shè)計師可以根據(jù)需要,通過可編輯的連接,把FPGA內(nèi)部的邏輯塊連接起來。這就好像一個電路試驗板被放在了一個芯片里。一個出廠后的成品FPGA的邏輯塊和連接可以按照設(shè)計者的需要而改變,所以FPGA可以完成所需要的

3、邏輯功能。</p><p>  FPGA一般來說比專用集成電路(ASIC)的速度要慢,無法完成更復(fù)雜的設(shè)計,并且會消耗更多的電能。但是,F(xiàn)PGA具有很多優(yōu)點,比如可以快速成品,而且其內(nèi)部邏輯可以被設(shè)計者反復(fù)修改,從而改正程序中的錯誤,此外,使用FPGA進行除錯成本較低。廠商也可能會提供便宜、但是編輯能力有限的FPGA產(chǎn)品。因為這些芯片有的可編輯能力較差,所以這些設(shè)計的開發(fā)是在普通的FPGA上完成的,然后將設(shè)計轉(zhuǎn)移

4、到一個類似于專用集成電路的芯片上。在一些技術(shù)更新比較快的行業(yè),F(xiàn)PGA幾乎是電子系統(tǒng)中的必要部件,因為在大批量供貨前,必須迅速搶占市場,這時FPGA方便靈活的優(yōu)勢就顯得很重要。</p><p>  1.2 FPGA發(fā)展前景</p><p>  通常來說半導(dǎo)體產(chǎn)業(yè)是周期性行業(yè),其周期一般為4到5年。但是隨著新技術(shù)和應(yīng)用的快速發(fā)展,現(xiàn)今半導(dǎo)體周期越來越短,且每一個周期都有典型應(yīng)用作為拉動點,比

5、如過去的PC、后來的通信行業(yè)。FPGA也明顯符合這種規(guī)律。但不同的是,當(dāng)ASIC和ASSP蕭條的時候,往往迎來FPGA的大發(fā)展。2008年以來的金融危機使得半導(dǎo)體行業(yè)平均跌幅大于10%,但是市場數(shù)據(jù)卻顯示FPGA行業(yè)依然強勁增長。危機和低迷使ASIC和ASSP制造者為謹(jǐn)慎起見,不敢貿(mào)然推出新產(chǎn)品,避免巨大的NRE費用。而FPGA恰好能迎合這一需求。</p><p>  當(dāng)今,半導(dǎo)體市場格局已成三足鼎立之勢,F(xiàn)PG

6、A,ASIC和ASSP三分天下。市場統(tǒng)計數(shù)據(jù)表明,F(xiàn)PGA已經(jīng)逐步侵蝕ASIC和ASSP的傳統(tǒng)市場,并處于快速增長階段。</p><p>  在全球市場中,Xilinx、Altera兩大公司對FPGA的技術(shù)與市場仍然占據(jù)絕對壟斷地位。兩家公司占有將近90%市場份額,專利達6000余項之多,而且這種壟斷仍在加強。同時,美國政府對我國的FPGA產(chǎn)品與技術(shù)出口進行苛刻的審核和禁運,使得國家在航天、航空乃至國家安全領(lǐng)域都

7、受到嚴(yán)重制約。因此,研發(fā)具有自主知識產(chǎn)權(quán)的FPGA技術(shù)與產(chǎn)品對打破美國企業(yè)和政府結(jié)合構(gòu)成的壟斷,及國家利益意義深遠。</p><p>  作為一種可編程邏輯器件,F(xiàn)PGA在短短二十多年中從電子設(shè)計的外圍器件逐漸演變?yōu)閿?shù)字系統(tǒng)的核心。伴隨半導(dǎo)體工藝技術(shù)的進步,F(xiàn)PGA器件的設(shè)計技術(shù)取得了飛躍發(fā)展及突破。通過FPGA器件的發(fā)展歷程來看,今后仍將朝下以下幾個方向發(fā)展:</p><p>  ? 高

8、密度、高速度、寬頻帶、高保密;</p><p>  ? 低電壓、低功耗、低成本、低價格;</p><p>  ? IP軟/硬核復(fù)用、系統(tǒng)集成;</p><p>  ? 動態(tài)可重構(gòu)以及單片集群;</p><p>  ? 緊密結(jié)合應(yīng)用需求,多元化發(fā)展。</p><p>  此外,集成了FPGA 架構(gòu)、硬核CPU 子系統(tǒng)(A

9、RM/MIPS/MCU)及其他硬核IP 的芯片已經(jīng)發(fā)展到了一個“關(guān)鍵點”,它將在今后數(shù)十年中得到廣泛應(yīng)用,為系統(tǒng)設(shè)計人員提供更多的選擇。例如,以應(yīng)用為導(dǎo)向,在受專利保護的FPGA平臺架構(gòu)上無縫集成特定功能模塊,以形成具備行業(yè)競爭優(yōu)勢(高性價比)的獨特產(chǎn)品。Altera、Cypress®半導(dǎo)體、Intel®和Xilinx®公司等供應(yīng)商相繼在最近一年發(fā)布或者開始發(fā)售SoC FPGA器件。</p>

10、<p>  在FPGA領(lǐng)域,Xilinx和Altera長期穩(wěn)坐第一第二的位置。根據(jù)最新Form-10K數(shù)據(jù)顯示,其分別占有48%和41%的市場份額。其中Xilinx凈銷售額為23.1億美元,凈收入為6.3億美元;Altera凈銷售額為19.5億美元,凈收入為7.8億美元。這兩家公司一直以來是市場和技術(shù)的領(lǐng)頭羊,而剩余的市場份額被Lattice占據(jù)多數(shù)。</p><p>  為了在競爭中占據(jù)主動,Xili

11、nx與Altera新近分別宣布其下一代FPGA產(chǎn)品都將采用高k金屬柵技術(shù)的 28nm工藝,以滿足諸如云計算、移動互聯(lián)網(wǎng)和3G應(yīng)用等領(lǐng)域所不斷增長的帶寬需求。由于PLD器件采用更高技術(shù)的工藝節(jié)點制造,無疑可以降低成本、提升性能,尤其是能夠改進一直以來為ASIC所詬病的功耗水平,以適應(yīng)更廣闊的設(shè)計應(yīng)用。</p><p>  Xilinx和Altera雖然控制世界將近90%的FPGA市場,但是他們的產(chǎn)品是大多以純FPG

12、A為主。“平臺化”已成為FPGA一個發(fā)展趨勢,盡管Xilinx和Altera在FPGA“平臺化”方面在最近幾年也有涉及,但概念和特點比較簡單,沒有完全形成氣候。</p><p>  權(quán)威市場調(diào)研機構(gòu)Gartner 2010年初的預(yù)測數(shù)據(jù)表明,F(xiàn)PGA正處于一個加速增長的市場勢態(tài)中。未來5年,市場平均增長幅度超過12.6%,這種增長幅度遠大于ASIC和ASSP市場。同時,市場數(shù)據(jù)表明其行業(yè)平均毛利大于60%。FPG

13、A行業(yè)需要更大的市場規(guī)模,以吸引更多的使用者。預(yù)計未來5年,隨著產(chǎn)量增加,成本進一步降低,F(xiàn)PGA市場份額將會持續(xù)增大。</p><p>  1.3 課程設(shè)計任務(wù)</p><p>  在本課程設(shè)計中使用Altera公司的EP2C35系列的FPGA芯片,利用SOPC-NIOSII-EP2C35開發(fā)板設(shè)計一個直流電機測控儀控制和測量開發(fā)板上的直流電機,設(shè)計模塊要求能產(chǎn)生可調(diào)占空比的PWM波以對

14、直流電機進行速度控制,并能通過開發(fā)板上直流電機模塊的霍爾器件反饋的信息,計算直流電機轉(zhuǎn)速,并顯示電機的信息。</p><p> ?。?)基本技能掌握:</p><p>  1 掌握時鐘作用下頻率的控制</p><p>  2 掌握十進制計數(shù)器的設(shè)計</p><p>  3 掌握16位的鎖存器的設(shè)計</p><p>  

15、4 掌握顯示譯碼功能的設(shè)計</p><p><b> ?。?)基本功能要求</b></p><p>  1 利用旋轉(zhuǎn)電位器實現(xiàn)轉(zhuǎn)速的控制</p><p>  2 利用PWM信號實現(xiàn)轉(zhuǎn)速的控制</p><p> ?。?)擴展功能選擇性要求</p><p>  1 利用4×4鍵盤陣列實現(xiàn)鍵盤

16、轉(zhuǎn)速的控制</p><p>  2 利用16*16點陣顯示實現(xiàn)轉(zhuǎn)速的顯示</p><p><b>  2 設(shè)計原理</b></p><p>  2.1 直流電機測控總原理</p><p>  直流電機測控儀總體設(shè)計硬件由圖2.1所示,F(xiàn)PGA為Altera公司的EP2C35系列,輸入設(shè)備有時鐘、4*4鍵盤、霍爾器件。時

17、鐘采用1MHZ,4*4鍵盤給FPGA輸入一個4位數(shù)組信號,霍爾器件輸入計數(shù)脈沖。輸出設(shè)備有直流電機、16*16點陣LED,直流電機可采用直接由旋鈕控制轉(zhuǎn)速或者PWM控制轉(zhuǎn)速,16*16點陣LED顯示每分鐘轉(zhuǎn)速以及設(shè)計者名字。</p><p>  圖2.1總體設(shè)計硬件框架圖</p><p>  2.2 直流電機與霍爾器件工作原理</p><p>  直流電機是我們生活

18、當(dāng)中常用的一種電子設(shè)備。其內(nèi)部結(jié)構(gòu)如下圖2.2所示:</p><p>  圖2.2直流電機結(jié)構(gòu)圖</p><p>  下面就上圖來說明直流電機的工作原理。將直流電源通過電刷接通電樞繞組,使電樞導(dǎo)體有電流流過, 由于電磁作用,這樣電樞導(dǎo)體將會產(chǎn)生磁場。同時產(chǎn)生的磁場與主磁極的的磁場產(chǎn)生電磁力,這個電磁力作用于轉(zhuǎn)子,使轉(zhuǎn)子以一定的速度開始旋轉(zhuǎn)。這樣電機就開始工作。</p><

19、;p>  為了能夠測定出電機在單位時間內(nèi)轉(zhuǎn)子旋轉(zhuǎn)了多少個周期,我們在電機的外部電路中加入了一個開關(guān)型的霍爾原件(44E),同時在電子轉(zhuǎn)子上的轉(zhuǎn)盤上加入了一個能夠使霍爾原件產(chǎn)生輸出的帶有磁場的磁鋼片。當(dāng)電機旋轉(zhuǎn)時,帶動轉(zhuǎn)盤是的磁鋼片一起旋轉(zhuǎn),當(dāng)磁鋼片旋轉(zhuǎn)到霍爾器件的上方時,可以導(dǎo)致霍爾器件的輸出端高電平變?yōu)榈碗娖?。?dāng)磁鋼片轉(zhuǎn)過霍爾器件上方后,霍爾器件的輸出端又恢復(fù)高電平輸出。這樣電機每旋轉(zhuǎn)一周,則會使霍爾器件的輸出端產(chǎn)生一個低脈沖,

20、我們就可以通過檢測單位時間內(nèi)霍爾器件輸出端低脈沖的個數(shù)來推算出直流電機在單位時間內(nèi)的轉(zhuǎn)速。直流電機和開關(guān)型霍爾器件的電路原理圖如下圖2.3所示:</p><p>  圖2.3直流電機、霍爾器件電路圖</p><p>  直流電機驅(qū)動有兩種方式,其一是可以由模擬電平來驅(qū)動,把電路圖上4與3短接,可以旋轉(zhuǎn)實驗箱左邊的旋鈕,調(diào)節(jié)旋鈕的可以控制速度;其二是通過PWM控制,把電路圖的6與5短接,PW

21、M信號高電位選通三極管,讓直流電機轉(zhuǎn)動,不過為了讓直流電機獲得較大的轉(zhuǎn)速,同樣要把電機左邊的旋鈕調(diào)到比較大的位置。</p><p>  2.3 4*4鍵盤驅(qū)動</p><p>  對鍵盤的電位掃描,就可以確定當(dāng)前的鍵有沒有被按下。單個按鍵電路如圖2.4所示,在按鍵沒有被按下時,在判斷電位點可以獲取高電位,在鍵被按下時,在判斷電位為低電位,這樣可以通過判斷點電位的高低即可確定按鍵有沒有被按下

22、。</p><p>  圖2.4單個按鍵電路圖</p><p>  4*4的鍵盤與FPGA連接圖如下圖2.5所示,掃描鍵盤由FPGA的8個控制端口確定,控制行端口設(shè)置為buffer模式,控制列端口設(shè)置為in模式,掃描鍵盤的方法為先給第一行鍵盤為低電平,其余行列為高電平,讀取縱列的電位值,如果沒鍵被按下,在電位判斷端口獲取的為高電位,如果有鍵按下,電位判斷點的電平不全為零,由電位值的第幾位為

23、零就可以確定當(dāng)前行那個鍵被按下,依次對四行鍵盤掃描,掃描結(jié)束輸出4位數(shù)組的信號,以告訴那個鍵被按下。</p><p>  圖2.5 4*4矩陣鍵盤電路原理圖</p><p>  2.4 16*16點LED陣列驅(qū)動</p><p>  16*16點陣由此256個LED通過排列組合而形成16行*16列的一個矩陣式的LED陣列,俗稱16*16點陣。單個的LED的電路如下圖

24、20-1所示:</p><p>  圖2.6單個LED電路圖</p><p>  由上圖可知,對于單個LED的電路圖當(dāng)Rn輸入一個高電平,同時Cn輸入一個低電平時,電路形成一個回路,LED發(fā)光。也就是LED點陣對應(yīng)的這個點被點亮。16*16點陣也就是由16行和16列的LED組成,其中每一行的所有16個LED的Rn端并聯(lián)在一起,每一列的所有16個LED的Cn端并聯(lián)在一起。通過給Rn輸入一個高

25、電平,也就相當(dāng)于給這一列所有LED輸入了一個高電平,這時只要某個LED的Cn端輸入一個低電平時,對應(yīng)的LED就會被點亮。具體的電路如下圖2.7所示:</p><p>  圖2.7 16*16點陣電路原理圖</p><p>  16*16點陣LED驅(qū)動時,依次選通LED點陣行端口,每次只能選通一個端口(Cn),字符譯碼的第N列結(jié)果在列端口(Rn)輸入,通過高速依次點亮led點陣就可看到led

26、點陣上顯示的數(shù)字和文字。</p><p>  2.5 PWM控制原理</p><p>  PWM控制就是對脈沖的寬度進行調(diào)制的技術(shù)。即通過對一系列脈沖的寬度進行調(diào)制來等效地獲得所需要的波形。</p><p>  如下圖2.8所示,設(shè)定值計數(shù)器設(shè)置PWM信號的占空比。當(dāng)U\D=1,輸入CLK2,使設(shè)定值計數(shù)值的輸出值增加,PWM的占空比增加,電機轉(zhuǎn)速加快;當(dāng)U\D=0

27、,輸入CLK2使設(shè)定值計算器的輸出值減小,PWM的占空比減小,電機轉(zhuǎn)速變慢。在CLK0的作用下,鋸齒波計數(shù)器輸出周期性線性增加的鋸齒波。當(dāng)計數(shù)值小于設(shè)定值時,數(shù)字比較器輸出低電平;當(dāng)計數(shù)值大于設(shè)定值時,數(shù)字比較器輸出高電平,由此產(chǎn)生周期性的PWM波形。旋轉(zhuǎn)反向控制電路控制直流電動機轉(zhuǎn)向和啟/停,該電路由兩個2選1多路選擇器組成,Z\F鍵控制選擇PWM波形從正端Z進入H橋,還是從負(fù)端進入H橋,以控制電機的旋轉(zhuǎn)方向。START鍵通過“與”門

28、控制PWM的輸出,實現(xiàn)對電機的工作/停止控制。H橋電路由大功率晶體管組成,PWM波形通過方向控制電路送到H橋,經(jīng)功率放大以后驅(qū)動電機轉(zhuǎn)動。</p><p>  圖2.8 PWM控制電路原理圖</p><p><b>  3 程序設(shè)計</b></p><p>  3.1 總體程序設(shè)計思路</p><p>  程序總體設(shè)

29、計分為時鐘控制信號模塊、十進制計數(shù)模塊、顯示模塊、鍵盤模塊、pwm控制模塊、十六位鎖存模塊。設(shè)計思路為十進制計數(shù)器對霍爾器件的脈沖數(shù)計數(shù),時鐘控制在到了六秒時將計數(shù)值鎖存到16位鎖存器,顯示模塊的點陣LED顯示鎖存器所鎖存的值以及設(shè)計者名字,同時鍵盤模塊送出鍵盤所按得鍵值控制直流電機轉(zhuǎn)速的增減。</p><p>  3.2 時鐘控制信號程序設(shè)計</p><p>  時鐘控制信號中要為下級

30、鎖存模塊提供鎖存控制型號,同時為計數(shù)模塊提使能和清零信號。設(shè)計當(dāng)中由Cnttemp對1MHZ的上升緣計數(shù)來產(chǎn)生1HZ的信號(Cnttemp<5000送出高電平,Cnttemp>5000送出低電平),Count對秒信號計數(shù),鎖存控制信號在第六秒結(jié)束時送出,清零信號在第7秒送出,所以要先產(chǎn)生秒脈沖。</p><p><b>  1M的時鐘 </b></p><

31、;p><b>  是否</b></p><p><b>  小于等于大于</b></p><p><b>  輸出 </b></p><p>  圖3.1時鐘控制信號流程圖</p><p>  注:Enal為輸出控制計數(shù)器的使能信號。</p><

32、p>  Clr為輸出控制計數(shù)器的清零信號。</p><p>  Load為輸出控制鎖存器的鎖存信號。</p><p>  圖3.2 時鐘控制信號模塊</p><p>  3.3 十進制計數(shù)器程序設(shè)計</p><p>  設(shè)計當(dāng)中要顯示當(dāng)前直流電機的轉(zhuǎn)速,因而要4位十進制的計數(shù)器,對轉(zhuǎn)速脈沖計數(shù)。設(shè)計當(dāng)中只需要設(shè)計一位十進制的計數(shù)器,設(shè)計

33、當(dāng)中特別注意對進位脈沖的處理。</p><p><b>  設(shè)計流程如下:</b></p><p><b>  計數(shù)脈沖</b></p><p><b>  是否</b></p><p>  圖3.3 十進制計數(shù)器程序設(shè)計流程圖</p><p>  注

34、:CLR為外部輸入的清零信號。</p><p>  ENA為外部輸入的計數(shù)使能信號。</p><p>  十進制計數(shù)器對計數(shù)脈沖計數(shù),當(dāng)計數(shù)值到了9時,計數(shù)值重新到零,同時在歸零的同時輸出進位脈沖。</p><p>  圖3.4十進制計數(shù)模塊</p><p>  3.4 鎖存模塊程序設(shè)計</p><p>  16位鎖

35、存模塊設(shè)計較為簡單,只有在控制信號為高電平時鎖存當(dāng)前輸入的信號值,在低電平時保持鎖存被鎖存的輸入信號。</p><p><b>  是否</b></p><p>  圖3.5 16位鎖存器設(shè)計流程</p><p>  注:IN為16位輸入信號,OUT為16位輸出信號,LOAD為輸入鎖存信號。</p><p>  信號D

36、IN對IN信號進行保存,只有在LOAD=’1’時才把IN信號保存到DIN,DIN再傳遞給OUT。</p><p>  圖3.6 16位鎖存模塊</p><p>  3.5 PWM控制信號程序設(shè)計</p><p>  PWM控制信號為驅(qū)動直流電機轉(zhuǎn)速的使能信號,PWM控制由四個輸入信號控制pwm的占空比,本設(shè)計當(dāng)中最高為15/16,由控制信號”1111”獲得,最低為0

37、,由控制信號”0000”獲得。</p><p><b>  流程如:</b></p><p><b>  時鐘1MHZ</b></p><p><b>  是</b></p><p><b>  否</b></p><p><

38、b>  輸出pwm控制信號</b></p><p>  圖3.7 PWM控制流程圖</p><p>  注:KEY為輸入數(shù)據(jù)大小</p><p>  CYCLE對時鐘從0到16000循環(huán)計數(shù),當(dāng)CYCLE=0時把輸出電平置為高電平,CYCLE=輸入值*1000時把輸出電平置為低電平,這樣就可以通過外部輸入控制占空比,從而控制直流電機的轉(zhuǎn)速。<

39、/p><p>  圖3.8 PWM控制模塊</p><p>  3.6 鍵盤掃描程序設(shè)計</p><p>  PWM控制直流電機是通過掃描鍵盤的按鍵來控制方波的占空比,所按得鍵值越來,方波的占空比越大,最高可達15/16,最低為0。鍵盤掃描輸出為一個4為的數(shù)組。掃描簡單的來所就是給行低電平,看列獲得的電位就可確定在此行所按下的鍵。大體流程如下:</p>

40、<p><b>  時鐘1MHZ輸入</b></p><p>  圖3.9鍵盤掃描流程圖</p><p>  鍵盤模塊大體設(shè)計思路為,由信號COUNT對時鐘0到3循環(huán)計數(shù),在CONT=N時對第N列掃描,判斷列端電位,確定當(dāng)前按鍵的鍵位,輸出鍵值。</p><p><b>  圖3.10鍵盤模塊</b></p

41、><p>  3.7 顯示模塊程序設(shè)計</p><p>  顯示模塊為16*16點陣LED。大體流程如下:</p><p><b>  時鐘1KHZ</b></p><p><b>  是否</b></p><p>  圖3.11 顯示模塊程序流程</p><

42、;p>  顯示程序中,我們把十進制計數(shù)器的百、十、個位數(shù)輸入,設(shè)計當(dāng)中,只記錄六秒鐘的轉(zhuǎn)速,顯示的為每分鐘的轉(zhuǎn)速。點陣LED顯示需要譯碼,按每列譯碼。點陣LED每次點亮一列,高速點亮就可以在陣面上看到顯示漢字或者數(shù)字。</p><p>  圖3.12 點陣顯示模塊</p><p><b>  設(shè)計過程介紹</b></p><p><

43、b>  4.1 設(shè)計過程</b></p><p><b> ?。?)測速顯示</b></p><p>  當(dāng)電機旋轉(zhuǎn)時,帶動轉(zhuǎn)盤是的磁鋼片一起旋轉(zhuǎn),當(dāng)磁鋼片旋轉(zhuǎn)到霍爾器件的上方時,可以導(dǎo)致霍爾器件的輸出端高電平變?yōu)榈碗娖?。?dāng)磁鋼片轉(zhuǎn)過霍爾器件上方后,霍爾器件的輸出端又恢復(fù)高電平輸出。這樣電機每旋轉(zhuǎn)一周,則會使霍爾器件的輸出端產(chǎn)生一個低脈沖,我們就可以

44、通過檢測單位時間內(nèi)霍爾器件輸出端低脈沖的個數(shù)來推算出直流電機在單位時間內(nèi)的轉(zhuǎn)速。</p><p>  電機的轉(zhuǎn)速通常是指每分鐘電機的轉(zhuǎn)速,也就是單位為rpm,實際測量過程中,為了減少轉(zhuǎn)速刷新的時間,通常都是5~10秒刷新一次。如果每6秒鐘刷新一次,那么相當(dāng)于只記錄了6秒鐘內(nèi)的電機轉(zhuǎn)數(shù),把記錄的數(shù)據(jù)乘10即得到一分鐘的轉(zhuǎn)速。最后將這個數(shù)據(jù)在點陣上顯示出來。為了使顯示的數(shù)據(jù)能夠在點陣上顯示穩(wěn)定,在這個數(shù)據(jù)的輸出時加入

45、了一個16位的鎖存器,把鎖存的數(shù)據(jù)送給點陣顯示,這樣就來會因為在計數(shù)過程中,數(shù)據(jù)的變化而使點陣顯示不斷變化。</p><p> ?。?)pwm產(chǎn)生控制</p><p>  通過控制占空比,從而達到控制直流電機控制。用按鍵先預(yù)設(shè)一個速度值,讓電動機的實際轉(zhuǎn)速與預(yù)設(shè)值比較,如果不相等,就調(diào)節(jié)占空比使之達到預(yù)設(shè)值。</p><p><b>  4.2設(shè)計體會&l

46、t;/b></p><p>  EDA技術(shù)對于我們電子信息工程專業(yè)的學(xué)生來說是一本很重要的專業(yè)技術(shù)課程,EDA技術(shù)極大地提高了電路設(shè)計的效率和可操作性,減輕了設(shè)計者的勞動強度,是一門實際應(yīng)用很廣泛的技術(shù)?,F(xiàn)在對EDA的概念或范疇用得很寬。包括在機械、電子、通信、航空航天、化工、礦產(chǎn)、生物、醫(yī)學(xué)、軍事等各個領(lǐng)域,都有EDA的應(yīng)用。目前EDA技術(shù)已在各大公司、企事業(yè)單位和科研教學(xué)部門廣泛使用。例如在飛機制造過程

47、中,從設(shè)計、性能測試及特性分析直到飛行模擬,都可能涉及到EDA技術(shù)。</p><p>  所以,EDA課程的學(xué)習(xí)對于我們自身素質(zhì)和能力的提高有十分重要的積極作用,應(yīng)該很認(rèn)真的學(xué)習(xí)。</p><p>  本次課程設(shè)計為期2周,在這兩周中,我們經(jīng)歷了從什么都不懂,到有些了解,到逐漸熟悉EDA各軟件使用,及VHDL語言的運用幾個過程。在此過程中我學(xué)到了很多書本上學(xué)不到的東西,同時也鞏固了以前所學(xué)

48、的知識。在做子模塊編寫的時候遇到了很多問題,開始時什么都不知道,就到網(wǎng)上搜集資料,查看老師給的資料,再不懂的就問老師,后來弄清了其中的原理后,經(jīng)過多次練習(xí),逐漸能夠解決編寫程序中的問題,把模塊編寫出來。然而,在仿真時,也遇到了一點困難,想要的結(jié)果不能得到正確的顯示,但是經(jīng)過對結(jié)果的一點點分析,從錯誤中思考產(chǎn)生錯誤的原因,修改電路圖,最終得到想要的結(jié)果,完成了本次課程設(shè)計。</p><p>  通過這次課程設(shè)計使我

49、懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,從而提高自己的實際動手能力和獨立思考的能力,才能真正為社會服務(wù)。</p><p>  在此,也要感謝同組的成員,我基礎(chǔ)不好,很多都不懂,感謝他在這兩周的無私幫助,細(xì)心講解,還要感謝給予我們悉心指導(dǎo)的老師,在這兩周中,多虧您們不厭其煩的指教。謝謝!</p><p><b&

50、gt;  參考文獻</b></p><p>  [1] 《SOPCIIEDA實驗指導(dǎo)書》(第二版)</p><p>  [2] 《SOPCII使用手冊》(第二版)</p><p>  [3] 《EDA技術(shù)與應(yīng)用》(第4版). 江國強編著. 電子工業(yè)出版社,2013</p><p>  [4] 《EDA技術(shù)實用教程(第二版),潘松

51、、黃繼業(yè)編著 ,科學(xué)出版社 ,2005</p><p><b>  附錄A:設(shè)計程序</b></p><p>  時鐘控制信號模塊程序</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee

52、.std_logic_arith.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  --------------------------------------------------------------------</p><p>  entity teltcl is</p>&l

53、t;p>  port( Clk : in std_logic; --時鐘輸入1Mhz</p><p>  ena : out std_logic; --允許計數(shù)</p><p>  clr : out std_logic; --計數(shù)器清零信號產(chǎn)生</p><p>  load

54、 : out std_logic --鎖存、顯示輸出允許</p><p><b>  ); </b></p><p>  end teltcl;</p><p>  --------------------------------------------------------------------</p>

55、<p>  architecture behave of teltcl is</p><p>  signal clk1hz :std_logic;--1HZ時鐘信號</p><p>  signal count : std_logic_vector(2 downto 0);--6秒計數(shù)</p><p>  signal clr1

56、 :std_logic;--清零信號</p><p>  signal ena1 :std_logic;--允許計數(shù)信號</p><p>  signal load1 :std_logic;--允許計數(shù)信號</p><p>  signal cq1,cq2,cq3,cq4 : INTEGER RANGE 0 TO 15;--計數(shù)數(shù)據(jù)<

57、/p><p><b>  begin</b></p><p>  process(clk) --1HZ信號產(chǎn)生</p><p>  variable cnttemp : INTEGER RANGE 0 TO 999999;</p><p><b>  begin</b></p>&l

58、t;p>  IF clk='1' AND clk'event THEN </p><p>  IF cnttemp=999999 THEN cnttemp:=0; </p><p><b>  ELSE </b></p><p>  IF cnttemp<500000 THEN clk1hz<='

59、;1'; </p><p>  ELSE clk1hz<='0'; </p><p><b>  END IF; </b></p><p>  cnttemp:=cnttemp+1; </p><p><b>  END IF; </b></p><

60、p><b>  end if;</b></p><p>  end process;</p><p>  process(Clk1hz)--6秒計數(shù)</p><p><b>  begin</b></p><p>  if(Clk1hz'event and Clk1hz='1

61、') then</p><p>  count<=count+1;</p><p>  if count<6 then</p><p>  ena1<='1';load1<='0';clr1<='0';</p><p>  elsif count=6

62、 then</p><p>  load1<='1';ena1<='0';clr1<='0';</p><p>  elsif count=7 then</p><p>  ena1<='0';load1<='0';clr1<='1&#

63、39;;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  ena<=ena1; load<=load1;clr<=clr1;</p><p>  end process;</p><

64、p>  end behave;</p><p>  十進制計數(shù)器模塊程序 </p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL; </p><p>  ENTITY CNT10 IS</p><p>  PORT (CLK:IN S

65、TD_LOGIC; --計數(shù)時鐘信號</p><p>  CLR:IN STD_LOGIC; --清零信號</p><p>  ENA:IN STD_LOGIC; --計數(shù)使能信號</p><p>  CQ :OUT INTEGER RANGE 0 TO 15;--4位計數(shù)結(jié)果輸出</p><p>  CARRY

66、_OUT:OUT STD_LOGIC); --計數(shù)進位</p><p>  END CNT10;</p><p>  ARCHITECTURE ART OF CNT10 IS </p><p>  SIGNAL CQI :INTEGER RANGE 0 TO 15;</p><p><b>  BEGIN</b>

67、;</p><p>  PROCESS(CLK,ENA) IS</p><p><b>  BEGIN</b></p><p>  IF CLR= '1' THEN CQI<= 0; ----計數(shù)器異步清零</p><p>  elsIF CLK'EVENT AND CLK=

68、'1' THEN </p><p>  IF ENA= '1' THEN </p><p>  iF CQI=10 THEN cqi<=1;</p><p>  ELSE CQI<=cqi+1;</p><p>  END IF; ----等于9,則計數(shù)器清零</p

69、><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  PROCESS (CQI) IS</p><p><b>  BEGIN</b></p&

70、gt;<p>  IF CQI=10 THEN CARRY_OUT<= '1'; ----進位輸出</p><p>  ELSE CARRY_OUT<= '0';</p><p><b>  END IF;</b></p><p>  END PROCESS;</p>

71、<p><b>  CQ<=CQI;</b></p><p><b>  END ART;</b></p><p><b>  鍵盤掃描程序</b></p><p>  library IEEE;</p><p>  use IEEE.STD_LOGIC_1

72、164.ALL;</p><p>  use IEEE.STD_LOGIC_ARITH.ALL;</p><p>  use IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p><b>  PORT (</b></p><p>  clk : IN std_l

73、ogic; </p><p>  rst : IN std_logic; </p><p>  row : OUT std_logic_vector(3 DOWNTO 0); -- 行線 </p><p>  column : IN std_lo

74、gic_vector(3 DOWNTO 0); -- 列線</p><p>  pwm : out integer range 0 to 15 ); --電機控制信號</p><p><b>  END ck;</b></p><p>  ARCHITECTURE arch OF ck IS</p><p> 

75、 SIGNAL div_cnt : std_logic_vector(24 downto 0);</p><p>  SIGNAL scan_key : std_logic_vector(3 DOWNTO 0); --掃描碼寄存器 </p><p>  SIGNAL key_code : integer range 0

76、to 15; </p><p>  signal keynum : integer range 0 to 15;</p><p><b>  BEGIN</b></p><p>  row <= scan_key;</p><p>  pwm <= key_code;</p><p&g

77、t;  PROCESS(clk,rst)</p><p><b>  BEGIN</b></p><p>  IF (NOT rst = '1') THEN</p><p>  div_cnt <= "0000000000000000000000000"; </p><p>

78、;  ELSIF(clk'EVENT AND clk = '1')THEN</p><p>  div_cnt <= div_cnt + 1; </p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  PROCESS(div

79、_cnt(20 downto 19))</p><p><b>  BEGIN</b></p><p>  CASE div_cnt(20 downto 19) IS</p><p>  WHEN "00"=> scan_key<="1110";</p><p>  W

80、HEN "01"=> scan_key<="1101";</p><p>  WHEN "10"=> scan_key<="1011";</p><p>  WHEN "11"=> scan_key<="0111";</p>

81、<p><b>  END CASE;</b></p><p>  END PROCESS;</p><p>  PROCESS(clk,rst)</p><p><b>  BEGIN</b></p><p>  IF (NOT rst = '1') THEN<

82、/p><p>  key_code <= 0; </p><p>  ELSIF(clk'EVENT AND clk='1')THEN</p><p>  CASE scan_key IS --檢測何處有鍵按下</p><p>  WHEN "1110" =></p>

83、<p>  CASE column IS</p><p>  WHEN "1110" =></p><p>  key_code <= 13; </p><p>  WHEN "1101" =></p><p>  key_code <= 12; <

84、;/p><p>  WHEN "1011" =></p><p>  key_code <= 11; </p><p>  WHEN "0111" =></p><p>  key_code <= 10; </p><p>  WHEN OTH

85、ERS =></p><p><b>  NULL;</b></p><p><b>  END CASE;</b></p><p>  WHEN "1101" =></p><p>  CASE column IS</p><p>  WHE

86、N "1110" =></p><p>  key_code <= 15; </p><p>  WHEN "1101" =></p><p>  key_code <= 9; </p><p>  WHEN "1011" =></

87、p><p>  key_code <= 6; </p><p>  WHEN "0111" =></p><p>  key_code <= 3; </p><p>  WHEN OTHERS =></p><p><b>  NULL;</b&g

88、t;</p><p><b>  END CASE;</b></p><p>  WHEN "1011" =></p><p>  CASE column IS</p><p>  WHEN "1110" =></p><p>  key_cod

89、e <= 0; </p><p>  WHEN "1101" =></p><p>  key_code <= 8; </p><p>  WHEN "1011" =></p><p>  key_code <= 5; </p><

90、;p>  WHEN "0111" =></p><p>  key_code <= 2; </p><p>  WHEN OTHERS =></p><p><b>  NULL;</b></p><p><b>  END CASE;</b>&l

91、t;/p><p>  WHEN "0111" =></p><p>  CASE column IS</p><p>  WHEN "1110" =></p><p>  key_code <= 14; </p><p>  WHEN "1101&

92、quot; =></p><p>  key_code <= 7; </p><p>  WHEN "1011" =></p><p>  key_code <= 4; </p><p>  WHEN "0111" =></p><p&g

93、t;  key_code <= 1; </p><p>  WHEN OTHERS =></p><p><b>  NULL;</b></p><p><b>  END CASE;</b></p><p>  WHEN OTHERS =></p><

94、;p>  key_code <= 15; </p><p><b>  END CASE;</b></p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p><b>  END arch;</b><

95、;/p><p>  16*16點陣顯示程序</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  use ieee.std_logic_unsigned

96、.all;</p><p>  --------------------------------------------------------------------</p><p>  entity asd is</p><p>  port( clk : in std_logic; --時鐘輸入</p><p>  i

97、n3,in2,in1,in0:in std_logic_vector(3 downto 0);</p><p>  keyc : out std_logic_vector(15 downto 0); --點陣列控制</p><p>  keyr : out std_logic_vector(15 downto 0) --點陣行顯示</p><

98、p><b>  ); </b></p><p><b>  end asd;</b></p><p>  --------------------------------------------------------------------</p><p>  architecture behave of

99、 asd is</p><p>  signal cdount : std_logic_vector(3 downto 0);</p><p>  signal dount : std_logic_vector(8 downto 0);</p><p>  signal S : std_logic_vector(3 downto 0);</p>

100、;<p>  signal a : std_logic_vector(3 downto 0);</p><p>  signal b : std_logic_vector(3 downto 0);</p><p>  signal c : std_logic_vector(3 downto 0);</p><p>  si

101、gnal d : std_logic_vector(3 downto 0);</p><p><b>  begin</b></p><p><b>  a<=in2;</b></p><p><b>  b<=in1;</b></p><p><b

102、>  c<=in0;</b></p><p><b>  d<=in3;</b></p><p>  process(clk) --顯示時序控制 </p><p><b>  begin</b></p><p>  if clk'event and

103、 clk='1' then</p><p>  dount<=dount+1;</p><p>  if dount=255 then</p><p>  if S=15 then</p><p>  S<="0000";</p><p><b>

104、  else</b></p><p><b>  s<=S+1;</b></p><p><b>  end if;</b></p><p><b>  s<=s+1;</b></p><p><b>  else</b><

105、/p><p><b>  s<=S;</b></p><p><b>  end if;</b></p><p>  if cdount<15 then</p><p>  cdount<=cdount+1;</p><p><b>  els

106、e</b></p><p>  cdount<="0000";</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p> 

107、 process(cdount,s)</p><p><b>  begin</b></p><p>  case cdount is</p><p>  when "0000"=>keyc<="0000000000000001"; --列選擇(lg7088Ah)</p><

108、;p>  when "0001"=>keyc<="0000000000000010";</p><p>  when "0010"=>keyc<="0000000000000100";</p><p>  when "0011"=>keyc<=&qu

109、ot;0000000000001000";</p><p>  when "0100"=>keyc<="0000000000010000";</p><p>  when "0101"=>keyc<="0000000000100000";</p><p>

110、;  when "0110"=>keyc<="0000000001000000";</p><p>  when "0111"=>keyc<="0000000010000000";</p><p>  when "1000"=>keyc<="00

111、00000100000000";</p><p>  when "1001"=>keyc<="0000001000000000";</p><p>  when "1010"=>keyc<="0000010000000000";</p><p>  wh

112、en "1011"=>keyc<="0000100000000000";</p><p>  when "1100"=>keyc<="0001000000000000";</p><p>  when "1101"=>keyc<="0010000

113、000000000";</p><p>  when "1110"=>keyc<="0100000000000000";</p><p>  when "1111"=>keyc<="1000000000000000";</p><p>  when ot

114、hers=>keyc<="0000000000000000";</p><p><b>  end case;</b></p><p>  if s="0000" then</p><p>  if a="0000" then</p><p>

115、;  case cdount is</p><p>  when "0000"=>keyr<="1111111111111111" ; </p><p>  when "0001"=>keyr<="1111111111111111" ; </p><p>  wh

116、en "0010"=>keyr<="1111111111111111" ; </p><p>  when "0011"=>keyr<="1100000000000011" ; </p><p>  when "0100"=>keyr<="110

117、0000000000011" ; </p><p>  when "0101"=>keyr<="1100111111110011" ; </p><p>  when "0110"=>keyr<="1100111111110011" ; </p><p>

118、;  when "0111"=>keyr<="1100111111110011" ; </p><p>  when "1000"=>keyr<="1100111111110011" ; </p><p>  when "1001"=>keyr<=&quo

119、t;1100111111110011" ; </p><p>  when "1010"=>keyr<="1100111111110011" ; </p><p>  when "1011"=>keyr<="1100000000000011" ; </p><

120、;p>  when "1100"=>keyr<="1100000000000011" ; </p><p>  when "1101"=>keyr<="1111111111111111" ; </p><p>  when "1110"=>keyr<

121、="1111111111111111" ; </p><p>  when "1111"=>keyr<="1111111111111111" ; </p><p>  when others=>keyr<="1111111111111111" ; </p><p>

122、;  end case; </p><p><b>  else</b></p><p>  if a="0001" then</p><p>  case cdount is</p><p>  when "0000"=>keyr<="11111111

123、11111111" ;</p><p>  when "0001"=>keyr<="1111111111111111" ;</p><p>  when "0010"=>keyr<="1111111111111111" ;</p><p>  when

124、"0011"=>keyr<="1111111111111111" ;</p><p>  when "0100"=>keyr<="1111111111111111" ;</p><p>  when "0101"=>keyr<="11100111

125、11111111" ;</p><p>  when "0110"=>keyr<="1110011111110011" ;</p><p>  when "0111"=>keyr<="1110011111110011" ;</p><p>  when

126、"1000"=>keyr<="1110000000000011" ;</p><p>  when "1001"=>keyr<="1110000000000011" ;</p><p>  when "1010"=>keyr<="11100111

127、11111111" ;</p><p>  when "1011"=>keyr<="1110011111111111" ;</p><p>  when "1100"=>keyr<="1110011111111111" ;</p><p>  when

128、"1101"=>keyr<="1111111111111111" ;</p><p>  when "1110"=>keyr<="1111111111111111" ;</p><p>  when "1111"=>keyr<="11111111

129、11111111" ;</p><p>  when others=>keyr<="1111111111111111" ; </p><p>  end case; </p><p><b>  else</b></p><p>  if a="0010"

130、 then</p><p>  case cdount is</p><p>  when "0000"=>keyr<="1111111111111111" ;</p><p>  when "0001"=>keyr<="1111111111111111" ;&

131、lt;/p><p>  when "0010"=>keyr<="1111111111111111" ;</p><p>  when "0011"=>keyr<="1111111111111111" ;</p><p>  when "0100"=

132、>keyr<="1100000000111001" ;</p><p>  when "0101"=>keyr<="1100000000111001" ;</p><p>  when "0110"=>keyr<="1100111100111001" ;&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論