范黎+周美嬌+張軒雄
摘要:為了迅速地幫助車輛開發(fā)、測試人員獲取車輛排放數(shù)據(jù)和定位汽車故障原因,設計了一套基于OBD-II協(xié)議的車輛故障診斷系統(tǒng)。在系統(tǒng)硬件上,該故障診斷模塊采用STM32F103CBT6作為主控芯片,通過TJA1050CAN收發(fā)器與車輛的OBD接口進行數(shù)據(jù)交互;軟件上下位機采用keil4開發(fā)環(huán)境完成固件開發(fā),上位機采用C#語言通過串口實時顯示診斷信息和信號值。通過軟硬件協(xié)同工作,最終實現(xiàn)上位機終端界面發(fā)送讀取故障請求或實時數(shù)據(jù)流請求時,終端界面會顯示響應的回復值等功能。通過系統(tǒng)測試,證明了該診斷系統(tǒng)數(shù)據(jù)準確、響應速度快。
關鍵詞關鍵詞:OBD-II;STM32;故障碼;故障診斷系統(tǒng);數(shù)據(jù)采集系統(tǒng)
DOIDOI:10.11907/rjdk.171857
中圖分類號:TP319
文獻標識碼:A文章編號文章編號:16727800(2017)011006804
0引言
當汽車發(fā)生故障時,有可能導致一氧化碳、碳氫化合物、氮氧化合物或燃油蒸發(fā)污染量超過設定指標,這些有害氣體給人類、動物、植物及整個自然界的生物帶來了極大傷害[1]。OBDII是第二代汽車診斷系統(tǒng)(OnBoardDiagnostics,OBD),用于隨時監(jiān)控發(fā)動機運行狀況和尾氣處理系統(tǒng)工作狀態(tài)并識別排放部件故障。當排放超標時,車內(nèi)的故障燈則會點亮報警,汽車ECU會檢測和存儲相關故障信息[2]。與第一代診斷系統(tǒng)相比,OBDII標準化了通信協(xié)議和故障碼,也定義了更加嚴格的排放標準,更加便于汽車開發(fā)、測試人員獲取車輛排放數(shù)據(jù)及定位汽車故障原因。
1系統(tǒng)總體框架及硬件設計
車輛故障診斷系統(tǒng)采用型號為STM32F103CBT6的單片機嵌入ISO15765協(xié)議完成車輛的故障診斷和傳感器信息獲取。單片機根據(jù)標準協(xié)議發(fā)送特定的CAN報文到車輛的總線網(wǎng)絡中,被檢測的車輛收到報文后根據(jù)命令回復故障代碼(DTC)和數(shù)據(jù)流(RDS)。診斷系統(tǒng)上位機通過串口和下位機通信,解析實際故障信息并實時顯示相關傳感器的信號值。該系統(tǒng)主要分為主控電路、電源電路、USB轉串口電路與CAN收發(fā)器通訊電路。在硬件設計中,選擇STM32F103CBT6芯片作為主控芯片,電源電路模塊采用622K芯片,CAN收發(fā)電路模塊采用TJA1050芯片,USB轉串口模塊采用CP2102芯片。系統(tǒng)結構如圖1所示。
圖1系統(tǒng)結構
1.1主控電路設計
本系統(tǒng)采用基于CotexM3內(nèi)核的32位處理芯片STM32F103CBT6作為主控芯片。由于STM32F103xx系列擁有ARM核心,因此可以兼容ARM開發(fā)相關的各種軟件與工具。存儲方面擁有128K FLASH和多達64K的SRAM,保證了數(shù)據(jù)和程序存儲能力[3]。系統(tǒng)通過芯片倍頻技術可達到72MHz,非常適用于對處理速度和通訊速度要求很高的診斷系統(tǒng)。圖2是STM32F103CBT6的引腳分布圖。
圖2STM32F103CBT6引腳分布
1.2電源電路設計
汽車供電系統(tǒng)為12V,而STM32F103CBT6芯片的供電額定電壓為3.3V,為了診斷系統(tǒng)的便捷性,需要設計降壓電路以滿足要求。采用622k直流穩(wěn)壓芯片將ECU電源轉化為1.5V~3.3V,電源效率高,輸入穩(wěn)定性好[4]。電源電路設計如圖3所示。電壓輸出端與主控芯片STM32F103CBT6的PA11相連,C6和C7為接地電容,可以防止高頻噪聲干擾,確保主控和通訊子系統(tǒng)穩(wěn)定工作。
圖3電源電路設計
1.3CAN收發(fā)電路
系統(tǒng)的CAN收發(fā)電路采用TJA1050芯片作為診斷系統(tǒng)和汽車OBD的物理接口。TJA1050為總線提供數(shù)據(jù)發(fā)送和接收功能。如圖4所示,CAN收發(fā)電路中的RXD、TXD,與STM32F103CBT6控制芯片的PB5和PB6引腳連接,CAN_H、CAN_L和OBD中的對應引腳連接。TJA1050使用5V供電,C4、C5為CAN_H、CAN_L對地匹配電容。接入的電容提高了電磁干擾性能,并且與相應的噪聲源阻抗形成RC低通濾波[5]。
圖4CAN收發(fā)器電路設計
1.4USB轉串口電路
下位機采集的數(shù)據(jù)通過USB轉串口方式與主控芯片進行數(shù)據(jù)交互。本系統(tǒng)采用CP2102芯片將主控芯片的串口轉化為虛擬USB口。RXD、TDX與主控芯片STM32F103CBT6的PB13和PB14連接。C12為接地電容,抑制數(shù)據(jù)傳輸過程中的電磁干擾。當與USB口連接成功后點亮D0,PC端上位機系統(tǒng)即可與下位機進行通信。USB轉串口電路如圖5所示。
圖5USB轉串口電路
2軟件設計
下位機單片機STM32F103CBT6的程序設計使用的keil4軟件平臺采用C語言開發(fā),主要包括對STM32F103CBT6的初始化,以及故障代碼和實時數(shù)據(jù)流的采集與解析。初始化主要包括延時程序、系統(tǒng)時鐘配置、串口、CAN口及中斷程序的初始化。其中數(shù)據(jù)的采集和解析參照OBDII協(xié)議標準,實現(xiàn)對汽車故障碼和實時數(shù)據(jù)流獲取。圖6為主程序流程。上位機程序設計使用微軟Visual Studio軟件平臺,采用C#語言開發(fā),主要包括讀取故障碼、讀取實時數(shù)據(jù)流和清除故障碼3大功能模塊,通過USB串口程序實現(xiàn)與下位機的通信,最終顯示故障信息和信號值。
圖6主程序流程
2.1數(shù)據(jù)采集與解析
OBDII系統(tǒng)支持的協(xié)議主要包括IOS9141、SAEJ1859(PWM)、SAEJ1859(VPM)、KWP200、ISO15765[6]。本系統(tǒng)的數(shù)據(jù)讀取和解析協(xié)議采用ISO15764,該協(xié)議是基于汽車CAN總線網(wǎng)絡的診斷協(xié)議,其CAN報文收發(fā)的核心代碼如下:
u8* SendFrame(CanTxMsg* TxMessage,ErrorStatus* err)//定義CAN報文收發(fā)函數(shù)endprint
{
u8TransmitMailbox;
u32i;
CANRXMAIL = ERROR;
TransmitMailbox = CAN_Transmit(CAN1, TxMessage);//發(fā)送CAN,若發(fā)送成功,返回存入信號箱
while(CAN_TransmitStatus(CAN1,TransmitMailbox) != CANTXOK);//判斷是否發(fā)送成功
for (i = 0;i < 10000000/3;i++)//延時大約1.5s
{
if (CANRXMAIL == SUCCESS) break;
}
*err = CANRXMAIL;
return (u8*)&RXRAM[0];//返回CAN報文的數(shù)據(jù)域
}
ISO15764協(xié)議有標準幀和擴展幀兩種不同的CAN報文,標準幀的標識符ID為0X7DF,擴展幀的標識符ID為0X18DB33F1,其算法和格式相同。表1為標準幀CAN報文的傳輸格式,其中PCI表示協(xié)議控制字節(jié)數(shù)量,MODE為請求模式,PID為讀取數(shù)據(jù)流的參數(shù)標志,PCI、MODE和PID組成CAN報文的數(shù)據(jù)域[7]。不同的PID對應讀取不同的數(shù)據(jù)流條目,例如0x0C代表讀取發(fā)動機轉速,0x0D代表讀取車速,0x15代表讀取氧傳感器輸出電壓,本系統(tǒng)總共實現(xiàn)了16條數(shù)據(jù)實時值的讀取。然后,根據(jù)返回的CAN報文的PID進行數(shù)據(jù)解析,例如:車速為xx/3 km/h,氧傳感器輸出電壓(缸組1,傳感器2)為xx*0.005。
2.2USB轉串口程序設計
上位機采用C#語言通過串口實時顯示診斷信息和信號值。C#使用SerilPort類,可以方便地實現(xiàn)串口通信的多種功能[8]。IsOpen()函數(shù)判斷串行端口的開關狀態(tài),ReadBufferSize()函數(shù)設置串行端口輸入緩沖區(qū)大小,以防止數(shù)據(jù)傳輸過程中丟失。Read()和Write()函數(shù)實現(xiàn)串口的讀取和發(fā)送操作[9]。串口通信初始化如下:
public boolSerialport_Config(int Baud, string COMx)//串口初始化函數(shù)
{
try
{
com.BaudRate = Baud; //獲取串行波特率
com.PortName = COMx; //獲取通信端口
com.DataBits = 8; //設置字節(jié)長度
com.Open();//打開新的串口連接
}
catch (System.Exception)
{
return false;//獲取系統(tǒng)異常返回false
}
return true;
}
3系統(tǒng)調(diào)試及實驗結果
系統(tǒng)硬件使用PADS畫出系統(tǒng)的PCD線路板后進行打樣,焊接好元器件和貼片后,使用JInk,并采用SWD方式將程序燒錄到單片機中,然后進行軟件調(diào)試。實物如圖8所示。
圖8系統(tǒng)實物圖
實驗環(huán)境采用ECU模擬器模擬OBDII系統(tǒng)的ISO157654協(xié)議,通過CAN收發(fā)器的CAN_TXD1和CAN_RXD1與ECU模擬器OBD接口的6、14端口連接,然后將USB串口模塊與電腦連接。安裝串口驅動后,選擇正確的COM口,故障診斷界面上的狀態(tài)燈會變成綠色。圖9、圖10分別為讀取故障碼和讀取實時數(shù)據(jù)流的測試結果。由結果可以看出,汽車發(fā)生故障的原因為燃油量穩(wěn)壓控制電路開路、渦輪增壓渦輪機超速。測試、開發(fā)人員則可以通過響應的回復值來迅速定位汽車故障原因,對相關硬件進行排查。還可以讀取實時數(shù)據(jù)值,獲取汽車發(fā)動機轉速、進氣溫度、計算負荷值和發(fā)動機冷卻溫度等實時數(shù)據(jù),幫助測試和開發(fā)人員獲取車輛排放數(shù)據(jù)。對相應的硬件檢測完成后,可以通過清除故障碼按鈕,對汽車內(nèi)部的故障碼進行清除。
通過5組實驗測試進行對比,響應的回復值均顯示正確,而且響應時間都在5s內(nèi),滿足了設計要求,能夠實現(xiàn)及時獲取響應的回復值等功能。
4結語
基于OBDII的故障診斷及數(shù)據(jù)采集系統(tǒng),經(jīng)過各種功能測試,可以迅速獲取車輛實時排放數(shù)據(jù)并定位汽車故障原因。相比于市場上造價高、體積大的一些原廠汽車故障檢測儀,本文設計的系統(tǒng)造價低廉、響應速度快,具有廣闊的市場前景。
參考文獻參考文獻:
[1]劉揚,郭建斌.汽車對生態(tài)環(huán)境的分析研究與前景判斷[J].環(huán)境保護與經(jīng)濟循環(huán),2008(9):4446,50.
[2]HERPEL N,SONG Y,SIMONOTLION F,et al.Trends in automotive communication systems[J].Proceedings of IEEE,2005,92(6):12041223.
[3]STMicrorelecttonics.STM322 reference maunual[Z].2016:6061.
[4]劉純虎,付斌,盛慶華.基于STM32的微型USBCAN適配器開發(fā)[J].計算機測量與控制,2013(4):996998.
[5]蔡磊.基于STM32F103芯片的USB接口的研究與實現(xiàn)[D].上海:復旦大學,2009.
[6]孟磊.基于OBDⅡ的車載遠程故障診斷系統(tǒng)設計[D].武漢:武漢理工大學,2012.
[7]Road vehiclesdiagnosetics on controller area network (CAN)Part4: requirement for emissionsrelated system[S].ISO57654,2005.
[8]王鐵流,李宗方,陳東升.基于STM32的USB數(shù)據(jù)采集模塊的設計與實現(xiàn)[J].測控技術,2009(8):3740.
[9]陳思敏.基于USB通信設備類的虛擬串口的研究與設計[D].武漢:武漢科技大學,2013.
責任編輯(責任編輯:黃?。〆ndprint