一種基于VHDL的洗衣機(jī)控制器設(shè)計(jì)
2.3 控制模塊設(shè)計(jì)
本文引用地址:http://2s4d.com/article/246896.htm控制模塊是洗衣機(jī)控制器的核心模塊,它根據(jù)按鍵選擇模塊輸入的各種控制信息和計(jì)時(shí)模塊輸入的計(jì)時(shí)信息控制洗衣4種狀態(tài)的轉(zhuǎn)換和電機(jī)轉(zhuǎn)速,并輸出當(dāng)前洗衣狀態(tài)、電機(jī)轉(zhuǎn)速,以及剩余時(shí)間。
洗衣四種狀態(tài)的轉(zhuǎn)換可以方便對(duì)由狀態(tài)機(jī)實(shí)現(xiàn)。狀態(tài)機(jī)是一種輸出由當(dāng)前狀態(tài)和當(dāng)前輸入決定的時(shí)序電路,它通??梢杂脿顟B(tài)轉(zhuǎn)換圖表示。使用VHDL設(shè)計(jì)狀態(tài)機(jī)不必知道電路的具體實(shí)現(xiàn)細(xì)節(jié),只需在邏輯上加以描述,因此采用狀態(tài)機(jī)實(shí)現(xiàn)控制模塊是一種非常方便的方法。
狀態(tài)機(jī)的用VHDL實(shí)現(xiàn)有通用格式,它包含兩個(gè)個(gè)進(jìn)程:狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換進(jìn)程Change_State和狀態(tài)機(jī)輸出進(jìn)程Output_Process。其中狀態(tài)轉(zhuǎn)換進(jìn)程由狀態(tài)轉(zhuǎn)換圖決定,洗衣機(jī)的狀態(tài)轉(zhuǎn)換圖如圖2所示,S0、S1、S2、S3、S4分別為進(jìn)水、洗滌、漂洗、脫水以及結(jié)束狀態(tài),n0、n1、n2、n3分別表示由按鍵選擇模塊輸出的進(jìn)水、洗滌、漂洗與脫水時(shí)間,num為計(jì)數(shù)模塊輸出的洗衣機(jī)運(yùn)行時(shí)間,reset為洗衣機(jī)啟動(dòng)信號(hào)。當(dāng)洗衣機(jī)啟動(dòng)時(shí),即reset按鍵撥動(dòng),進(jìn)入S0狀態(tài),開始進(jìn)水;當(dāng)洗衣機(jī)運(yùn)行時(shí)間num=n0時(shí),進(jìn)水完成,狀態(tài)轉(zhuǎn)為S1,開始洗滌;當(dāng)洗衣機(jī)運(yùn)行時(shí)間num=n0+n1時(shí),洗滌完成,狀態(tài)轉(zhuǎn)為S2,開始漂洗;當(dāng)洗衣機(jī)運(yùn)行時(shí)間num=n0+n1+n2時(shí),漂洗完成,狀態(tài)轉(zhuǎn)為S3,開始脫水;當(dāng)洗衣機(jī)運(yùn)行時(shí)間num=n0+n1+n2+n3時(shí),脫水完成,狀態(tài)轉(zhuǎn)為結(jié)束狀態(tài)S4,洗衣停止。
狀態(tài)轉(zhuǎn)換進(jìn)程的VHDL代碼如下:
當(dāng)reset=1時(shí),啟動(dòng)進(jìn)程,當(dāng)前狀態(tài)state置S0。每當(dāng)掃描時(shí)鐘scan_clk為上升沿時(shí),啟動(dòng)進(jìn)程,根據(jù)當(dāng)前狀態(tài)state和洗衣機(jī)運(yùn)行時(shí)間num,按照狀態(tài)轉(zhuǎn)換圖決定新的當(dāng)前狀態(tài)。
輸出進(jìn)程通過輸出4種洗衣狀態(tài)信號(hào)控制4個(gè)LED燈當(dāng)明滅來顯示當(dāng)前洗衣狀態(tài)。輸出進(jìn)程通過輸出進(jìn)水信號(hào)控制進(jìn)水。當(dāng)洗衣為進(jìn)水狀態(tài)時(shí),若暫停信號(hào)為0,則輸出進(jìn)水信號(hào)為1,開始進(jìn)水;若暫停信號(hào)為1,輸出進(jìn)水信號(hào)為0,暫停進(jìn)水。而當(dāng)洗衣為其他狀態(tài)時(shí),輸出進(jìn)水信號(hào)始終為0,停止進(jìn)水。輸出進(jìn)程通過輸出電機(jī)控制信號(hào)控制電機(jī)運(yùn)行。根據(jù)洗滌電機(jī)的邏輯控制過程,當(dāng)洗衣狀態(tài)為進(jìn)水時(shí),輸出電機(jī)控制信號(hào)為零電平,表示電機(jī)暫停;當(dāng)洗衣狀態(tài)為洗滌和漂洗時(shí),輸出電機(jī)控制信號(hào)為頻率為洗滌轉(zhuǎn)速(默認(rèn)60轉(zhuǎn)/分鐘,即1Hz)的方波持續(xù)5秒(默認(rèn)時(shí)輸出1 Hz的方波5個(gè)),然后高電平持續(xù)1秒(控制電機(jī)極性轉(zhuǎn)向);洗衣狀態(tài)為脫水時(shí),輸出電機(jī)控制信號(hào)為頻率為脫水轉(zhuǎn)速(600轉(zhuǎn)/分鐘,即10 Hz)的方波持續(xù)5秒(默認(rèn)狀態(tài)下,輸出10 Hz的方波50個(gè)),然后零電平持續(xù)1秒(控制電機(jī)暫停)。輸出進(jìn)程根據(jù)當(dāng)前狀態(tài)和洗衣機(jī)運(yùn)行時(shí)間輸出當(dāng)前狀態(tài)剩余時(shí)間到顯示模塊。例如,當(dāng)洗衣為洗滌狀態(tài)時(shí),輸出剩余時(shí)間為n0+n1-num。
2.4 顯示模塊設(shè)計(jì)
本模塊用于在7段數(shù)碼管上顯示當(dāng)前狀態(tài)剩余時(shí)間,其輸入為控制模塊輸出的當(dāng)前狀態(tài)剩余時(shí)間和掃描時(shí)鐘。首先,將輸入的剩余時(shí)間由秒轉(zhuǎn)換為分鐘(四舍五入);然后進(jìn)行分位,分為個(gè)位ge和十位shi(顯然剩余時(shí)間不超過100分鐘,最多2位);最后通過動(dòng)態(tài)掃描在2個(gè)共陰極的七段數(shù)碼上交替顯示個(gè)位數(shù)字和十位數(shù)字。當(dāng)交替頻率高于28 Hz時(shí),由于人眼的視覺殘留效果,這2位數(shù)字看上去是同時(shí)顯示在2個(gè)七段數(shù)碼管上。動(dòng)態(tài)掃描進(jìn)程的VHDL代碼如下:
3 結(jié)束語
我們?cè)赒uartusⅡ軟件開發(fā)平臺(tái)上,基于模塊化的設(shè)計(jì)思想,使用VHDL語言完成洗衣機(jī)控制器設(shè)計(jì)、編譯和仿真,并下載到FPGA硬件實(shí)驗(yàn)箱上進(jìn)行測試。仿真波形和測試結(jié)果表明該洗衣機(jī)能正確實(shí)現(xiàn)各種設(shè)計(jì)功能,該設(shè)計(jì)方案切實(shí)可行。
評(píng)論