□袁家兵 汪金成 楊 瑞 于玉亭
可編程邏輯器件自20世紀70年代以來,經歷了PAL、GAL、CPLD、FPGA幾個發(fā)展階段,目前CPLD/FPGA器件已成為現(xiàn)代高層次電子設計方法的實現(xiàn)載體[1]。VHDL是一種全方位的硬件描述語言,包括系統(tǒng)行為級、寄存器傳輸級和邏輯門級多個設計層次,支持結構、數(shù)據(jù)流和行為3種描述形式的混合描述,因此VHDL幾乎覆蓋了以往各種硬件描述語言的功能,整個自頂向下或自底向上的電路設計過程都可以用VHDL來完成[2]。本文通過QuartusII軟件運用VHDL語言編程實現(xiàn)在以FPGA為核心的硬件平臺上的出租車計費模擬系統(tǒng)的設計。
本設計主要實現(xiàn)以下要求,并運用QuartusⅡ軟件對各個模塊及頂層電路的功能進行仿真分析,將所設計的系統(tǒng)寫入FPGA器件中,在實驗箱上實現(xiàn)系統(tǒng)的硬件測試:一是設計一個電機驅動模塊。實現(xiàn)電機的加速、減速、勻速、暫停、正轉和反轉等功能。二是設計一個出租車計費模塊。要求出租車有4種車型可選,4種起步價可選,起步里程可設置1到8公里。等待時間滿一分鐘加一元。最終在6位七段數(shù)碼管上顯示行駛里程和計費值;三是設計紅外遙控模塊,以此來控制電機的各個功能以及設置計價器的各項設置。
根據(jù)以上系統(tǒng)要求,本系統(tǒng)總體設計方案如圖1所示,分為時鐘模塊、電機控制模塊、出租車計費模塊、紅外遙控模塊和顯示模塊等模塊。其中時鐘模塊和顯示模塊比較簡單,時鐘模塊采用PLL模塊和分頻模塊產生所需的不同頻率;顯示模塊為七段數(shù)碼管和數(shù)碼管顯示;這兩個模塊比較簡單,此處不再展開介紹設計實現(xiàn)過程。
圖1 系統(tǒng)總體設計方案
(一)電機控制模塊設計。電機控制模塊主要分為調速模塊和正反轉模塊。調速模塊的作用就是用來調節(jié)直流電機的轉速,核心就是通過改變PWM的占空比。此處通過定值計數(shù)器來控制周期大小,可變計數(shù)器調整占空比,數(shù)值比較器完成高低電平的變化。正反轉控制模塊則是實現(xiàn)通過按鍵來控制電機的轉向。電機控制模塊的設計原理圖如圖2所示。
圖2 電機控制模塊原理圖
(二)出租車計費模塊設計?,F(xiàn)代出租車車輪直徑大概有4種,起步價各個城市都有自己的定價,這里設置4種,起步里程設置從1到8公里。出租車計費模塊由車型選擇模塊、里程計算模塊、計費模塊等模塊組成。
1.車型選擇模塊。電機轉一圈進過光敏傳感器會產生一個脈沖信號,一圈周長為C,圈數(shù)為N,里程為S,則S=C*N。車型選擇模塊輸出的脈沖信號一個脈沖代表100米,由上述公式可算出圈數(shù)N,即為分頻數(shù)。
4種車輪直徑(d)為52.21cm,53.98cm,55.87cm,57.90cm。經公式N=100/(3.14*d),可得分頻數(shù)為60,58,56,54,如表1所示。
表1 車型選擇
2.里程計算模塊。車型選擇模塊輸出百米脈沖到里程計算模塊,里程計算模塊在脈沖上升沿到來時計數(shù)一次,計數(shù)滿10次即為一公里。輸入”DIP”為設置起步里程,超過起步里程每計數(shù)滿10次,起步里程加一,同時輸出一個公里脈沖給計費模塊。
3.計費模塊。計費模塊接收到一公里脈沖信號后,再其上升沿到來時計費一次,當計費小于設置的起步價時數(shù)碼管顯示起步價,超過起步價時上升沿到來一次按2元或3元加價一次。當出租車停止等待時,由紅外控制輸出等待信號waite為高電平,此時進入等待計費,滿一分鐘加一元。
4.出租車計費模塊設計。出租車計費模塊的設計原理圖如圖3所示。
圖3 出租車計費模塊原理圖
5.出租車計費模塊仿真。起步價輸入為“00”即5元,當計費超過5元時,price輸入為“0”則按2元計價,price輸入為“1”則按3元加價,如圖4所示。
圖4 出租車計費模塊仿真結果
(三)紅外遙控模塊設計。紅外控制模塊設計分為紅外解碼和紅外控制兩個模塊。開發(fā)板板載的紅外接收頭,其型號為HS0038B。紅外控制模塊用于控制電機及計價器的設置,以此模擬出租車從打火啟動到乘客上下車最后熄火的過程。
將所設計的代碼下載到FPGA上進行系統(tǒng)功能測試,可以實現(xiàn)在遙控器控制下系統(tǒng)的正常工作,其中S6狀態(tài)載客計費的硬件測試結果如圖5所示。
圖5 S6狀態(tài),載客計費