《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于CPLD/PPGA的出租車計費系統(tǒng)
基于CPLD/PPGA的出租車計費系統(tǒng)
摘要: 介紹了出租車計費器系統(tǒng)的組成及工作原理,,簡述了在EDA平臺上用單片CPLD器件構(gòu)成該數(shù)字系統(tǒng)的設(shè)計思想和實現(xiàn)過程。論述了車型調(diào)整模塊,、計程模塊,、計費模塊、譯碼動態(tài)掃描模塊等的設(shè)計方法與技巧,。
關(guān)鍵詞: CPLD 出租車計費器 MAX+PLUS
Abstract:
Key words :

摘要: 介紹了出租車計費器系統(tǒng)的組成及工作原理,,簡述了在EDA平臺上用單片CPLD器件構(gòu)成該數(shù)字系統(tǒng)的設(shè)計思想和實現(xiàn)過程。論述了車型調(diào)整模塊,、計程模塊,、計費模塊、譯碼動態(tài)掃描模塊等的設(shè)計方法與技巧,。

關(guān)鍵詞: CPLD/PPGA 硬件描述語言 出租車計費器 MAX+PLUS軟件 數(shù)字系統(tǒng)

隨著EDA技術(shù)的高速發(fā)展,電子系統(tǒng)的設(shè)計技術(shù)和工具發(fā)生了深刻的變化,,大規(guī)??删幊踢壿嬈骷﨏PLD/FPGA的出現(xiàn),,給設(shè)計人員帶來了諸多方便。利用它進行產(chǎn)品開發(fā),,不僅成本低,、周期短、可靠性高,,而且具有完全的知識產(chǎn)權(quán),。本文介紹了一個以Altera公司可編程邏輯芯片EPM7128SLC84-15為控制核心、附加一定外圍電路組成的出租車計費器系統(tǒng),。

1 系統(tǒng)組成

基于CPLD/FPGA的出租車計費器的組成如圖1所示,。各部分主要功能如下:(1)A計數(shù)器對車輪傳感器送來的脈沖信號進行計數(shù)(每轉(zhuǎn)一圈送一個脈沖)。不同車型的車輪直徑可能不一樣,,通過“設(shè)置1”對車型做出選擇,,以實現(xiàn)對不同車輪直徑的車進行調(diào)整。(2)B計數(shù)器對百米脈沖進行累加,,并輸出實際公里數(shù)的BCD碼給譯碼動態(tài)掃描模塊,。每計滿500送出一個脈沖給C計數(shù)器。“設(shè)置2”實現(xiàn)起步公里數(shù)預(yù)制,。(3)C計數(shù)器實現(xiàn)步長可變(即單價可調(diào))的累加計數(shù),,每500米計費一次。“設(shè)置3”用來完成超價加費,、起步價預(yù)制等,。(4)譯碼/動態(tài)掃描將路程與費用的數(shù)值譯碼后用動態(tài)掃描的方式驅(qū)動數(shù)碼管。(5)數(shù)碼管顯示將公里數(shù)和計費金額均用四位LED數(shù)碼管顯示(三位整數(shù),,1位小數(shù)),。

2 功能模塊設(shè)計

出租車計費器由車型調(diào)整模塊、計程模塊,、計費模塊,、譯碼動態(tài)及掃描等模塊組成,整個系統(tǒng)采用模塊化設(shè)計,,首先用VHDL編寫功能模塊,,然后用頂層原理圖將各功能模塊連接起來。

2.1 車型調(diào)整模塊

出租車車型并非單一,,各個車型的輪胎直徑亦有所不同,。據(jù)調(diào)查統(tǒng)計,現(xiàn)行出租車輪胎直徑大致有四種,,直徑分別為520mm,、540mm、560mm和580mm。若要使不同車型的出租車每行駛一百米均送出一個脈沖,,可通過設(shè)置“可預(yù)制分頻器”的系數(shù)來完成,。根據(jù)上述車輪直徑計算出的分頻系數(shù)分別為61、59,、57和55,。預(yù)制數(shù)據(jù)受兩個車型設(shè)置開關(guān)控制,DIP開關(guān)狀態(tài)與車輪直徑對應(yīng)關(guān)系如表1所示(表中“1”為高電平,,“0”為低電平),。

