新型出租車計(jì)價(jià)器軟件功能分析與實(shí)現(xiàn)
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ù)。本文引用地址:http://cafeforensic.com/article/172674.htm
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)橹袛嗟絹砗螅〞r(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à)。
評(píng)論