李 建,張喜文,黃 勇
(西安機(jī)電信息技術(shù)研究所 2部,陜西 西安 710085)
?
基于C8051F560的CAN總線通信節(jié)點設(shè)計
李 建,張喜文,黃 勇
(西安機(jī)電信息技術(shù)研究所 2部,陜西 西安 710085)
針對汽車、航空等領(lǐng)域中系統(tǒng)內(nèi)各設(shè)備之間的通信對高傳輸速率、高可靠性的要求,以C8051F560單片機(jī)為核心設(shè)計CAN總線通信節(jié)點來組成CAN總線通信系統(tǒng)以實現(xiàn)系統(tǒng)設(shè)備之間的通信,利用C8051F560內(nèi)集成的CAN控制器進(jìn)行CAN總線硬件電路設(shè)計和軟件程序設(shè)計,該系統(tǒng)可在最高1 Mbit·s-1的速率下實現(xiàn)多個設(shè)備之間的CAN總線通信,且誤碼率低,方便增加和減少設(shè)備,適合用于系統(tǒng)內(nèi)各設(shè)備之間的高速率、高可靠性通信。
CAN總線;C8051F560; CAN控制器;報文對象
現(xiàn)場總線[1]技術(shù)是計算機(jī)技術(shù)、通信技術(shù)和控制技術(shù)的綜合與集成,而CAN總線是國際上應(yīng)用廣泛的現(xiàn)場總線之一,由于具有高性能、高可靠性以及獨特的設(shè)計,能有效地支持具有較高安全等級的分布式實時控制系統(tǒng)[2]。
CAN總線節(jié)點使用較多的是獨立CAN 控制器,即把CPU、總線控制器和總線收發(fā)器依次連接好后再接入CAN總線網(wǎng)絡(luò),為了簡化電路、提高總線的利用率、數(shù)據(jù)的實時性及系統(tǒng)的可靠性,使用Silicon Laboratories公司的內(nèi)部集成CAN控制器的單片機(jī)C8051F560進(jìn)行CAN 總線的通訊接口的設(shè)計及應(yīng)用[3]。在對CAN模塊結(jié)構(gòu)和原理分析的基礎(chǔ)上,設(shè)計了基于C8051F560內(nèi)部集成CAN控制器的硬件電路, 并設(shè)計了相應(yīng)的總線數(shù)據(jù)發(fā)送、接收和管理程序,該系統(tǒng)可在最高1 Mbit·s-1的速率下實現(xiàn)多個設(shè)備之間的CAN總線通信,誤碼率低,方便增加和減少設(shè)備,適合用于系統(tǒng)內(nèi)各設(shè)備之間的高速率、高可靠性通信[4]。
CAN總線(Controller Area Network)即控制器局域網(wǎng),是德國Bosch公司為解決現(xiàn)代汽車中大量的控制與測試儀器間的數(shù)據(jù)交換而提出的串行數(shù)據(jù)通信協(xié)議,是應(yīng)用最廣泛的現(xiàn)場總線之一。CAN總線是一種多主方式的串行通信總線,基本設(shè)計規(guī)范要求有高的位速率、高抗電磁干擾性,而且能夠檢測出產(chǎn)生的任何錯誤[5]。數(shù)據(jù)傳輸速率最高可達(dá)1 Mbit·s-1,當(dāng)傳輸距離達(dá)到10 km時,CAN仍可提供5 kbit·s-1的數(shù)據(jù)傳輸速率。由于CAN 串行通訊總線具有這些特性,因此在汽車制造業(yè)以及航空工業(yè)中受到廣泛應(yīng)用[6]。
CAN總線屬于現(xiàn)場總線的范疇,是一種有效支持分布式控制或?qū)崟r控制的串行通信網(wǎng)絡(luò),其優(yōu)越性在于:CAN控制器工作于多主方式,網(wǎng)絡(luò)中的各節(jié)點都可根據(jù)總線訪問優(yōu)先權(quán)采用無損結(jié)構(gòu)的逐位仲裁的方式競爭向總線發(fā)送數(shù)據(jù)[7],且CAN協(xié)議廢除了節(jié)點地址編碼,而代之以對通信數(shù)據(jù)進(jìn)行編碼,即CAN總線面向的是數(shù)據(jù)而不是節(jié)點,可使不同節(jié)點同時接收到相同數(shù)據(jù),并且加入或撤消節(jié)點都不會影響網(wǎng)絡(luò)的正常工作,因此提高了CAN總線網(wǎng)絡(luò)各節(jié)點之間的數(shù)據(jù)通信實時性以及系統(tǒng)的可靠性和靈活性[8]。
2.1 基本特性
本文使用Silicon公司的內(nèi)部集成CAN控制器的單片機(jī)C8051F560進(jìn)行CAN總線的通訊接口的設(shè)計及應(yīng)用。Silicon公司的C8051Fxxx系列單片機(jī)采用Silicon公司的專利CIP-51微控制器,采用流水線指令結(jié)構(gòu),70%的指令的執(zhí)行時間為一個或兩個系統(tǒng)時鐘周期,在相同時鐘下,指令運(yùn)行速度比一般的80C51系列單片機(jī)提高了約10倍,處理能力大幅提高,并且各種外設(shè)資源豐富,有利于CAN總線通訊節(jié)點上發(fā)送和接收的數(shù)據(jù)的處理,有利于保證CAN總線上數(shù)據(jù)傳輸?shù)膶崟r性[9]。而在Silicon公司的內(nèi)部集成CAN控制器的單片機(jī)中,使用較多的C8051F040其MCU需要通過CAN0ADR、CAN0DAT 特殊寄存器, 采用間接尋址方式對CAN模塊內(nèi)的寄存器和RAM 進(jìn)行訪問和傳輸數(shù)據(jù),而C8051F560的CPU可直接訪問CAN寄存器,對CAN的應(yīng)用操作相對更方便,且可以使用50 MHz的外部時鐘,比C8051F040具有更高的處理速度,同時C8051F560內(nèi)部資源豐富,具有32 kB Flash存儲器,2 304 Byte的RAM存儲器,17個中斷源,12 位A/D轉(zhuǎn)換器,2個比較器SPI,UART,CAN,LIN,SMBUS等接口,便于節(jié)點對接收到的CAN數(shù)據(jù)進(jìn)行處理和通信[10]。
2.1 內(nèi)置CAN控制器
C8051F560中的CAN控制器是Bosch全功能CAN模塊的完全實現(xiàn),完全符合CAN規(guī)范CAN2.0A和CAN2.0B,CAN控制器的原理框圖如圖1所示[11]。
圖1 CAN控制器原理框圖
CAN控制器核提供移位(CANTX和CANRX)、消息的串/并轉(zhuǎn)換及其它與協(xié)議相關(guān)的任務(wù)。報文RAM可存儲32個可以在CAN網(wǎng)絡(luò)上發(fā)送和接收的報文對象。CAN寄存器和報文處理器為CAN控制器和MCU之間的數(shù)據(jù)傳送和狀態(tài)通知提供接口。CAN寄存器分為CAN控制器協(xié)議寄存器、報文對象接口寄存器、報文處理器寄存器3類[13]。
CAN數(shù)據(jù)傳送流程為MCU通過報文對象接口寄存器訪問CAN報文RAM。當(dāng)向報文接口寄存器IF1或IF2的命令請求寄存器寫一個報文對象時,相關(guān)接口寄存器(IF1或IF2)的內(nèi)容被傳送到CANRAM中的報文對象或報文對象被傳送到接口寄存器。而CAN核通過CAN收發(fā)串行寄存器將CANRAM 中的對象發(fā)送到CAN總線或接收CAN總線的數(shù)據(jù)保存在相應(yīng)的報文RAM中。CAN數(shù)據(jù)傳送流程,如圖2所示[13]。
圖2 CAN數(shù)據(jù)傳送流程
C8051F560單片機(jī)內(nèi)部的CAN模塊是協(xié)議控制器,在使用時需要外加CAN總線收發(fā)器提供物理層驅(qū)動。采用Philips公司的CAN高速收發(fā)器TJA1050,其傳輸速率最高可達(dá)1 Mbit·s-1,TJA1050供電電壓為5 V,C8051F560單片機(jī)的工作電壓為3.3 V,在單片機(jī)與收發(fā)器之間的數(shù)據(jù)傳輸采用光耦隔離,可降低CAN總線上各節(jié)點對系統(tǒng)的干擾,并起到匹配電平的作用。常用的方法是采用兩個獨立的高速光耦對兩路CAN信號CANTX和CANRX進(jìn)行隔離,為進(jìn)一步簡化電路,采用Silicon公司的雙通道數(shù)字隔離器SI8621隔離CAN信號,SI8621利用光電耦合實現(xiàn)隔離,轉(zhuǎn)換速度可達(dá)150 Mbit·s-1,兩通道輸入輸出方向相反,正適合CAN控制器發(fā)送數(shù)據(jù)通道CANTX和接收數(shù)據(jù)通道CANRX的隔離,因此使用SI8621滿足了信號隔離的要求并進(jìn)一步簡化了系統(tǒng)電路。圖3為系統(tǒng)電路原圖。
圖3 CAN總線節(jié)點電路圖
系統(tǒng)軟件采用結(jié)構(gòu)化設(shè)計,實行各個子程序模塊化,使其對于不同的系統(tǒng)功能或不同的應(yīng)用環(huán)境具有良好的可移植性,方便再次開發(fā)。相對于獨立CAN控制器的軟件設(shè)計,C8051F560通過特殊功能寄存器配置內(nèi)部CAN控制器,讀取接收到的數(shù)據(jù)和寫入待發(fā)送的數(shù)據(jù),使得MCU與CAN模塊之間的數(shù)據(jù)傳輸更加方便和快速[14]。
系統(tǒng)設(shè)計CAN總線的傳輸波特率為800 kbit·s-1,接收長度為2 Byte的報文后發(fā)送長度為2個字節(jié)的報文,報文ID為29位擴(kuò)展標(biāo)識符,IF1寄存器用于向報文RAM發(fā)送數(shù)據(jù),IF2寄存器用于從報文RAM讀取數(shù)據(jù)。CAN總線節(jié)點的通信主要包括系統(tǒng)初始化程序、接收程序、發(fā)送程序等[15]。
4.1 系統(tǒng)初始化
CAN控制器的初始化主要包括:設(shè)置CAN模塊的傳輸波特率為800 kbit·s-1,通過IF1設(shè)置發(fā)送數(shù)據(jù)的報文對象的報文號為TRANSMIT_MO1,發(fā)送報文為擴(kuò)展幀,ID為29位擴(kuò)展標(biāo)識符00000002,發(fā)送報文長度為2 Byte,設(shè)置接收報文對象的報文號為RECEIVE_MO1,29位擴(kuò)展標(biāo)識符用于接收過濾,接收報文ID為00000001,接收報文長度為2 Byte,使能接收中斷。CAN初始化流程圖如圖4所示。
(1)初始化。設(shè)置CAN控制寄存器CAN0CN,將Init位置1以允許初始化;將CCE位置1,允許CPU對位時序寄存器進(jìn)行寫操作;將IE位置1,使能模塊中斷;
(2)設(shè)置波特率。對位時間寄存器CAN0BT賦值,將CAN模塊的傳輸波特率設(shè)為800 kbit·s-1。位時間寄存器CAN0BT由4部分組成,分別為:
TSeg1 采樣點前的時間段
TSEG1=Prop_Seg+Phase_Seg1-1
(1)
TSeg2 采樣點后的時間段
TSEG2=Phase_Seg2-1
(2)
圖4 系統(tǒng)初始化流程
SJW 同步跳變寬度
SJW=min(Phase_Seg1,4)-1
(3)
BRPE 波特率預(yù)分頻值
BRPE=BRP-1
(4)
其中,Prop_Seg、Phase_Seg1、Phase_Seg2,分別為位時間的傳播時段、相位緩沖時段一、相位緩沖時段二,與同步時段Sync_Seg一起組成位時間,即
BitTime=Sync_Seg+Prop_Seg+Phase_Seg1+Phase_Seg2
(5)
位時間組成如圖5所示。
圖5 位時間組成
位時間及其4個部分都由時間量子tq的整數(shù)倍表示,BitTime=1/tq,tq=BRP/fsys,fsys為CAN控制器系統(tǒng)時鐘頻率,BRP為波特率預(yù)分頻系數(shù)。同步時段Sync_Seg固定為1個時間量子的長度,即1tq,系統(tǒng)總的傳播延遲時間為400 ns,因此Prop_Seg≥400 ns。波特率為800 kbit·s-1,所以BitTime=1 250 ns,CAN控制器時鐘為24 MHz,時間量子tq=BRP/24 MHz=41.667 ns×BRP,選擇適當(dāng)?shù)腂RP值,使?jié)M足以上關(guān)系的位時間符合設(shè)計要求。
當(dāng)BRP=2時,tq=83.334 ns,BitTime=15tq,Prop_Seg=5tq,Phase_Seg1=4tq,Phase_Seg2=5tq,TSEG2=4,TSEG1=8,SJW=3,BRPE=1。
位時間寄存器
CANOBT=TSEG2×0×1 000+TSEG1×0×0100+SJW×0×004 0+BRPE=0×48C1
時鐘誤差容許度為
當(dāng)BRP=3時,tq=125 ns,bittime=10tq,Prop_Seg=4tq,Phase_seg1=2tq,Phase_Seg2=3tq,TSEG2=2,TSEG1=5,SJW=1,BRPE=2。
CANOBT=TSEG2×0×1 000+TSEG1×0×010 0+
SJW×0×004 0+BRPE=0×2 542
時鐘誤差容許度為
當(dāng)存在多個配置可能時,選擇時鐘誤差容許范圍大的配置,因此選擇位時間寄存器為0x48C1的配置;
(3)設(shè)置命令屏蔽寄存器為寫數(shù)據(jù)。設(shè)置命令屏蔽寄存器為CAN0IF1CM=0xffff,將數(shù)據(jù)從所選的報文緩沖寄存器,傳送到由命令請求寄存器尋址的報文對象;
(4)設(shè)置掩碼寄存器為29位ID過濾。設(shè)置IF1掩碼寄存器CAN0IF1M1=0xffff,CAN0IF1MC=0xffff,29位擴(kuò)展標(biāo)識符用于接收過濾;
(5)設(shè)置報文控制寄存器為報文發(fā)送。設(shè)置IF1報文控制寄存器為CAN0IF1MC=0x0080|MESSAGE_SIZE_T,MESSAGE_SIZE_T為發(fā)送報文長度,這里MESSAGE_SIZE_T=2;
(6)由仲裁寄存器設(shè)置發(fā)送ID。設(shè)置IF1仲裁寄存器CAN0IF1A1=0x0040,CAN0IF1A2=0xf002,29位擴(kuò)展標(biāo)識符00000002用于報文對象;
(7)設(shè)置命令請求寄存器。設(shè)置IF1命令請求寄存器 ,將發(fā)送設(shè)置傳送給待發(fā)送報文對象,數(shù)據(jù)傳送中,根據(jù)報文號 選擇發(fā)送的報文對象;
(8)設(shè)置報文控制寄存器為報文接收。設(shè)置IF1報文控制寄存器CAN0IF1MC=0x1 480|MESSAGE_SIZE_R|;接收中斷允許;接收報文長度為MESSAGE_SIZE_R=2;
(9)由仲裁寄存器設(shè)置接收過濾ID。設(shè)置IF1仲裁寄存器CAN0IF1A1=0x2 040,CAN0IF1A2=0xc200, 29位擴(kuò)展標(biāo)識符00000001用于報文對象;
(10)設(shè)置命令請求寄存器。設(shè)置IF1命令請求寄存器CAN0IF1CR=RECEIVE_M01,將接收設(shè)置傳送給待接收報文對象,數(shù)據(jù)傳送中,根據(jù)報文號RECEIVE_M01選擇接收的報文對象;
(11)結(jié)束初始化并啟動CAN。設(shè)置CAN0CN為正常模式并禁止對位時序寄存器進(jìn)行寫操作,使能CAN中斷。
4.2 發(fā)送報文
通過IF1發(fā)送內(nèi)容為0304的2 Byte報文。
(1)設(shè)置數(shù)據(jù)寄存器為待發(fā)送數(shù)據(jù)。設(shè)置CAN0IF1DA1L=0x04,CAN0IF1DA1H=0x03,0x0304為待發(fā)送數(shù)據(jù);
(2)設(shè)置命令屏蔽寄存器為寫數(shù)據(jù)。設(shè)置CAN0IF1CM=0x008 7,將數(shù)據(jù)從所選的報文緩沖寄存器傳送到由命令請求寄存器尋址的報文對象;
(3)設(shè)置命令請求寄存器。設(shè)置IF1命令請求寄存器為CAN0IF1CR=TRANSMIT_M01,將待發(fā)送數(shù)據(jù)傳送給待發(fā)送報文對象并向總線發(fā)送該報文對象,TRANSMIT_M01為待發(fā)送報文號。
4.3 接收報文
當(dāng)接收到符合過濾匹配的ID的報文時,CAN控制器產(chǎn)生中斷,MCU執(zhí)行中斷處理程序,通過IF2讀取接收到的報文字節(jié)。
(1)CAN中斷響應(yīng)。讀取狀態(tài)寄存器 以清除狀態(tài)中斷,讀取引起中斷的報文ID號;
(2)設(shè)置命令屏蔽寄存器為讀數(shù)據(jù)。設(shè)置命令屏蔽寄存器為CAN0IF2CM=0x007F,將數(shù)據(jù)從命令請求寄存器尋址的報文對象傳送到所選的報文緩沖寄存器;
(3)設(shè)置命令請求寄存器。設(shè)置IF2命令請求寄存器為CAN0IF2CR=Interrupt_ID, 從引起中斷報文對象讀取數(shù)據(jù),Interrupt_ID為從消息RAM中讀取的報文號;判斷中斷源Interrupt_ID是否要接收的報文對象,是則從報文緩沖寄存器中讀取數(shù)據(jù)。
5.1 實驗方法
使用CAN測試儀對所設(shè)計CAN節(jié)點進(jìn)行測試,由CAN測試儀向CAN節(jié)點發(fā)送一幀2 Byte數(shù)據(jù)0102,格式為擴(kuò)展幀,ID為00000001,CAN節(jié)點收到數(shù)據(jù)后,向CAN測試儀返回一幀2 Byte數(shù)據(jù)0304,ID為00000002。
5.2 實驗結(jié)果及分析
實驗發(fā)送接收數(shù)據(jù)結(jié)果和CAN節(jié)點發(fā)送數(shù)據(jù)波形分別如圖6和圖7所示。
圖6 CAN總線發(fā)送接收數(shù)據(jù)
圖7 CAN節(jié)點發(fā)送數(shù)據(jù)波形
通過實驗,證明所設(shè)計的CAN節(jié)點接收和發(fā)送數(shù)據(jù)工作穩(wěn)定,可與其他硬件配置的CAN總線節(jié)點可靠通訊,可以在有多個節(jié)點的復(fù)雜CAN總線系統(tǒng)中穩(wěn)定工作,能夠及時接收到其他節(jié)點發(fā)送的報文和將報文發(fā)送到其他節(jié)點,在保證不丟幀的同時也沒有干擾其他節(jié)點的正常工作,驗證了該設(shè)計方案的正確性與可行性。
以C8051F560單片機(jī)為核心設(shè)計CAN總線通信節(jié)點,由于使用了C8051F560內(nèi)部集成的CAN控制器和單隔離光耦,簡化了整個CAN總線通信節(jié)點的硬件電路設(shè)計。對C8051F560內(nèi)部集成的Bosch全功能CAN模塊的結(jié)構(gòu)、功能和相關(guān)配置寄存器的使用方法進(jìn)行了分析,并依此設(shè)計了系統(tǒng)的初始化程序,包括系統(tǒng)傳輸波特率的設(shè)置、報文發(fā)送配置、報文接收配置,以及報文的發(fā)送程序和報文的接收程序,對所設(shè)計CAN節(jié)點進(jìn)行了數(shù)據(jù)通信實驗,實驗表明該系統(tǒng)可在最高1 Mbit·s-1的速率下實現(xiàn)多個設(shè)備之間的CAN總線通信,誤碼率低,具有高的可靠性和靈活性,適合用于分布式實時控制系統(tǒng)內(nèi)各設(shè)備之間的高速率、高可靠性通信。
[1] 牛躍聽,周立功,方丹.CAN總線嵌入式開發(fā)——從入門到實戰(zhàn)[M].北京:北京航空航天大學(xué)出版社,2012.
[2] 張培仁.CAN總線設(shè)計及分布式控制[M].北京:清華大學(xué)出版社,2012.
[3] Silicon Laboratories.C8051F55x-F56x-F57x datasheet[M].SD:Silicon Laboratories,2011.
[4] Bosch.Bosch_CAN_user’s_manual revision 1.2[M].Berlin:Bosch,2006.
[5] Silicon Laboratories.C8051F040/1/2/3/4/5/6/7 datasheet [M].SD:Silicon Laboratories,2004.
[6] Philips Semiconductors.Data sheet SJA1000 CAN Standalone controller[M].USA: Philips Semiconductors,2000.
[7] 袁越陽,魯植雄,陳明江.C8051F040的CAN模塊應(yīng)用研究[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008(10):153-156.
[8] 李剛.基于PCI_CAN的數(shù)據(jù)轉(zhuǎn)換系統(tǒng)設(shè)計[J].電子科技,2015,28(2):59-62.
[9] 王云亮,馬龍翔.基于ARM11的CAN總線設(shè)計[J].計算機(jī)測量與控制,2013(3):32-35.
[10] 劉鵬.基于STM32F407的雙CAN總線設(shè)計與實現(xiàn)[J].科技視界,2016(13):66-68.
[11] 張正揚(yáng),劉方.一種基于CAN總線的電動車電池管理系統(tǒng)[J].電子科技,2014,27(3):45-48.
[12] 王加加,楊釧釧,賈偉崗.基于CAN總線的煤礦通信網(wǎng)絡(luò)設(shè)計[J].電子科技,2014,27(3):33-37.
[13] 宋明權(quán),周純杰,楊樊,等.基于C8051F040 的CAN 通訊接口的開發(fā)與應(yīng)用[J].計算技術(shù)與自動化,2005(3):185-189.
[14] 張弘,于盛林.基于C8051F040的CAN總線數(shù)據(jù)采集模塊設(shè)計[J].測控技術(shù),2007(6):39-42.
[15] 陳銳,張鑫,孫景龍.基于STM32F4xx的CAN總線設(shè)計與應(yīng)用[J].黑龍江科技信息,2013(28):7-10.
Design of CAN Bus Communication Node Based on C8051F560
LI Jian,ZHANG Xiwen,HUANG Yong
(No.2 Department, Xi’an Institute of Mechanical and Electrical Information Technology, Xi’an 710085, China)
A CAN bus node based on the microcontroller C8051F560 is designed to form the CAN bus communication system for the high-speed reliable communication between the system devices. The hardware circuit and software program of the system are designed with the can controller integrated in C8051F560. The system communication can be realized at a rate of up to 1Mbps, and the error rate is low, with easy increasing and decreasing the number of devices. The system is suitable for high speed and high reliability communications.
C8051F560; CAN bus; CAN controller; message objects
2016- 07- 30
李建(1978-),男,工程師。研究方向:光電子技術(shù)。
10.16180/j.cnki.issn1007-7820.2017.06.021
TN915;TP336
A
1007-7820(2017)06-077-05