新型出租車計(jì)價(jià)器軟件功能分析與實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:介紹一款基于單片機(jī)的新型出租車計(jì)價(jià)器設(shè)計(jì)方法。詳細(xì)介紹計(jì)價(jià)器計(jì)程、計(jì)時(shí)、統(tǒng)計(jì)功能的實(shí)現(xiàn)原理,并依次做了誤差分析,同時(shí)還給出了部分軟件設(shè)計(jì)流程。計(jì)價(jià)器在車輪轉(zhuǎn)一圈最少需要的33.9 ms內(nèi),可以完成所有計(jì)程、計(jì)時(shí)的計(jì)算a軟件設(shè)計(jì)靈活,誤差小。統(tǒng)計(jì)功能的設(shè)計(jì)為出租車管理部門制定合理決策提供了最詳實(shí)的依據(jù)。
關(guān)鍵詞:AT24C256;軟件設(shè)計(jì);出租車計(jì)價(jià)器,計(jì)程原理
0 引言
隨著物價(jià)升高,燃油費(fèi)增長(zhǎng)等原因,出租車行業(yè)難免有調(diào)整單價(jià),增收燃油附加費(fèi)的需求?,F(xiàn)有的出租車計(jì)價(jià)器調(diào)整單價(jià)比較麻煩。需要更換計(jì)價(jià)器中的芯片。另外,現(xiàn)有的計(jì)價(jià)器沒有附加費(fèi)功能,若需要加收燃油附加費(fèi)時(shí),乘客在不了解的情況下,難免會(huì)和出租車司機(jī)產(chǎn)生不必要的糾紛;而當(dāng)附加費(fèi)取消耐,還要防止出租車司機(jī)仍舊向乘客收取這部分費(fèi)用。在這種情況下,有必要去研制一款計(jì)價(jià)參數(shù)較易調(diào)整,且具有附加費(fèi)功能的出租車計(jì)價(jià)器。
1 計(jì)價(jià)參數(shù)設(shè)計(jì)
在出租車計(jì)價(jià)器里,要讓起步價(jià)、夜班價(jià)、附加費(fèi)等計(jì)價(jià)參數(shù)容易調(diào)整,就要求在軟件設(shè)計(jì)時(shí)不能固定參數(shù),需要把參數(shù)先存儲(chǔ)起來,計(jì)價(jià)器啟動(dòng)后從存儲(chǔ)地址去讀取計(jì)價(jià)參數(shù)。因?yàn)閱纹瑱C(jī)數(shù)據(jù)存儲(chǔ)器容量有限,需要另外擴(kuò)展存儲(chǔ)芯片,為了節(jié)省單片機(jī)I/O口,采用擴(kuò)展I2C方式的存儲(chǔ)芯片AT24C256。
AT24C256具有32 KB容量,地址為0000H~7FFFH。對(duì)于AT24C256,除了存計(jì)價(jià)參數(shù)外,還可以存儲(chǔ)出租車的基本信息和統(tǒng)計(jì)信息,其地址內(nèi)容分配如表1所示。其中計(jì)價(jià)參數(shù)從0100H開始存放,初始設(shè)置如表2所示。通過表2可以看出,已經(jīng)將附加費(fèi)作為一個(gè)計(jì)價(jià)參數(shù)存儲(chǔ)起來,當(dāng)計(jì)算價(jià)錢時(shí)會(huì)自動(dòng)加上附加費(fèi)值,也會(huì)在打印票據(jù)時(shí)體現(xiàn)出來。當(dāng)計(jì)價(jià)參數(shù)需要改變時(shí),只要軟硬件設(shè)置好,計(jì)價(jià)器能與PC機(jī)串口通信的話,通過PC機(jī)向芯片發(fā)送新的數(shù)據(jù)即可。為了更方便起見,還可以采用無線數(shù)據(jù)收發(fā)方式。
2 計(jì)程
2.1 計(jì)程原理與軟件設(shè)計(jì)
將安裝在車輛變速箱輸出端齒輪的霍爾傳感器接到單片機(jī)外部中斷接口上,車輪每轉(zhuǎn)動(dòng)一圈,霍爾傳感器將產(chǎn)生一個(gè)下降沿脈沖(霍爾脈沖),觸發(fā)外部中斷。設(shè)車輪直徑0.6 m,最高時(shí)速200 km/h,則兩次外部中斷之間最短時(shí)間間隔為:0.6×3.14/(200×1 000/3 600)×1 000=33.9 ms。
對(duì)單片機(jī)而言,所有計(jì)價(jià)、計(jì)時(shí)、顯示、統(tǒng)計(jì)等功能,都可在33.9 ms時(shí)間內(nèi)完成,所以對(duì)計(jì)程部分采用每次外部中斷到來時(shí)(F_int0= 1),調(diào)用外部中斷處理程序來處理計(jì)程價(jià)。具體流程如圖1所示。
設(shè)計(jì)一個(gè)占5字節(jié)的計(jì)程單元S,車輪周長(zhǎng)占3 B,每1 B存儲(chǔ)內(nèi)容如表3所示。對(duì)計(jì)程價(jià)每100 m處理1次,所以在計(jì)程計(jì)子程序中首先是讓計(jì)程單元加上車輪周長(zhǎng),判斷是否已行駛100 m。從表3可以看出,做加法計(jì)算時(shí)如果第3字節(jié)有向第4字節(jié)進(jìn)位,說明已經(jīng)行駛了100 m,這時(shí)再判斷計(jì)程單元的大小,判斷是起步價(jià),還是3~8 km的短途價(jià)或是8 km以上的長(zhǎng)途價(jià),繼而再根據(jù)時(shí)間判斷是夜班還是白班,加上不同的計(jì)價(jià)參數(shù)。
2.2 計(jì)程誤差分析
因?yàn)樵谟?jì)程時(shí)用的是每來一個(gè)霍爾脈沖加一個(gè)車輪周長(zhǎng)的方法,車輪周長(zhǎng)誤差的累積將引起總計(jì)程的系統(tǒng)誤差。車輪周長(zhǎng)用3 B壓縮BCD碼表示,1 B整數(shù)(單位:m),2 B小數(shù),每次系統(tǒng)誤差為10-4m,相對(duì)誤差小于0.01%。
假設(shè)最大計(jì)程1000km,車輪周長(zhǎng)1.5m,則計(jì)程最大系統(tǒng)誤差為:(1 000×1 000/1.5)×10-4=66.7m,偶然誤差為2個(gè)周長(zhǎng),即3.0m。
對(duì)計(jì)程價(jià)每100 m加1次,即計(jì)程誤差小于1個(gè)計(jì)價(jià)單位。
3 誤時(shí)
3.1 誤時(shí)原理與軟件設(shè)計(jì)
誤時(shí)價(jià)的計(jì)算是以Vwait=5 km/h為切換點(diǎn),當(dāng)速度低于5 km/h時(shí),需要計(jì)算誤時(shí)價(jià)。已知:速度=周長(zhǎng)/時(shí)間間隔。為了判斷出租車速度,開啟單片機(jī)定時(shí)器來計(jì)算兩次霍爾脈沖的時(shí)間間隔。為了計(jì)算方便,對(duì)于51單片機(jī)開設(shè)50 ms的定時(shí)器中斷。特別設(shè)計(jì)一個(gè)占5 B的總誤時(shí)單元,3 B的計(jì)時(shí)單元。這里第3字節(jié)存儲(chǔ)的是50 ms中斷的次數(shù),具體存儲(chǔ)內(nèi)容如表4所示。其中總誤時(shí)單元存儲(chǔ)的是總的誤時(shí)時(shí)間,計(jì)時(shí)單元專門存儲(chǔ)霍爾脈沖間隔。
當(dāng)行駛速度為5 km/h時(shí),這時(shí)霍爾脈沖的時(shí)間間隔為:0.6×3.14/(5×1 000/3 600)×1 000=1 356.48≈27×50 ms。
根據(jù)上面計(jì)算,在兩次霍爾脈沖之間,50 ms中斷的次數(shù)大于27時(shí),要計(jì)算誤時(shí)價(jià)。而對(duì)誤時(shí)價(jià)是10s處理1次,即調(diào)用1次誤時(shí)價(jià)子程序,這時(shí)分兩種情況:
第一種情況是在外部中斷處理程序中。外部中斷到來(F_int0=1)后,計(jì)時(shí)單元中50 ms次數(shù)大于27,這時(shí)總誤時(shí)單元要加上計(jì)時(shí)單元,總誤時(shí)單元的50 ms次數(shù)如果大于或等于200,則調(diào)用誤時(shí)價(jià)子程序。還要注意的是,因?yàn)橹袛嗟絹砗?,定時(shí)器會(huì)重新賦初值,所以需要把上一次定時(shí)器中不足50 ms的計(jì)數(shù)值轉(zhuǎn)換為微秒,存儲(chǔ)到計(jì)時(shí)單元的第1和第2個(gè)字節(jié)中。流程圖如圖1所示。
第二種情況是在50 ms中斷處理程序中。計(jì)時(shí)單元50 ms中斷次數(shù)已達(dá)到200次即兩次霍爾脈沖的間隔超過了10 s,這時(shí)計(jì)時(shí)單元清零,也要調(diào)用誤時(shí)價(jià)子程序。流程圖如圖2所示。
誤時(shí)價(jià)子程序里先將總誤時(shí)的10 s單元加1,然后判斷有沒有超過起價(jià)等待時(shí)間,如果超過的話,再根據(jù)時(shí)間判斷,是要加白天10 s誤時(shí)價(jià),還是加夜間10 s誤時(shí)價(jià)。
3.2 誤時(shí)價(jià)誤差
用單片機(jī)內(nèi)部定時(shí)器測(cè)兩個(gè)霍爾脈沖間的時(shí)間間隔,系統(tǒng)誤差是1μs。假設(shè)最大誤時(shí)計(jì)時(shí)60 min,車速按最快的200 km/h估計(jì),兩脈沖間隔時(shí)間為33.9 ms,即每測(cè)33.9 ms有1μs的誤差。誤時(shí)計(jì)時(shí)最大系統(tǒng)誤差等于(60×60×1 000/33.9)×1μs=0.1 s。因?yàn)檎`時(shí)價(jià)每10 s加1次,即計(jì)時(shí)誤差小于1個(gè)計(jì)價(jià)單位。
4 統(tǒng)計(jì)功能的設(shè)計(jì)
4.1 總價(jià)計(jì)算
總的費(fèi)用由里程價(jià)、誤時(shí)價(jià)和附加費(fèi)三部分組成。在出租車停止載客后,計(jì)價(jià)器會(huì)計(jì)算總體費(fèi)用,并從AT24C256中讀取當(dāng)天營(yíng)業(yè)額,加上當(dāng)次的費(fèi)用后存回到AT24C256中。
4.2 誤差分析
計(jì)程價(jià)每100 m加1次,誤時(shí)價(jià)每10 s加一次,單價(jià)用2B(4位)壓縮型BCD碼表示,最高位“元”,精度為10-3元。計(jì)價(jià)誤差由計(jì)程誤差、誤時(shí)誤差、每次計(jì)價(jià)誤差三分部分構(gòu)成。如果計(jì)程誤差小于1個(gè)計(jì)價(jià)單位,誤時(shí)誤差小于1個(gè)計(jì)價(jià)單位,可以忽略不計(jì)。每次計(jì)價(jià)誤差包括計(jì)程單價(jià)誤差和誤時(shí)單價(jià)誤差。其中若無計(jì)程單價(jià)誤差,則誤時(shí)單價(jià)按每分鐘計(jì)無,每10 s計(jì),除6盡則無,若除不盡最大計(jì)時(shí)60 min,每10s計(jì)一次,誤差為10-3,則因誤時(shí)單價(jià)誤差累積的最大計(jì)價(jià)總誤差為:(60×60/10)×10-3=0.36元。
4.3 統(tǒng)計(jì)功能的實(shí)現(xiàn)
AT24C256存儲(chǔ)芯片有32 KB的存儲(chǔ)容量(0000~7FFF)。1日的統(tǒng)計(jì)信息按最大99 999.999元考慮,最多需要4 B的存儲(chǔ)空間,分別存儲(chǔ)萬位、千位、百位十位、個(gè)位角位以及分厘。則1年的統(tǒng)計(jì)信息需要365×4=1 460 B。1片256可供存儲(chǔ)幾年的統(tǒng)計(jì)信息,如果需要還可以擴(kuò)展多片AT24C256。根據(jù)表1已知,統(tǒng)計(jì)信息從0200H開始存放。
在載客變空車以后,要將當(dāng)次營(yíng)業(yè)額加到當(dāng)天的營(yíng)業(yè)額中,即需要讀取AT24C256中相應(yīng)地址中的數(shù)據(jù),加上當(dāng)次營(yíng)業(yè)額后,再存回AT24 C256中。也就是必須給每天分配一個(gè)絕對(duì)的地址,需要設(shè)計(jì)一個(gè)日期轉(zhuǎn)換256地址的子程序。因?yàn)槌鲎廛嚩夹枰隀z,故按1年的需求設(shè)計(jì)。
理論上1個(gè)月最多31天,用公式:
(月-1)×31×4+(日-1)×4+ADDRESS_AT3 (1)
即可,但是單片機(jī)中計(jì)算乘法是比較麻煩的,如果按32天計(jì)算及用公式:
(月-1)×32×4+(日-1)×4+ADDRESS_AT3 (2)
雖然浪費(fèi)了一些存儲(chǔ)空間,但是乘以128和乘4的運(yùn)算的確可以通過簡(jiǎn)單的移位指令實(shí)現(xiàn),大大減小了單片機(jī)的運(yùn)算量。日期轉(zhuǎn)256地址的計(jì)算如子程序DATE_TO_ATA所示。
這樣1年的信息需要32×4×12=1 536 B,轉(zhuǎn)換為16進(jìn)制數(shù)為600H。則第一年占用的存儲(chǔ)空間為0200~07FFH,如果要存儲(chǔ)第二年的信息,則設(shè)計(jì)一個(gè)變量ADDRESS_AT4,統(tǒng)計(jì)信息從0800H開始存放,其余以此類推。
4.4 統(tǒng)計(jì)功能的意義
和參數(shù)傳遞一樣的道理,設(shè)計(jì)了計(jì)價(jià)器可以與PC機(jī)通信的話,不管是按串口通信方式還是無線通信方式,都可以供出租車管理部門采集到詳實(shí)、準(zhǔn)確的營(yíng)運(yùn)數(shù)據(jù),這些數(shù)據(jù)經(jīng)過PC機(jī)處理后能夠詳細(xì)地做出日?qǐng)?bào)表、月報(bào)表、運(yùn)作分析表等,比較直觀的反映出租車的營(yíng)運(yùn)情況,便于管理部門全面掌握第一手資料,及時(shí)針對(duì)所出現(xiàn)的情況做出準(zhǔn)確的判斷和決策,從而實(shí)現(xiàn)微機(jī)化、科學(xué)化管理。
5 結(jié)語
本文詳細(xì)的闡述了在出租車計(jì)價(jià)器中計(jì)程、計(jì)時(shí)的原理,并做了誤差分析。該設(shè)計(jì)巧妙,合理地利用存儲(chǔ)芯片AT24C256,不但使計(jì)價(jià)器具有附加費(fèi)功能,容易改變計(jì)價(jià)參數(shù),還能存儲(chǔ)營(yíng)運(yùn)信息,為管理部門制定相關(guān)政策,提供一手依據(jù)。根據(jù)本文方法設(shè)計(jì)的計(jì)價(jià)器誤差小,軟件設(shè)計(jì)靈活性高。