李 營,呂兆承,陳 帥,余錢坤
(淮南師范學(xué)院 電子工程學(xué)院,安徽 淮南 232038)
出租車是人們?nèi)粘3鲂械闹匾ぞ?,其載客出行均需計費, 市面上常用的計費器大多由單片機控制實現(xiàn)計費。單片機雖然價格低廉,但精度差且可擴展性弱。而FPGA 具有編程靈活性高、功能易拓展等特點。 故本文采用層次化建模方法, 利用Verilog HDL 基于FPGA 設(shè)計實現(xiàn)出租車計價器系統(tǒng)并進行仿真,仿真結(jié)果表明該系統(tǒng)功能穩(wěn)定,計價準(zhǔn)確。
以FPGA 為主體設(shè)計出租車計費系統(tǒng),其計費標(biāo)準(zhǔn)如表1 所示。
表1 出租車計費標(biāo)準(zhǔn)
根據(jù)表中的相關(guān)技術(shù)指標(biāo),系統(tǒng)設(shè)計要求如下。
(1)設(shè)置加減檔功能:白天行駛超過4 km,每公里加1.00 元。 夜晚行駛超過4 km, 每公里加2.00 元。 單程行駛超過20 km,每公里加收50%的車費,收費累加。
(2)將時間、里程及計費結(jié)果以小數(shù)的形式顯示在液晶屏上。
(3)費用的計算:當(dāng)行駛里程小于3 km 時,按起價計算費用;當(dāng)里程大于3 km 時,按下式計算費用:
費用=里程×里程單價+等候時間×等候單價
本系統(tǒng)硬件采用的主控FPGA 芯片是Cyclone EP4CE6E22C8, 設(shè)計通過按鍵模擬汽車行駛過程中的速度狀態(tài)和模式的變化,故需開始、停止、撥碼開關(guān)控制車輛運行的開始和停止,需要空檔、加速、減速等3 個按鍵控制速度,通過模式按鍵模擬白天與夜間。 LCD 顯示器應(yīng)當(dāng)顯示行駛公里、時間、計費情況以及車輛的檔位等。 白天與夜間的變化用LED 燈的亮或者滅來表示,當(dāng)時為白天,LED 燈不亮,夜間模式時LED 燈開啟。
LCD1602 是一種工業(yè)字符型液晶顯示屏,它能顯示字母、數(shù)字、符號,并且同時顯示16×2 個字符。 利用了液晶的物理性質(zhì),一般通過電壓對其32個顯示區(qū)域進行控制。 LCD 驅(qū)動初始化的流程圖如圖1 所示。
圖1 LCD 顯示模塊驅(qū)動初始化流程圖
根據(jù)上述硬件要求,可將系統(tǒng)劃分為分頻與按鍵控制模塊、速度控制模塊、直流電機PWM 控制模塊、時間設(shè)置模塊、計費模塊以及LCD 驅(qū)動顯示模塊,總體軟件設(shè)計框圖如圖2 所示。
圖2 總體軟件設(shè)計框圖
該模塊的功能是將50 MHz 分頻為1 Hz 和16.6 Hz,并對開始、停止、空檔、加檔、減檔、模式等輸入按鍵進行功能設(shè)計, 其功能接口框圖如圖3 所示。
圖3 分頻及按鍵控制模塊框圖
由圖3 可知該模塊的輸入有:50 M 的時鐘脈沖clk50M,復(fù)位端口reset,6 個按鍵的輸入如圖中key[5..0];輸出端 sys_clk_out 對應(yīng) 16.6 Hz 時鐘輸出,clk1Hz_1hz_out 對應(yīng) 1 Hz 時鐘輸出,mode 對應(yīng)白天黑夜的模式選擇輸出,key_start 代表系統(tǒng)啟動輸出,sp[2:0]代表速度檔位變化輸出。
該模塊的功能是實現(xiàn)直流電能和機械能互相轉(zhuǎn)換,接收分頻與按鍵控制模塊的控制按鍵,從而控制電機旋轉(zhuǎn)。 該模塊的接口框圖如圖4 所示,各端口的含義如下,輸入端口均連接分頻及按鍵控制模塊各端口,enable 是控制開關(guān)接key_start 信號,clk 和rst 接系統(tǒng)時鐘和系統(tǒng)復(fù)位信號;Dir 是控制轉(zhuǎn)動方向代表前進后退,默認1,代表前進;spd_sel接sp[2:0]信號,代表調(diào)節(jié)電機轉(zhuǎn)動速度;輸出端口MA 接系統(tǒng)輸出直流電機。
圖4 直流電機PWM 控制模塊框圖
圖5 速度設(shè)置模塊框圖
速度設(shè)置模塊的功能是對汽車行駛過程中的6 個速度檔位進行設(shè)計,模擬實際出租車行駛換擋變速。 通過輸入的系統(tǒng)脈沖控制產(chǎn)生6 種不同頻率的時鐘翻轉(zhuǎn), 從而切換0 至5 擋不同的6 種速度變換。
該模塊的功能接口框圖如圖5 所示。圖5 中各端口的含義是:clk 是 16.6 Hz 時鐘輸入、reset 是復(fù)位輸入、start 和sp[2:0]端口分別連接按鍵控制模塊的key_start 端口和sp[2:0]端口,分別代表開始信號和檔位輸入。 clkout 表示汽車模擬行駛的公里脈沖輸出, 該模塊的仿真波形如圖6 所示。 由圖 6 可知,檔位 sp 由 001 變?yōu)?100 的時候,輸出clkout 有明顯的變化,時鐘跳變加快,說明汽車速度的加快。
圖6 速度設(shè)置模塊仿真波形
該模塊完成兩大功能:其一是對空檔時汽車的等待時間計時,其二是對汽車行駛時間(包括等價和汽車的行駛計時)計時。 該模塊的接口框圖如圖7 所示,各輸入端口的含義與速度設(shè)置模塊含義相同,輸出端口time_out 含義是用于等待的計費時間(即空檔等待的時間),輸出端口timess[11..0]指等待計時時間,shijian[15..0]指總的時間輸出。
圖7 計時模塊接口框圖
圖8 計費模塊接口框圖
該模塊的功能是根據(jù)白天與黑夜模式下計費方法的不同分別計費。根據(jù)行駛公里數(shù)及等待時間長短,針對不同模式分別計費。 模塊接口框圖如圖8 所示,該模塊的算法流程圖如圖9 所示。
圖9 程序流程圖
出租車總的計費金額需用整數(shù)和小數(shù)表示出來。 該模塊的仿真波形如圖10 所示, 當(dāng)start=1,mode=1 及km_clkout 變化時,即白天開始計時,汽車行駛后, 行駛距離km_cnt 由0001 跳變?yōu)?010,即由1 km 到2 km,此時計費值jin_er 變?yōu)?0 000 000,即高4 位整數(shù)位,低4 位為小數(shù)位,共8 元,與設(shè)計要求4 km 內(nèi)起步8 元一致。
圖10 白天模式計費模塊仿真波形
采用LCD1602 字符型顯示器顯示行駛信息,采用英文字母顯示提示。相關(guān)顯示內(nèi)容與其字符分別為:行駛里程(KM)、計費(JE)、汽車檔位(數(shù)值)、等待時間(A)以及等待時間和行駛時間之和駕駛總時間(T)。 根據(jù)1602 的驅(qū)動指令表驅(qū)動編寫此模塊[3]。
本模塊的接口框圖如圖11 所示,WR 端是讀寫端,EN 是使能端,DATA[7..0]為雙向的輸出數(shù)據(jù)段。 Show_KM[11..0]是 12 位的行駛公里的顯示數(shù)據(jù)輸入,show_JE[15..0]是顯示計費的16 位數(shù)據(jù)輸入,show_PA[11..0]是 12 位的顯示等待時間數(shù)據(jù)輸入,show_SJ[15..0]為16 位總的時間顯示數(shù)據(jù)輸入, show_sp[2..0]為 3 位檔位的輸入。
圖11 顯示模塊接口框圖
表2 ASCII 碼
圖12 系統(tǒng)設(shè)計RTL 圖
本系統(tǒng)用到的字母相應(yīng)的ASCII 對照碼如表2 所示,顯示時各信息間通過空格間隔。
頂層模塊的作用是調(diào)用連接上述5 個底層模塊,系統(tǒng) RTL 圖如圖11 所示。 圖11 中,頂層模塊的時鐘輸入端clk50MHZ 對應(yīng)圖2 的clk50M,模塊keyin 對應(yīng)分頻及按鍵處理模塊,speed 對應(yīng)速度設(shè)置,times 對應(yīng)計時模塊,kmmony 對應(yīng)計費模塊,lcd1602 對應(yīng)顯示模塊,由此可見,系統(tǒng)完成的功能與圖12 系統(tǒng)總體軟件設(shè)計框圖一致。
圖13 系統(tǒng)硬件設(shè)計
系統(tǒng)完成后的測試效果如圖13 所示, 當(dāng)按開始鍵之后顯示,當(dāng)白天行駛8.1 km,等待時間為0 s時, 費用為12.1 元符合功能設(shè)計中設(shè)置的白天的計費原則,所以白天模式下出租車計費程序設(shè)計無誤;同理,若模式調(diào)為黑夜,計費結(jié)果也無誤,由于篇幅所限,此處不再列圖。
市面上現(xiàn)有的出租車計價器的精度不高, 系統(tǒng)的功耗大,使用壽命短,并且系統(tǒng)升級擴展的空間小。文章采用了FPGA 芯片Cyclone IV EP4CE6E22C8設(shè)計并實現(xiàn)了出租車計價系統(tǒng), 系統(tǒng)功能完整,且鑒于FPGA 的并行計算和可編程特性, 靈敏度高,后期功能易拓展,為傳統(tǒng)出租車計價提供了一種新的設(shè)計思路。