【FPGA】自动售货机综合实现
自動售貨機綜合實現
- 一、項目需求
- 1. 售貨機模擬項目。
- 二、要求
- 三、售貨機原理
- 1. 基本原理
- 2. 思路架構
- 3. RTL物理模型實現
- 四、項目分析解決
- 五、總結
- 參考
一、項目需求
1. 售貨機模擬項目。
pwm音頻產生:PWM生成原理與控制輸出
-
模塊
按鍵消抖模塊、有限狀態機模塊、LED模塊、數碼管模塊、蜂鳴器模塊
-
功能實現
- 售貨機商品選擇,存儲商品1,2,單價設定為1.5元與1元,通過LED燈表示選擇商品種類。
- 商品選擇后確定購買商品數量,并在數碼管動態顯示所選擇商品的數量與商品總價。
- 投幣購買商品,數碼管顯示投幣金額
- 投幣金額判斷,滿足商品出貨,超額找零,調用PWM播放音樂,不足提示音,可繼續投幣
- LED燈顯示狀態切換,識別進入狀態并提示下一步操作
二、要求
三、售貨機原理
1. 基本原理
2. 思路架構
- 核心商品購買模塊
??實現多商品選擇及購物功能實現過程中,按鍵[3:0]key,需要進行按鍵復用操作,購買狀態中,會默認進入初始狀態,按鍵執行操作后,進入不同的狀態:如商品選擇狀態,數量選擇,投幣狀態,后執行按鍵操作,功能性改變,實現少按鍵多功能性操作。
??執行按鍵操作中,通常的按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時,由于機械觸點的彈性作用,電路開關不會發生迅速進入閉合或者斷開狀態。閉合或斷開會發生機械抖動問題,可能產生多次按鍵效果。
??設定抖動結束判斷,通過比較判定抖動是否結束,信號變化頻率平穩后持續20ms進行采樣,確保按鍵消抖正常,同時對松開按鍵操作進行同樣消抖操作處理。
投幣采用KEY4 KEY3鍵作為投幣輸入,先對按鍵進行消抖后,進入到INSERT_STATE,對按鍵操作傳遞標識值,傳遞值為1,則按鍵值+1或0.5,累加記錄按鍵操作次數,從而獲得總輸入金額
投幣金額計算:在進行數據類型存儲中,采用簡易化方式,通過改變鍵值傳遞,金額加減算法,如0.5元在機內運算中通過整數值存儲為5,采用十進制數據存儲計算,優化運算過程,因數碼管位數顯示限制,投幣操作中金額存在上限,通過對機內計算金額取余取整方式,實現數碼管中的金額顯示功能
金額小數位顯示:調用晶體管過程中,對數碼管相應的sel位的seg模塊賦予低電平進行點亮操作
if (sel == 6'b111_011 || sel == 6'b101_111)seg_r[7] <= 0;總金額計算:通過投幣傳遞值進行機內計算,同時設定存儲金額上限為9.9,若發生一處操作,則進行置值操作,或可進入返回清0。同時將total值傳遞到seg模塊,取余取整。
wire [10:0] total_price_ex;assign total_price_ex = com1_unit_price * com1_count + com2_unit_price * com2_count;reg [6:0] total_price_temp;出貨及清0動態顯示
商品購買狀態下,設定額外狀態,判斷商品購買,通過值傳遞:商品總價,投幣總金額進入狀態,并設定狀態,successful / fail狀態
此時successful并執行出貨操作,恢復初始狀態,并傳遞成功狀態標志
此時successful并執行出貨操作,執行找零操作,并在數碼管上顯示找0余額change_r <= now_coins - total_price; 恢復初始狀態,并傳遞成功狀態標志,調用其他功能效果
fail 并傳遞失敗狀態標志,此時保持投幣狀態,可繼續進行投幣操作
系統框圖
?
FSM狀態機進入不同狀態,通過設定狀態標識符,調用不同LED燈管顯示效果 if (now_state == DEFAULT_STATE)led_r <= 4'b0001;else if(now_state == SELECT_STATE) beginif (cnt_shine < SHINE_T/2)led_r <= 4'b1100;
3. RTL物理模型實現
四、項目分析解決
問題
蜂鳴器模塊調用
??蜂鳴器IO口連接在FPGA芯片,PWM輸出信號只有高低電平,重復輸出周期T,在高電平1時間為t的脈沖中,占空比t/T
???定義輸出周期,通過調整低電平占空比,如20,30等通過按鍵作為控制和觸發條件, 持續周期內發出一種聲音,切換后發出另一種聲音。
樂譜模塊
???音頻:音頻(Audio),指人耳可以聽到的聲音頻率在20HZ~20kHz之間的聲波。樂普是由音符組成的,不同的音符擁有不同的頻率。
???計算出音符振動的周期,單位微秒。Cyclone IV開發板的晶振是50MHz,振動一次是20納秒,使用周期時間除以20納秒得出音符振動的次數。
DO(高)=955×10320=47750DO(高)= \frac{955×10^3}{20}=47750 DO(高)=20955×103?=47750
不足
- 使用數碼管位數有限,在實現部分功能上存在限制,如投幣功能實現中,根據位數實現時,投幣金額上限單位為9,不能實現過10進位,同理選擇商品計算總金額要和會出現同問題。
- 實現音樂播放效果,修改占空比提高聲音效果,技術局限導致提高音量音質受損,提高音質音量較低。
- 按鍵功能實現選擇商品存在局限。
實現效果
五、總結
參考
按鍵消抖+點亮led燈
按鍵消抖+蜂鳴器
基于FPGA狀態機的自動售貨機功能實現
FPGA verilog HDL 基于有限狀態機設計自動販賣機及綜合
總結
以上是生活随笔為你收集整理的【FPGA】自动售货机综合实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux串口蜂鸣器报警电路,蜂鸣器报警
- 下一篇: 总裁演说思维技巧:口才训练方法写日记法