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