一種基于VHDL的洗衣機控制器設計
2.3 控制模塊設計
本文引用地址:http://www.104case.com/article/246896.htm控制模塊是洗衣機控制器的核心模塊,它根據按鍵選擇模塊輸入的各種控制信息和計時模塊輸入的計時信息控制洗衣4種狀態的轉換和電機轉速,并輸出當前洗衣狀態、電機轉速,以及剩余時間。
洗衣四種狀態的轉換可以方便對由狀態機實現。狀態機是一種輸出由當前狀態和當前輸入決定的時序電路,它通常可以用狀態轉換圖表示。使用VHDL設計狀態機不必知道電路的具體實現細節,只需在邏輯上加以描述,因此采用狀態機實現控制模塊是一種非常方便的方法。
狀態機的用VHDL實現有通用格式,它包含兩個個進程:狀態機狀態轉換進程Change_State和狀態機輸出進程Output_Process。其中狀態轉換進程由狀態轉換圖決定,洗衣機的狀態轉換圖如圖2所示,S0、S1、S2、S3、S4分別為進水、洗滌、漂洗、脫水以及結束狀態,n0、n1、n2、n3分別表示由按鍵選擇模塊輸出的進水、洗滌、漂洗與脫水時間,num為計數模塊輸出的洗衣機運行時間,reset為洗衣機啟動信號。當洗衣機啟動時,即reset按鍵撥動,進入S0狀態,開始進水;當洗衣機運行時間num=n0時,進水完成,狀態轉為S1,開始洗滌;當洗衣機運行時間num=n0+n1時,洗滌完成,狀態轉為S2,開始漂洗;當洗衣機運行時間num=n0+n1+n2時,漂洗完成,狀態轉為S3,開始脫水;當洗衣機運行時間num=n0+n1+n2+n3時,脫水完成,狀態轉為結束狀態S4,洗衣停止。
狀態轉換進程的VHDL代碼如下:

當reset=1時,啟動進程,當前狀態state置S0。每當掃描時鐘scan_clk為上升沿時,啟動進程,根據當前狀態state和洗衣機運行時間num,按照狀態轉換圖決定新的當前狀態。
輸出進程通過輸出4種洗衣狀態信號控制4個LED燈當明滅來顯示當前洗衣狀態。輸出進程通過輸出進水信號控制進水。當洗衣為進水狀態時,若暫停信號為0,則輸出進水信號為1,開始進水;若暫停信號為1,輸出進水信號為0,暫停進水。而當洗衣為其他狀態時,輸出進水信號始終為0,停止進水。輸出進程通過輸出電機控制信號控制電機運行。根據洗滌電機的邏輯控制過程,當洗衣狀態為進水時,輸出電機控制信號為零電平,表示電機暫停;當洗衣狀態為洗滌和漂洗時,輸出電機控制信號為頻率為洗滌轉速(默認60轉/分鐘,即1Hz)的方波持續5秒(默認時輸出1 Hz的方波5個),然后高電平持續1秒(控制電機極性轉向);洗衣狀態為脫水時,輸出電機控制信號為頻率為脫水轉速(600轉/分鐘,即10 Hz)的方波持續5秒(默認狀態下,輸出10 Hz的方波50個),然后零電平持續1秒(控制電機暫停)。輸出進程根據當前狀態和洗衣機運行時間輸出當前狀態剩余時間到顯示模塊。例如,當洗衣為洗滌狀態時,輸出剩余時間為n0+n1-num。
2.4 顯示模塊設計
本模塊用于在7段數碼管上顯示當前狀態剩余時間,其輸入為控制模塊輸出的當前狀態剩余時間和掃描時鐘。首先,將輸入的剩余時間由秒轉換為分鐘(四舍五入);然后進行分位,分為個位ge和十位shi(顯然剩余時間不超過100分鐘,最多2位);最后通過動態掃描在2個共陰極的七段數碼上交替顯示個位數字和十位數字。當交替頻率高于28 Hz時,由于人眼的視覺殘留效果,這2位數字看上去是同時顯示在2個七段數碼管上。動態掃描進程的VHDL代碼如下:

3 結束語
我們在QuartusⅡ軟件開發平臺上,基于模塊化的設計思想,使用VHDL語言完成洗衣機控制器設計、編譯和仿真,并下載到FPGA硬件實驗箱上進行測試。仿真波形和測試結果表明該洗衣機能正確實現各種設計功能,該設計方案切實可行。
評論