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