1 前言 電動助力轉(zhuǎn)向系統(tǒng)已成為現(xiàn)代汽車發(fā)展的必然趨勢。只有精確實時的采集到車輛轉(zhuǎn)角數(shù)據(jù),助力轉(zhuǎn)向系統(tǒng)才能根據(jù)這些數(shù)據(jù)采用各種先進(jìn)的算法來控制助力電機(jī)的轉(zhuǎn)動。所以說,車輛轉(zhuǎn)角數(shù)據(jù)的采集是電動助力轉(zhuǎn)向系統(tǒng)的重要組成部分。此文章詳細(xì)的講述了電動助力轉(zhuǎn)向系統(tǒng)數(shù)據(jù)采集的硬件和軟件。 2 數(shù)據(jù)采集硬件 數(shù)據(jù)采集硬件系統(tǒng)主要由計算機(jī),A/D轉(zhuǎn)換板,數(shù)字量信號輸入/輸出板,傳感器以及信號處理裝置等組成,基本的結(jié)構(gòu)如圖1所示。試驗臺傳感器所輸出的信號一共有兩種,一種是模擬信號,另外一種是數(shù)字信號。而計算機(jī)只能對數(shù)字量進(jìn)行處理,為了能使計算機(jī)處理或存儲模擬信號,就必須將其轉(zhuǎn)換為數(shù)字量,因此模擬信號的采集主要通過A/D板進(jìn)行轉(zhuǎn)換,然后輸入計算機(jī)中進(jìn)行處理;數(shù)字信號(光電編碼器輸出的脈沖信號)的采集是南數(shù)字信號輸入輸出處理板來完成。 ![]() 圖1數(shù)據(jù)采集硬件系統(tǒng) 2.1 數(shù)據(jù)采集卡(A/D)-HY-1232A/D板 HY-1232板是一種IBM-PC XT/AT總線兼容A/D,D/A板,具有32路單端模擬輸入通道,12Bit分辨率,模擬輸入電壓范圍,雙極性為-5V,+5V,單極性為0,+5V。數(shù)據(jù)傳輸方式采用軟件查詢方式和中斷方式,而且可以直接插入到計算機(jī)的任一總線擴(kuò)展槽中,構(gòu)成計算機(jī)數(shù)據(jù)采集的控制系統(tǒng)。HY一1232的A/D轉(zhuǎn)換采用軟件觸發(fā)方式,在程序中首先向該板寫入模擬通道,A/D板將自動對該通道進(jìn)行A/D轉(zhuǎn)換。在程序中讀入A/D完成標(biāo)志位即可判斷轉(zhuǎn)換是否完成。當(dāng)A/D完成位為‘1’時,則A/D轉(zhuǎn)換已完成。 2.2 HY-6160數(shù)字量信號輸入輸出板 HY-6160板有32個數(shù)字量輸入通道,32個數(shù)字量輸出通道和一個外部事件中斷通道。每個輸入或輸出通道為一組,占用一個地址。數(shù)字量輸入/輸出信號電平與TTL電平兼容。中斷申請信號為TTL電平。數(shù)字量輸出通道上電清零。光電編碼器將轉(zhuǎn)向盤的轉(zhuǎn)角轉(zhuǎn)換為電脈沖輸入給數(shù)字信號輸入輸出板,通過計算脈沖數(shù)的大小即町獲得轉(zhuǎn)向盤轉(zhuǎn)過的角度。 2.3 傳感器 2.3.1 扭矩傳感器 扭矩傳感器主要測量轉(zhuǎn)向盤輸出扭矩的大小和方向,然后將其轉(zhuǎn)化為相應(yīng)的電壓值傳送給控制器的ECU。扭矩是作為EPS系統(tǒng)控制策略的重要依據(jù),直接會影響到控制效果的好壞,因此扭矩傳感器也被作為重點對像進(jìn)行研究和開發(fā)。本試驗臺選用的傳感器為電位計式扭矩傳感器。 2.3.2 霍爾電流傳感器 霍爾元件是一種磁電轉(zhuǎn)換器件,能把磁場信號轉(zhuǎn)換為電信號,當(dāng)霍爾器件H處于磁感應(yīng)強(qiáng)度為B的磁場中時,在H(由半導(dǎo)體材料制成的薄片)縱向通過控制電流I,將引起薄片兩邊載流子數(shù)量的變化,因而產(chǎn)生一個電勢差,即霍爾電壓曲,Un=K/d*k*B 式中:K為所用材料的霍爾常數(shù);d為薄片厚度;IC為控制電流;B為磁感應(yīng)強(qiáng)度。 本試驗臺中電流傳感器型號是CS500B(南京茶花港聯(lián)傳感測控技術(shù)有限公司)。 3 數(shù)據(jù)采集軟件總體設(shè)計 本試驗臺的數(shù)據(jù)采集軟件系統(tǒng)采用VB作為編程語言,使用模塊化結(jié)構(gòu)。軟件的主體功能主要包括數(shù)據(jù)采集,數(shù)據(jù)存儲與處理,數(shù)據(jù)實時顯示,坐標(biāo)設(shè)定,實時曲線顯示等。駕駛員作用在方向盤上的扭矩由扭矩傳感器輸入到計算機(jī)內(nèi)的A/D板,A/D板將此模擬信號再轉(zhuǎn)換為數(shù)字信號,通過采集軟件進(jìn)行存儲等操作;電流傳感器輸出模擬電流信號和扭矩信號一樣都進(jìn)入A/D板進(jìn)行轉(zhuǎn)換;安裝在方向盤上的光電編碼器將脈沖信號輸入到計算機(jī)內(nèi)的計數(shù)板上,由采集軟件通過計算脈沖數(shù)的大小來得到方向盤的轉(zhuǎn)角。軟件中除了基本的數(shù)據(jù)保存等功能外,還有實時數(shù)據(jù)顯示,實時曲線顯示,通過軟件叮以直接看到系統(tǒng)工作過程中扭矩、電流、方身盤轉(zhuǎn)角的大小,還可以觀察它們之間的關(guān)系。圖2為軟件的結(jié)構(gòu)框圖。 ![]() 圖2數(shù)據(jù)采集軟件結(jié)構(gòu)框圖 3.1 Visual BASIC對底層硬件的訪問 現(xiàn)實中經(jīng)常會對控制系統(tǒng)進(jìn)行數(shù)據(jù)采集或者發(fā)送控制命令,都要求對底層的硬件進(jìn)行操作,但是Visual BASIC沒有提供直接訪問底層硬件的控件和方法,只能通過調(diào)用動態(tài)鏈接庫DLL或者使用AetiveX控件來讀寫存儲器單元、端口,甚至控制硬件中斷。下面主要介紹使用Visual c++6.0編寫數(shù)據(jù)采集函數(shù)的動態(tài)鏈接庫DLL的過程。 動態(tài)鏈接庫雖然是一個可執(zhí)行模塊,但它并不能直接運行,它只是提供一組函數(shù)供Windows應(yīng)用程序或其他動態(tài)鏈接庫調(diào)用,以完成其特殊任務(wù)。在使用Visual c++6.0創(chuàng)建DLL后會生成三個文件,*.cpp,stdafx.cpp,stdafx.h,只需在stdafx.cpp中將程序入口函數(shù)DLLMain()補(bǔ)全,加入自定義的功能函數(shù),并新建*.DEF模塊定義文件,將自定義的功能函數(shù)在此文件中一一輸出。其中,DllMain函數(shù)是Win32 DLL的入口和出口點。在每次裝入或卸載DLL時,Windows 9x調(diào)用該函數(shù),主要用來完成一些初始化任務(wù),或在DLL卸載之前,Windows調(diào)用該函數(shù)做一些必要的釋放資源等清除工作。值得注意的是,DLL的調(diào)用約定共有4種方式:_fastcall、_pascal、_stdcall、_cdecl,vc++默認(rèn)調(diào)用方式為_cdecl,而VB默認(rèn)調(diào)用方式則為_stdcaU,因此必須限定調(diào)用方式,即將函數(shù)定義為如下格式: extern“C" _declspec(dllexport)<函數(shù)返回數(shù)據(jù)類型>_std-call函數(shù)名[參數(shù)列表]。 只有做這樣的限定后,生成的DLL庫才不會出現(xiàn)錯誤。 3.2利用VB調(diào)用動態(tài)鏈接庫 在VB中調(diào)用動態(tài)鏈接庫之前,VB要求必須在窗體或模塊的聲明中定義所要調(diào)用的函數(shù),否則VB不能識別所調(diào)用的動態(tài)鏈接庫。 如果調(diào)用的動態(tài)鏈接庫中的函數(shù)無返回值,則將其聲明為過程: Declare Sub 過程名 lib“.DLL庫名” (Byval參數(shù)As類型) 如果調(diào)用的動態(tài)鏈接庫中的函數(shù)有返回值,則將其聲明為函數(shù): Declare Function 函數(shù)名 lib“.DLL庫名” (Byval參數(shù)As類型) a8類型 具體到本數(shù)據(jù)采集系統(tǒng)的端口操作函數(shù)及A/D轉(zhuǎn)換函數(shù),其聲明方式如下: Declare Sub Outport Lib "vbio.dll" (ByVal portID As Integer, ByVal nByte As Integer) Declare Function Inport Lib "vbio.dll" (ByVal portlD As Integer) As Integer Declare Function Getval Lib "EPS.dll" (ByVal portID As Integer)As Single 在這樣聲明之后,函數(shù)Output、Input、Getval才可以像使用VB本身自帶的函數(shù)那樣在需要時進(jìn)行直接調(diào)用。 3.3 VB中高精度定時數(shù)據(jù)的采集 在電動助力轉(zhuǎn)向臺架試驗的過程中,所有的扭矩,電流,角度,齒條位移等都是按照準(zhǔn)確的物理時間來采集,并且記錄在數(shù)據(jù)文件中。 實時數(shù)據(jù)的采集過程需要用到定時器,定時器的精度必須能夠滿足實時采樣和數(shù)字濾波的要求。本試驗臺利用Windows API函數(shù)實現(xiàn)精確記時的方法,即利用高性能頻率記數(shù)法。利用這種方法需要使用兩個API函數(shù):QueryPerformaneeFrequency和QueryPerPerformanceCounter。 (1) QueryPerformaneeFrequeney函數(shù):獲得高性能頻率記數(shù)器的震蕩頻率,該函數(shù)的定義如下: Private Declare Function QueryPerformaneeFrequeney Lib "kernel32"_ (lpFrequency As LARGE_INTEGER) As Long 函數(shù)中的數(shù)據(jù)結(jié)構(gòu)LARGE_INTEGER定義如下: Type LARGE_INTEGER lowpart As Long highpart As Long EndType 調(diào)用該函數(shù)后,函數(shù)會將系統(tǒng)頻率記數(shù)器的震蕩頻率保存到lpPerformanceCount中,其中低位保存到lowpart中,高位保存到highpart中。 (2) QueryPerformanceCounter函數(shù)獲得系統(tǒng)頻率記數(shù)器的震蕩次數(shù),函數(shù)的定義如下: Private Declare Function QueryPerformaneeCounter Lib”kernel32”_ (lpPerformanceCount As LARGE_INTEGER) As Long 獲得記時器震蕩次數(shù)保存在lpPerformanceCount中。 在程序設(shè)計中。首先通過利用QueryPerformanceFrequency函數(shù)獲得頻率記數(shù)器的震蕩頻率,然后在執(zhí)行數(shù)據(jù)采集程序段之前調(diào)用QueryPerformance Counter函數(shù)獲得頻率記數(shù)器的震蕩次數(shù),在數(shù)據(jù)采集程序段結(jié)束時再調(diào)用QueryPerformanee Counter函數(shù)獲得頻率記數(shù)器的震蕩次數(shù),將兩次獲得的震蕩次數(shù)相減后再除以震蕩頻率就獲得了兩次間隔之間的時間(以秒為單位)。因此在數(shù)據(jù)采集程序中建立了一個循環(huán)。在循環(huán)中不斷的調(diào)用QueryPerformaneeCounter獲得頻率記數(shù)器的震蕩次數(shù)并同先前的頻率記數(shù)器的震蕩次數(shù)相減,將結(jié)果除以頻率記數(shù)器的震蕩頻率,如果達(dá)到設(shè)定的采集時間則執(zhí)行數(shù)據(jù)采集任務(wù),這樣就達(dá)到了精確記時采集的任務(wù)。 在試驗的過程中,程序每隔3ms訪問一次A/D板,也就是每3ms會讀一個數(shù)據(jù)到內(nèi)存中,為了更加清楚的觀察各種狀態(tài)下曲線的變化情況,以及尖脈沖干擾出現(xiàn)的時間,在軟件設(shè)計時盡可能把這些點全部讀入,并在實時曲線上顯示出來。但是如果把這些點全部記錄下來,數(shù)據(jù)量會非常大,不利于后續(xù)的助力特性等的分析,因此在軟件中設(shè)定一個N值,當(dāng)采集到的點數(shù)達(dá)到此值時,程序?qū)⑦@N個值做一次濾波處理,然后將處理過的數(shù)保存在數(shù)據(jù)庫中,供后續(xù)的分析與處理。在這里N值取為50。實驗證明,該定時器能滿足EPS定時采集的要求。 3.4采集數(shù)據(jù)的過濾 試驗臺外部干擾對于傳感器的影響很大,因此采集到的數(shù)據(jù)需要經(jīng)過處理。進(jìn)行軟件濾波的方法主要有:限幅濾波法,中位值濾波法,算術(shù)平均濾波等。 (1)限幅濾波法。對于超過被測鼉可能上限和可能下限的測量值,則被認(rèn)為是由于偶然的脈沖噪聲麗引起,忽略該測量值。 (2)中位值濾波法。對一組測量值,去掉其中的最大值和最小值,只對中位進(jìn)行處理。 (3)算術(shù)平均值法。取多個中位值的平均值。 在數(shù)據(jù)采集過程中,試驗臺系統(tǒng)不可避免會產(chǎn)生尖脈沖干擾。本數(shù)據(jù)采集系統(tǒng)對模擬量采取的數(shù)字濾波方法是結(jié)合防脈沖干擾平均法和移動平均濾波法各自優(yōu)點,即既能防止脈沖干擾,又能提高系統(tǒng)實時性,這里設(shè)置數(shù)據(jù)氏數(shù)據(jù)的個數(shù)為N個,每采樣一次新數(shù)據(jù),主程序就調(diào)用一次防脈沖移動平均濾波子程序,去掉N個數(shù)據(jù)中的最大值和最小值,再取余下(N-2)個數(shù)據(jù)的算術(shù)平均值來逼進(jìn)真實的模擬量數(shù)值,然后再將所得的平均值記錄下來。 4 小結(jié)與實驗結(jié)果 本文詳細(xì)介紹了EPS試驗臺數(shù)據(jù)采集用的主要傳感器,在試驗臺硬件的基礎(chǔ)上。開發(fā)了基于VB語言的數(shù)據(jù)采集系統(tǒng),給出了數(shù)據(jù)采集系統(tǒng)的程序框圖。介紹了VB對于底層硬件的訪問方法,以及在采集過程中高精度定時器的應(yīng)用,最后介紹了程序的濾波方法。圖3為數(shù)據(jù)采集軟件的t作界面。 ![]() 圖3數(shù)據(jù)采集軟件的工作界面 本文作者創(chuàng)新點:利用Visual Basic進(jìn)行數(shù)據(jù)采集可以利用兩種方法,利用MSComm控件和利用API函數(shù)的方法,本文利用API函數(shù)的方法,具有采集精度高,數(shù)據(jù)采集實時的特點。 項目經(jīng)濟(jì)效益:20萬元。 作者:化永星,陸文昌 來源:《微計算機(jī)信息》(嵌入式與SOC)2009年第3-2期 |