汽車記錄儀數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)
隨著汽車產(chǎn)業(yè)的迅猛發(fā)展,汽車記錄儀的需求也成倍增長。汽車記錄儀又稱為“汽車黑匣子”,能完整、準(zhǔn)確地記錄汽車行駛狀態(tài)下的各種信息[1],能將汽車的行駛軌跡、制動(dòng)性能、開關(guān)量信號(hào)完整記錄,并能根據(jù)需要隨時(shí)調(diào)出數(shù)據(jù)進(jìn)行分析或者通過專用軟件在電腦上再現(xiàn)。它被認(rèn)為是確保汽車安全的有效手段,可以迅速獲取有關(guān)行車數(shù)據(jù),改善營運(yùn)狀況,成為車輛交通管理必不可少的設(shè)備。數(shù)據(jù)采集系統(tǒng)作為汽車記錄儀的重要組成部分直接關(guān)系到記錄儀的各項(xiàng)性能,對記錄儀整體的功能影響甚大。
本文引用地址:http://www.ex-cimer.com/article/196997.htm1 硬件電路結(jié)構(gòu)
1.1 實(shí)時(shí)時(shí)鐘模塊
由于系統(tǒng)產(chǎn)生的各種數(shù)據(jù)和記錄都與時(shí)間密切相關(guān),對時(shí)鐘的實(shí)時(shí)性要求很高,同時(shí)記錄儀本身存在著斷電的危險(xiǎn),為了準(zhǔn)確記錄車輛行駛狀態(tài),并對異常情況進(jìn)行記錄,因此選擇實(shí)時(shí)時(shí)鐘芯片來提供日期和時(shí)間。實(shí)時(shí)時(shí)鐘芯片是一種不僅能支持每天時(shí)間更新,而且能夠進(jìn)行日期更新的永久時(shí)鐘電路[2]。本文采用DALLAS公司的DS1302芯片,它性能高、功耗低,時(shí)鐘校準(zhǔn)也較為容易,通過3V鋰電池和車內(nèi)蓄電池兩種方式供電,可以保證在蓄電池出現(xiàn)故障的情況下,該時(shí)鐘芯片仍然能夠正常工作,從而使記錄儀的數(shù)據(jù)同樣準(zhǔn)確、可靠。其內(nèi)部自帶31B的靜態(tài)RAM,存儲(chǔ)容量滿足應(yīng)用的需要。數(shù)據(jù)在CLK的上升沿串行輸入,在進(jìn)行單字節(jié)或多字節(jié)傳送時(shí),開始的第一個(gè)字節(jié)為命令字節(jié),用于指定31個(gè)字節(jié)中哪個(gè)將被訪問。當(dāng)進(jìn)行任何數(shù)據(jù)傳送時(shí),其最高有效位MSB(位7)必須為邏輯1,如果為零,則禁止寫DS1302。其時(shí)鐘電路如圖1所示,Vcc1與3V鋰電池相連,Vcc2與蓄電池相連,5、6、7引腳分別接S3C2410的時(shí)鐘端、數(shù)據(jù)端和復(fù)位端,通過主控制器S3C2410對時(shí)鐘模塊進(jìn)行統(tǒng)一管理。
1.2 車速采集模塊
記錄儀從車輛啟動(dòng)開始就不停地對車輛的速度進(jìn)行實(shí)時(shí)檢測,并實(shí)時(shí)保存。速度是一個(gè)模擬變量,是時(shí)刻變化的。車速信號(hào)通過傳感器以脈沖形式輸入,為了防止周圍環(huán)境及本身的干擾,采用單光耦芯片TLP521,切斷輸入和輸出通道間直接的電信號(hào)聯(lián)系,主要就是通過電-光-電的變換將電信號(hào)隔離開來。通過屏蔽和光耦隔離,得到波形干凈的信號(hào)。為了得到良好的矩形波,使車速測量達(dá)到一定的精度,本系統(tǒng)采用施密特觸發(fā)器LM311來完成波形的整形,信號(hào)采集功能完成后,采集到的信號(hào)需要送到可編程邏輯器件中進(jìn)一步處理,然后再傳送給主芯片S3C2410,盡量將所有的干擾信號(hào)在進(jìn)入主控制器之前降到最低。在實(shí)際控制過程中各種干擾信號(hào)是不可避免的,為了盡可能地消除或減少干擾信號(hào)對系統(tǒng)的控制作用,除了在系統(tǒng)硬件及環(huán)境方面采取措施以外,在控制算法上也采取了一定的措施來抑制干擾信號(hào)的影響,在程序中采用連續(xù)多次采樣求平均值的辦法予以濾波[3]。車速脈沖采集模塊硬件電路如圖2所示。
1.3 開關(guān)量采集模塊
開關(guān)量信號(hào)包括方向燈、倒燈、車門、遠(yuǎn)光燈、近光燈、剎車、鳴號(hào)、車輛啟動(dòng)等這類行駛過程中很重要的數(shù)字開關(guān)量,將它們采集并保存下來對事后分析有很大幫助[4]??梢酝ㄟ^ARM芯片的I/O端口對這些信號(hào)進(jìn)行輸入。但這些信號(hào)是高壓信號(hào),直接接到ARM板上可能會(huì)損壞CPU,這里采用光耦芯片TLP521對它們進(jìn)行隔離,避免CPU受損。在S3C2410中,可以通過GPnCON(n是I/O口的組號(hào))寄存器對GPIO引腳的使用功能進(jìn)行設(shè)置。系統(tǒng)每隔0.2s對開關(guān)量信號(hào)采集一次,采集來的開關(guān)量可以從GPnDAT寄存器中讀取。芯片的接口方式為4腳SPI,能夠大大減少處理器需要提供的引腳數(shù)量[5]。當(dāng)任一開關(guān)量輸入信號(hào)狀態(tài)發(fā)生變化時(shí),通過中斷的方式通知主處理器,從而減輕了處理器頻繁查詢的負(fù)擔(dān)。圖3是一路開關(guān)信號(hào)采集電路,其他開關(guān)量電路與此相同。
2 軟件的設(shè)計(jì)
記錄儀數(shù)據(jù)采集系統(tǒng)軟件要求上電復(fù)位后,首先進(jìn)行自檢;然后顯示初始界面(包括當(dāng)前時(shí)間、行駛速度等);最后根據(jù)速度傳感器傳過來的脈沖個(gè)數(shù)以及持續(xù)時(shí)間判斷汽車是否啟動(dòng),若未啟動(dòng)則返回,若已啟動(dòng)則進(jìn)入各數(shù)據(jù)量的檢測。記錄儀軟件設(shè)計(jì)包括顯示、速度采集、實(shí)時(shí)時(shí)鐘、開關(guān)量采集、數(shù)據(jù)傳送等, 采集系統(tǒng)軟件流程圖如圖4所示。
汽車記錄儀的初始化函數(shù)主要工作是為設(shè)備分配設(shè)備編號(hào),設(shè)備的存取是通過一組固定的入口點(diǎn)來進(jìn)行的,這套接口函數(shù)是由file_operations結(jié)構(gòu)定義的,汽車記錄儀主要包括以下成員:
Static int _ _init s3c2410_ts_init (void)
{ … …
ret = register_chrdev(0,DEVICE_NAME, s3c2410_fops);};
static struct file_operations s3c2410_fops = {
owner: THIS_MODULE,
/*指向擁有該結(jié)構(gòu)的模塊的指針*/
open: s3c2410_ts_open, /*打開設(shè)備*/
read: s3c2410_ts_read, /*用來從設(shè)備中讀取數(shù)據(jù)*/
release: s3c2410_ts_release,
/*file結(jié)構(gòu)被釋放時(shí),將調(diào)用這個(gè)操作*/
poll: s3c2410_ts_poll,
/*用來查詢讀取或者寫入是否會(huì)被阻塞*/
};最后都需要一個(gè)清除函數(shù),該函數(shù)在模塊被移除前注銷接口,并向系統(tǒng)中返回所有資源
Static void _ _exit s3c2410_ts_exit (void)
{ ……
unregister_chrdev(tsMajor, DEVICE_NAME);
…… };
設(shè)測速函數(shù)為void mk_int()(void)interrupt()。測量汽車的行駛速度,實(shí)際上就是測量汽車速度傳感器產(chǎn)生的矩形脈沖寬度。測得該脈沖的寬度后,然后根據(jù)公式(1)得出汽車的行駛速度。
K=(convert/(number*wave_width*co))*(real_speed/display_speed) (1)
其中,number表示速度傳感器轉(zhuǎn)一圈產(chǎn)生的脈沖數(shù),wave_width表示每個(gè)脈沖低電平的寬度,co代表車輛每行駛1km速度傳感器的轉(zhuǎn)數(shù),real_speed是車輛的標(biāo)稱速度,用于糾正系統(tǒng)誤差,display-speed是車輛的實(shí)測速度,用于糾正系統(tǒng)誤差,convert是車速的轉(zhuǎn)換系數(shù),該系數(shù)與系統(tǒng)的晶體振蕩頻率有關(guān)。其他部分相關(guān)程序如下:
(1)extern void flash_clear( ) extern void s3c2410_4k_clear( )清空S3C2410內(nèi)存中和實(shí)時(shí)時(shí)鐘芯片中的所有內(nèi)容,這些只是在出廠初始化時(shí)使用[6]。
(2)extem void accident_time_record( )記錄每次PC機(jī)上載和下傳操作的時(shí)間。
(3)void accident_deal(void)非法關(guān)機(jī)處理程序[7]。記錄儀在運(yùn)行的過程當(dāng)中,很有可能出現(xiàn)人為的或非人為的斷電現(xiàn)象,在這種情況下,為了保證非法關(guān)機(jī)不丟失數(shù)據(jù),在整個(gè)程序運(yùn)行期間,描述汽車運(yùn)行狀態(tài)的一些重要的數(shù)據(jù)都保存在S3C2410中,當(dāng)記錄儀一上電時(shí),就可以根據(jù)這些數(shù)據(jù)恢復(fù)到上次非法關(guān)機(jī)時(shí)刻的狀態(tài)[8]。
系統(tǒng)通過LCD進(jìn)行人機(jī)交換,其顯示的基本函數(shù)如下:(1)void init_lcd( )LCD初始化程序; (2)void write_cmd(unsigned char cmd) 寫指令到指令寄存器,用來控制顯式模式,設(shè)置顯示寄存器的地址;(3)void write_hc(unsigned int word)寫8位數(shù)據(jù)到顯示寄存器,即顯示16×8點(diǎn)陣的半寬ASCII碼字符;(4)void write_word(unsigned int word) 寫16位數(shù)據(jù)到顯示寄存器;(5)void clear_lcd( )清除LCD顯示屏,并將光標(biāo)移到起始位置。系統(tǒng)的整體軟件結(jié)構(gòu)如圖5所示。
汽車記錄儀是汽車電子化、智能化的一個(gè)重要應(yīng)用。本文通過對汽車記錄儀數(shù)據(jù)采集系統(tǒng)的研究,從硬件電路設(shè)計(jì)和軟件分析兩方面對實(shí)時(shí)時(shí)鐘信號(hào)、車速采集信號(hào)、開關(guān)量信號(hào)分別進(jìn)行了討論,將此數(shù)據(jù)采集系統(tǒng)應(yīng)用于汽車記錄儀中,具有抗干擾能力強(qiáng)、精度高、實(shí)用性好等優(yōu)點(diǎn)。
系統(tǒng)涉及的三個(gè)模塊可以分別單獨(dú)修改制做。主板的布線簡單,成本較低。如果以后修改ARM電路板導(dǎo)致主板也需要修改的話可以降低整個(gè)系統(tǒng)的修改/升級成本。
系統(tǒng)包含一個(gè)掉電預(yù)備電源,當(dāng)出現(xiàn)外部干擾導(dǎo)致記錄儀意外掉電時(shí),該電源能夠迅速觸發(fā)中斷,從而保證實(shí)時(shí)數(shù)據(jù)不丟失。
系統(tǒng)主機(jī)模塊采用高效的32位ARM嵌入式處理器為核心,能夠有效地提高系統(tǒng)實(shí)時(shí)性。優(yōu)化編寫的代碼對多任務(wù)進(jìn)行了統(tǒng)籌兼顧地合理調(diào)度,有效地保證了實(shí)時(shí)性。此外,處理器豐富的內(nèi)外部中斷源的使用為復(fù)雜程序的靈活轉(zhuǎn)換提供了方便,減輕了處理器負(fù)擔(dān)。
評論