基于SAE J1939協(xié)議的車輛信息采集與診斷模塊
2.2 軟件設(shè)計(jì)
系統(tǒng)的軟件設(shè)計(jì)采用Keil RealView MDK-ARM環(huán)境編寫,通過J-Link調(diào)試仿真器與STM32 F103C8T6的JTAG接口連接,實(shí)現(xiàn)在線仿真調(diào)試。
ST公司為STM32系列微控制器開發(fā)了專門的固件庫和接口函數(shù),大大簡化了軟件開發(fā)的過程。系統(tǒng)上電后首先對微控制器的RCC(重啟和時(shí)鐘控制)模塊以及NVIC(嵌套向量中斷控制器)模塊進(jìn)行初始化,并使能CAN中斷,設(shè)置CAN屏蔽碼和驗(yàn)收碼。CAN模塊的初始化過程是這樣的:a.根據(jù)CAN節(jié)點(diǎn)相關(guān)信息初始化一個(gè)CAN_InitTypeDef型結(jié)構(gòu),并調(diào)用CAN_Init函數(shù)對CAN接口進(jìn)行初始化;b.創(chuàng)建CAN_FilterInitTypeDef結(jié)構(gòu)體,調(diào)用CAN_FilterInit函數(shù)對CAN過濾器進(jìn)行初始化;c.調(diào)用CAN_ITConfig函數(shù)對CAN中斷源進(jìn)行使能設(shè)置。系統(tǒng)初始化完成后,等待CAN總線接收中斷的產(chǎn)生,并判斷總線數(shù)據(jù)是否滿足屏蔽條件,將29位標(biāo)識(shí)符報(bào)文與驗(yàn)收碼、屏蔽碼值逐位比較,屏蔽碼用于定位相關(guān)位(0為相關(guān),1為不相關(guān))。僅當(dāng)標(biāo)識(shí)符中的相關(guān)位與驗(yàn)收碼相應(yīng)位相同時(shí),系統(tǒng)才接收報(bào)文;如滿足屏蔽條件則從寄存器讀取數(shù)據(jù)并存入緩沖區(qū),并通過CAN Receive函數(shù)讀取相應(yīng)數(shù)據(jù),再根據(jù)SAE J1939協(xié)議判斷計(jì)算車輛工況及故障代碼等信息,處理后通過USB或串行口發(fā)送到車載多媒體設(shè)備和虛擬儀表進(jìn)行顯示。例如:接收的數(shù)據(jù)為0C FEF2 00 xx xx xx 0D 15 xx xx xx (xx為任意數(shù)據(jù)),若驗(yàn)收碼為Ox00000000,屏蔽碼為OxlFFFFFFF,則接收該報(bào)文。根據(jù)SAE J1939-71協(xié)議,此報(bào)文為PGN65266,來自發(fā)動(dòng)機(jī)ECU;可以得知第4、5字節(jié)為平均油耗,并遵循低位在前高位在后的傳輸方式,計(jì)算出車輛平均油耗=原始數(shù)×分辨率+偏移量=5389×1/5 12+O=10.5km/L。同理可計(jì)算其他車輛工況數(shù)據(jù)。圖3為CAN總線數(shù)據(jù)接收程序流程圖。本文引用地址:http://m.butianyuan.cn/article/195288.htm
3 結(jié)語
本文介紹了基于CAN總線和SAE J1939協(xié)議的車輛信息采集與診斷模塊的設(shè)計(jì)開發(fā)過程,利用STM32F103C8T6微控制器和CAN隔離收發(fā)器CTM825lT等器件實(shí)現(xiàn)了車輛信息的實(shí)時(shí)采集,最大限度地利用了器件本身的接口功能并降低了外圍電路的成本。本模塊工作穩(wěn)定、性能可靠,軟件各部分功能運(yùn)行完好,并可與影音娛樂產(chǎn)品和虛擬儀表產(chǎn)品相互結(jié)合,有一定的實(shí)用價(jià)值。隨著汽車電子化程度的不斷提高,CAN總線和SALE J1939協(xié)議必將得到更為廣泛的應(yīng)用。
評論