基于VHDL的洗衣機(jī)控制器設(shè)計(jì)_第1頁(yè)
基于VHDL的洗衣機(jī)控制器設(shè)計(jì)_第2頁(yè)
基于VHDL的洗衣機(jī)控制器設(shè)計(jì)_第3頁(yè)
基于VHDL的洗衣機(jī)控制器設(shè)計(jì)_第4頁(yè)
基于VHDL的洗衣機(jī)控制器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

基于VHDL的洗衣機(jī)控制器設(shè)計(jì)作者:田駿祎指導(dǎo)老師:嚴(yán)世勝(海南師范大學(xué)物理與電子工程學(xué)院,???,571158)摘要:隨著科技的不斷發(fā)展,洗衣機(jī)作為日常家庭生活中不可或缺的電器設(shè)備,其自動(dòng)化、智能化和高效化的需求日益凸顯,因此,對(duì)洗衣機(jī)控制器的設(shè)計(jì)優(yōu)化與性能提升顯得尤為重要。傳統(tǒng)的洗衣機(jī)控制器基本都是采用超大規(guī)模集成電路或者單片機(jī)來(lái)實(shí)現(xiàn),單片機(jī)設(shè)計(jì)存在著調(diào)試復(fù)雜的問(wèn)題,專(zhuān)用集成電路一旦設(shè)計(jì)出現(xiàn)問(wèn)題就要完全廢棄。而用FPGA設(shè)計(jì)需要更新時(shí)無(wú)需更改硬件,只需軟件進(jìn)行升級(jí)更新即可。因此論文設(shè)計(jì)的洗衣機(jī)控制器基于FPGA技術(shù)和QuartusII開(kāi)發(fā)平臺(tái)設(shè)計(jì)。利用自上而下的設(shè)計(jì)方式,將洗衣機(jī)控制器分為4個(gè)模塊進(jìn)行設(shè)計(jì),并用頂層文件進(jìn)行連接。使用硬件描述語(yǔ)言來(lái)描述各個(gè)模塊,并將產(chǎn)生的文件下載到FPGA芯片EP4CE10F17C8中。結(jié)果表明,該設(shè)計(jì)基本實(shí)現(xiàn)了洗衣機(jī)所需的全自動(dòng)控制過(guò)程,包括洗衣機(jī)洗衣強(qiáng)度顯示、電機(jī)模擬波輪洗衣機(jī)運(yùn)轉(zhuǎn)、水流強(qiáng)度可選等功能,通過(guò)實(shí)驗(yàn)測(cè)試,驗(yàn)證了所設(shè)計(jì)的控制器的穩(wěn)定性和可靠性,并可以運(yùn)用到實(shí)際生活當(dāng)中去。關(guān)鍵詞:洗衣機(jī)控制器;VHDL;FPGA;QuartusII1引言1.1研究意義洗衣機(jī)控制器是洗衣機(jī)的重要組成部分,基于VHDL語(yǔ)言對(duì)洗衣機(jī)控制器進(jìn)行設(shè)計(jì),其研究意義主要體現(xiàn)在以下幾個(gè)方面:(1)提高控制性能:VHDL是一種硬件描述語(yǔ)言,被廣泛應(yīng)用于數(shù)字電路設(shè)計(jì),它使得數(shù)字系統(tǒng)中各個(gè)模塊的功能和行為得以方便地被描述。在洗衣機(jī)控制器的設(shè)計(jì)中應(yīng)用VHDL語(yǔ)言,可以確保設(shè)計(jì)的準(zhǔn)確性和可靠性,且性能穩(wěn)定抗干擾能力強(qiáng)[1],從而提高控制器的性能,保障洗衣機(jī)系統(tǒng)的正常運(yùn)行。(2)使設(shè)計(jì)更加靈活:將VHDL應(yīng)用于洗衣機(jī)控制器的設(shè)計(jì),不僅可以實(shí)現(xiàn)洗衣過(guò)程的自動(dòng)化,還可以通過(guò)描述控制器的行為,更加精確地實(shí)現(xiàn)各項(xiàng)功能。使用FPGA實(shí)現(xiàn)硬件設(shè)計(jì),使得控制器更具靈活性和可擴(kuò)展性。(3)推動(dòng)家電智能化:通過(guò)這一研究,可以加深對(duì)硬件描述語(yǔ)言的理解與應(yīng)用,為家電行業(yè)提供一種新的設(shè)計(jì)思路和方法,有助于提升家電產(chǎn)品的智能化和自動(dòng)化水平,為此應(yīng)用領(lǐng)域做出貢獻(xiàn)。1.2研究現(xiàn)狀目前洗衣機(jī)控制器通常采用數(shù)字電路進(jìn)行設(shè)計(jì)[2],傳統(tǒng)的數(shù)字電路設(shè)計(jì)方法,基于超大規(guī)模集成電路進(jìn)行,其結(jié)構(gòu)較為復(fù)雜,功耗較高,速度較低,且出現(xiàn)問(wèn)題整個(gè)設(shè)計(jì)就要完全廢棄,故不作為經(jīng)常被選用的方案。在國(guó)內(nèi),利用單片機(jī)作為主控制器設(shè)計(jì)洗衣機(jī)系統(tǒng)是一種比較常見(jiàn)的設(shè)計(jì)方案[3],該類(lèi)設(shè)計(jì)先由STC89C51單片機(jī)構(gòu)成最小系統(tǒng),再結(jié)合外圍電路控制電機(jī)[4],具有效率高、設(shè)計(jì)周期短的特點(diǎn),但其電路較為復(fù)雜。在國(guó)外,智能洗衣機(jī)同樣是諸多學(xué)者關(guān)注的熱點(diǎn),他們有關(guān)于洗衣機(jī)模糊控制器的研究,有學(xué)者提出了采用模糊邏輯控制確定洗衣機(jī)轉(zhuǎn)速值和電機(jī)轉(zhuǎn)速穩(wěn)定性的系統(tǒng)[5],但模糊控制存在不足,即沒(méi)有學(xué)習(xí)能力,從而使模糊控制產(chǎn)品難以積累經(jīng)驗(yàn)。因此基于EDA技術(shù)研究一套能選擇不同工作模式自動(dòng)完成洗衣功能的智能洗衣機(jī)控制器[6]更加有實(shí)用意義。2洗衣機(jī)控制器方案的選擇洗衣機(jī)控制器有許多設(shè)計(jì)方法,可以采用單片機(jī)電路、模糊技術(shù)控制、現(xiàn)場(chǎng)可編程門(mén)陣列FPGA等方案來(lái)實(shí)現(xiàn)。如果使用單片機(jī)電路進(jìn)行設(shè)計(jì),其優(yōu)點(diǎn)為體積小、質(zhì)量輕、價(jià)格便宜,控制功能靈活[7],而且由于其高度的集成性和優(yōu)化性能,可以提高生產(chǎn)效率并降低維護(hù)成本;此外,利用單片機(jī)進(jìn)行設(shè)計(jì)可靠性高、運(yùn)行穩(wěn)定且易于維護(hù),單片機(jī)具備強(qiáng)大的控制和處理能力,可以方便地實(shí)現(xiàn)洗衣機(jī)的自動(dòng)化和智能化控制。缺點(diǎn)為在單片機(jī)開(kāi)發(fā)過(guò)程中可能需要進(jìn)行復(fù)雜的調(diào)試和優(yōu)化工作,以確??刂破鞯姆€(wěn)定性和可靠性;需要大量的硬件接口和外部設(shè)備,設(shè)計(jì)布線(xiàn)工作量大;單片機(jī)控制器對(duì)工作環(huán)境和電磁干擾的敏感性較高[8],如果工作環(huán)境惡劣或電磁干擾較強(qiáng),可能會(huì)影響控制器的正常運(yùn)行。如果使用模糊控制電路進(jìn)行設(shè)計(jì),其優(yōu)點(diǎn)為能靈活地根據(jù)洗衣機(jī)的洗滌參數(shù)做出改變[9],有利于水電資源的節(jié)省。同時(shí)設(shè)計(jì)模糊控制器所需的時(shí)間較為短暫,大大地提高了項(xiàng)目開(kāi)發(fā)效率,模糊控制器根據(jù)專(zhuān)業(yè)人員總結(jié)的規(guī)則進(jìn)行控制量大小轉(zhuǎn)變,能適應(yīng)洗衣機(jī)的非線(xiàn)性、時(shí)變、大延遲的特性。缺點(diǎn)為模糊產(chǎn)品難以積累經(jīng)驗(yàn),而且在機(jī)器上的控制比較呆板,不能做到隨機(jī)應(yīng)變,有很大的局限性。如果以FPGA為基礎(chǔ),用VHDL語(yǔ)言實(shí)現(xiàn)洗衣機(jī)控制器的設(shè)計(jì),其優(yōu)點(diǎn)為具有高度的可編程性[10],F(xiàn)PGA可以根據(jù)不同的洗滌模式、水位、轉(zhuǎn)速等需求進(jìn)行快速配置,滿(mǎn)足各種復(fù)雜的控制要求;降低能耗和成本,通過(guò)精確控制洗衣機(jī)的各項(xiàng)功能,F(xiàn)PGA可以幫助減少不必要的能源浪費(fèi),從而降低能耗成本;高效的并行處理能力,F(xiàn)PGA采用并行處理的方式,可以同時(shí)處理多個(gè)任務(wù),從而提高了洗衣機(jī)的整體性能。缺點(diǎn)為較高的技術(shù)門(mén)檻,F(xiàn)PGA編程需要一定的專(zhuān)業(yè)知識(shí)和經(jīng)驗(yàn),包括硬件描述語(yǔ)言的掌握和電路設(shè)計(jì)技能,這使得非專(zhuān)業(yè)人員難以進(jìn)行FPGA控制器的設(shè)計(jì)與維護(hù)。與傳統(tǒng)的設(shè)計(jì)方案相比,采用FPGA設(shè)計(jì)方案的設(shè)計(jì)的優(yōu)點(diǎn)有:實(shí)時(shí)性和靈活性:FPGA可以根據(jù)洗衣機(jī)的實(shí)際運(yùn)行需求靈活調(diào)整控制邏輯,實(shí)現(xiàn)實(shí)時(shí)控制和精確管理各個(gè)洗衣步驟,且能夠快速響應(yīng)不同模式下的工作要求??煽啃栽鰪?qiáng):FPGA可以在單一芯片上集成多種功能,減少對(duì)外部元件的依賴(lài),從而提高系統(tǒng)的可靠性和穩(wěn)定性,降低故障率。標(biāo)準(zhǔn)化與統(tǒng)一平臺(tái):使用FPGA設(shè)計(jì)洗衣機(jī)控制器可以簡(jiǎn)化供應(yīng)鏈管理,因?yàn)橥幌盗械腇PGA可以用于多個(gè)型號(hào)的洗衣機(jī)產(chǎn)品,只需要不同的軟件配置即可滿(mǎn)足不同產(chǎn)品的差異化需求。總之,采用FPGA設(shè)計(jì)洗衣機(jī)控制器,相較于傳統(tǒng)設(shè)計(jì)方案,在設(shè)計(jì)初期調(diào)研、硬件結(jié)構(gòu)定型、功能仿真調(diào)試、模塊重復(fù)利用、功能修改等方面優(yōu)勢(shì)明顯[11],系統(tǒng)開(kāi)發(fā)周期大大縮短,開(kāi)發(fā)成本大大降低,可以實(shí)現(xiàn)更為精準(zhǔn)、高效的控制系統(tǒng),具有實(shí)時(shí)性、靈活性、更強(qiáng)的可靠性與標(biāo)準(zhǔn)化、平臺(tái)統(tǒng)一化的優(yōu)點(diǎn)。這些優(yōu)點(diǎn)使得FPGA設(shè)計(jì)方案成為洗衣機(jī)控制器設(shè)計(jì)領(lǐng)域的理想選擇,有助于提升洗衣機(jī)的性能和用戶(hù)體驗(yàn)。3整體設(shè)計(jì)論述3.1FPGA簡(jiǎn)介FPGA,即現(xiàn)場(chǎng)可編程門(mén)陣列(Field-ProgrammableGateArray),是一種以數(shù)字電路為主的集成芯片,屬于可編程邏輯器件(ProgrammableLogicDevice,PLD)的一種。它是一種基于可編程邏輯和可編程連接的集成電路器件,采用可編程的邏輯單元和可編程互連電路,具有很高的靈活性[12]和可重構(gòu)性,可以通過(guò)編程來(lái)定義其內(nèi)部邏輯結(jié)構(gòu),根據(jù)不同的需求進(jìn)行實(shí)時(shí)配置。本文的洗衣機(jī)控制器使用了FPGA芯片EP4CE10F17C8,并對(duì)其進(jìn)行了詳細(xì)的分析。3.2洗衣機(jī)控制器的原理和結(jié)構(gòu)3.2.1洗衣機(jī)控制器的原理本文設(shè)計(jì)的洗衣機(jī)控制器為波輪全自動(dòng)洗衣機(jī),能實(shí)現(xiàn)全自動(dòng)的洗滌、漂洗、脫水的流程,倒計(jì)時(shí)時(shí)間數(shù)字的顯示、按鍵控制洗衣強(qiáng)度設(shè)置及顯示,還具有電機(jī)模擬洗衣機(jī)正反轉(zhuǎn)的演示功能。洗衣機(jī)控制器作為洗衣機(jī)的核心模塊,洗衣機(jī)能否實(shí)現(xiàn)洗衣功能主要取決于對(duì)洗衣機(jī)控制器的設(shè)計(jì)是否完善。在進(jìn)行日常觀察分析和瀏覽相關(guān)資料得知,洗衣機(jī)控制器的設(shè)計(jì)能夠?qū)崿F(xiàn)洗滌、漂洗、脫水的全自動(dòng)化流程[13]。首先需要按鍵設(shè)置洗衣強(qiáng)度,有三種洗衣強(qiáng)度可以選擇:強(qiáng)洗、標(biāo)準(zhǔn)與輕柔模式。對(duì)于強(qiáng)洗模式,洗衣?tīng)顟B(tài)為正轉(zhuǎn)5秒,停2秒,反轉(zhuǎn)5秒,停2秒;對(duì)于標(biāo)準(zhǔn)模式,洗衣?tīng)顟B(tài)為正轉(zhuǎn)3.5秒,停1.5秒,反轉(zhuǎn)3.5秒;對(duì)于輕柔模式,洗衣?tīng)顟B(tài)為正轉(zhuǎn)2.5秒,停1.5秒,反轉(zhuǎn)2.5秒。選擇完洗衣強(qiáng)度后點(diǎn)啟動(dòng)按鈕,進(jìn)水閥打開(kāi),到達(dá)一定水位后水位開(kāi)關(guān)閉合,進(jìn)水完成,此時(shí)進(jìn)水閥關(guān)閉,洗滌燈亮,電機(jī)按照選擇的強(qiáng)度進(jìn)行正反轉(zhuǎn),洗滌過(guò)程進(jìn)行20分鐘后,洗滌燈滅,排水閥打開(kāi),此時(shí)電機(jī)停轉(zhuǎn),到達(dá)一定水位后水位開(kāi)關(guān)關(guān)閉,排水完成,此時(shí)脫水燈亮,表示開(kāi)始脫水,電機(jī)只正轉(zhuǎn),脫水時(shí)長(zhǎng)為5分鐘。脫水結(jié)束后,脫水燈滅,排水閥關(guān)閉。緊接著進(jìn)水閥打開(kāi),到達(dá)一定水位后水位開(kāi)關(guān)閉合,進(jìn)水完成,進(jìn)水閥關(guān)閉,第一次漂洗燈亮,電機(jī)按照選擇的強(qiáng)度進(jìn)行正反轉(zhuǎn),漂洗過(guò)程進(jìn)行10分鐘后,第一次漂洗燈滅,排水閥打開(kāi),表示正在排水,此時(shí)電機(jī)停轉(zhuǎn),到達(dá)一定水位后水位開(kāi)關(guān)關(guān)閉,排水完成,此時(shí)脫水燈亮,電機(jī)正轉(zhuǎn)5分鐘后脫水結(jié)束,脫水燈滅,排水閥關(guān)閉。之后進(jìn)行二次漂洗,進(jìn)水閥打開(kāi),到達(dá)一定水位后水位開(kāi)關(guān)閉合,進(jìn)水完成,進(jìn)水閥關(guān)閉,二次漂洗燈亮,漂洗10分鐘后,二次漂洗燈滅,排水閥打開(kāi),到達(dá)一定水位后水位開(kāi)關(guān)關(guān)閉,排水完成,脫水燈亮,開(kāi)始脫水,脫水5分鐘后脫水燈滅,排水閥關(guān)閉。綜上所述,整個(gè)洗衣流程所需時(shí)長(zhǎng)為55分鐘。同時(shí),利用VHDL對(duì)洗衣機(jī)控制器的功能進(jìn)行了合理的設(shè)計(jì),保證了洗衣機(jī)工作的精確次序和切換的時(shí)刻。3.2.2洗衣機(jī)控制器的結(jié)構(gòu)本文設(shè)計(jì)的洗衣機(jī)控制器的結(jié)構(gòu)主要包括四個(gè)模塊,即時(shí)鐘計(jì)數(shù)模塊、按鍵控制模塊、電機(jī)控制模塊、工作狀態(tài)顯示模塊,用頂層文件將他們連接起來(lái)。首先外部信號(hào)clk給時(shí)鐘計(jì)數(shù)模塊提供50MHz的外部時(shí)鐘,時(shí)鐘計(jì)數(shù)模塊為按鍵控制模塊、電機(jī)控制模塊、工作狀態(tài)顯示模塊提供同步的工作時(shí)鐘信號(hào),同時(shí)為頂層文件中關(guān)于進(jìn)水閥及排水閥閉合或斷開(kāi)的控制部分與洗滌燈、漂洗燈及脫水燈亮滅的控制部分提供同步的工作時(shí)鐘信號(hào)。按鍵輸入信號(hào)將按鍵狀態(tài)的變化信息送入按鍵控制模塊,按鍵控制模塊為電機(jī)控制模塊提供去抖動(dòng)處理后的按鍵脈沖信號(hào),電機(jī)控制模塊控制開(kāi)發(fā)板外部電機(jī)運(yùn)轉(zhuǎn)。工作狀態(tài)模塊控制數(shù)碼管顯示的剩余時(shí)間和洗衣強(qiáng)度,水位開(kāi)關(guān)能起到控制進(jìn)水閥及排水閥閉合或斷開(kāi)與洗滌燈、漂洗燈及脫水燈亮滅的作用。根據(jù)洗衣機(jī)控制器結(jié)構(gòu)的設(shè)計(jì)要求,最后繪制了如圖1所示的系統(tǒng)框圖。圖1控制系統(tǒng)框圖3.3洗衣機(jī)控制器ASM圖在洗衣機(jī)控制器的設(shè)計(jì)中,要求實(shí)現(xiàn)全自動(dòng)洗衣過(guò)程,即按下啟動(dòng)按鈕后,洗衣機(jī)自動(dòng)完成洗滌、漂洗、二次漂洗、脫水等流程。流程中的狀態(tài)會(huì)根據(jù)水位開(kāi)關(guān)的關(guān)斷或工作時(shí)間來(lái)進(jìn)行切換。該洗衣機(jī)控制器的ASM圖如圖2,由圖可以看出,該洗衣機(jī)控制器主要設(shè)置了13個(gè)基本狀態(tài),由狀態(tài)轉(zhuǎn)移電路來(lái)在滿(mǎn)足判斷條件時(shí)分別轉(zhuǎn)向不同的狀態(tài)。本文所設(shè)計(jì)的洗衣機(jī)控制器共有強(qiáng)洗、標(biāo)準(zhǔn)、輕柔三種洗衣強(qiáng)度,因?yàn)檫@三種強(qiáng)度差異之處只在電機(jī)正反轉(zhuǎn)設(shè)置中,故三者的ASM圖完全一致。狀態(tài)S1:設(shè)置完洗衣強(qiáng)度并啟動(dòng)按鍵,進(jìn)水閥打開(kāi),水位開(kāi)關(guān)撥上;狀態(tài)S2:進(jìn)水閥關(guān)閉,洗滌燈亮,電機(jī)正反轉(zhuǎn),洗滌20分鐘;狀態(tài)S3:洗滌燈滅,排水閥打開(kāi),電機(jī)停轉(zhuǎn),斷開(kāi)水位開(kāi)關(guān);狀態(tài)S4:脫水燈亮,電機(jī)只正轉(zhuǎn),脫水時(shí)長(zhǎng)為5分鐘;狀態(tài)S5:脫水結(jié)束后,脫水燈滅,排水閥關(guān)閉,進(jìn)水閥打開(kāi);狀態(tài)S6:水位開(kāi)關(guān)撥上,進(jìn)水閥關(guān)閉,第一次漂洗燈亮,電機(jī)正反轉(zhuǎn);狀態(tài)S7:漂洗10分鐘以后,第一次漂洗燈滅,排水閥打開(kāi),電機(jī)停轉(zhuǎn),斷開(kāi)水位開(kāi)關(guān);狀態(tài)S8:脫水燈亮,電機(jī)正轉(zhuǎn);狀態(tài)S9:5分鐘后,脫水燈滅,排水閥關(guān)閉,進(jìn)入二次漂洗,進(jìn)水閥打開(kāi);狀態(tài)S10:水位開(kāi)關(guān)撥上,進(jìn)水閥關(guān)閉,二次漂洗燈亮;狀態(tài)S11:漂洗10分鐘后二次漂洗燈滅,排水閥打開(kāi);狀態(tài)S12:水位開(kāi)關(guān)斷開(kāi),脫水燈亮,電機(jī)正轉(zhuǎn);狀態(tài)S13:脫水5分鐘后脫水燈滅,排水閥關(guān)閉,洗衣結(jié)束。圖2洗衣機(jī)控制器ASM圖4主要功能模塊設(shè)計(jì)洗衣機(jī)控制器所要實(shí)現(xiàn)的功能分別在時(shí)鐘計(jì)數(shù)模塊、按鍵控制模塊、電機(jī)控制模塊、工作狀態(tài)顯示模塊這四個(gè)模塊中分別進(jìn)行設(shè)計(jì),最后用頂層文件將各個(gè)模塊連接起來(lái)。4.1時(shí)鐘計(jì)數(shù)模塊設(shè)計(jì)在洗衣機(jī)控制器的設(shè)計(jì)中,需要系統(tǒng)根據(jù)設(shè)定的程序來(lái)自動(dòng)控制洗衣機(jī)的工作時(shí)間與狀態(tài)切換。因此,為了防止計(jì)時(shí)出現(xiàn)混亂導(dǎo)致洗衣機(jī)不能正常實(shí)現(xiàn)功能,所設(shè)計(jì)的洗衣機(jī)控制器需要一個(gè)穩(wěn)定的時(shí)鐘來(lái)支持其正常的工作。其中時(shí)鐘計(jì)數(shù)電路模塊圖如圖3:圖3時(shí)鐘計(jì)數(shù)電路模塊圖由該硬件模塊圖可知clk為輸入信號(hào),由外部信號(hào)提供50MHz的時(shí)鐘信號(hào);rst_n為輸入的負(fù)邊沿復(fù)位信號(hào),當(dāng)rst_n為低電平時(shí),計(jì)數(shù)器清零,若rst_n是高電平且計(jì)數(shù)器達(dá)到最大值,則產(chǎn)生一個(gè)脈沖信號(hào)sec_1_r,并將其賦值給輸出端口sec_1;該時(shí)鐘計(jì)數(shù)電路模塊主要是負(fù)責(zé)產(chǎn)生穩(wěn)定的1s脈沖信號(hào),為按鍵控制模塊、電機(jī)控制模塊、工作狀態(tài)顯示模塊提供同步的工作時(shí)鐘信號(hào)。為了保證計(jì)時(shí)準(zhǔn)確,我們根據(jù)50MHz外部輸入時(shí)鐘設(shè)定計(jì)數(shù)器的最大值為24999999,用于生成一個(gè)1秒的時(shí)間間隔。這個(gè)值是根據(jù)所使用的時(shí)鐘頻率和所需的時(shí)間間隔來(lái)計(jì)算得出的。對(duì)于一個(gè)50MHz的時(shí)鐘頻率,如果要生成一個(gè)1秒的時(shí)間間隔,需要進(jìn)行50000000次計(jì)數(shù)。本文設(shè)計(jì)計(jì)數(shù)器的范圍是從0到最大值,所以最大值的值需要減去1。因此最大值被設(shè)置為24999999,以確保在計(jì)數(shù)到24999999時(shí)生成一個(gè)1秒的脈沖信號(hào)。部分VHDL程序如下:entitytime_countisPort(clk:inSTD_LOGIC;--時(shí)鐘,50MHZrst_n:inSTD_LOGIC;--復(fù)位信號(hào),下降沿有效,negativesec_1:outSTD_LOGIC--1s輸出一個(gè)脈沖信號(hào)entitytime_countisPort(clk:inSTD_LOGIC;--時(shí)鐘,50MHZrst_n:inSTD_LOGIC;--復(fù)位信號(hào),下降沿有效,negativesec_1:outSTD_LOGIC--1s輸出一個(gè)脈沖信號(hào));endtime_count;architectureBehavioraloftime_countisconstantMAX_NUM:natural:=24_999_999;--記最大數(shù)1s,50000000次signalcnt_1:naturalrange0toMAX_NUM:=0;--計(jì)數(shù)寄存器signalsec_1_r:STD_LOGIC:='0';begin--1s計(jì)時(shí)器process(clk)beginarchitectureBehavioraloftime_countisconstantMAX_NUM:natural:=24_999_999;--記最大數(shù)1s,50000000次signalcnt_1:naturalrange0toMAX_NUM:=0;--計(jì)數(shù)寄存器signalsec_1_r:STD_LOGIC:='0';begin--1s計(jì)時(shí)器process(clk)beginifrising_edge(clk)thenifnotrst_n='1'thencnt_1<=0;elsifcnt_1=MAX_NUMthencnt_1<=0;elsecnt_1<=cnt_1+1;endif;endif;endprocess;“if

falling_edge(clk)

then”這個(gè)進(jìn)程描述了生成1秒脈沖信號(hào)的邏輯。它在每個(gè)時(shí)鐘下降沿檢測(cè)時(shí)鐘信號(hào)。如果復(fù)位信號(hào)rst_n是高電平且計(jì)數(shù)器達(dá)到MAX_NUM,則產(chǎn)生一個(gè)脈沖信號(hào)?!皊ec_1<=sec_1_r;”這條語(yǔ)句將內(nèi)部生成的1秒脈沖信號(hào)sec_1_r賦值給輸出端口sec_1。至此就實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的1秒脈沖信號(hào)發(fā)生器。4.2按鍵控制模塊設(shè)計(jì)當(dāng)按鍵信號(hào)變化時(shí),可能會(huì)出現(xiàn)抖動(dòng),即信號(hào)在短時(shí)間內(nèi)多次變化,假如不做消抖處理,系統(tǒng)將會(huì)識(shí)別到很多抖動(dòng)的信號(hào),即識(shí)別到很多次按鍵按下,會(huì)對(duì)洗衣機(jī)控制器的正常工作帶來(lái)極大干擾。為了避免抖動(dòng),需要通過(guò)按鍵消抖實(shí)現(xiàn)輸出一個(gè)脈沖,這樣就保證每次按下按鍵只會(huì)產(chǎn)生一個(gè)脈沖。按鍵控制模塊實(shí)現(xiàn)了一個(gè)按鍵的去抖動(dòng)機(jī)制和脈沖檢測(cè)。按鍵控制模塊圖如圖4:圖4按鍵控制模塊圖由該硬件模塊圖可知clk為一個(gè)輸入端口,由外部提供50MHz的時(shí)鐘信號(hào);key_in為一輸入端口,用于檢測(cè)按鍵狀態(tài)的變化,并觸發(fā)相應(yīng)的動(dòng)作,如去抖動(dòng)處理和脈沖檢測(cè);rstn為一輸入端口,表示復(fù)位信號(hào),下降沿有效;key_pulse為輸出信號(hào),用于表示經(jīng)過(guò)去抖動(dòng)處理后的按鍵脈沖信號(hào),以便系統(tǒng)能夠正確地識(shí)別按鍵的按下或釋放動(dòng)作。部分VHDL程序如下:entitykeyisgeneric(N:integer:=1;PULSE_PERIOD:integer:=262143);Port(clk:inSTD_LOGIC;rstn:inSTD_LOGIC;key_in:inSTD_LOGIC;key_pulse:outSTD_LOGIC);endkey;architectureBehavioralofkeyissignalkey_rst_pre,key_rst,key_edge,key_sec_pre,key_sec:STD_LOGIC;signalcnt:STD_LOGIC_VECTOR(17downto0):=(others=>'0');beginprocess(clk)beginifrising_edge(clk)thenifnot(rstn='1')thenkey_rst<='1';key_rst_pre<='1';elsekey_rst<=key_in;key_rst_pre<=key_rst;endif;endif;endprocess;key_edge<=key_rst_preand(notkey_rst);上段程序首先檢測(cè)按鍵信號(hào)的邊緣變化(上升沿),并將其存儲(chǔ)在key_rst_pre和key_rst中。當(dāng)沒(méi)有復(fù)位信號(hào)(rstn)時(shí),將key_rst和key_rst_pre設(shè)置為高電平,確保在復(fù)位期間不產(chǎn)生誤觸發(fā)信號(hào)。如果有復(fù)位信號(hào),將按鍵信號(hào)(key_in)賦值給key_rst和key_rst_pre。使用key_rst_pre和key_rst進(jìn)行邊緣檢測(cè),確定按鍵信號(hào)的上升沿。process(clk)beginifrising_edge(clk)thenifnot(rstn='1')thencnt<=(others=>'0');elsifkey_edge='1'thencnt<=(others=>'0');elsecnt<=cnt+'1';endif;endif;endprocess;process(clk)beginifrising_edge(clk)thenifnot(rstn='1')thenkey_sec<='1';elsifcnt=PULSE_PERIODthenkey_sec<=key_in;endif;endif;endprocess;process(clk)beginifrising_edge(clk)thenifnot(rstn='1')thenkey_sec_pre<='1';elsekey_sec_pre<=key_sec;endif;endif;endprocess;key_pulse<=key_sec_preand(notkey_sec);--檢測(cè)前后一個(gè)時(shí)鐘周期的按鍵信號(hào)之間的差異接下來(lái)檢測(cè)到上升沿后,啟動(dòng)一個(gè)計(jì)數(shù)器cnt,在每個(gè)時(shí)鐘周期上升沿到來(lái)時(shí)遞增。如果沒(méi)有復(fù)位信號(hào),計(jì)數(shù)器將一直遞增,直到達(dá)到設(shè)定的脈沖周期(PULSE_PERIOD),然后重置為零。一旦計(jì)數(shù)器達(dá)到設(shè)定的脈沖周期,將按鍵信號(hào)賦值給key_sec,表示檢測(cè)到一個(gè)脈沖。key_sec_pre用于存儲(chǔ)前一個(gè)時(shí)鐘周期中key_sec的狀態(tài)。最后就實(shí)現(xiàn)了輸出信號(hào)key_pulse通過(guò)檢測(cè)前一個(gè)時(shí)鐘周期的按鍵信號(hào)和當(dāng)前時(shí)鐘周期的按鍵信號(hào)之間的差異來(lái)產(chǎn)生脈沖信號(hào)。4.3電機(jī)控制模塊設(shè)計(jì)電機(jī)控制模塊主要通過(guò)步進(jìn)電機(jī)四個(gè)引腳的電平切換來(lái)控制電機(jī)旋轉(zhuǎn)的方向和啟停,并輸出了一個(gè)周期性的脈沖信號(hào)。電機(jī)控制模塊根據(jù)時(shí)鐘信號(hào)、使能信號(hào)和方向信號(hào),周期性地更新輸出的控制信號(hào),用于控制電機(jī)的運(yùn)動(dòng)。電機(jī)控制模塊圖如圖5:圖5電機(jī)控制模塊由該硬件模塊圖可知clk為輸入50MHz的時(shí)鐘信號(hào),dir為電機(jī)運(yùn)動(dòng)方向信號(hào),en為使能信號(hào),ctrl_out為輸出信號(hào),是一個(gè)4位向量,用于控制電機(jī)。電機(jī)控制模塊將電機(jī)狀態(tài)控制寄存器ctrl_reg里的值賦給ctrl_out,輸出電機(jī)控制信號(hào)。部分VHDL設(shè)計(jì)程序如下:entityservorisport(clk:instd_logic;en:instd_logic;--電機(jī)使能信號(hào)dir:instd_logic;--電機(jī)運(yùn)動(dòng)方向信號(hào)ctrl_out:outstd_logic_vector(3downto0));--輸出4位控制電機(jī)信號(hào)endservor;architectureBehavioralofservorissignalclk_cnt_servor:integer:=0;signalservor_pulse:std_logic:='0';signalctrl_reg:std_logic_vector(3downto0):="0001";beginctrl_out<=ctrl_reg;process(clk)beginifrising_edge(clk)then在上段代碼中,當(dāng)時(shí)鐘信號(hào)clk上升沿到來(lái)時(shí),檢查計(jì)數(shù)器clk_cnt_servor的值是否小于90000。90000代表一個(gè)計(jì)數(shù)閾值。這個(gè)值用來(lái)控制產(chǎn)生脈沖信號(hào)的時(shí)鐘周期數(shù)量。ifclk_cnt_servor<90000thenclk_cnt_servor<=clk_cnt_servor+1;servor_pulse<='0';elseclk_cnt_servor<=0;servor_pulse<='1';endif;endif;endprocess;process(clk)beginifrising_edge(clk)thenifservor_pulse='1'anden='1'thenifdir='1'thenctrl_reg<=ctrl_reg(2downto0)&ctrl_reg(3downto3);--反轉(zhuǎn)elsectrl_reg<=ctrl_reg(0downto0)&ctrl_reg(3downto1);--正轉(zhuǎn)endif;endif;endif;endprocess;endarchitectureBehavioral;如果小于90000,則計(jì)數(shù)器遞增并保持脈沖生成標(biāo)志信號(hào)servor_pulse為低電平,否則計(jì)數(shù)器歸零,并將servor_pulse設(shè)置為高電平,表示產(chǎn)生了一個(gè)脈沖信號(hào)。當(dāng)時(shí)鐘信號(hào)clk上升沿到來(lái)時(shí),同時(shí)也檢查servor_pulse和使能信號(hào)en是否都為高電平。如果是,則根據(jù)方向信號(hào)dir的值,更新ctrl_reg的值,實(shí)現(xiàn)了電機(jī)控制邏輯正轉(zhuǎn)或反轉(zhuǎn)。4.4工作狀態(tài)顯示模塊設(shè)計(jì)在洗衣機(jī)控制器進(jìn)行工作時(shí),如果不知道洗衣當(dāng)前選擇的模式及洗衣當(dāng)前狀態(tài)的剩余時(shí)間,用戶(hù)只能一直等待,這樣就會(huì)過(guò)多浪費(fèi)用戶(hù)的時(shí)間。如果有模式顯示與倒計(jì)時(shí)時(shí)間顯示允許用戶(hù)知道洗衣機(jī)當(dāng)前處于哪種模式、完成當(dāng)前洗滌周期還需要多長(zhǎng)時(shí)間。這樣,用戶(hù)可以合理安排自己的時(shí)間,等待洗衣機(jī)完成并及時(shí)取出洗好的衣物,避免浪費(fèi)時(shí)間。因此,工作狀態(tài)顯示模塊最主要的功能就是根據(jù)按鍵輸入信號(hào)顯示當(dāng)前洗衣模式,以及根據(jù)當(dāng)前洗衣進(jìn)度顯示當(dāng)前狀態(tài)的剩余時(shí)間。工作狀態(tài)顯示模塊圖如圖6: 圖6工作狀態(tài)顯示模塊由該硬件模塊圖可知clk為輸入時(shí)鐘信號(hào),rst_n為復(fù)位信號(hào),time_remain為剩余時(shí)間輸入信號(hào),washer_mode為洗衣機(jī)模式選擇輸入信號(hào),washer_power為洗衣機(jī)強(qiáng)度選擇輸入信號(hào)。sgm_bit為位選輸出信號(hào),sgm_bit為段選輸出信號(hào)。工作狀態(tài)顯示部分VHDL程序如下:process(cnt_sel)begincasecnt_selis--位選when0=>--顯示最低位的數(shù)碼管sgm_sel<="111110";sgm_data<=std_logic_vector(to_unsigned((time_remain/2)mod60mod10,4));dp_en<='0';--剩余時(shí)間的秒數(shù)的個(gè)位數(shù)when1=>--顯示次低位的數(shù)碼管sgm_sel<="111101";sgm_data<=std_logic_vector(to_unsigned((time_remain/2)mod60/10,4));dp_en<='0';--剩余時(shí)間的秒數(shù)的十位數(shù)when2=>--顯示次中間位的數(shù)碼管sgm_sel<="111011";sgm_data<=std_logic_vector(to_unsigned((time_remain/2)/60mod10,4));dp_en<='1';--剩余時(shí)間的分鐘數(shù)的個(gè)位數(shù)when3=>--顯示中間位的數(shù)碼管sgm_sel<="110111";sgm_data<=std_logic_vector(to_unsigned((time_remain/2)/60/10,4));dp_en<='0';--剩余時(shí)間的分鐘數(shù)的十位數(shù)when4=>--顯示次高位的數(shù)碼管sgm_sel<="101111";sgm_data<="00"&washer_power;dp_en<='1';--洗衣強(qiáng)度when5=>顯示最高位的數(shù)碼管sgm_sel<="011111";sgm_data<="00"&washer_mode;--洗衣模式dp_en<='1';whenothers=>sgm_sel<="111111";dp_en<='0';endcase;endprocess;這段代碼根據(jù)計(jì)數(shù)器cnt_sel的值來(lái)選擇要顯示的數(shù)碼管的位,并將相應(yīng)的數(shù)字或字符發(fā)送到段選端口,實(shí)現(xiàn)了位選原理。當(dāng)cnt_sel等于0時(shí),選擇顯示最低位的數(shù)碼管,并將剩余時(shí)間的秒數(shù)的個(gè)位數(shù)發(fā)送到該數(shù)碼管,同時(shí)設(shè)置小數(shù)點(diǎn)使能信號(hào)為0;當(dāng)cnt_sel等于1時(shí),選擇顯示次低位的數(shù)碼管,并將剩余時(shí)間的秒數(shù)的十位數(shù)發(fā)送到該數(shù)碼管,同時(shí)設(shè)置小數(shù)點(diǎn)使能信號(hào)為0。當(dāng)cnt_sel等于2時(shí),選擇顯示次中間位的數(shù)碼管,并將剩余時(shí)間的分鐘數(shù)的個(gè)位數(shù)發(fā)送到該數(shù)碼管,同時(shí)設(shè)置小數(shù)點(diǎn)使能信號(hào)為1。當(dāng)cnt_sel等于3時(shí),選擇顯示中間位的數(shù)碼管,并將剩余時(shí)間的分鐘數(shù)的十位數(shù)發(fā)送到該數(shù)碼管,同時(shí)設(shè)置小數(shù)點(diǎn)使能信號(hào)為0。當(dāng)cnt_sel等于4時(shí),選擇顯示次高位的數(shù)碼管,并將洗衣機(jī)的強(qiáng)度狀態(tài)發(fā)送到該數(shù)碼管,并在顯示數(shù)字前加上兩個(gè)零,表示空位,同時(shí)設(shè)置小數(shù)點(diǎn)使能信號(hào)為1。當(dāng)cnt_sel等于5時(shí),選擇顯示最高位的數(shù)碼管,并將洗衣機(jī)的模式狀態(tài)發(fā)送到該數(shù)碼管,并在顯示數(shù)字前加上兩個(gè)零,表示空位,同時(shí)設(shè)置小數(shù)點(diǎn)使能信號(hào)為1。對(duì)于其他情況,將所有數(shù)碼管的段選信號(hào)設(shè)置為全高電平,同時(shí)關(guān)閉小數(shù)點(diǎn)使能信號(hào)。dp_bit<=notdp_en;process(data_in)begincasedata_inis--段選when"0000"=>bit_out<=dp_bit&"1000000";when"0001"=>bit_out<=dp_bit&"1111001";when"0010"=>bit_out<=dp_bit&"0100100";when"0011"=>bit_out<=dp_bit&"0110000";when"0100"=>bit_out<=dp_bit&"0011001";when"0101"=>bit_out<=dp_bit&"0010010";when"0110"=>bit_out<=dp_bit&"0000010";when"0111"=>bit_out<=dp_bit&"1111000";when"1000"=>bit_out<=dp_bit&"0000000";when"1001"=>bit_out<=dp_bit&"0010000";when"1010"=>bit_out<=dp_bit&"0111111";whenothers=>bit_out<="11111111";endcase;endprocess;這段代碼將dp_en的邏輯反值賦給dp_bit,用于控制小數(shù)點(diǎn)的顯示狀態(tài)。當(dāng)dp_en為低電平時(shí),dp_bit為高電平,表示小數(shù)點(diǎn)關(guān)閉;當(dāng)dp_en為高電平時(shí),dp_bit為低電平,表示小數(shù)點(diǎn)開(kāi)啟。接著根據(jù)輸入的data_in值控制七段數(shù)碼管的段選,以顯示相應(yīng)的數(shù)字,并根據(jù)dp_en控制小數(shù)點(diǎn)的顯示狀態(tài)。4.5頂層電路設(shè)計(jì)頂層電路的設(shè)計(jì)主要就是把時(shí)鐘計(jì)數(shù)模塊、按鍵控制模塊、電機(jī)控制模塊、工作狀態(tài)顯示模塊這四個(gè)模塊用元件例化語(yǔ)句連接起來(lái)構(gòu)成一個(gè)完整電路。工作狀態(tài)顯示部分VHDL程序如下:entitytopisPort(clk:instd_logic;rst_n:instd_logic;key_start_in:instd_logic;key_water_in:instd_logic;key_power_in:instd_logic;servor_out:outstd_logic_vector(3downto0);--輸出電機(jī)控制信號(hào)sgm_sel:outstd_logic_vector(5downto0);sgm_bit:outstd_logic_vector(7downto0);led_water_in:outstd_logic;--進(jìn)水燈led_water_out:outstd_logic;--排水燈led_washer:outstd_logic;--洗滌燈led_pure_washer:outstd_logic;--漂洗燈led_drop:outstd_logic--脫水燈);endtop;architectureBehavioraloftopissignalruning:std_logic:='0';--正在運(yùn)行標(biāo)志signalwasher_power:std_logic_vector(1downto0):="00";--洗衣強(qiáng)度模式signalwasher_finished:std_logic;signalkey_start_pulse:std_logic;signalkey_power_pulse:std_logic;signalkey_water_in_pulse:std_logic;--按鍵脈沖信號(hào)signalrunning_state:std_logic_vector(3downto0);signalhalf_sec_pulse:std_logic;--半秒的定時(shí)信號(hào)signalhalf_sec_cnt:integer:=0;signalroll_half_sec_cnt:integer:=0;--半秒計(jì)數(shù)器signalservor_en:std_logic;signalservor_dir:std_logic;signaltime_remain:integer:=0;componentkeyisport(clk:instd_logic;rstn:instd_logic;key_in:instd_logic;key_pulse:outstd_logic--按鍵脈沖輸出信號(hào));endcomponent;componentsgm_topisport(clk:instd_logic;rst_n:instd_logic;time_remain:integer;washer_mode:instd_logic_vector(1downto0);washer_power:instd_logic_vector(1downto0);sgm_sel:outstd_logic_vector(5downto0);sgm_bit:outstd_logic_vector(7downto0));endcomponent;componentservorisport(clk:instd_logic;en:instd_logic;dir:instd_logic;ctrl_out:outstd_logic_vector(3downto0));endcomponent;頂層連接部分的代碼主要包括對(duì)這四個(gè)模塊的聲明、按鍵處理、主洗衣機(jī)工作進(jìn)程控制、洗衣機(jī)狀態(tài)顯示燈控制,以及對(duì)u_key_start、u_key_power、u_key_mode三個(gè)屬于按鍵控制模塊的分模塊的實(shí)例化,對(duì)時(shí)鐘計(jì)數(shù)模塊、工作狀態(tài)顯示模塊、電機(jī)控制模塊的實(shí)例化。5實(shí)物測(cè)試與仿真5.1主要模塊仿真5.1.1時(shí)鐘計(jì)數(shù)模塊仿真模塊仿真使用了Modelsim進(jìn)行仿真。為方便觀看波形,時(shí)鐘信號(hào)的周期并未嚴(yán)格按實(shí)際要求設(shè)置,仿真前先將程序中的MAX_NUM數(shù)值改小為49(代碼中為24999999),否則仿真會(huì)因?yàn)榉抡鏁r(shí)間過(guò)長(zhǎng)而失敗。clk為輸入信號(hào),rst_n為系統(tǒng)內(nèi)部自復(fù)位信號(hào),當(dāng)rst_n為低電平時(shí),系統(tǒng)內(nèi)部信號(hào)復(fù)位。由仿真圖11可以看出,系統(tǒng)可以提供穩(wěn)定的1s脈沖。當(dāng)rst_n為高電平時(shí),當(dāng)計(jì)數(shù)器cnt_1達(dá)到最大值MAX_NUM,則產(chǎn)生一個(gè)脈沖信號(hào)sec_1r,并賦值給sec_1輸出一個(gè)1s脈沖。圖11時(shí)鐘計(jì)數(shù)模塊仿真圖5.1.2按鍵控制模塊仿真clk為輸入信號(hào),提供50MHz的時(shí)鐘信號(hào),key_in為一輸入端口,檢測(cè)按鍵的變化,rst_n為復(fù)位信號(hào),key_pulse為經(jīng)過(guò)去消抖處理后的按鍵脈沖信號(hào)。從圖中可以看出,當(dāng)沒(méi)有復(fù)位信號(hào)(rst_n)時(shí),將key_rst和key_rst_pre設(shè)置為高電平,如果有復(fù)位信號(hào),將按鍵信號(hào)(key_in)賦值給key_rst和key_rst_pre。接下來(lái)使用key_rst_pre和key_rst進(jìn)行邊緣檢測(cè),確定按鍵信號(hào)的上升沿檢測(cè)到上升沿后,啟動(dòng)一個(gè)計(jì)數(shù)器cnt,在每個(gè)時(shí)鐘周期上升沿到來(lái)時(shí)遞增。如果沒(méi)有復(fù)位信號(hào),計(jì)數(shù)器將一直遞增,直到達(dá)到設(shè)定的脈沖周期(PULSE_PERIOD),然后重置為零。一旦計(jì)數(shù)器達(dá)到設(shè)定的脈沖周期,將按鍵信號(hào)賦值給key_sec,表示檢測(cè)到一個(gè)脈沖。key_sec_pre用于存儲(chǔ)前一個(gè)時(shí)鐘周期中key_sec的狀態(tài)。最后輸出信號(hào)key_pulse通過(guò)檢測(cè)前一個(gè)時(shí)鐘周期的按鍵信號(hào)和當(dāng)前時(shí)鐘周期的按鍵信號(hào)之間的差異來(lái)產(chǎn)生脈沖信號(hào)。圖12按鍵控制模塊仿真圖5.1.3電機(jī)控制模塊仿真clk為輸入50MHz的時(shí)鐘信號(hào),dir為電機(jī)運(yùn)動(dòng)方向信號(hào),en為使能信號(hào),ctrl_out為輸出信號(hào),是一個(gè)4位向量,用于控制電機(jī)。從圖中可以看出,當(dāng)時(shí)鐘信號(hào)clk上升沿到來(lái)時(shí),檢查計(jì)數(shù)器clk_cnt_servor的值是否小于31。代碼中用的值是90000,為了方便仿真設(shè)置為31。如果小于31,則計(jì)數(shù)器遞增并保持脈沖生成標(biāo)志信號(hào)servor_pulse為低電平,否則計(jì)數(shù)器歸零,并將servor_pulse設(shè)置為高電平,表示產(chǎn)生了一個(gè)脈沖信號(hào)。當(dāng)時(shí)鐘信號(hào)clk上升沿到來(lái)時(shí),同時(shí)也檢查servor_pulse和使能信號(hào)en是否都為高電平。如果是,則根據(jù)方向信號(hào)dir的值,更新ctrl_reg的值,實(shí)現(xiàn)電機(jī)控制邏輯正轉(zhuǎn)或反轉(zhuǎn)。圖13電機(jī)控制模塊仿真圖5.1.4工作狀態(tài)顯示模塊仿真clk為輸入時(shí)鐘信號(hào),rst_n為復(fù)位信號(hào),time_remain為剩余時(shí)間輸入信號(hào),washer_mode為洗衣機(jī)模式選擇輸入信號(hào),washer_power為洗衣機(jī)強(qiáng)度選擇輸入信號(hào)。sgm_bit為位選輸出信號(hào),sgm_bit為段選輸出信號(hào)。從圖中可以看出,數(shù)碼管實(shí)現(xiàn)了位選與段選。圖14工作狀態(tài)顯示模塊仿真圖5.2實(shí)驗(yàn)結(jié)果將電機(jī)、驅(qū)動(dòng)板與開(kāi)發(fā)板之間用導(dǎo)線(xiàn)進(jìn)行引腳連接,通過(guò)下載器往芯片中燒入程序后即可正常運(yùn)行。程序可以正常開(kāi)始運(yùn)行,點(diǎn)擊復(fù)位按鈕RESET,數(shù)碼管顯示整體剩余時(shí)間,按下KEY1一下,數(shù)碼管第二位顯示1,再按一下顯示2,再按一下顯示0,如此循環(huán),這是按鍵選擇洗衣機(jī)的強(qiáng)度模式,0代表強(qiáng)洗,1代表標(biāo)準(zhǔn),2代表輕柔。圖中為強(qiáng)洗模式,按下啟動(dòng)按鍵KEY0后,數(shù)碼管開(kāi)始倒計(jì)時(shí),DS0亮起,表示進(jìn)水閥打開(kāi)。如圖15所示,以強(qiáng)洗強(qiáng)度為例:圖15強(qiáng)洗模式下進(jìn)水閥打開(kāi)水位開(kāi)關(guān)閉合,進(jìn)水閥關(guān)閉,即DS0滅,洗滌燈DS2亮,如圖16所示,以強(qiáng)洗強(qiáng)度為例:圖16強(qiáng)洗模式下洗滌燈亮洗滌完成后洗滌燈DS2滅,排水閥打開(kāi),即DS1亮,如圖17所示:圖17強(qiáng)洗模式下洗滌完排水?dāng)嚅_(kāi)水位開(kāi)關(guān),脫水燈亮,如圖18所示:圖18進(jìn)行脫水脫水結(jié)束后脫水燈排水燈滅,排水閥關(guān)閉,DS1滅,進(jìn)水閥打開(kāi),即DS0亮,水位開(kāi)關(guān)閉合后,進(jìn)水閥關(guān)閉,即DS0滅,第一次漂洗燈亮,即DS3亮,如圖19所示:圖19進(jìn)水后開(kāi)始第一次漂洗漂洗結(jié)束,第一次漂洗燈滅,即DS3滅,排水閥打開(kāi),即DS1亮,如圖21所示:圖20第一次漂洗結(jié)束,開(kāi)始排水水位開(kāi)關(guān)斷開(kāi),脫水燈亮,脫水結(jié)束后脫水燈排水燈滅,排水閥關(guān)閉,DS1滅,進(jìn)水閥打開(kāi),即DS0亮,之后開(kāi)始進(jìn)行第二次漂洗,與第一次漂洗過(guò)程完全相同。最后第二次漂洗脫水結(jié)束后脫水燈排水燈滅,排水閥關(guān)閉,即DS1滅,洗衣結(jié)束,所有l(wèi)ed燈全滅,倒計(jì)時(shí)停止。如圖21所示:圖21洗衣結(jié)束6總結(jié)本設(shè)計(jì)是基于VHDL語(yǔ)言進(jìn)行編程,以實(shí)現(xiàn)整體預(yù)期的洗衣機(jī)控制功能,描述洗衣機(jī)控制器的模塊以及其中使用的數(shù)據(jù)可以根據(jù)實(shí)際情況進(jìn)行配置。目標(biāo)器件是FPGA芯片,采用分層設(shè)計(jì)方法完成各模塊的連接,通過(guò)仿真和實(shí)物測(cè)試驗(yàn)證,證明能夠?qū)崿F(xiàn)洗衣機(jī)控制器的主要功能。同時(shí)也還存在問(wèn)題:編寫(xiě)的程序能夠?qū)崿F(xiàn)主要的洗衣功能但是代碼過(guò)于繁瑣,尤其是頂層文件使用例化語(yǔ)句調(diào)用并連接各個(gè)模塊時(shí),代碼過(guò)于繁雜,不如用原理圖連接更為簡(jiǎn)潔方便。該設(shè)計(jì)僅能初步實(shí)現(xiàn)一種可選擇三種洗衣強(qiáng)度的基本的洗衣機(jī)的流程,模式太過(guò)于單一,存在局限性。參考文獻(xiàn)朱偉.全自動(dòng)直筒洗衣機(jī)FPGA控制器的開(kāi)發(fā)設(shè)計(jì)[J].科技創(chuàng)新與應(yīng)用,2017,(14):50.成超,任峻.基于VHDL的洗衣機(jī)控制器的設(shè)計(jì)[J].電子設(shè)計(jì)工程,2014,22(04):92-94+98.閆晶晶,張尚宇,王冰.基于單片機(jī)的全自動(dòng)洗衣機(jī)控制系統(tǒng)設(shè)計(jì)[J].中國(guó)高新科技,2023,(13):19-21.王曉冬,陳紅友.基于單片機(jī)的全自動(dòng)洗衣機(jī)控制系統(tǒng)設(shè)計(jì)[J].科技創(chuàng)新與應(yīng)用,2017,(09):88.NWulandari,AGAbdullah.DesignandSimulationofWashingMachineusingFuzzyLogicController(FLC)[J].IOPConferenceSeries:MaterialsScienceandEngineering,2018,384(1).孫浩,付一含,趙根,徐棟義,王穎.基于Verilog的洗衣機(jī)控制電路設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2019,15(07):244-245.高學(xué)群.單片機(jī)控制的全自動(dòng)洗衣機(jī)系統(tǒng)[J].時(shí)代農(nóng)機(jī),2015,42(06):57+59.李彩容.淺談單片機(jī)系統(tǒng)的電磁干擾與抗干擾措施[J].黑龍江科技信息,2011,(32):82.張繼東.自動(dòng)控制技術(shù)在全自動(dòng)洗衣機(jī)的應(yīng)用[J].中國(guó)設(shè)備工程,2017,(05):110-111.郭忠,李濤,李勇,等.基于FPGA的洗衣機(jī)控制系統(tǒng)設(shè)計(jì)[J].電子設(shè)計(jì)工程,2012,20(13):190-192.DOI:10.14022/ki.dzsjgc.2012.13.017.陳飛云.基于VerilogHDL語(yǔ)言的全自動(dòng)洗衣機(jī)控制器的設(shè)計(jì)與仿真[J].應(yīng)用技術(shù)學(xué)報(bào),2017,17(03):257-261.杜強(qiáng).基于FPGA的智能洗衣機(jī)控制器的研究與仿真設(shè)計(jì)[D].哈爾濱理工大學(xué),2016.梅江龍.波輪全自動(dòng)洗衣機(jī)模塊化平臺(tái)的設(shè)計(jì)研究[J].日用電器,2021,(11):69-75.附錄1、時(shí)鐘計(jì)數(shù)模塊:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitytime_countisPort(clk:inSTD_LOGIC;--時(shí)鐘,50MHZrst_n:inSTD_LOGIC;--復(fù)位信號(hào),下降沿有效,negativesec_1:outSTD_LOGIC--1s輸出一個(gè)脈沖信號(hào));endtime_count;architectureBehavioraloftime_countisconstantMAX_NUM:natural:=24_999_999;--記最大數(shù)1s,50,000,000次--constantMAX_NUM:natural:=49;--記最大數(shù)1s,50,000,000次signalcnt_1:naturalrange0toMAX_NUM:=0;--計(jì)數(shù)寄存器signalsec_1_r:STD_LOGIC:='0';begin--1s計(jì)時(shí)器process(clk)beginifrising_edge(clk)thenifnotrst_n='1'thencnt_1<=0;elsifcnt_1=MAX_NUMthencnt_1<=0;elsecnt_1<=cnt_1+1;endif;endif;endprocess;--1s脈沖信號(hào)process(clk)beginifrising_edge(clk)thenifnotrst_n='1'thensec_1_r<='0';elsifcnt_1=MAX_NUMthensec_1_r<='1';elsesec_1_r<='0';endif;endif;endprocess;sec_1<=sec_1_r;--當(dāng)右邊改變,立馬賦值給左邊assign和always并行endBehavioral;2、按鍵控制模塊:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitykeyisgeneric(N:integer:=1;PULSE_PERIOD:integer:=262143--PULSE_PERIOD:integer:=10);Port(clk:inSTD_LOGIC;rstn:inSTD_LOGIC;key_in:inSTD_LOGIC;key_pulse:outSTD_LOGIC);endkey;architectureBehavioralofkeyissignalkey_rst_pre,key_rst,key_edge,key_sec_pre,key_sec:STD_LOGIC;signalcnt:STD_LOGIC_VECTOR(17downto0):=(others=>'0');beginprocess(clk)beginifrising_edge(clk)thenifnot(rstn='1')thenkey_rst<='1';key_rst_pre<='1';elsekey_rst<=key_in;key_rst_pre<=key_rst;endif;endif;endprocess;key_edge<=key_rst_preand(notkey_rst);process(clk)beginifrising_edge(clk)thenifnot(rstn='1')thencnt<=(others=>'0');elsifkey_edge='1'thencnt<=(others=>'0');elsecnt<=cnt+'1';endif;endif;endprocess;process(clk)beginifrising_edge(clk)thenifnot(rstn='1')thenkey_sec<='1';elsifcnt=PULSE_PERIODthenkey_sec<=key_in;endif;endif;endprocess;process(clk)beginifrising_edge(clk)thenifnot(rstn='1')thenkey_sec_pre<='1';elsekey_sec_pre<=key_sec;endif;endif;endprocess;key_pulse<=key_sec_preand(notkey_sec);endBehavioral;3、電機(jī)控制模塊:libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;entityservorisport(clk:instd_logic;en:instd_logic;dir:instd_logic;ctrl_out:outstd_logic_vector(3downto0));endservor;architectureBehavioralofservorissignalclk_cnt_servor:integer:=0;signalservor_pulse:std_logic:='0';signalctrl_reg:std_logic_vector(3downto0):="0001";beginctrl_out<=ctrl_reg;process(clk)beginifrising_edge(clk)thenifclk_cnt_servor<90000thenclk_cnt_servor<=clk_cnt_servor+1;servor_pulse<='0';elseclk_cnt_servor<=0;servor_pulse<='1';endif;endif;endprocess;process(clk)beginifrising_edge(clk)thenifservor_pulse='1'anden='1'thenifdir='1'thenctrl_reg<=ctrl_reg(2downto0)&ctrl_reg(3downto3);--反轉(zhuǎn)elsectrl_reg<=ctrl_reg(0downto0)&ctrl_reg(3downto1);--正轉(zhuǎn)endif;endif;endif;endprocess;endarchitectureBehavioral;5、工作狀態(tài)顯示模塊:libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;useieee.std_logic_unsigned.all;useieee.numeric_std.all;entitysgm_topisport(clk:instd_logic;rst_n:instd_logic;time_remain:integer;washer_mode:instd_logic_vector(1downto0);washer_power:instd_logic_vector(1downto0);sgm_sel:outstd_logic_vector(5downto0);sgm_bit:outstd_logic_vector(7downto0));endsgm_top;architectureBehavioralofsgm_topissignalsgm_data:std_logic_vector(3downto0);signaldp_en:std_logic;signalclk_cnt_ms:integer;signalclk_pulse_1ms:std_logic;signalcnt_sel:integer;componentsgmisport(data_in:instd_logic_vector(3downto0);dp_en:instd_logic;bit_out:outstd_logic_vector(7downto0));endcomponent;beginprocess(clk)beginifrising_edge(clk)thenifrst_n='0'thenclk_cnt_ms<=0;clk_pulse_1ms<='0';elseifclk_cnt_ms<49999thenclk_cnt_ms<=clk_cnt_ms+1;clk_pulse_1ms<='0';elseclk_cnt_ms<=0;clk_pulse_1ms<='1';endif;endif;endif;endprocess;process(clk)beginifrising_edge(clk)thenifrst_n='0'thencnt_sel<=0;elseifclk_pulse_1ms='1'thenif(cnt_sel<5)thencnt_sel<=cnt_sel+1;elsecnt_sel<=0;endif;endif;endif;endif;endprocess;process(cnt_sel)begincasecnt_selis--位選when0=>--顯示最低位sgm_sel<="111110";sgm_data<=std_logic_vector(to_unsigned((time_remain/2)mod60mod10,4));dp_en<='0';when1=>sgm_sel<="111101";sgm_data<=std_logic_vector(to_unsigned((time_remain/2)mod60/10,4));dp_en<='0';when2=>sgm_sel<="111011";sgm_data<=std_logic_vector(to_unsigned((time_remain/2)/60mod10,4));dp_en<='1';when3=>sgm_sel<="110111";sgm_data<=std_logic_vector(to_unsigned((time_remain/2)/60/10,4));dp_en<='0';when4=>sgm_sel<="101111";sgm_data<="00"&washer_power;dp_en<='1';when5=>sgm_sel<="011111";sgm_data<="00"&washer_mode;dp_en<='1';whenothers=>sgm_sel<="111111";dp_en<='0';endcase;endprocess;u_sgm:sgmportmap(data_in=>sgm_data,dp_en=>dp_en,bit_out=>sgm_bit);endarchitectureBehavioral;libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;useieee.std_logic_unsigned.all;entitysgmisPort(data_in:instd_logic_vector(3downto0);dp_en:instd_logic;bit_out:outstd_logic_vector(7downto0));endsgm;architectureBehavioralofsgmissignaldp_bit:std_logic;begindp_bit<=notdp_en;process(data_in)begincasedata_inis--段選when"0000"=>bit_out<=dp_bit&"1000000";when"0001"=>bit_out<=dp_bit&"1111001";when"0010"=>bit_out<=dp_bit&"0100100";when"0011"=>bit_out<=dp_bit&"0110000";when"0100"=>bit_out<=dp_bit&"0011001";when"0101"=>bit_out<=dp_bit&"0010010";when"0110"=>

溫馨提示

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

評(píng)論

0/150

提交評(píng)論