摘 要: CANopen協(xié)議是由CAN-in-Automation(CiA)定義的標(biāo)準(zhǔn),并且在以CAN為基礎(chǔ)的工業(yè)系統(tǒng)領(lǐng)域中占著主導(dǎo)地位。本文以五軸機械手的設(shè)計實現(xiàn)為背景,結(jié)合CANopen協(xié)議在汽車電子和工業(yè)控制領(lǐng)域中的廣泛應(yīng)用,實現(xiàn)了對多電機系統(tǒng)的實時控制。文中提供的以CAN總線控制多個伺服電機的設(shè)計方法,使得硬件電路的設(shè)計得到很大簡化,同時也使得通信效率和可靠性得到大幅提升。本方案在實際運行中已經(jīng)得到充分的驗證,對工業(yè)控制領(lǐng)域有著實際的應(yīng)用指導(dǎo)意義。
關(guān)鍵詞: CAN;CANopen;多電機系統(tǒng)控制;現(xiàn)場總線
0 引言
CAN(Controller Area Network,控制器局域網(wǎng))總線是由德國Bosch公司設(shè)計的,是一種技術(shù)先進(jìn)、可靠性高、成本低的網(wǎng)絡(luò)通信控制方式。它在離散控制領(lǐng)域得到了廣泛應(yīng)用,是唯一成為國際標(biāo)準(zhǔn)的現(xiàn)場總線[1]。由于CAN只定義了OSI網(wǎng)絡(luò)模型中的第一層(物理層)和第二層(數(shù)據(jù)鏈路層),沒有應(yīng)用層,所以需要高層協(xié)議來具體定義CAN報文的使用。CANopen協(xié)議是基于CAL協(xié)議的擴展,是目前基于CAN的高層通信協(xié)議的一種。CANopen是由CAN-in-Automation(CiA)定義的標(biāo)準(zhǔn),并且在以CAN為基礎(chǔ)的工業(yè)系統(tǒng)領(lǐng)域中占著主導(dǎo)地位[2]。CANopen專門為不同的接口設(shè)備應(yīng)用子協(xié)議定義了行規(guī)(DSP4),其中CiA402是針對驅(qū)動裝置和運動控制裝置的設(shè)備規(guī)范。本文就是根據(jù)CANopen協(xié)議在伺服驅(qū)動設(shè)備上的應(yīng)用進(jìn)行展開討論的。
1 CANopen通信協(xié)議簡析
CANopen的參考模型如圖1所示。由此圖可以看出CANopen是以CAN為基礎(chǔ)的,CAN數(shù)據(jù)鏈路層提供具有標(biāo)示符的報文的廣播服務(wù),所以報文不是發(fā)送到某一個遠(yuǎn)程節(jié)點的特定的應(yīng)用程序。實際上,每個應(yīng)用程序只需要根據(jù)報文的標(biāo)示符決定是否接受通信對象所攜帶的數(shù)據(jù),這種特性決定了CAN網(wǎng)絡(luò)是一種基于報文的協(xié)議,而CANopen協(xié)議中的服務(wù)對象就是CAN網(wǎng)絡(luò)中傳輸?shù)腃AN報文。
CANopen的設(shè)備模型如圖2所示。從圖中可以看出,一個CAN設(shè)備主要分為三部分:通信接口、對象字典、應(yīng)用程序。通信接口主要定義了四種不同種類的通信對象:服務(wù)數(shù)據(jù)對象、過程數(shù)據(jù)對象、網(wǎng)絡(luò)管理對象和特殊功能對象,用來實現(xiàn)通信、網(wǎng)絡(luò)管理和緊急情況處理等功能[3]。這四類通信對象(COB)都是由一個或多個報文實現(xiàn)的。過程數(shù)據(jù)對象(PDO消息)用來傳輸實時的數(shù)據(jù);服務(wù)數(shù)據(jù)對象(SDO服務(wù)器消息和SDO客戶端消息)用來配置網(wǎng)絡(luò)參數(shù)和訪問節(jié)點的對象字典,建立兩個CANopen設(shè)備之間的客戶/服務(wù)器的關(guān)系;網(wǎng)絡(luò)管理對象(NMT)負(fù)責(zé)網(wǎng)絡(luò)的啟動和監(jiān)控設(shè)備;特殊功能對象是指同步(SYNC)、時間標(biāo)記對象、緊急事件、節(jié)點保護。
CANopen對象字典(Object Dictionary,OD)是CANopen協(xié)議最為核心的概念。對象字典就是通過網(wǎng)絡(luò)讀取一組提前定義好的對象,相當(dāng)于一個參數(shù)列表,每一個對象是用一個16位的索引和8位的子索引來定位。為了允許訪問數(shù)據(jù)結(jié)構(gòu)中的單個元素,同時也定義了一個8位的子索引。對象字典是所有數(shù)據(jù)結(jié)構(gòu)的集合,這些數(shù)據(jù)結(jié)構(gòu)涉及設(shè)備的應(yīng)用程序、通信以及狀態(tài)機,也是通信接口與應(yīng)用程序之間的接口。
CANopen由一系列稱為子協(xié)議的文檔組成,這些子協(xié)議主要分為3類,分別是通信子協(xié)議、制造商自定義子協(xié)議和設(shè)備子協(xié)議。子協(xié)議描述對象字典中的每個對象的功能、名字、索引、子索引、數(shù)據(jù)類型、讀寫屬性,以及這個對象是否必須等待,從而保證不同制造商的同類設(shè)備能夠相互兼容。根據(jù)這些協(xié)議生產(chǎn)CANopen設(shè)備能夠?qū)崿F(xiàn)不同廠商產(chǎn)品之間的互操作,大大降低了系統(tǒng)通信的開發(fā)難度[4-6]。
2 機械手的實現(xiàn)
機械手主要有三部分組成:手部、運動機構(gòu)、控制系統(tǒng)。手部是指用來抓取物體的部件;運動機構(gòu)使手部完成各種規(guī)定動作;控制系統(tǒng)通過對各個電機的控制來完成所需要的規(guī)定動作,同時通過接收反饋的信息形成閉環(huán)控制。控制系統(tǒng)是機械手實現(xiàn)的關(guān)鍵部分,本文主要設(shè)計實現(xiàn)的是控制系統(tǒng)。
隨著現(xiàn)場總線在工業(yè)控制領(lǐng)域中越來越廣泛的應(yīng)用,以及控制系統(tǒng)向著網(wǎng)絡(luò)化、開放性的方向發(fā)展,所以本文也采用總線的方式進(jìn)行設(shè)計??刂葡到y(tǒng)與外部設(shè)備的通信分別采用以太網(wǎng)總線和CAN總線。本文設(shè)計的系統(tǒng)結(jié)構(gòu)如圖3所示。
由圖3可以看出,該系統(tǒng)主要由4部分組成:手持器、控制電路、電機驅(qū)動器及電機。其運行過程大致是手持器通過以太網(wǎng)接口把相應(yīng)的動作指令發(fā)給控制電路,該過程采用LWIP協(xié)議;然后控制電路在接收到指令之后,開始解析指令,再通過CAN接口給伺服電機驅(qū)動器發(fā)送指令,該過程采用CANopen協(xié)議;伺服驅(qū)動器在得到指令后開始驅(qū)動電機,在電機到達(dá)指定位置后停止。整個系統(tǒng)運行過程中,如何實現(xiàn)對5個電機的實時控制是整個系統(tǒng)的關(guān)鍵。為保證數(shù)據(jù)在傳輸過程中的可靠性和實時性,系統(tǒng)在設(shè)計時采用了CAN接口和以太網(wǎng)接口[7]。
3 機械手CANopen通信的設(shè)計與實現(xiàn)
3.1 CANopen通信的硬件設(shè)計
由圖3可以看出,CANopen通信是在控制電路和電機驅(qū)動器之間實現(xiàn)的。CANopen只是一個應(yīng)用層的規(guī)范協(xié)議,與具體總線的物理實現(xiàn)無關(guān)。由圖1 CANopen的參考模型可以看出,CANopen是以CAN為基礎(chǔ)的,所以CANopen的硬件實現(xiàn)實際是CAN總線的設(shè)計實現(xiàn)。電機驅(qū)動器自身支持CANopen協(xié)議,所以硬件實現(xiàn)的關(guān)鍵是控制電路能符合CANopen協(xié)議。CAN的硬件實現(xiàn)包括兩個部分:與OSI模型中數(shù)據(jù)鏈路層和物理層分別對應(yīng)的CAN控制器和CAN收發(fā)器的實現(xiàn)。本文采用基于Cortex-M4內(nèi)核的STM32系列芯片作為控制電路的MCU,該芯片內(nèi)有CAN控制器,并且完全支持CAN協(xié)議2.0。CAN收發(fā)器選用CTM1050T,其內(nèi)部集成了CAN隔離及收發(fā)器件,將CAN控制器的邏輯電平轉(zhuǎn)換為CAN總線的差分電平,同時具有隔離功能機ESD保護作用。CAN通信硬件結(jié)構(gòu)如圖4所示[8]。
3.2 CANopen通信程序設(shè)計
CAN通信硬件設(shè)計完成后能夠?qū)崿F(xiàn)設(shè)備之間的報文通信,但是仍需對傳輸?shù)臄?shù)據(jù)內(nèi)容進(jìn)行定義,主要包括數(shù)據(jù)內(nèi)容的傳輸格式以及數(shù)據(jù)讀取規(guī)則。本部分主要介紹控制電路與伺服電機驅(qū)動器之間CAN通信程序的設(shè)計,程序采用CANopen協(xié)議中的服務(wù)數(shù)據(jù)對象SDO(Service Data Object)數(shù)據(jù)傳輸機制。采用該機制是因為SDO為每個消息都生成一個應(yīng)答,這樣可以保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。同時通過每5 ms查詢一次的方式來確保數(shù)據(jù)傳輸?shù)膶崟r性。CANopen通信程序設(shè)計流程圖如圖5所示。首先對控制電路的CAN接口進(jìn)行配置,選擇波特率,完成CAN接口的初始化。電機驅(qū)動器節(jié)點的配置是通過驅(qū)動器的面板進(jìn)行設(shè)定,把各節(jié)點配置為可操作模式,然后再根據(jù)傳送過來的數(shù)據(jù)對伺服驅(qū)動器進(jìn)行相應(yīng)的配置。在整個通信過程中,由于伺服電機驅(qū)動器內(nèi)部集成標(biāo)準(zhǔn)的CANopen協(xié)議,所以控制電路所發(fā)的數(shù)據(jù)要按照CANopen協(xié)議中的規(guī)定發(fā)送才能被伺服電機驅(qū)動器識別。同時這也簡化了控制電路關(guān)于CANopen協(xié)議方面的程序設(shè)計,使得研發(fā)周期大大縮短。
4 結(jié)束語
CANopen是一個應(yīng)用層的規(guī)范協(xié)議,與具體總線的物理實現(xiàn)無關(guān)。CANopen已經(jīng)發(fā)展成具有高度靈活性的標(biāo)準(zhǔn)化嵌入式網(wǎng)絡(luò),基于它提出和實現(xiàn)的對象字典、設(shè)備規(guī)范等概念對現(xiàn)場總線技術(shù)的發(fā)展起到了重要作用。本文主要設(shè)計實現(xiàn)了基于CANopen協(xié)議的五軸機械手控制系統(tǒng),為CANopen協(xié)議在多電機控制系統(tǒng)的設(shè)計提供了一種方案,對工業(yè)控制領(lǐng)域具有實際的應(yīng)用意義。
參考文獻(xiàn)
[1] 鄔寬明.CAN總線原理和應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1996.
[2] 李澄,趙輝,聶保錢.基于CANopen協(xié)議實現(xiàn)多電機系統(tǒng)實時控制[J].微電機,2009,42(9):53-56.
[3] 呂京建,張宏韜.CAN總線的淺析-CANopen協(xié)議[J].電子產(chǎn)品世界,2002(17):25-27.
[4] CAN in Automation. Application Layer and Communication Profile[S]. CiA Draft Standard 301 Version 4.02, 2002.
[5] 王峰.基于嵌入式系統(tǒng)的CANopen協(xié)議分析研究[D].天津:天津理工大學(xué),2010.
[6] 夏勇,葉曉東,趙江海.基于CANopen協(xié)議的數(shù)字伺服控制[J].電氣自動化,2014,36(1):57-59.
[7] 趙建光,楊建武,孫樹文.基于CANopen協(xié)議的I/O從站的開發(fā)與應(yīng)用[J].微計算機信息,2007,23(8):9-11.
[8] 史久根,張培仁,陳真勇.CAN現(xiàn)場總線系統(tǒng)設(shè)計技術(shù)[M].北京:國防工業(yè)出版社,2004.