李愛佳,崔建峰,李愛慧,劉慧豐
(1.中北大學(xué)電子測(cè)試技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,太原 030051;2.哈爾濱電機(jī)廠有限責(zé)任公司,哈爾濱 150000;3.北京特種車輛試驗(yàn)場(chǎng),北京 100072)
隨著信息技術(shù)與計(jì)算機(jī)通信技術(shù)的飛速發(fā)展,CAN總線(Controller Area Network)已成為目前國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。CAN總線最開始是由20世紀(jì)80年代德國(guó)Bosch公司為了解決現(xiàn)代汽車中龐大的電子控制裝置之間的通信而最先提出的。在汽車領(lǐng)域,CAN總線被設(shè)計(jì)為汽車環(huán)境中的微控制器通信,與車載其他電子控制裝置ECU之間交換信息[1]。CAN總線是一個(gè)單一的網(wǎng)絡(luò)總線,其外圍器件都可被掛在總線上。目前,CAN總線已經(jīng)在汽車工業(yè)、航空工業(yè)、工業(yè)控制等領(lǐng)域中有著廣泛的應(yīng)用[2]。
車載記錄儀采用飛思卡爾單片機(jī)中的MC9S12XEP100作為主控制器,該單片機(jī)內(nèi)置CAN通信接口,只需搭配外圍電路和CAN驅(qū)動(dòng)器即可。車輛采集系統(tǒng)諸如:溫度檢測(cè)、里程表更新、油量檢測(cè)、車速等所有采集系統(tǒng)與記錄儀的通信都采用CAN總線模塊[3]。通過編寫采集系統(tǒng)與記錄儀固件代碼,對(duì)不同采集系統(tǒng)采集數(shù)據(jù)定義不同的ID,車載記錄儀通過CAN總線標(biāo)識(shí)符接收寄存器接收不同的擴(kuò)展標(biāo)識(shí)符實(shí)現(xiàn)多通道數(shù)據(jù)的實(shí)時(shí)記錄。
記錄儀由主控(MC9S12XEP100單片機(jī))、數(shù)據(jù)接收模塊(CAN總線接口)和數(shù)據(jù)存儲(chǔ)模塊(Flash芯片)構(gòu)成。主控MCU的控制器局域網(wǎng)是一種通信控制器,它使用先進(jìn)的緩沖器安排,簡(jiǎn)化了應(yīng)用軟件。采集系統(tǒng)將不同ID和不同優(yōu)先級(jí)的多通道數(shù)據(jù)經(jīng)過CAN總線與記錄儀進(jìn)行通信[4],完成對(duì)數(shù)據(jù)記錄。系統(tǒng)的結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
CAN總線是一種多主方式的串行通信總線,設(shè)計(jì)規(guī)范要求有較高位速率、高抗電磁干擾性[5]。其通信協(xié)議實(shí)質(zhì)是完成設(shè)備之間的信息傳遞方式,CAN總線不僅有很遠(yuǎn)的數(shù)據(jù)傳輸距離(最長(zhǎng)10 km),還有高速的數(shù)據(jù)傳輸速率(高達(dá)1 Mb/s)最重要的是CAN總線能根據(jù)報(bào)文的ID決定接收或者屏蔽該報(bào)文,CAN總線的模塊框圖如圖2所示。
圖2 CAN模塊框圖
方案中CAN總線使用雙絞線作為通信的介質(zhì)媒介,且CAN信號(hào)使用差分電壓進(jìn)行傳送,CAN總線的兩條信號(hào)線(CAN_H和CAN_L)在靜態(tài)時(shí)均為2.5 V左右,這種狀態(tài)也稱為“隱性”;當(dāng)兩條信號(hào)線之間有電壓差(一般情況下:CAN_H=3.5 V,CAN_L=1.5 V)這種狀態(tài)成為“顯性”[6]。
CAN總線接口模塊硬件設(shè)計(jì)如下頁(yè)圖3所示,方案中設(shè)計(jì)了2種CAN總線接口工作模式,具體分析如下:
1)非隔離驅(qū)動(dòng)模式:選用的CAN驅(qū)動(dòng)芯片為NXP公司的PCA82C251,該芯片收發(fā)器是協(xié)議控制器和物理傳輸線路之間的接口,此器件對(duì)總線提供差動(dòng)發(fā)送能力,對(duì)CAN控制器提供差動(dòng)接收能力[7],可以廣泛應(yīng)用在汽車、一般工業(yè)控制、遠(yuǎn)程通訊等應(yīng)用領(lǐng)域中。其承受的共模電壓范圍為-7 V~12 V,工作最高速率為1Mb/s,RJ9電阻為斜率電阻,它用來(lái)控制通信速率斜率,方案中CAN總線的工作速率為1Mb/s,此時(shí)RJ9應(yīng)該直接接地。D3和D4為二極管,主要作用是對(duì)CAN接口差分線的信號(hào)電平進(jìn)行鉗位,防止外部干擾信號(hào)對(duì)其通訊過程產(chǎn)生影響。RJ8為CAN總線終端匹配電阻。
2)隔離驅(qū)動(dòng)模式:選用廣州志遠(yuǎn)電子有限公司的CTM1050T作為CAN驅(qū)動(dòng)芯片,該芯片的隔離電壓為DC 2 500 V,工作速率最高為1 Mb/s,可以達(dá)到方案設(shè)計(jì)中速率的要求,由于CTM1050T在內(nèi)部已經(jīng)集成了CAN總線ESD保護(hù)器件,因此,在硬件設(shè)計(jì)中無(wú)需加載二極管,只需配裝一個(gè)去耦電容C17,當(dāng)前模式仍然需要RJ8作為CAN總線終端匹配電阻。
在MC9S12XEP100主控芯片中,提供了兩路CAN協(xié)議接口,當(dāng)主控單片機(jī)相應(yīng)引腳因外部原因發(fā)生故障時(shí),可通過相應(yīng)的跳線電阻切換工作端口。這種冗余設(shè)計(jì)[7]能增加系統(tǒng)的平均鼓掌間隔時(shí)間,提高記錄儀的可靠性。
2.3.1 CAN總線接收數(shù)據(jù)原理分析
記錄儀總CAN總線接口主要完成數(shù)據(jù)的接收,并對(duì)相應(yīng)數(shù)據(jù)進(jìn)行封包和解析。CAN總線模塊的接收緩沖器結(jié)構(gòu)如圖4所示。
CAN總線系統(tǒng)中,每個(gè)CAN節(jié)點(diǎn)通過收發(fā)器物理連接到CAN總線線路。收發(fā)器驅(qū)動(dòng)供工作所需的最大電流,并具有對(duì)故障節(jié)點(diǎn)的電流保護(hù)。圖5為CAN總線系統(tǒng)。
圖3 CAN模塊硬件電路圖
圖4 接收緩沖器結(jié)構(gòu)
圖5 CAN總線系統(tǒng)
記錄儀的CAN總線接口將實(shí)時(shí)接收多通道數(shù)據(jù),利用CAN總線接收標(biāo)識(shí)符定義不同的ID對(duì)多通道數(shù)據(jù)進(jìn)行封包和解析[8]。這些位中的任何一個(gè)都可以在標(biāo)識(shí)符掩碼寄存器中表示為不比較,這種可編程通用標(biāo)識(shí)符接收濾波器可以有效降低CPU的中斷負(fù)載,該方案中通過編程,實(shí)現(xiàn)的具體工作模式為:8個(gè)標(biāo)識(shí)符接收濾波器,每個(gè)都應(yīng)用與標(biāo)識(shí)符的前8位,它符合CAN2.0A/B的標(biāo)準(zhǔn)標(biāo)識(shí)符,CAN2.0A/B標(biāo)準(zhǔn)幀協(xié)議如表1所示。一個(gè)8位濾波器頁(yè)產(chǎn)生濾波器匹配過程如下頁(yè)圖6所示。
2.3.2 CAN接口程序設(shè)計(jì)
CAN接口模塊工作前首先對(duì)CAN模塊進(jìn)行初始化設(shè)計(jì),寄存器CAN0CTL0_INITRQ=1,表示CAN模塊進(jìn)入初始化狀態(tài);寄存器CAN0BTR0_SJW=0,設(shè)置同步跳轉(zhuǎn)寬度為1個(gè)Tq時(shí)鐘周期;寄存器CAN0BTR0_BRP=2,設(shè)置波特率預(yù)分頻值為3;寄存器CAN0BTR1=0x1c,設(shè)置時(shí)間段1和時(shí)間段2的值;CAN傳輸位時(shí)間=預(yù)分頻值*(1+時(shí)間段1+時(shí)間段2)/fCANCLK,由上述對(duì)寄存器配置,可以得到CAN總線的傳輸速率為1 Mb/s。
表1 CAN2.0A/B標(biāo)準(zhǔn)幀協(xié)議
為了能接收多通道數(shù)據(jù),需要對(duì)CAN總線濾波器進(jìn)行設(shè)置,要求對(duì)不同數(shù)據(jù)ID進(jìn)行屏蔽或者接收設(shè)置。首先對(duì)標(biāo)識(shí)符接收模式設(shè)置,方案中選用8個(gè)8位接收濾波器,寄存器配置為CAN0IDAC=0x20;然后對(duì)8個(gè)濾波器的詳細(xì)配置為:
1)8個(gè)標(biāo)識(shí)符驗(yàn)收控制寄存器:
CAN0IDAR0=0x2C;
CAN0IDAR1=0x8C;
CAN0IDAR2=0x6C;
圖6 濾波器匹配過程
CAN0IDAR3=0x64;
CAN0IDAR4=0x24;
CAN0IDAR5=0x50;
CAN0IDAR6=0x18;
CAN0IDAR7=0x00;
2)8個(gè)標(biāo)識(shí)符掩碼寄存器:
CAN0IDMR0=0x05;
CAN0IDMR1=0x02;
CAN0IDMR2=0x03;
CAN0IDMR3=0x01;
CAN0IDMR4=0x05;
CAN0IDMR5=0x02;
CAN0IDMR6=0x01;
CAN0IDMR7=0x00;
完成對(duì)CAN總線濾波器配置后,CAN總線正常工作還需要使能其CAN功能,并確定CAN接口的時(shí)鐘源,這里設(shè)置CAN總線時(shí)間為總線時(shí)鐘源48 MHz,寄存器配置為CAN0CTL1=0xC0;CAN總線接口接收多通道數(shù)據(jù)采用中斷方式[9],所以在初始化設(shè)計(jì)中應(yīng)該配置寄存器為中斷使能模式,具體配置為CAN0RIER_RXFIE=1。以上操作完成對(duì)CAN接口模塊的初始化設(shè)計(jì)。
CAN接口模塊接收多通道數(shù)據(jù)時(shí),先寫入ID寄存器:
CAN0TXIDR0=(unsigned char)(msg.id>>3);
CAN0TXIDR1=(unsigned char)(msg.id<<5);
CAN接口模塊想要準(zhǔn)確接收每個(gè)通道數(shù)據(jù),需讀取ID寄存器:
msg->id= (unsigned int)(CAN0RXIDR0<<3)|(unsigned char)(CAN0RXIDR1>>5);只有寫入 ID和讀取ID一致時(shí),看它是否通過濾波器,同時(shí)被寫入有效RXBG。CAN模塊的標(biāo)識(shí)符接收寄存器定義了擴(kuò)展標(biāo)識(shí)符的可接受模式[8]。標(biāo)識(shí)符的匹配標(biāo)志能清晰識(shí)別并引起接收的濾波寄存器完成對(duì)數(shù)據(jù)報(bào)文的接收工作。CAN總線接口模塊接收多通道數(shù)據(jù)流程圖如圖7所示。
圖7 CAN接口模塊接收數(shù)據(jù)流程圖
記錄儀其他模塊諸如:電源模塊、時(shí)鐘模塊、主控MCU接口配置等。電源模塊根據(jù)元器件的要求供電電壓為5 V;時(shí)鐘模塊主要為主控MCU提供48 MHz時(shí)鐘;主控MCU接口配置主要完成引腳功能設(shè)置,并完成對(duì)所有模塊的固件初始化。
為了驗(yàn)證記錄儀的CAN總線接口設(shè)計(jì)的可靠性,將車載記錄儀中記錄的數(shù)據(jù)與采集系統(tǒng)中原始數(shù)據(jù)文件分析比較如下頁(yè)圖8得出:記錄儀存儲(chǔ)的數(shù)據(jù)完全正確,且無(wú)數(shù)據(jù)丟失現(xiàn)象。CAN總線接口設(shè)計(jì)具有可行性。
上述分析表明CAN總線接口接收數(shù)據(jù)的準(zhǔn)確性,然而記錄儀的CAN總線接口設(shè)計(jì)需正確接收多通道數(shù)據(jù),完成對(duì)多通道數(shù)據(jù)的接收。經(jīng)過驗(yàn)證,記錄儀的CAN總線接口設(shè)計(jì)能實(shí)現(xiàn)對(duì)多通道數(shù)據(jù)的記錄,經(jīng)過上述測(cè)試,從而驗(yàn)證了記錄儀的CAN總線接口設(shè)計(jì)的有效性。圖9為CAN總線接口接收多通道數(shù)據(jù)在上位機(jī)驗(yàn)證過程。
圖8 數(shù)據(jù)比較分析
圖9 多通道數(shù)據(jù)
本文提出一種車載數(shù)據(jù)記錄儀的多通道CAN總線接口設(shè)計(jì),記錄儀通過CAN總線接口接收多個(gè)采集系統(tǒng)的消息數(shù)據(jù),避免了使用傳統(tǒng)RS232總線進(jìn)行通信存在的傳輸速率不高、穩(wěn)定性不強(qiáng)等問題。經(jīng)過多次測(cè)試結(jié)果表明,該設(shè)計(jì)具有可行性、有效性。