基于MC9S12HZ256的總線式汽車(chē)數(shù)字儀表設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:首先研究CAN總線和SAE J1939協(xié)議,提出一種基于MC9S12HZ256微控制器的總線式汽車(chē)數(shù)字儀表解決方案。詳細(xì)介紹SAE J1939協(xié)議的報(bào)文幀格式及應(yīng)用層協(xié)議中發(fā)動(dòng)機(jī)相關(guān)參數(shù)的定義,以及步進(jìn)電機(jī)及其驅(qū)動(dòng)和車(chē)速信號(hào)的處理方法。該數(shù)字儀表系統(tǒng)硬件平臺(tái)由微處理器和信號(hào)采集和信息處理及顯示等模塊組成。軟件設(shè)計(jì)部分編程實(shí)現(xiàn)了對(duì)CAN總線和各傳感器數(shù)據(jù)的讀取、處理。該系統(tǒng)能夠?qū)崟r(shí)反映車(chē)輛工況。
關(guān)鍵詞:汽車(chē)數(shù)字儀表;MC9Si2HZ256;步進(jìn)電機(jī);CAN總線;SAE J1939
汽車(chē)儀表經(jīng)歷機(jī)械式、電氣式、模擬電路電子式和全數(shù)字式的發(fā)展過(guò)程,日前正處在從模擬電路電子式轉(zhuǎn)向全數(shù)字式的時(shí)期。帶CAN總線接口的汽車(chē)儀表采集并處理傳感器的車(chē)速、油量、油壓等信號(hào),并根據(jù)SAE J1939協(xié)議讀取發(fā)動(dòng)機(jī)轉(zhuǎn)速、水溫等信息。陔型汽車(chē)儀表具有指示精度高、反應(yīng)靈敏、結(jié)構(gòu)簡(jiǎn)單、可靠性高等優(yōu)點(diǎn),代表汽車(chē)儀表的發(fā)展方向。
1 CAN總線與SAE J1939協(xié)議
1.1 CAN總線與SAE J1939協(xié)議簡(jiǎn)介
控制器局域網(wǎng)CAN(Controller Area Network)是用于眾多控制單元、測(cè)試儀器之間實(shí)時(shí)數(shù)據(jù)交換而開(kāi)發(fā)的一種串行通信協(xié)議,CAN2.0包括2.OA和2.0B兩部分。CAN拓?fù)浣Y(jié)構(gòu)為總線式,所以也稱CAN總線。SAE J1939協(xié)議是以CAN2.0B作為網(wǎng)絡(luò)核心協(xié)議,用于客車(chē)、貨車(chē)、農(nóng)業(yè)及建筑車(chē)輛的網(wǎng)絡(luò)串行通信和控制協(xié)議。該協(xié)議通過(guò)對(duì)CAN擴(kuò)展幀的29位標(biāo)識(shí)符編碼,用CAN數(shù)據(jù)幀封裝其數(shù)據(jù)信息,從而形成獨(dú)特的編碼系統(tǒng)。作為車(chē)輛通訊標(biāo)準(zhǔn),該協(xié)議明確規(guī)定汽車(chē)內(nèi)部ECU的地址配置、命名、通訊方式以及報(bào)文發(fā)送優(yōu)先級(jí)等,詳細(xì)說(shuō)明汽車(chē)內(nèi)部具體ECU通訊內(nèi)容。SAE J1939協(xié)議標(biāo)準(zhǔn)更大限度地發(fā)揮CAN優(yōu)異的性能,減少線束數(shù)量,實(shí)現(xiàn)車(chē)輛電子設(shè)備間高速數(shù)據(jù)傳輸。
1.2 SAE J1939協(xié)議下CAN通訊報(bào)文幀格式
CAN支持4種類型的報(bào)文幀傳送信息:數(shù)據(jù)幀(Data Frame)、遠(yuǎn)程幀(Remote Frame)、出錯(cuò)幀(Error Frame)和超載幀(Overload Fram-e)。CAN有2類消息幀:標(biāo)準(zhǔn)幀和擴(kuò)展幀,其本質(zhì)的差別在于標(biāo)識(shí)符(ID)的長(zhǎng)度,標(biāo)準(zhǔn)幀的ID有11位,擴(kuò)展幀則有18位。表1為CAN擴(kuò)展格式數(shù)據(jù)幀結(jié)構(gòu)。
CAN數(shù)據(jù)幀分為以下位場(chǎng):起始場(chǎng)(SOF)、仲裁場(chǎng)、控制場(chǎng)、數(shù)據(jù)場(chǎng)、循環(huán)冗余校驗(yàn)場(chǎng)(CRC)、應(yīng)答場(chǎng)(ACK)和幀結(jié)束(EOF)??刂茍?chǎng)由6位組成,包括數(shù)據(jù)長(zhǎng)度碼(DLC)和2個(gè)保留位r1、r0,在數(shù)據(jù)幀里這2位必須為顯性位。DLC為4位,指出數(shù)據(jù)場(chǎng)里的字節(jié)數(shù)目,編碼為0~8。循環(huán)冗余校驗(yàn)CRC場(chǎng)由15位CRC序列及CRC邊界符組成。CRC范圍包括幀起始、仲裁場(chǎng)、控制場(chǎng)和數(shù)據(jù)場(chǎng)。應(yīng)答場(chǎng)(ACK)長(zhǎng)度為2位,包含應(yīng)答間隙和應(yīng)答界定符。在應(yīng)答場(chǎng)中,發(fā)送器發(fā)送這2位為隱性位。當(dāng)接收器正確接收到有效報(bào)文時(shí),會(huì)在應(yīng)答間隙期間向發(fā)送器發(fā)送一顯性位以示應(yīng)答。每一數(shù)據(jù)幀均由7位隱性電平組成幀結(jié)束。
J1939協(xié)議支持CAN 2.0協(xié)議標(biāo)準(zhǔn),使用擴(kuò)展幀格式以報(bào)文為單位傳送信息。協(xié)議數(shù)據(jù)單元(PDU)是J1939協(xié)議定義的一個(gè)框架,用以組織CAN數(shù)據(jù)幀中與J1939協(xié)議相關(guān)的關(guān)鍵信息。PDU由優(yōu)先權(quán)域(P)、保留域(R)、數(shù)據(jù)頁(yè)域(DP)、PDU格式域(PF)、組成標(biāo)識(shí)符的PDU特定域(PS)和源地址域(SA),以及數(shù)據(jù)域(Data Field)共7個(gè)位域組成。這些位域分別對(duì)應(yīng)CAN擴(kuò)展幀的29位標(biāo)識(shí)符和數(shù)據(jù)域。其中PS是一個(gè)8位段,其定義取決于PF值。若PF值小于240,PS是目標(biāo)地址(DA);若PF值在240~255之間,則PS為組擴(kuò)展(GE)。CAN擴(kuò)展幀格式和SAE J1939信息幀格式標(biāo)識(shí)符比較如表2所示。PDU的定義并未將CAN幀中的SOF(幀起始)、SRR(替代遠(yuǎn)程請(qǐng)求)、IDE(識(shí)別符擴(kuò)展)、RTR(遠(yuǎn)程請(qǐng)求),部分控制域、CRC(校驗(yàn)域)、ACK(應(yīng)答域)及EOF(幀結(jié)束)等控制域歸入,因?yàn)檫@些域已由CAN2.0規(guī)范明確定義,并且當(dāng)OSI模型高于數(shù)據(jù)鏈路層時(shí)它們是不可見(jiàn)的。
1.3 SAE J1939協(xié)議應(yīng)用層
應(yīng)用層定義J1939協(xié)議的數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)類型、分辨率、范同及參考標(biāo)簽等參數(shù),并為每個(gè)參數(shù)分配1個(gè)編號(hào)(SPN)。由于J1939協(xié)議是以協(xié)議數(shù)據(jù)單元(PDU)的形式傳輸數(shù)據(jù),而1個(gè)PDU可傳輸8個(gè)字節(jié)數(shù)據(jù)。所以,需要對(duì)參數(shù)進(jìn)行組合傳輸。J1939應(yīng)用層協(xié)議中定義參數(shù)組,并為每個(gè)參數(shù)組分配一個(gè)編號(hào)(PGN)作為該參數(shù)組的唯一標(biāo)簽。參數(shù)組內(nèi)容包括該組參數(shù)的更新率、有效數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)頁(yè)、PDU格式、PDU待定、默認(rèn)優(yōu)先級(jí)以及數(shù)據(jù)域的具體內(nèi)容。以電子發(fā)動(dòng)機(jī)控制器l(EECl)為例說(shuō)明SAE J1939協(xié)議標(biāo)準(zhǔn)下的CAN數(shù)據(jù)幀。J1939對(duì)電子發(fā)動(dòng)機(jī)控制器1(EECl)定義如下:
PGN 61444 電子發(fā)動(dòng)機(jī)控制器1
發(fā)動(dòng)機(jī)相關(guān)參數(shù):
傳輸循環(huán)速度:依發(fā)動(dòng)機(jī)轉(zhuǎn)速?zèng)Q定;數(shù)據(jù)長(zhǎng)度:8個(gè)字節(jié);數(shù)據(jù)頁(yè):0;PDU格式(PF):240;PDU待定(PS):3;默認(rèn)優(yōu)先級(jí):3;參數(shù)組編號(hào)(PGN):61444(0xF004)
起始位置 長(zhǎng)度 參數(shù)名 SPN
……
4-5 2字節(jié) 發(fā)動(dòng)機(jī)轉(zhuǎn)速 190
……
根據(jù)SAE J1939協(xié)議的定義,參數(shù)EECl的PDU編碼應(yīng)為“OC FO 04 00 XX XX XX XX XX XX XX XX(XX表示任意數(shù)據(jù))”,其中前4個(gè)字節(jié)為29位標(biāo)識(shí)符,后8個(gè)字節(jié)為數(shù)據(jù)域,其中數(shù)據(jù)域中第4、5字節(jié)表示發(fā)動(dòng)機(jī)轉(zhuǎn)速。若收到來(lái)自發(fā)動(dòng)機(jī)控制單元的數(shù)據(jù)為OC F0 04 00 XX XX XX 5D CO XX XX XX,根據(jù)這2個(gè)字節(jié)的數(shù)值及SPNl90中的定義可算得發(fā)動(dòng)機(jī)轉(zhuǎn)速:
發(fā)動(dòng)機(jī)轉(zhuǎn)速=原始數(shù)×分辨率+偏移量=24 000(0x5DC0)×0.125+0=3 000 r/m。
同樣,根據(jù)J1939的定義還可以計(jì)算出汽車(chē)儀表所需的其他數(shù)據(jù)。然后交由儀表ECU處理并驅(qū)動(dòng)顯示部件準(zhǔn)確顯示當(dāng)前的車(chē)輛狀態(tài)。
2 數(shù)字儀表系統(tǒng)設(shè)計(jì)
該汽車(chē)數(shù)字儀表系統(tǒng)由信號(hào)采集和處理顯示等模塊組成,圖l為應(yīng)用MC9S12HZ256微控制器的總線式汽車(chē)數(shù)字儀表組成框圖。
信號(hào)采集包含CAN總線數(shù)據(jù)采集和傳感器數(shù)據(jù)采集。通過(guò)模擬量信號(hào)分壓,脈沖信號(hào)濾波整形,開(kāi)關(guān)信號(hào)光電隔離,微處理器采集傳感器信號(hào),同時(shí)通過(guò)收發(fā)器讀取CAN總線信號(hào),然后進(jìn)行信號(hào)處理,再通過(guò)控制器驅(qū)動(dòng)步進(jìn)電機(jī),LCD液晶屏及其他器件。在實(shí)際車(chē)載環(huán)境中,該系統(tǒng)設(shè)計(jì)遵循SAE J1939協(xié)議在CAN總線上獲取發(fā)動(dòng)機(jī)轉(zhuǎn)速、水溫和故障代碼信息,車(chē)速、油量、機(jī)油壓力、制動(dòng)氣壓等信息則以模擬量和脈沖量形式從相應(yīng)傳感器讀取。
2.1 MC9S12HZ256微控制器
MC9S12HZ256是飛思卡爾公司生產(chǎn)的MC9S12系列面向汽車(chē)儀表應(yīng)用的增強(qiáng)型16位單片機(jī)微控制器(MCU)。其集成度高,片內(nèi)資源豐富,功能強(qiáng)大,接口模塊包括SPI、SCI、FC、A/D、PWM等。采用增強(qiáng)型16位S12CPU,加入鎖相環(huán)電路,可產(chǎn)生高于外部晶振頻率的時(shí)鐘信號(hào),片內(nèi)總線時(shí)鐘頻率最高達(dá)25 MHz;具有12.KB RAM、2 KB的EEPROM;2個(gè)異步串行通信接口(SCI),1個(gè)同步串行設(shè)備接口(SPI),1個(gè)FC總線接口(12C);1個(gè)8通道16位定時(shí)器(TIM),1個(gè)16通道10位模數(shù)轉(zhuǎn)換器(ATD),1個(gè)6通道脈沖寬度調(diào)制器(PWM),2個(gè)CAN控制器模塊(兼容CAN 2.0 A/B)。此外,這款MCU還集成1個(gè)32x4的液晶驅(qū)動(dòng)模塊(LCD)。再有該單片機(jī)的背景調(diào)試模式(BDM)和CodeWarrior開(kāi)發(fā)環(huán)境,使應(yīng)用該款單片機(jī)的總線式汽車(chē)數(shù)字儀表的外圍硬件電路相對(duì)簡(jiǎn)化,開(kāi)發(fā)過(guò)程簡(jiǎn)單、方便。
2.2 步進(jìn)電機(jī)及其驅(qū)動(dòng)
步進(jìn)電機(jī)是將電脈沖信號(hào)轉(zhuǎn)換成相應(yīng)的角位移或線位移的轉(zhuǎn)換器,且其轉(zhuǎn)速或線速度與脈沖頻率成正比。步進(jìn)電機(jī)可以用脈沖信號(hào)直接進(jìn)行開(kāi)環(huán)定位控制,無(wú)需位置或速度傳感器。VID29系列步進(jìn)電機(jī)內(nèi)置減速比180/1的齒輪系,可工作于5~10 V的脈沖下。在微步模式下,1個(gè)脈沖可使轉(zhuǎn)子轉(zhuǎn)動(dòng)15°,相應(yīng)輸出軸轉(zhuǎn)動(dòng)(1/12)°,最大角速度600°/s。每片VId66-06儀表步進(jìn)電機(jī)驅(qū)動(dòng)芯片可同時(shí)驅(qū)動(dòng)4路步進(jìn)電機(jī)以微步模式工作,工作原理如圖2所示。每個(gè)步進(jìn)電機(jī)只需2路控制信號(hào)。在輸入信號(hào)F(SCX)的上升沿驅(qū)動(dòng)電機(jī)輸出軸轉(zhuǎn)動(dòng)1個(gè)微步,即(1/12)°,輸入信號(hào)“CW/CCW”(順時(shí)針/逆時(shí)針)控制步進(jìn)電機(jī)輸出軸轉(zhuǎn)向。
2.3 CAN節(jié)點(diǎn)設(shè)計(jì)
主控器件MC9S12H256集成有支持CAN2.0A/B的CAN控制器,并集成CAN協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對(duì)數(shù)據(jù)通信的成幀處理,包括位填充、數(shù)據(jù)塊編碼、CRC校驗(yàn)和優(yōu)先級(jí)判別等。選用CAN收發(fā)器PCA82C250,該收發(fā)器適用于汽車(chē)中高速(高達(dá)l Mb/s)CAN總線數(shù)據(jù)傳輸。設(shè)置終端電阻(一般為120 Ω)與CAN控制器與物理總線間的接口,以提升總線的差動(dòng)發(fā)送和接收功能。圖3為CAN接口電路。
2.4 脈沖信號(hào)處理
霍爾式車(chē)速傳感器的輸出信號(hào)為矩形波。磁電式車(chē)速傳感器的輸出信號(hào)為正弦波,信號(hào)頻率與車(chē)速均成正比。速度信號(hào)經(jīng)處理電路轉(zhuǎn)換為單片機(jī)能夠處理的矩形波信號(hào),測(cè)量車(chē)速即測(cè)量矩形波頻率。
周期法是利用標(biāo)準(zhǔn)時(shí)鐘信號(hào)序列填充被測(cè)信號(hào)的一個(gè)或多個(gè)周期。通過(guò)計(jì)數(shù)標(biāo)準(zhǔn)時(shí)鐘脈沖個(gè)數(shù)來(lái)計(jì)算被測(cè)信號(hào)周期的測(cè)量方法。被測(cè)信號(hào)周期為T(mén),參考時(shí)基信號(hào)周期為τ,標(biāo)準(zhǔn)脈沖個(gè)數(shù)為n,被填充的被測(cè)信號(hào)周期個(gè)數(shù)為N,則有:
測(cè)量誤差主要來(lái)自2部分:一部分是標(biāo)準(zhǔn)時(shí)基的相對(duì)誤差dτ/τ,由于標(biāo)準(zhǔn)時(shí)基是由單片機(jī)內(nèi)部的石英晶振產(chǎn)生的,這部分誤差通常在10-6以下,可忽略;另一部分是計(jì)數(shù)誤差dn/n,該誤差產(chǎn)生的原理如圖4所示。
時(shí)基信號(hào)序列的最后一個(gè)正跳變未處在被填充的被測(cè)信號(hào)范圍內(nèi),可產(chǎn)生的最大計(jì)數(shù)誤差為-1。這部分誤差在低速時(shí)很小,在高速時(shí)稍大。以車(chē)輛特征系數(shù)(車(chē)輛行駛每公里里程時(shí)速度傳感器的轉(zhuǎn)數(shù))為l 320,8脈沖車(chē)速傳感器為例,標(biāo)準(zhǔn)時(shí)基信號(hào)周期為50 μs,車(chē)速為100 km/h時(shí)。最大相對(duì)誤差為1.47%,車(chē)速為180 km/h時(shí),最大相對(duì)誤差為2.64%。完全符合汽車(chē)摩托車(chē)儀表標(biāo)準(zhǔn)QC/T727-2004中對(duì)車(chē)速表誤差的基本要求。適當(dāng)降低時(shí)基信號(hào)周期τ和高速時(shí)增加N值可減小誤差。周期法計(jì)算車(chē)速V:
式中,Z為輪速傳感器旋轉(zhuǎn)一周輸出脈沖個(gè)數(shù);Ω為車(chē)輛特征系數(shù),即汽車(chē)每行駛1 km輪速傳感器的轉(zhuǎn)數(shù)。
3 軟件設(shè)計(jì)
主程序流程和讀取CAN信息流程如圖5所示。該汽車(chē)數(shù)字儀表主要完成數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)值顯示以及與上位機(jī)通信等功能。本儀表的功能是不斷接收信息并進(jìn)行信息傳送、處理、輸m顯示和報(bào)警的循環(huán)過(guò)程。開(kāi)機(jī)后系統(tǒng)首先初始化主控制器、CAN節(jié)點(diǎn)、LCD液晶屏、步進(jìn)電機(jī),讀取EEPROM中數(shù)值并使能CAN中斷,設(shè)置CAN屏蔽碼和驗(yàn)收碼。接著進(jìn)入主程序,各步進(jìn)電機(jī)快速回位,指針歸零。然后采集外部信號(hào),計(jì)算車(chē)速、油壓等信息并讀取CAN總線上的消息隊(duì)列。根據(jù)J1939協(xié)議計(jì)算判斷發(fā)動(dòng)機(jī)轉(zhuǎn)速、水溫和故障代碼信息,處理這些信息并控制步進(jìn)電機(jī)和液晶屏顯示。
4 結(jié)論
研究CAN總線通訊協(xié)議及SAE J1939協(xié)議,實(shí)現(xiàn)了基于CAN總線的汽車(chē)數(shù)字儀表系統(tǒng)設(shè)計(jì)。軟件設(shè)計(jì)實(shí)現(xiàn)了汽車(chē)儀表的各項(xiàng)功能。該軟件設(shè)計(jì)充分利用MC9S12HZ256微控制器中集成的功能模塊,減少外圍電路器件用量。該儀表響應(yīng)快速、定位精確、工作可靠。隨著總線技術(shù)的日益發(fā)展以及相關(guān)法規(guī)對(duì)汽車(chē)電子控制要求的提高,基于CAN總線的汽車(chē)數(shù)字儀表將得到更廣泛的應(yīng)用。