陳琪晟
(中鐵通信信號(hào)勘測(cè)設(shè)計(jì)(北京)有限公司,北京 100000)
基于DSP的CAN總線通信程序
陳琪晟
(中鐵通信信號(hào)勘測(cè)設(shè)計(jì)(北京)有限公司,北京 100000)
介紹基于TMS320F2812 DSP的CAN 總線的設(shè)計(jì)及應(yīng)用方法。在分析CAN總線的主要技術(shù)特性及CAN總線在工業(yè)控制系統(tǒng)中所處的位置之后,給出DSP與CAN的硬件設(shè)計(jì)框圖。描述CAN節(jié)點(diǎn)軟件設(shè)計(jì)同時(shí)給出初始化流程以及發(fā)送程序流程圖及部分代碼。介紹的設(shè)計(jì)方法易于掌握且具有較強(qiáng)的靈活性和通用性,可用于多種工業(yè)現(xiàn)場(chǎng)控制。
TMS320F2812DSP;CAN總線;通信程序
CAN是Controller Area Network的縮寫(以下稱為CAN),是ISO國(guó)際標(biāo)準(zhǔn)化的串行通信協(xié)議。1986年德國(guó)電氣商博世公司開發(fā)出面向汽車的CAN通信協(xié)議。此后,CAN通過ISO11898及ISO11519進(jìn)行了標(biāo)準(zhǔn)化,在歐洲已是汽車網(wǎng)絡(luò)的標(biāo)準(zhǔn)協(xié)議。
CAN的高性能和可靠性已被認(rèn)同,并被廣泛地應(yīng)用于工業(yè)自動(dòng)化、船舶、醫(yī)療設(shè)備、工業(yè)設(shè)備等方面?,F(xiàn)場(chǎng)總線是當(dāng)今自動(dòng)化領(lǐng)域技術(shù)發(fā)展的熱點(diǎn)之一,被譽(yù)為自動(dòng)化領(lǐng)域的計(jì)算機(jī)局域網(wǎng)。它的出現(xiàn)為分布式控制系統(tǒng)實(shí)現(xiàn)各節(jié)點(diǎn)之間實(shí)時(shí)、可靠的數(shù)據(jù)通信提供了強(qiáng)有力的技術(shù)支持。
DSP芯片,也稱數(shù)字信號(hào)處理器,是一種特別適合于進(jìn)行數(shù)字信號(hào)處理運(yùn)算的微處理器,其主要應(yīng)用是實(shí)時(shí)快速地實(shí)現(xiàn)各種數(shù)字信號(hào)處理算法。根據(jù)數(shù)字信號(hào)處理的要求,DSP芯片一般具有如下主要特點(diǎn):
1)在一個(gè)指令周期內(nèi)可完成一次乘法和一次加法;
2)程序和數(shù)據(jù)空間分開,可以同時(shí)訪問指令和數(shù)據(jù);
3)片內(nèi)具有快速RAM,通??赏ㄟ^獨(dú)立的數(shù)據(jù)總線在兩塊中同時(shí)訪問;
4)具有低開銷或無開銷循環(huán)及跳轉(zhuǎn)的硬件支持;
5)快速的中斷處理和硬件I/O支持;
6)具有在單周期內(nèi)操作的多個(gè)硬件地址產(chǎn)生器;
7)可以并行執(zhí)行多個(gè)操作;
8)支持流水線操作,使取指、譯碼和執(zhí)行等操作可以重疊執(zhí)行。
F2812DSP的增強(qiáng)型局域網(wǎng)控制器(eCAN)模塊與CAN2.0B標(biāo)準(zhǔn)兼容,借助32個(gè)完全可配置的郵箱和時(shí)間標(biāo)志特性。eCAN模塊提供了一種具有通用性和強(qiáng)大功能的多主從工作方式通信接口。以TMS320F2812型DSP為核心芯片,eCAN總線通過研華CAN通信卡PCI-1680U與上位機(jī)實(shí)現(xiàn)連接,示意圖如圖1所示。
圖1 連接示意圖
2.1 CAN總線基本工作原理
CAN總線的通信過程是通過類似“會(huì)議”的機(jī)制實(shí)現(xiàn)的,只不過會(huì)議的過程并不是由一方(節(jié)點(diǎn))主導(dǎo),而是每一個(gè)會(huì)議參加人員(節(jié)點(diǎn))都可以自主的提出會(huì)議議題(多主通信模式),二者流程對(duì)應(yīng)關(guān)系如圖2所示。
圖2 CAN工作原理圖
2.2 CAN報(bào)文格式
在總線中傳送的報(bào)文,每幀由7部分組成。CAN協(xié)議支持兩種報(bào)文格式,區(qū)別之處在于標(biāo)識(shí)符(ID)長(zhǎng)度不同,標(biāo)準(zhǔn)格式為11位,擴(kuò)展格式為29位。在標(biāo)準(zhǔn)格式中,幀起始(SOF)為報(bào)文的起始位,接著是由11位標(biāo)識(shí)符和遠(yuǎn)程發(fā)送請(qǐng)求位 (RTR)組成的仲裁場(chǎng)。RTR位是用來區(qū)別數(shù)據(jù)幀還是請(qǐng)求幀的,在請(qǐng)求幀中沒有數(shù)據(jù)字節(jié)??刂茍?chǎng)包括標(biāo)識(shí)符擴(kuò)展位(IDE),它是指出標(biāo)準(zhǔn)格式還是擴(kuò)展格式,它還包括一個(gè)保留位 (ro),為將來擴(kuò)展使用。它的最后4個(gè)位是用來指明數(shù)據(jù)場(chǎng)中數(shù)據(jù)的長(zhǎng)度(DLC)。數(shù)據(jù)場(chǎng)范圍為0~8 Byte,其后有一個(gè)檢測(cè)數(shù)據(jù)錯(cuò)誤的循環(huán)冗余檢查(CRC)。應(yīng)答場(chǎng)(ACK)包含應(yīng)答位和應(yīng)答分隔符。CAN發(fā)送的這兩位均為隱性電平(邏輯1),這時(shí)正確接收?qǐng)?bào)文的節(jié)點(diǎn)發(fā)送主控電平(邏輯0)覆蓋它。用這種方法,CAN可以保證網(wǎng)絡(luò)中至少有一個(gè)節(jié)點(diǎn)能正確接收到報(bào)文。報(bào)文的尾部由幀結(jié)束指明。在相鄰的兩條報(bào)文間有一很短的間隔位,如果這時(shí)沒有節(jié)點(diǎn)進(jìn)行總線讀取,總線將處于空閑狀態(tài)。
2.3 通信技術(shù)指標(biāo)
波特率,這里用每秒傳送的位來計(jì)算,公式如下:
波特率=SYSCLK/(BRP×Bit_time)
其中:Bit_time(位時(shí)間)為每位的時(shí)間因子(TQ)數(shù);SYSCLK為CAN模塊的系統(tǒng)時(shí)鐘頻率。與CPU時(shí)鐘頻率相同;BRP為BRP[7—0]+1(CANBTC寄存器的位)的二進(jìn)制值。位時(shí)間Bit_time=(TSEGl+1)+(TSEG2+1)+1,這里SYSCLK=150 MHz,BRP=9,TSEGl=10,TSEG2=2,所以波特率為1 Mbit/s。
假設(shè)總線報(bào)文發(fā)送時(shí)間間隔為10 ms,報(bào)文為數(shù)據(jù)幀(8 Byte數(shù)據(jù)),根據(jù)通信波特率計(jì)算10 ms總共可以發(fā)送的bit為(1000000/1000)× 10=10000bit,計(jì)算最長(zhǎng)的一幀報(bào)文的bit為1sof+ 29id+1ide+1rtr+1srr+2r+4dlc+8×8data+16crc+ 2ack+7eof=128 bit,可以得出10 ms內(nèi)可以支持的報(bào)文數(shù)目2500/128≈78。
由上面的計(jì)算可知,當(dāng)10 ms間隔的報(bào)文數(shù)量超過78條時(shí),就會(huì)出現(xiàn)丟幀,總線飽和。
CAN參數(shù)配置波特率為1 Mbit/s,幀類型選擇標(biāo)準(zhǔn)幀,發(fā)送標(biāo)識(shí)符為Ox15100000,接收濾波模式為單濾波,選擇自定義屏蔽碼,過濾驗(yàn)收碼為FFFFFFFF,過濾屏蔽碼為FFFFFFFF。上位機(jī)測(cè)試接收軟件在visual studio 2010 C#環(huán)境下編寫,下位機(jī)軟件在CCStudio v3.1環(huán)境中編寫調(diào)試而成,程序說明如下。
3.1 硬件設(shè)計(jì)
本實(shí)驗(yàn)的硬件系統(tǒng)分為兩層:第一層是CAN總線與TMS320F2812接口層,用來實(shí)現(xiàn)CAN總線和TMS320F2812的物理接口;第二層為DSP與元器件的信息處理層,其CAN總線通信接口電路如圖3所示。
3.2 上位機(jī)軟件設(shè)計(jì)
上位機(jī)測(cè)試接收的軟件用C#編寫,部分主要設(shè)置和接收代碼如下。
圖3 CAN總線通信接口電路
通過調(diào)用函數(shù)Can_Set()設(shè)置CAN通信卡的相關(guān)參數(shù);用nRet變量對(duì)相關(guān)參數(shù)檢查設(shè)置,通過返回值判斷設(shè)置成功與否,若失敗給出報(bào)警提示;參數(shù)設(shè)置成功后,調(diào)用后臺(tái)線程backgroundWorker2,調(diào)用接收方法函數(shù)ReceiveThreadMethod2,接收下位機(jī)發(fā)送的數(shù)據(jù),并根據(jù)CAN總線錯(cuò)誤檢測(cè)來檢查數(shù)據(jù)的正確性,若有錯(cuò)誤通過故障報(bào)警進(jìn)行相應(yīng)的報(bào)警處理。如圖4所示。
3.3 下位機(jī)軟件設(shè)計(jì)
在使用CAN控制器之前,首先必須對(duì)它的內(nèi)部寄存器進(jìn)行初始化設(shè)置,包括相關(guān)IO口設(shè)置以及郵箱的相關(guān)配置。圖5所示是本系統(tǒng)的主程序流程圖,圖6所示是CAN消息發(fā)送流程圖。
圖5 主程序流程圖
3.3.1 主程序說明
圖6 CAN消息發(fā)送流程圖
3.3.2 eCAN初始化說明
3.3.3 eCAN發(fā)送程序說明
此種通信方式在25 Hz智能軌道電路中得到運(yùn)用,實(shí)踐證明這種通信方式的有效性,必將在該領(lǐng)域得到廣泛應(yīng)用。
[1]劉和平,鄧力,江渝,等.?dāng)?shù)字信號(hào)處理器原理、結(jié)構(gòu)及應(yīng)用基礎(chǔ)[M].北京:北京機(jī)械工業(yè)出版社,2007:328-329.
[2]蘇奎峰,呂強(qiáng),耿慶峰,等.TMS320F2812原理與開發(fā)[M].北京:北京電子工業(yè)出版社,2005:262-268.
[3]顧衛(wèi)鋼.手把手教你學(xué)DSP—基于TMS320X281x[M].北京:北京航空航天大學(xué)出版社,2011:397-443.
國(guó)外簡(jiǎn)訊
西門子開始班伯里的信號(hào)改造工程
依照英國(guó)路網(wǎng)公司于1月26日授予的4千萬英鎊立明頓溫泉鎮(zhèn)到海福德區(qū)段的信號(hào)設(shè)備更新合同,西門子鐵路自動(dòng)化公司啟動(dòng)了該信號(hào)改造工程。
為期22月項(xiàng)目將把目前由班伯里北和班伯里南信號(hào)站控制的信號(hào)區(qū)域的操作轉(zhuǎn)移到路網(wǎng)公司西中部信號(hào)中心的一個(gè)工作站處。立明頓溫泉鎮(zhèn)信號(hào)中心剩余的信號(hào)控制功能也將被轉(zhuǎn)移至西中部信號(hào)中心。
跟既有的設(shè)計(jì)相比,新的LED信號(hào)機(jī)將降低維護(hù)要求,同時(shí)西門子軌護(hù)西鎖計(jì)算機(jī)聯(lián)鎖正打算應(yīng)用于班伯里和Aynho樞紐之間,以縮短間隔時(shí)間。
信號(hào)改造是與一個(gè)軌道更新項(xiàng)目同步進(jìn)行的,該項(xiàng)目會(huì)使班伯里車站的布置更加合理化,以提高運(yùn)營(yíng)靈活性并減少維護(hù)需求。
(北京全路通信信號(hào)研究設(shè)計(jì)院有限公司 孔林楠譯自http://www.railwaygazette.com 2014-01-29)
The paper introduces the design and application methods of TMS320F2812 DSP-based CAN bus, and presents the block diagram of DSP and CAN hardware design after analyzing the main technical features of the CAN bus and its position in industrial control systems. It also illustrates CAN node software design with initial fl ow, sending procedure fl ow and codes. The design methods introduced here can be learned easily, they have high fl exibility and universality and can be used in some industrial fi eld control.
TMS320F2812 DSP; CAN bus; communication program
10.3969/j.issn.1673-4440.2015.02.012
2014-07-22)