基于μPD78F0034單片機(jī)的出租車計(jì)費(fèi)器的設(shè)計(jì)與實(shí)現(xiàn)
摘要:介紹了基于μPD78F0034單片機(jī)和模塊式結(jié)構(gòu)的出租車計(jì)費(fèi)器的硬件和軟件設(shè)計(jì)方法,討論了μPD78F0034單片機(jī)的主要特點(diǎn);介紹了該單片機(jī)和PC機(jī)串行通信的硬件連接方法;同時(shí)給出了采用單、雙信號(hào)防作弊技術(shù)來(lái)防止計(jì)費(fèi)器作弊的具體實(shí)現(xiàn)方法。
關(guān)鍵詞:出租車計(jì)費(fèi)器;μPD78F0034;串行通信;防作弊技術(shù)
隨著出租車行業(yè)的發(fā)展,對(duì)出租車計(jì)費(fèi)器的要求也越來(lái)越高,用戶不僅要求計(jì)費(fèi)器性能穩(wěn)定,計(jì)費(fèi)準(zhǔn)確,有防作弊功能;同時(shí)還要求其具有車票資料打印 、IC卡付費(fèi)、語(yǔ)音報(bào)話、和電腦串行通信等功能。通常,設(shè)計(jì)出租車計(jì)費(fèi)器面臨以下三方面的問(wèn)題:
(1)不同國(guó)家和地區(qū)的計(jì)費(fèi)方式存在差異。有些地區(qū)有夜間收費(fèi)及郊區(qū)收費(fèi)等,而有些地區(qū)則無(wú)夜間收費(fèi)和郊區(qū)收費(fèi);即使同一地區(qū),不同車型的出租車,其計(jì)費(fèi)方式也有差別;另一方面,出租車還面臨幾年一次的調(diào)價(jià)或調(diào)整計(jì)費(fèi)方式等問(wèn)題。因此,所設(shè)計(jì)的計(jì)費(fèi)器不僅要能滿足不同國(guó)家和地區(qū)的要求,而且計(jì)費(fèi)方式的調(diào)整也應(yīng)當(dāng)很方便。
?。ǎ玻┯捎趥€(gè)別地區(qū)對(duì)計(jì)費(fèi)器有特殊要求,有時(shí)必須修改軟件;另外,計(jì)費(fèi)器還面臨軟件的升級(jí);因而,所設(shè)計(jì)的計(jì)費(fèi)器應(yīng)能很方便地重新編程。
?。ǎ常┯?jì)費(fèi)器必須要有防作弊功能,能有效防止司機(jī)作弊;同時(shí)要防止計(jì)費(fèi)器在營(yíng)運(yùn)過(guò)程中死機(jī)。
為此,筆者設(shè)計(jì)了一款計(jì)費(fèi)器,較好地解決了上述問(wèn)題。該計(jì)費(fèi)器內(nèi)設(shè)置了多達(dá)64個(gè)選項(xiàng),幾乎涵蓋了大多數(shù)國(guó)家和地區(qū)的出租車計(jì)費(fèi)方式,因此,使用時(shí)無(wú)需更改計(jì)費(fèi)器的硬件,而只需更改相應(yīng)的選項(xiàng)資料,便可適用于不同的國(guó)家和地區(qū),且計(jì)費(fèi)資料的傳送可由電腦通過(guò)RS-232串口或?qū)S玫氖殖质劫Y料傳輸器來(lái)完成,非常方便;由于采用了具有32kB FLASH ROM的單片機(jī)μPD78F0034,因此,編程時(shí)無(wú)需將單片機(jī)從電路板上取下,就可以直接對(duì)單片機(jī)進(jìn)行編程;另外,該設(shè)計(jì)還采用單、雙信號(hào)防作弊技術(shù)和看門狗電路,較好地解決了計(jì)費(fèi)器的作弊現(xiàn)象及死機(jī)問(wèn)題。目前,該計(jì)費(fèi)器已在許多大中城市得到了廣泛的應(yīng)用。
1 系統(tǒng)中各模塊的硬件結(jié)構(gòu)
這種用μPD78F0034為主控器件設(shè)計(jì)的計(jì)費(fèi)器的組成框圖如圖1所示。整個(gè)計(jì)費(fèi)器系統(tǒng)共由五個(gè)模塊組成,分別為主控模塊、按鍵顯示模塊、防作弊及脈沖輸入模塊、通信模塊和電源模塊。
1.1 主控模塊
主控模塊的結(jié)構(gòu)框圖如圖2所示,圖中的單片機(jī)為日本NEC 公司的μPD78F0034,該芯片的主要特點(diǎn)如下:
●時(shí)鐘為8.38MHz時(shí),指令周期為0.24μs;
●ROM為32kB FLASH,RAM為1024 bytes;
●可尋址空間為64kB bytes,有5個(gè)外部中斷和15個(gè)內(nèi)部中斷;
●帶有39個(gè)CMOS I/O,8?jìng)€(gè)CMOS輸入和4個(gè)N-CH漏極開路I/O;
●帶有1個(gè)16位定時(shí)/計(jì)數(shù)器和2個(gè)8位定時(shí)/計(jì)數(shù)器;
●帶有1個(gè)時(shí)鐘定時(shí)器、1個(gè)看門狗定時(shí)器和1個(gè)UART端口;
●支持I2C 總線,可輸出時(shí)鐘及蜂鳴信號(hào);
●外部數(shù)據(jù)總線為8位,內(nèi)部寄存器為16位;
●有8位無(wú)符號(hào)乘法指令和16位除法指令;
●工作電壓范圍為1.8V~5.5V,具有STOP/HALT工作模式。
由此可見(jiàn),該芯片的性能要優(yōu)于目前流行的MCS-51系列,其8位無(wú)符號(hào)乘法指令及16位除法指令給軟件編程帶來(lái)了很大的方便。對(duì)μPD78F0034編程時(shí),只需用其5個(gè)引腳,其中3個(gè)引腳在正常工作時(shí)用到,因此在設(shè)計(jì)電路板時(shí)可將這三個(gè)引腳做一跳線開關(guān);編程時(shí),將這三個(gè)引腳與編程器相連,正常工作時(shí)則與電路板上的元件相連。這樣就可以不用將μPD78F0034從電路板上取下(因該單片機(jī)為貼片式封裝,取下會(huì)很麻煩)而直接對(duì)其編程,即在系統(tǒng)可編程,該方法為開發(fā)調(diào)試及以后的功能修改和軟件升級(jí)提供了極大的方便。本次開發(fā)時(shí),甚至沒(méi)有用到μPD78F0034的開發(fā)系統(tǒng),而是在PC機(jī)上將程序?qū)懞煤?,通過(guò)編譯變成二進(jìn)制代碼,然后直接通過(guò)編程器將其寫入到μPD78F0034中,便可調(diào)試計(jì)費(fèi)器的各項(xiàng)功能。此外該主控模塊中的復(fù)位、看門狗及電源監(jiān)控由MAX705芯片來(lái)完成。時(shí)鐘及存儲(chǔ)器由芯片DS1244Y來(lái)完成。通過(guò)選項(xiàng)可以設(shè)定是否有打印功能,各種打印命令數(shù)據(jù)均由PC機(jī)通過(guò)RS-232串行口或手持式資料傳輸器傳給計(jì)費(fèi)器并存儲(chǔ)在DS1244Y中。該計(jì)費(fèi)器可使用司機(jī)卡、采集卡及收費(fèi)卡三種IC卡,使用哪種卡均可由選項(xiàng)控制。計(jì)費(fèi)器通過(guò)一條I/O線控制語(yǔ)音接口電路。乘客上車時(shí),單片機(jī)送50ms的低脈沖給語(yǔ)音電路使其說(shuō)一段話。乘客下車時(shí),單片機(jī)則用20ms的低脈沖使語(yǔ)音電路說(shuō)另一段話。
1.2 通信模塊
圖3所示為通信模塊組成圖,它主要由單片機(jī)的兩個(gè)I/O口、MAX232和一些電阻電容等組成。圖中電阻均為10kΩ,電容均為10μF;單片機(jī)的P30為串行數(shù)據(jù)接收腳、P31為串行數(shù)據(jù)發(fā)送腳,通信的波特率設(shè)為9600。圖中,MAX232芯片的作用是將單片機(jī)輸出的TTL電平轉(zhuǎn)換成PC機(jī)能接收的232電平或?qū)ⅲ校脵C(jī)輸出的232電平轉(zhuǎn)換成單片機(jī)能接收的TTL電平。計(jì)費(fèi)器通過(guò)通信模塊與PC機(jī)或手持式資料傳數(shù)器進(jìn)行串行通信,以便設(shè)置計(jì)費(fèi)器的各種參數(shù)及采集計(jì)費(fèi)器里存儲(chǔ)的各種數(shù)據(jù)。
1.3 按鍵及顯示模塊
按鍵及顯示模塊如圖4所示,該模塊由4片4511、1片4028、1片2003、20個(gè)數(shù)碼管及一些發(fā)光二極管(作為計(jì)程、計(jì)時(shí)收費(fèi)指示燈)組成。計(jì)費(fèi)器有6個(gè)功能鍵,而實(shí)際上對(duì)外只有四個(gè)按鍵,分別設(shè)為A、B、C、D鍵??哲嚑顟B(tài)按下C鍵,計(jì)費(fèi)器進(jìn)入載客模塊;空車狀態(tài)按下B鍵,計(jì)費(fèi)器進(jìn)入通信模塊;空車狀態(tài)按下A鍵,計(jì)費(fèi)器進(jìn)入查詢模塊,然后按A鍵往上查詢、按D鍵往下查詢。另兩個(gè)功能按鍵放在計(jì)費(fèi)器內(nèi),用跳線J1、J2表示。在空車狀態(tài),J1短路時(shí),計(jì)費(fèi)器清除存儲(chǔ)的所有數(shù)據(jù);當(dāng)計(jì)費(fèi)器復(fù)位時(shí),如J2短路,計(jì)費(fèi)器直接進(jìn)入資料傳輸模塊(此功能主要為了防止計(jì)費(fèi)器內(nèi)資料紊亂或新計(jì)費(fèi)器沒(méi)有資料時(shí)進(jìn)入死循環(huán))。
1.4 防作弊及脈沖輸入模塊
防作弊及脈沖輸入模塊如圖5所示。為了提高計(jì)費(fèi)器的抗干擾能力,脈沖輸入信號(hào)采用了光耦方式。出租車的脈沖傳感器通常有兩種,即單信號(hào)脈沖傳感器和雙信號(hào)脈沖傳感器;所謂單信號(hào)脈沖傳感器指的是出租車開動(dòng)時(shí),只有一條信號(hào)線輸出脈沖信號(hào);而雙信號(hào)脈沖傳感器指的是出租車開動(dòng)時(shí),有兩條信號(hào)線同時(shí)輸出幅度相同、相位相反的脈沖信號(hào)。與此對(duì)應(yīng),防作弊方式有單信號(hào)防作弊和雙信號(hào)防作弊兩種。究竟選哪種,可由計(jì)費(fèi)器內(nèi)的選項(xiàng)及硬件跳線來(lái)決定。
a 單信號(hào)防作弊的工作原理
如圖5所示,當(dāng)計(jì)費(fèi)器通過(guò)選項(xiàng)選定單信號(hào)防作弊方式后,跳線開關(guān)B與A相連、B與C斷開,單片機(jī)通過(guò)P35使開關(guān)與K點(diǎn)相連。當(dāng)有脈沖輸入時(shí),INT0產(chǎn)生一中斷,單片機(jī)執(zhí)行中斷子程序;然后通過(guò)P35使開關(guān)與K點(diǎn)斷開,即斷開脈沖傳感器的電源,此時(shí)檢測(cè)P36的電平,如為低,則為正常,為高則為作弊脈沖。當(dāng)作弊脈沖累積到一定數(shù)量(此數(shù)值由計(jì)費(fèi)器的參數(shù)設(shè)定)后,計(jì)費(fèi)器便認(rèn)定有作弊發(fā)生,于是報(bào)警,同時(shí)產(chǎn)生一系列動(dòng)作如車資、計(jì)程公里和計(jì)程時(shí)間全部清零或者鎖死計(jì)費(fèi)器等,究竟產(chǎn)生何種動(dòng)作,可由選項(xiàng)來(lái)決定。
b 雙信號(hào)防作弊的工作原理
當(dāng)計(jì)費(fèi)器選定雙信號(hào)防作弊后,跳線開關(guān)B與C接通、B與A斷開。當(dāng)有脈沖輸入時(shí),INT0產(chǎn)生一中斷,單片機(jī)執(zhí)行中斷子程序,此時(shí)單片機(jī)須判別P36腳輸入的信號(hào)是否為低電平,為低則正常,否則為作弊脈沖。其余與單信號(hào)防作弊時(shí)一樣。
1.5 電源模塊
該模塊為一開關(guān)電源,用于將輸入的12V直流電源變?yōu)榉€(wěn)定的5V電源。由于12V電源由出租車上的電瓶提供,有一定的分散性,尤其當(dāng)電瓶質(zhì)量不好時(shí),12V電源較低。而開關(guān)電源的適用范圍較廣,且驅(qū)動(dòng)能力較強(qiáng),因此,使用開關(guān)電源可有效防止因輸入電壓過(guò)低而產(chǎn)生的各種故障。
2 軟件設(shè)計(jì)
該計(jì)費(fèi)器的軟件設(shè)計(jì)主要由兩部分組成,一是單片機(jī)的軟件設(shè)計(jì),二是PC機(jī)的軟件設(shè)計(jì)。由于二者均采用模塊化設(shè)計(jì)方法,因此,該程序結(jié)構(gòu)清晰,便于今后修改及升級(jí)。鑒于篇幅的限制,下面只介紹這兩部分的設(shè)計(jì)流程。
2.1 單片機(jī)的軟件設(shè)計(jì)
單片機(jī)的軟件設(shè)計(jì)流程如圖6所示。其中初始化模塊由硬件初始化和軟件初始化兩部分組成,硬件初始化主要是對(duì)單片機(jī)及其它相關(guān)芯片進(jìn)行初始化;而軟件初始化主要是對(duì)各種軟件標(biāo)志進(jìn)行初始化,同時(shí)將斷電前保存的各種狀態(tài)數(shù)據(jù)讀入單片機(jī)的RAM中;然后根據(jù)選項(xiàng)決定是否要識(shí)別司機(jī)卡、以及是直接回到空車狀態(tài)還是回到斷電前計(jì)費(fèi)器所處的載客狀態(tài)(如復(fù)位選項(xiàng)為0,則計(jì)費(fèi)器復(fù)位后直接回到空車狀態(tài);而在為1時(shí),如斷電前計(jì)費(fèi)器處于載客狀態(tài),則復(fù)位后回到載客狀態(tài),如斷電前計(jì)費(fèi)器處于非載客狀態(tài),則復(fù)位后直接回到空車狀態(tài))。圖中的每個(gè)模塊均由許多子模塊組成,如載客模塊應(yīng)包含計(jì)程計(jì)費(fèi)、計(jì)時(shí)計(jì)費(fèi)、打印車票、暫停、客次數(shù)據(jù)寫入RAM中等子模塊;而查詢則包括查詢當(dāng)天累計(jì)數(shù)據(jù)、總累積數(shù)據(jù)及客次記錄等子模塊。每個(gè)模塊均可通過(guò)按鍵回到空車模塊(圖中未畫出)。
2.2 PC機(jī)的軟件設(shè)計(jì)
由于VB6.0有串行通訊MSComm(電話盒)控件來(lái)為應(yīng)用程序提供串行通信,且具有良好的用戶界面及簡(jiǎn)單方便的串行通信功能,因此,無(wú)須借用其它語(yǔ)言就可以開發(fā)出優(yōu)秀的通信軟件。PC機(jī)軟件主要由以下幾個(gè)模塊組成:計(jì)費(fèi)資料修改及傳輸、打印命令數(shù)據(jù)修改及傳輸、選項(xiàng)數(shù)據(jù)修改及傳輸、采集當(dāng)天累積、采集總累積和采集客次記錄等(由于篇幅的限制,這里沒(méi)有給出程序流程圖)。由于軟件中設(shè)置了下拉式菜單及各種控制按鈕,因此,直接用鼠標(biāo)點(diǎn)擊控制按鈕或下拉式菜單即可完成相應(yīng)的操作(當(dāng)然,也可通過(guò)按下快捷鍵來(lái)實(shí)現(xiàn))。計(jì)費(fèi)資料、打印命令數(shù)據(jù)及選項(xiàng)數(shù)據(jù)均各自存于一文本文件中;此外,該軟件還設(shè)置了各種口令,可防止無(wú)關(guān)人員非法修改數(shù)據(jù)。
3 設(shè)計(jì)時(shí)應(yīng)注意的問(wèn)題
該計(jì)費(fèi)器的選項(xiàng)多達(dá)64個(gè),功能齊全,能適應(yīng)不同地區(qū)的需要,但軟件編程及調(diào)試也比較復(fù)雜,需要特別小心。為了使計(jì)費(fèi)器能夠穩(wěn)定、可靠地工作,進(jìn)行軟、硬件設(shè)計(jì)時(shí)要注意以下幾點(diǎn):
?。ǎ保榱朔乐褂?jì)費(fèi)器死機(jī),軟件編程時(shí)應(yīng)采用指令冗余技術(shù)、軟件陷阱技術(shù)以及軟件看門狗技術(shù)。有興趣者可查閱參考文獻(xiàn)。
?。ǎ玻┯捎谒緳C(jī)卡、采集卡、收費(fèi)卡共用一個(gè)IC卡接口,因此,主控模塊要注意區(qū)分卡的類型,應(yīng)按照IC卡的有關(guān)控制命令正確編程。
(3)盡量不用IC插座。由于IC插座有較大的分布電容,因此,應(yīng)把IC直接焊在印刷電路板上。每個(gè)IC應(yīng)加一個(gè)去耦電容,去耦電容在印刷電路板上的引腳要盡量短。另外,石英晶體的外殼也要接地。
(4)由于計(jì)費(fèi)器采用開關(guān)電源,因此,設(shè)計(jì)時(shí)第一要在開關(guān)管的C、E極間加RC吸收電路。并在二次整流回路的整流二極管兩端加RC吸收電路以抑制浪涌電壓。第二要加厚開關(guān)管與散熱片之間絕緣墊片的厚度,以減少開關(guān)管與散熱片之間的耦合電容。第三要使用電源濾波器。因?yàn)樵陔娫吹妮斎攵思尤霝V波器可以抑制輸入端的瞬態(tài)干擾;直流電源的輸出端也要接入電容濾波器,以將輸出電壓的紋波限制在一定范圍內(nèi),同時(shí)抑制數(shù)字信號(hào)產(chǎn)生的脈沖干擾。第四還應(yīng)采用屏蔽措施來(lái)進(jìn)一步減少開關(guān)電源的干擾。
4 結(jié)束語(yǔ)
本計(jì)費(fèi)器的設(shè)計(jì)由于采用了功能很強(qiáng)的單片機(jī)μPD78F0034、電源監(jiān)控和看門狗芯片MAX705及單、雙信號(hào)防作弊技術(shù),因而基本上杜絕了出租車在營(yíng)運(yùn)過(guò)程中計(jì)費(fèi)器的死機(jī)現(xiàn)象及作弊現(xiàn)象。從使用情況看,該計(jì)費(fèi)器穩(wěn)定性好、可靠性高、返修率很低。另外,由于采用了模塊式結(jié)構(gòu)和在系統(tǒng)可編程方法,因此,其軟件的修改和升級(jí)也非常方便。
評(píng)論