表1 車型設(shè)置

在參數(shù)預(yù)制中,使用With_Select語句(查表法)做分頻選擇:

with cartype select

typecounter<=“111101”when“00”,, --520mm

“111011”when“01”,, --540mm

“111001”when“10”, ——560mm

“111000”when“11”,, --580mm

“000000”when others,;

分頻器采用的是加法分頻電路,其占空比可通過datal(x)進行調(diào)整,,并且分頻器帶有“開始”/“清零”端(高電平清零),。時序仿真波形如圖2所示。從圖中可以看出,,對于設(shè)置開關(guān)為“10”的車型,,當?shù)?7個脈沖到來時,該模塊oclk端從高變低,,輸出一低電平信號,。車型調(diào)整模塊(以下簡稱FP)封裝見圖4。

2.2 計程模塊

計程模塊是一個模為10,、步長為1的加法計數(shù)器,。該模塊可以預(yù)制參數(shù),使其實際計數(shù)值大于預(yù)制數(shù)值后,,每500米送出一個脈沖,,并將計數(shù)值送譯碼動態(tài)掃描模塊進行顯示。預(yù)制參數(shù)采用非壓縮BCD碼,,所以在計數(shù)器設(shè)計時必須將二進制1010至1111六個狀態(tài)跳過去,。在VHDL程序中,用IF語句來實現(xiàn),。

if km(3 downto 0)=“1001”then km:=km+“0111”:

else km:=kin+1,;

end if;

計程模塊也帶有“開始”/“清零”端,。參數(shù)預(yù)制同樣使用With_Select語句,。“起步里程”和“開關(guān)設(shè)置”對應(yīng)關(guān)系如表2所示。計程模塊(以下簡稱MILE)封裝見圖4。

表2 起步里程設(shè)置

2.3 計費模塊

計費模塊是一個模為10,、步長可變的加法計數(shù)器,。該模塊通過開關(guān)量預(yù)制步長,當超過一定預(yù)制參數(shù)時改變步長,。計費模塊也采用非壓縮BCD碼,但因步長不為1,,所以在做非壓縮BCD加法時必須調(diào)整,,否則可能導(dǎo)致在超過或未超過預(yù)置參數(shù)時出現(xiàn)超程錯誤。這里采用模仿微機的AF標志位,,在其設(shè)立一個半進位標志,,當累加和大于9或半進位標志為“1”時,對累加和進行調(diào)整,。

if datal(3 downto 0)>9 or datal(4)=‘1'then

datal(3 downto 0):=datal(3 downto 0)+“0110”,;

datal(8 downto 5):=datal(8 downto 5)+1;

end if,;

其中,,data(4)為半進位標志。“起步價格”和“超價加費”設(shè)置參數(shù)分別如表3和表4所示,。計費模塊(以下簡稱MONEY)封裝見圖4,。

表3 起步價格設(shè)置

表4 超價加費設(shè)置

2.4 顯示模塊

顯示模塊由七段LED數(shù)碼管譯碼和動態(tài)掃描顯示兩部分組成。

2.4.1 七段LED數(shù)碼管譯碼

本次設(shè)計采用的是共陰極七段數(shù)碼管,,根據(jù)16進制數(shù)和七段顯示段碼表的對應(yīng)關(guān)系,,用VHDL的With_Select或When_Else語句可方便實現(xiàn)它們的譯碼。

2.4.2 動態(tài)掃描顯示

動態(tài)掃描是利用人眼的視覺暫留原理,,只要掃描頻率不小于24Hz,,人眼就感覺不到顯示器的閃爍。本系統(tǒng)24Hz的掃描脈沖由相應(yīng)的外圍電路提供,。動態(tài)掃描電路設(shè)計的關(guān)鍵在于位選信號要與顯示的數(shù)據(jù)在時序上一一對應(yīng),,因此電路中必須提供同步脈沖信號。這里采用八進制計數(shù)器提供同步脈沖,,VHDL程序段如下:

cIkl_label:PROCESS(scp)

BEGIN

IF scp'vent and scp=‘1'THEN count<=count+1,;

END IF;

