【文章內容簡介】
INT82DEV_OE83IN484GCLCK11IN12DEV_OE3VCCINT4I/O0/DATA75I/O1/DATA66I/O2/DATA57I/O3/DATA48I/O4/DATA39I/O5/DATA210I/O6/DATA111D A T A 012D C L K13n C E14T D I15I / O 716I / O 817I / O 918I / O 1019V C C I N T20I / O 1121I / O 1222I / O 1323I / O 1424I / O 1525G N D I N T26I / O 1627I / O 1728I / O 1829I / O 1930M S E L 031M S E L 132VCCINT33nCONFIG34I/O2035I/O2136I/O2237I/O2338I/O2439VCCINT40GNDINT41IN242GCLK243IN344VCCINT45GNDINT46I/O2547I/O2648I/O2749I/O2850I/O2951I/O3052I/O3153A L T E R AE P F1 0 K 1 0 L C8 4FL E X8 4 P IN P L CC 13 圖 時鐘發(fā)生器 電源電路 日常所用到的電源為 220V 電壓的電源,但是本課題中自動售貨機所需要的電壓為 5V,因此我們需要設定一個變壓電路來完成所需的電壓。在這部分電路我們用到了一個變壓器,一個整流橋,一個濾波電路,一個穩(wěn)壓器完成為 5V 電壓的電源。電源電路如圖 所示。 圖 電源電路 鍵盤的設計 為了完成購物自動售貨機必須有購物鍵,本課題所要求的是五個按鍵,其中四個是商品選擇鍵(熱狗,飲料,漢堡,雙層漢堡),剩下的一個按鍵為初始按鍵。關于輸入按鍵的信號發(fā)生情況將在下文中的軟件系統(tǒng)設計中闡述,這里就不多敘述,按鍵選用的是 SW_PB,按鍵的硬件部分如圖 所示。 14 圖 選擇鍵的設計 下載驅動器以及外擴存儲器電路設計 自動售貨機需要跳電存儲功能,因此需要在 FPGA 芯片外接一個存儲器,另由于控制器需要下載驅動,因此需要外接一個驅動下載以及外接存儲器,如 圖 所示。此裝置能夠順利完成下載驅動以及跳電存儲功能。 圖 下載驅動與外接存儲器 顯示器設計 自動售貨機需要一個顯示燈,當購物結束后顯示器顯示找零錢數額。對于顯示器的顯示數字情況,將在下文軟件系統(tǒng)中的顯示模塊進行闡述。顯示器 如圖 所示。 15 圖 顯示器 硬件電路圖 本論文的重點在于對控制系統(tǒng)的設計,因此,我們只關注控制信號以及信號發(fā)生后出現的結果,對于自動售貨機的電動機不做太多的討論。自動售貨機的硬件電路圖見附錄。 4 軟件系統(tǒng)設計 軟件系統(tǒng)分為總體思想 與模塊的分類。 設計思想 功能要求 ( 1)該系統(tǒng)能完成對貨物信息的存儲、進程控制、錢幣處理、余額計算和顯示功能。 ( 2)自動售貨機能夠銷售 4 種商品:熱狗( 1元),漢堡包( 4 元),雙層漢堡包( 8 元),飲料( 3 元)數量無限。自動售貨機允許投入 1 元, 2 元, 5 元硬幣:當總幣值等于顧客需要的商品單價時,機器送出需要的商品:若總幣值大于顧客需要的商品單價時,機器除提供所需商品外,并將余幣退出;若總幣值小于顧客需要的商品單價時,機器退出顧客投入的硬幣。設機器內 1元和 2 元的找零硬幣無限。 ( 3)如 果投入的硬幣達到或大于所購商品的價格,自動售貨機會發(fā)出一個指示信號使接受硬幣的裝置不再接收新的硬幣。 ( 4)每次投幣的時間有限制,不得超過 30 秒,在時間到時,總幣值不足顧 16 客購買的商品單價時,自動售貨機按不足錢數處理,退還全部硬幣?;蛘咴谠O定時間內,總幣值不足顧客購買的商品單價時,若需要取消交易則可按取消鍵,售貨機按不足錢數處理,退還全部硬幣。 ( 5)當顧客完成一次購買后或按錯按鈕后,需要設置一個重新開始按鈕,使整個系統(tǒng)恢復到初始狀態(tài)。 ( 6)顧客一次只能購買一種商品的一個,若需要更多商品,需要重復操作。 總體思想 自動售貨機包括四個商品,依據四種商品分別設為四個按鈕, A1,A3,A4,A8。當顧客選擇其中的一種商品時,售貨機發(fā)送出一個信號按鈕不再生效,用一個 LED燈顯示。設置三個按鈕: a1,a2,a5 來表示投入的硬幣是 1元、 2元、 5 元。當顧客投入的硬幣大于或等于售價時將不再接受硬幣,用一個 LED 燈顯示。當顧客確定某種商品且投入了足額的硬幣,投幣時限到時,投幣窗口找零,用七段顯示管顯示找零數,同時送出商品,指示燈 out 亮。 控制狀態(tài)的設計 此售貨機分為三種狀態(tài),每一個狀態(tài)能完成一定得 功能:初始狀態(tài),投幣狀態(tài),找零狀態(tài)。 ( 1)初始狀態(tài):當售貨機通電后進入初始狀態(tài),顧客購買時,可根據選擇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):投幣結束 ,售貨機自動判別總錢數,若在時限到來之際,總錢數少于顧客所需商品的單價,則退出錢幣,用 LED 顯示退錢數。若大于或等于商品數則通過控制系統(tǒng)找零,用 LED 顯示找零數,送出商品。出貨找零,表示一次工作已經結束,等待下一個信號到來,進行新的售貨。 設計流程圖 17 圖 流程圖 模塊分類 此售貨機模塊包括:投幣處理模塊,商品選擇模塊,投幣模塊,分頻模塊,控制器模塊,計時模塊, LED 燈顯示模塊,找零模塊,出貨模塊,如圖 所示。 是 是 否 否 否 是 一元貨物 2 元貨 3 元貨 投幣 計算金額 金額 物價 繼續(xù)投幣 確認購買 出貨找零 退幣 結束 4 元貨 開始 18 圖 模塊示意圖 投幣模塊 自動售貨機能夠自動計算投入的錢幣數目,需要提供一個寄存器來記錄并保存投入的總幣值。此模塊有六個輸入信號以及兩個輸出信號: qian1,qian2,qian5為不同數額錢幣輸入信號; en1 為主控模塊所發(fā)出的信號,當 en1 信號為 1 的時候,投幣模塊開始工作; reset 為恢復初始信號,當 reset 信號為 1 的時候投幣模塊不進行工作; en 為給計時器的輸出信號,當 en 為 1 的時候計時器開始工作;bi 為輸出的錢幣數目。如圖 所示。 投幣模塊的作用相當于一個計數的寄存器,在清零的狀態(tài)下可以準確的計算投幣數額,記錄并保存總幣值。 圖 . 投幣模塊 投幣模塊主要程序如下: library ieee。 use 。 19 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 is signal state:integer range 0 to 1。 begin process variable qian:integer range 0 to 15。 begin wait until clk=39。139。and clk39。 event。 if reset=39。139。 then state=0。bi=0。qian:=0。en=39。039。 else case state is when 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。 20 end a。 通過程序所得到的仿真圖如下所示: 1 當 reset 輸入為 0,輸入 5元, 2 元, 1元時,輸出結果為 7。仿真結果如圖 所示: 圖 reset 輸入為 0 時的仿真結果 2 當 reset 輸入為 1 時,輸入 5 元, 2元, 1 元, bi 輸出應為 0。仿真結果如圖 所示: 圖 reset 輸入為 1 時的仿真結果 商品選擇模塊 自動售貨機的商品選擇模塊,通過自動售貨機上的四個選擇按鍵完成商品選擇,在接收到對應四個商品之一的一個選擇信號時進行編譯,將被選擇的商品進行編碼,輸入到主控模塊中,在主控模塊中與所接受的錢幣進行對與計算。輸入信號為 a1,a2, a3, a8。而 xuan_rg,xuan_hb,xuan_yl,xuan_schb 為四個輸出信號,與出貨模塊連接。 reset 與 en2 信號來自主控模塊,當 reset 為 1 時模塊進 21 入初始狀態(tài),進行選擇。當 en2 為 1 時,商品可以進行選擇,當 en2 為 0時,四個商品選擇鍵無效。商品選擇模塊如圖 所示。 圖 商品選擇模塊 商選擇模塊主要程序如下: LIBRARY ieee。 USE 。 ENTITY yima IS PORT ( 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 IS BEGIN process(a1,a3,a4,a8) begin if reset=39。039。 then if 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