日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【FPGA】自动售货机综合实现

發布時間:2024/1/1 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【FPGA】自动售货机综合实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自動售貨機綜合實現

  • 一、項目需求
    • 1. 售貨機模擬項目。
  • 二、要求
  • 三、售貨機原理
    • 1. 基本原理
    • 2. 思路架構
    • 3. RTL物理模型實現
  • 四、項目分析解決
  • 五、總結
  • 參考

一、項目需求

1. 售貨機模擬項目。

pwm音頻產生:PWM生成原理與控制輸出

  • 模塊

    按鍵消抖模塊、有限狀態機模塊、LED模塊、數碼管模塊、蜂鳴器模塊

  • 功能實現

    • 售貨機商品選擇,存儲商品1,2,單價設定為1.5元與1元,通過LED燈表示選擇商品種類。
    • 商品選擇后確定購買商品數量,并在數碼管動態顯示所選擇商品的數量與商品總價。
    • 投幣購買商品,數碼管顯示投幣金額
    • 投幣金額判斷,滿足商品出貨,超額找零,調用PWM播放音樂,不足提示音,可繼續投幣
    • LED燈顯示狀態切換,識別進入狀態并提示下一步操作

二、要求

  • 了解FPGA架構和傳統單片機的區別、
  • 可獨立完成實訓中實驗代碼編寫燒錄、
  • 可獨立根據CycloneIV開發板現有元器件資源完成程序設計及代碼編寫
  • 三、售貨機原理

    1. 基本原理

  • 模擬真實綜合售貨機,采用數碼管顯示商品購買數量,商品總金額,投幣金額,仿真實際生活的從商品選擇數目的添加到投幣購買完整狀態。
  • Led燈實現狀態變換標志,led3,led2交替閃爍進入商品選擇狀態,單led亮確認商品選擇。
  • 數碼管顯示金額差值清0操作仿真售貨機找0操作與回到初始狀態。
  • 購買狀態音樂播放,成功失敗調用不同音樂效果,模仿售貨機購物操作是否成功。
  • 2. 思路架構

    • 核心商品購買模塊
  • FSM狀態機狀態細分
  • 狀態1: 初始狀態(K4:進入狀態2)(K3:進入狀態5)(K2:確定)
  • 狀態2: 商品選擇狀態(K4:進入狀態3)(K3:進入狀態4)(K2:回到狀態1)
  • 狀態3: 商品1數量修改狀態(K4:當前商品數+1)(K3:當前商品數-1)(K2:回到狀態1)
  • 狀態4: 商品2數量修改狀態(K4:當前商品數+1)(K3:當前商品數-1)(K2:回到狀態1)
  • 狀態5: 投幣狀態(K4:投1元)(K3:投0.5元)(K2:回到狀態1)(K1:復位)
  • key按鍵復用
    ??實現多商品選擇及購物功能實現過程中,按鍵[3:0]key,需要進行按鍵復用操作,購買狀態中,會默認進入初始狀態,按鍵執行操作后,進入不同的狀態:如商品選擇狀態,數量選擇,投幣狀態,后執行按鍵操作,功能性改變,實現少按鍵多功能性操作。
  • 按鍵消抖
  • 產生原因:
    ??執行按鍵操作中,通常的按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時,由于機械觸點的彈性作用,電路開關不會發生迅速進入閉合或者斷開狀態。閉合或斷開會發生機械抖動問題,可能產生多次按鍵效果。
  • 消抖原理
    ??設定抖動結束判斷,通過比較判定抖動是否結束,信號變化頻率平穩后持續20ms進行采樣,確保按鍵消抖正常,同時對松開按鍵操作進行同樣消抖操作處理。
  • 系統框圖
  • 數碼管顯示
  • 商品及數量動態顯示
  • 初始狀態進入商品選擇態,選擇商品后自動切換進入商品數量選擇中,此時按鍵功能性改變,可以對該商品的數量進行添加或減少,通過設定傳遞值com1_count、com2_count對商品1.2選擇數量進行存儲
  • 通過傳遞按鍵消抖后標志值判斷是否選擇該商品并進行+1 -1操作,為計算總金額提供參數值,同時傳遞值進入seg模塊,同樣采取如投幣的思路對傳遞值進行操作,實現數據的動態顯示。
  • 投幣總金額及商品總金額數碼管動態顯示
  • 投幣采用KEY4 KEY3鍵作為投幣輸入,先對按鍵進行消抖后,進入到INSERT_STATE,對按鍵操作傳遞標識值,傳遞值為1,則按鍵值+1或0.5,累加記錄按鍵操作次數,從而獲得總輸入金額

  • 投幣金額計算:在進行數據類型存儲中,采用簡易化方式,通過改變鍵值傳遞,金額加減算法,如0.5元在機內運算中通過整數值存儲為5,采用十進制數據存儲計算,優化運算過程,因數碼管位數顯示限制,投幣操作中金額存在上限,通過對機內計算金額取余取整方式,實現數碼管中的金額顯示功能

  • 金額/10:投幣金額 x元
  • 金額%10:投幣金額 .y元
  • // 中間兩位顯示投幣數6'b110_111: number = now_coins % 10;6'b111_011: number = now_coins / 10;
  • 金額小數位顯示:調用晶體管過程中,對數碼管相應的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狀態

    if (now_state == DEFAULT_STATE && key_now == 3'd1) begin // 在初始狀態按下key1,即購買物品if (now_coins >= total_price && total_price > 0) begin // 購買成功buy_state_r <= BUY_SUCCESSFUL_STATE;
  • 投幣金額等于商品總價
    此時successful并執行出貨操作,恢復初始狀態,并傳遞成功狀態標志
  • 投幣金額超出商品總價
    此時successful并執行出貨操作,執行找零操作,并在數碼管上顯示找0余額change_r <= now_coins - total_price; 恢復初始狀態,并傳遞成功狀態標志,調用其他功能效果
  • 投幣金額小于商品總價
    fail 并傳遞失敗狀態標志,此時保持投幣狀態,可繼續進行投幣操作
  • 系統框圖

  • 數碼管動態整體性顯示
  • 晶體管驅動添加:采用跑馬燈形式,通過縮短單晶體管顯示時間間隔,達到肉眼狀態下sel數碼管同時顯示效果,如20us,過程中,在進行點亮sel中,主體采用移位操作else if (cnt_delay == MAX_NUM)sel_r <= {sel_r[0],sel_r[5:1]};elsesel_r <= sel_r;
  • 系統框圖
  • Led狀態顯示
    ?
    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物理模型實現

    四、項目分析解決

  • 綜合項目:售貨機
  • 問題

  • 狀態切換:采用Mealy型狀態機實現功能效果,通過按鍵效果,進入不同狀態選擇,需要對按鍵進行多次復用,同一按鍵執行不同功能。
  • 商品選擇流程:初始狀態進入商品選擇,確認商品后可以對商品數量的需求進行添加或減少,同時通過com1/com2對數量值進行傳遞,同時機內進行商品總金額計算
  • 商品購買完整流程:選擇商品狀態通過按鍵選擇進入投幣狀態,key3 key4鍵投入硬幣,模擬真實投幣效果,此時通過設定now_coins值對值進行存儲,并輸出此值進入購買狀態判斷中,判斷購買成功,并回傳changer值作為找零功能實現,滿足條件出貨,不滿足則繼續投幣狀態。
  • 音樂模塊
  • 蜂鳴器模塊調用
    ??蜂鳴器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進位,同理選擇商品計算總金額要和會出現同問題。
    • 實現音樂播放效果,修改占空比提高聲音效果,技術局限導致提高音量音質受損,提高音質音量較低。
    • 按鍵功能實現選擇商品存在局限。
  • 實現效果

  • 五、總結

  • 實驗過程中嘗試實現按鍵復用功能,需要根據購買狀態切換,按鍵功能實現動態切換,如進入投幣狀態上一狀態中key4實現商品數量+1,此狀態下實現投幣 +1 ,這個過程中需要完整實現有限狀態機的邏輯功能,確保機內狀態跳轉正常高效。過程中實現困難,初始階段中,程序下載后狀態跳轉無法切換,處于非初始態指示燈跳轉處于初始態。經隊友查找,使用異步時鐘信號未進行復位功能操作,導致電平信號發生錯位,導致進入不同狀態,需要先進行返回操作實現復位動作才能正確運行。
  • 參考

    按鍵消抖+點亮led燈
    按鍵消抖+蜂鳴器
    基于FPGA狀態機的自動售貨機功能實現
    FPGA verilog HDL 基于有限狀態機設計自動販賣機及綜合

    總結

    以上是生活随笔為你收集整理的【FPGA】自动售货机综合实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。