END PROCESS clkl_label,;

顯示數(shù)據(jù)的選擇由計數(shù)器控制,,VHDL程序段如下:

temp<=counterl when count=“000”else...

counter4 when count=“011”else

milel when count=“100”else...

mile4 when count=“111”;

位選信號時序仿真如圖3所示,。從時序仿真圖和上述程序可以看出,,位選信號和要顯示的數(shù)據(jù)實現(xiàn)了同步。

動態(tài)掃描電路中小數(shù)點的顯示無法在譯碼電路中完成。由于小數(shù)點的位置是固定的,,因此可由計數(shù)器提供的同步信號產(chǎn)生另一信號控制DP,。VHDL程序?qū)崿F(xiàn)如下:

if (count:“101”or count=“001”)then data(0)<=‘1';

else data(0)<=‘0',;

end if,;

顯示模塊(以下簡稱SHOW)封裝見圖4。此模塊中應(yīng)用了兩個過程,,在過程內(nèi)程序順序執(zhí)行,,其中第一個過程觸發(fā)第二個過程。

3 系統(tǒng)綜合

3.1 模塊聯(lián)調(diào)

各個功能子模塊設(shè)計完成后,,利用MAXPLUSⅡ的圖形編輯器(Graphic Editor)將各功能子模塊(.sym)進行連接,。由于MILE模塊中存在毛刺,故不能直接與后級相連,,通過對輸出脈沖信號加門電路延時,,再與原始信號相“與”的方法即可消除毛刺。系統(tǒng)頂層原理圖如圖4所示,。

芯片管腳定義可以直接用編輯.pin文件或在Floor—Plan Editor下進行,。完成管腳定義后選擇器件(EPM7128SIC84—15),編譯后生成.sof,、.pof及報告文件.rpt,。查看報告文件可得到器件管腳的利用情況及器件內(nèi)部資源的使用情況。通過更換適當?shù)钠骷蛊滟Y源配置達到最優(yōu),。選擇器件的一般原則是系統(tǒng)所使用的資源不要超過器件資源的80%,,若超過90%,系統(tǒng)功耗將增大,,工作不穩(wěn)定,。從本次設(shè)計器件部分報告中得知:輸入、輸出管腳各用16只,,芯片資源利用率僅為51%,,具有較大的擴展空間。

3.2 硬件設(shè)計說明

本次設(shè)計的出租車計費器計數(shù)脈沖CP來自車輪轉(zhuǎn)速傳感器(干簧管),,脈沖經(jīng)器件內(nèi)部整形后送計數(shù)器,;動態(tài)掃描脈沖由外圍電路給出;系統(tǒng)使用整流,、濾波,、降壓后的出租車電源供電;由于CPLD/FPGA的驅(qū)動能力有限,,為了增強數(shù)碼管的亮度,,提高系統(tǒng)的可靠性,,設(shè)計中在LED驅(qū)動和位驅(qū)動上分別增加了電流驅(qū)動器件ULN2803和2SCl015。

現(xiàn)場實驗表明:該計費器實現(xiàn)了按預(yù)制參數(shù)自動計費(最大計費金額為999.9元),、自動計程(最大計程公里數(shù)為999.9公里)等功能,;能夠?qū)崿F(xiàn)起步價、每公里收費,、車型及加費里程的參數(shù)預(yù)制(如:起步價5.00元,;3公里后,1.20元/公里,;計費超過15.00元,,每公里加收50%的車費等),且預(yù)置參數(shù)可調(diào)范圍大,。由于采用了CPLD/FPGA大規(guī)模可編程邏輯器件,,整機功耗小,、抗干擾能力強、系統(tǒng)穩(wěn)定,、工作可靠,、升級方便。另外,,根據(jù)實際需要,,系統(tǒng)可方便地增加以下功能:①通過芯片內(nèi)部編程增加時鐘功能(器件內(nèi)部資源足夠),既可為司機和乘客提供方便,,又能為夜間行車自動調(diào)整收費標準提供參考,;②用CPLD/FPGA的輸出引線控制語音芯片,可向乘客發(fā)出問候語,、提醒乘客告訴司機所要到達的地點,、報出應(yīng)收繳的費用等

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。