【文章內(nèi)容簡介】
/O1121I/O2136I/O3153I/O4167I/O1222I/O2237I/O3254I/O4371I/O1323I/O2338I/O3358I/O4472I/O1424I/O2439I/O3459I/O1525I/O2547I/O3560I/O1627I/O2648I/O3661FLEX 10K10主要由84個引腳組成,: 各引腳對應(yīng)的引腳名稱 時鐘發(fā)生器自動售貨機的控制系統(tǒng)需要一個時鐘信號,我們選用的是6MHz的時鐘信號。其中用兩個振蕩器以及兩個電阻可以完成我們所需要的設(shè)定。圖 時鐘發(fā)生器 電源電路日常所用到的電源為220V電壓的電源,但是本課題中自動售貨機所需要的電壓為5V,因此我們需要設(shè)定一個變壓電路來完成所需的電壓。在這部分電路我們用到了一個變壓器,一個整流橋,一個濾波電路,一個穩(wěn)壓器完成為5V電壓的電源。 電源電路 鍵盤的設(shè)計為了完成購物自動售貨機必須有購物鍵,本課題所要求的是五個按鍵,其中四個是商品選擇鍵(熱狗,飲料,漢堡,雙層漢堡),剩下的一個按鍵為初始按鍵。關(guān)于輸入按鍵的信號發(fā)生情況將在下文中的軟件系統(tǒng)設(shè)計中闡述,這里就不多敘述,按鍵選用的是SW_PB。圖 選擇鍵的設(shè)計 下載驅(qū)動器以及外擴存儲器電路設(shè)計自動售貨機需要跳電存儲功能,因此需要在FPGA芯片外接一個存儲器,另由于控制器需要下載驅(qū)動,因此需要外接一個驅(qū)動下載以及外接存儲器。此裝置能夠順利完成下載驅(qū)動以及跳電存儲功能。圖 下載驅(qū)動與外接存儲器 顯示器設(shè)計自動售貨機需要一個顯示燈,當購物結(jié)束后顯示器顯示找零錢數(shù)額。對于顯示器的顯示數(shù)字情況,將在下文軟件系統(tǒng)中的顯示模塊進行闡述。圖 顯示器 硬件電路圖本論文的重點在于對控制系統(tǒng)的設(shè)計,因此,我們只關(guān)注控制信號以及信號發(fā)生后出現(xiàn)的結(jié)果,對于自動售貨機的電動機不做太多的討論。自動售貨機的硬件電路圖見附錄。4 軟件系統(tǒng)設(shè)計軟件系統(tǒng)分為總體思想與模塊的分類。 設(shè)計思想 功能要求(1)該系統(tǒng)能完成對貨物信息的存儲、進程控制、錢幣處理、余額計算和顯示功能。 (2)自動售貨機能夠銷售4種商品:熱狗(1元),漢堡包(4元),雙層漢堡包(8元),飲料(3元)數(shù)量無限。自動售貨機允許投入1元,2元,5元硬幣:當總幣值等于顧客需要的商品單價時,機器送出需要的商品:若總幣值大于顧客需要的商品單價時,機器除提供所需商品外,并將余幣退出;若總幣值小于顧客需要的商品單價時,機器退出顧客投入的硬幣。設(shè)機器內(nèi)1元和2元的找零硬幣無限。(3)如果投入的硬幣達到或大于所購商品的價格,自動售貨機會發(fā)出一個指示信號使接受硬幣的裝置不再接收新的硬幣。(4)每次投幣的時間有限制,不得超過30秒,在時間到時,總幣值不足顧客購買的商品單價時,自動售貨機按不足錢數(shù)處理,退還全部硬幣。或者在設(shè)定時間內(nèi),總幣值不足顧客購買的商品單價時,若需要取消交易則可按取消鍵,售貨機按不足錢數(shù)處理,退還全部硬幣。(5)當顧客完成一次購買后或按錯按鈕后,需要設(shè)置一個重新開始按鈕,使整個系統(tǒng)恢復(fù)到初始狀態(tài)。(6)顧客一次只能購買一種商品的一個,若需要更多商品,需要重復(fù)操作。 總體思想自動售貨機包括四個商品,依據(jù)四種商品分別設(shè)為四個按鈕,A1,A3,A4,A8。當顧客選擇其中的一種商品時,售貨機發(fā)送出一個信號按鈕不再生效,用一個LED燈顯示。設(shè)置三個按鈕:a1,a2,a5來表示投入的硬幣是1元、2元、5元。當顧客投入的硬幣大于或等于售價時將不再接受硬幣,用一個LED燈顯示。當顧客確定某種商品且投入了足額的硬幣,投幣時限到時,投幣窗口找零,用七段顯示管顯示找零數(shù),同時送出商品,指示燈out亮。 控制狀態(tài)的設(shè)計此售貨機分為三種狀態(tài),每一個狀態(tài)能完成一定得功能:初始狀態(tài),投幣狀態(tài),找零狀態(tài)。(1)初始狀態(tài):當售貨機通電后進入初始狀態(tài),顧客購買時,可根據(jù)選擇xuan_rg,xuan_yl,xuan_hb,xuan_schb鍵購買商品,從而進入下一狀態(tài)。當顧客購買錯誤或不再購買時按下start重新進入初始狀態(tài)。(2)投幣狀態(tài):在這個狀態(tài)時xuan_rg,xuan_yl,xuan_hb,xuan_schb鍵失效。投入錢(1元,2元,5元),當投入硬幣等于或者超過商品價格時進入下一狀態(tài)。投幣時間為30秒超過30秒,售貨機拒絕接受錢幣。 (3)找零狀態(tài):投幣結(jié)束,售貨機自動判別總錢數(shù),若在時限到來之際,總錢數(shù)少于顧客所需商品的單價,則退出錢幣,用LED顯示退錢數(shù)。若大于或等于商品數(shù)則通過控制系統(tǒng)找零,用LED顯示找零數(shù),送出商品。出貨找零,表示一次工作已經(jīng)結(jié)束,等待下一個信號到來,進行新的售貨。 設(shè)計流程圖是是否否否是一元貨物2元貨3元貨投幣計算金額金額物價繼續(xù)投幣確認購買出貨找零退幣結(jié)束4元貨開始圖 流程圖 模塊分類此售貨機模塊包括:投幣處理模塊,商品選擇模塊,投幣模塊,分頻模塊,控制器模塊,計時模塊,LED燈顯示模塊,找零模塊,出貨模塊。圖 模塊示意圖 投幣模塊自動售貨機能夠自動計算投入的錢幣數(shù)目,需要提供一個寄存器來記錄并保存投入的總幣值。此模塊有六個輸入信號以及兩個輸出信號:qian1,qian2,qian5為不同數(shù)額錢幣輸入信號;en1為主控模塊所發(fā)出的信號,當en1信號為1的時候,投幣模塊開始工作;reset為恢復(fù)初始信號,當reset信號為1 的時候投幣模塊不進行工作;en為給計時器的輸出信號,當en為1的時候計時器開始工作;bi為輸出的錢幣數(shù)目。投幣模塊的作用相當于一個計數(shù)的寄存器,在清零的狀態(tài)下可以準確的計算投幣數(shù)額,記錄并保存總幣值。圖 . 投幣模塊投幣模塊主要程序如下:library ieee。use 。entity toubi is port (a1,a2,a5,en1,clk,reset:in std_logic。 bi :out integer range 0 to 15。 en: out std_logic)。 end toubi。architecture a of toubi issignal state:integer range 0 to 1。beginprocessvariable qian:integer range 0 to 15。beginwait until clk=39。139。and clk39。 event。if reset=39。139。 then state=0。bi=0。qian:=0。en=39。039。elsecase state iswhen 0=if en1=39。139。 then if a1 =39。139。 then state=1。bi=1。qian:=1。en=39。139。elsif a2=39。139。 then state=1。bi=2。 qian:=2。en=39。139。elsif a5=39。139。 then state=1。qian:=5。bi=5。en=39。139。end if。end if。when 1=if en1=39。139。 then if a1=39。139。 then qian:=qian+1。bi=qian。en=39。139。elsif a2=39。139。 then qian:=qian+2。bi=qian。en=39。139。elsif a5=39。139。 then qian:=qian+5。bi=qian。en=39。139。end if。end if。end case。end if。end process。end a。通過程序所得到的仿真圖如下所示:1 當reset輸入為0,輸入5元,2元,1元時,輸出結(jié)果為7。: reset輸入為0時的仿真結(jié)果2 當reset輸入為1時,輸入5元,2元,1元,bi輸出應(yīng)為0。:圖 reset輸入為1時的仿真結(jié)果 商品選擇模塊自動售貨機的商品選擇模塊,通過自動售貨機上的四個選擇按鍵完成商品選擇,在接收到對應(yīng)四個商品之一的一個選擇信號時進行編譯,將被選擇的商品進行編碼,輸入到主控模塊中,在主控模塊中與所接受的錢幣進行對與計算。輸入信號為a1,a2,a3,a8。而xuan_rg,xuan_hb,xuan_yl,xuan_schb為四個輸出信號,與出貨模塊連接。reset 與en2信號來自主控模塊,當reset為1時模塊進入初始狀態(tài),進行選擇。當en2為1時,商品可以進行選擇,當en2為0時,四個商品選擇鍵無效。 所示。圖 商品選擇模塊商選擇模塊主要程序如下:LIBRARY ieee。USE 。ENTITY yima ISPORT ( a1,a3,a4,a8,en2,reset : IN STD_LOGIC。xuan_rg,xuan_yl,xuan_hb,xuan_schb:OUT STD_LOGIC。 d: OUT integer range 0 to 8 )。END yima。ARCHITECTURE a OF yima ISBEGINprocess(a1,a3,a4,a8) beginif reset=39。039。 thenif a1=39。139。 and en2=39。139。 then d=1。xuan_rg=39。139。 xuan_yl=39。039。xuan_hb=39。039。xuan_schb=39。039。elsif a3=39。139。thend=3。xuan_yl=39。139。xuan_rg=39。039。xuan_hb=39。039。xuan_schb=39。039。elsif a4=39。139。 and en2=39。139。 then d=4。 xuan_hb=39。139。xuan_yl=39。039。xuan_schb=39。039。elsif a8=39。139。 and en2=39。139。 then d=8。xuan_schb=39。139。xuan_yl=39。039。xua