姚國棟,丑武勝
(北京航空航天大學(xué) 機械工程學(xué)院,北京 100191)
?
基于CANopen的分布式兩軸傾角測量器設(shè)計※*
姚國棟,丑武勝
(北京航空航天大學(xué) 機械工程學(xué)院,北京 100191)
摘要:設(shè)計了一個兩軸傾角測量器,傾角測量器通過CANopen協(xié)議進(jìn)行組網(wǎng),并且符合CiA410子協(xié)議,可以方便地接入現(xiàn)有的CANopen分布式網(wǎng)絡(luò)。硬件設(shè)計多選用高集成度小封裝芯片,整個傾角測量器尺寸為30 mm×45 mm×10 mm,非常適合空間受限的應(yīng)用。采用面向?qū)ο蟮姆椒ㄔO(shè)計CANopen協(xié)議棧,結(jié)構(gòu)清晰、易于使用。
關(guān)鍵詞:傾角測量器;分布式測量;CANopen;CiA301;CiA410
引言
傾角測量器在現(xiàn)實中有著廣泛的應(yīng)用,如機器人、高級外科手術(shù)工具、導(dǎo)航系統(tǒng)以及姿態(tài)控制系統(tǒng)等[1],對于一些分布式應(yīng)用,系統(tǒng)中可能同時存在多個被測對象或者需要同其他節(jié)點一起工作,此時一個能夠組網(wǎng)工作的傾角測量器會給系統(tǒng)搭建帶來極大方便。
1整體說明
所設(shè)計的傾角測量器采用CANopen協(xié)議接入分布式控制網(wǎng)絡(luò),CANopen是建立在CAN總線之上的應(yīng)用層協(xié)議,最初為機器控制網(wǎng)絡(luò)設(shè)計,現(xiàn)在在醫(yī)療設(shè)備、軌道車輛、樓宇自動化等領(lǐng)域都有廣泛應(yīng)用[2],許多分布式控制網(wǎng)絡(luò)也采用CANopen進(jìn)行組網(wǎng),采用此協(xié)議使得本傾角測量器可以方便地接入已有的CANopen分布式控制網(wǎng)絡(luò)。本文主要涉及硬件和軟件設(shè)計兩大部分,硬件選型時對芯片的封裝尺寸和成本進(jìn)行了考慮,在符合需求的情況下盡量選用小封裝器件,設(shè)計好的測量器的整體尺寸為30 mm×45 mm×10 mm,能夠方便地應(yīng)用于空間受限的場合。軟件框架采用前后臺結(jié)構(gòu),簡潔而高效;協(xié)議棧實現(xiàn)了采用面向?qū)ο蟮脑O(shè)計方法,結(jié)構(gòu)清晰且易于擴展。
2硬件設(shè)計
傾角測量器的硬件主要由電源系統(tǒng)、微控制器及外圍電路和傳感器及接口3部分組成,硬件整體結(jié)構(gòu)如圖1所示。
2.1電源系統(tǒng)
在分布式控制系統(tǒng)中往往存在許多不同類型的設(shè)備,這些設(shè)備常常需要不同的工作電壓,由于本傾角測量器針對分布式控制系統(tǒng)設(shè)計,為方便傾角測量器集成到現(xiàn)有的控制系統(tǒng)中,設(shè)計了一個具有寬電壓輸入范圍的電源系統(tǒng),輸入電壓為6~26 V,覆蓋了常用的12 V和24 V電源系統(tǒng)。如圖2所示,電源系統(tǒng)分為5 V和3.3 V輸出兩部分。5 V輸出部分采用DC-DC轉(zhuǎn)換器,可以保證在輸入電壓較高時(如24 V),電源系統(tǒng)也能維持較高的轉(zhuǎn)換效率和較少的發(fā)熱,5 V輸出向CAN接口芯片和3.3 V電源供電;3.3 V輸出部分采用線性穩(wěn)壓電源,此部分向微控制器和傳感器供電。
這里DC-DC控制器選用ACT4088,采用SOT23-6封裝,轉(zhuǎn)換頻率為1.4 MHz,高的轉(zhuǎn)換頻率允許使用很小的LC濾波器,如這里選用的濾波電感尺寸僅為3.5 mm×3.3 mm的CD32系列電感,輸出電容則采用0805封裝瓷片電容。線性穩(wěn)壓源選用RT9139-33,采用SOT23-5封裝,這是一款低噪聲、高響應(yīng)速度并具有過流和過熱保護(hù)功能的線性穩(wěn)壓芯片。電源系統(tǒng)原理圖如圖2所示。
2.2微控制器
本設(shè)計采用了ST公司的STM32F405RG,具有1 MB片內(nèi)Flash和192 KB SRAM,能夠滿足本傾角測量器的程序運行要求,另外此微控制器具有豐富的接口,如本文用到的CAN總線接口、SPI接口和UART接口。這里微控制器采用其典型的外圍電路,具體可以參考其數(shù)據(jù)手冊。
2.3傳感器及CAN總線接口
傳感器是實現(xiàn)傾角測量的核心,這里選用的傳感器型號為MPU9250,這款9軸傳感器內(nèi)集成了3軸MEMS加速度計、3軸MEMS陀螺儀以及3軸霍爾磁強計。傳感器通過SPI接口與微控制器連接,可以通過此接口設(shè)置傳感器的工作參數(shù)和讀取傳感器的測量值。
本設(shè)計中CAN接口收發(fā)器選用TJA1042,采用HVSON8(3 mm×3 mm)封裝,其較SO-8封裝具有更小的尺寸。傳感器及CAN接口原理圖如圖3所示。
圖3 傳感器及CAN接口原理圖
3程序設(shè)計
3.1程序整體框架
本設(shè)計中采用典型的“前后臺”程序結(jié)構(gòu),后臺程序完成系統(tǒng)初始化以及資源監(jiān)控等工作,前臺程序完成剩余的所有工作。圖4為后臺程序框圖,系統(tǒng)復(fù)位后,后臺程序開始執(zhí)行,完成一系列初始化后進(jìn)入一個無限循環(huán),并在此無限循環(huán)中監(jiān)控系統(tǒng)資源。
圖4 后臺程序框圖
圖5為前臺程序框圖,前臺程序有3個中斷觸發(fā),第1個為1 kHz的“滴答”中斷,此前臺程序為系統(tǒng)提供周期性服務(wù)功能,如傳感器數(shù)據(jù)的周期采樣服務(wù);第2個為SPI接口的DMA中斷(這里SPI通信采用DMA管理),每當(dāng)數(shù)據(jù)采樣完成后觸發(fā),此前臺程序完成傳感器數(shù)據(jù)的預(yù)處理及傾角計算;第3個為CAN FIFO中斷,當(dāng)從CAN總線接收到合法數(shù)據(jù)幀后觸發(fā),此前臺程序?qū)⑹盏降臄?shù)據(jù)幀傳入CANopen協(xié)議棧進(jìn)行處理,進(jìn)而完成相應(yīng)通信功能。
圖5 前臺程序框圖
3.2面向?qū)ο蟮腃ANopen協(xié)議棧實現(xiàn)
參考文獻(xiàn)[3] 對CANopen協(xié)議作出了具體定義,由分析可知,CANopen通信協(xié)議的功能主要由7種“通信對象”和“對象字典”來實現(xiàn),其中“通信對象”提供了多種傳輸服務(wù),“對象字典”作為橋梁連接了“通信對象”和“用戶應(yīng)用”。CANopen協(xié)議棧主要包括“通信對象”和“對象字典”的實現(xiàn),這里采用面向?qū)ο蟮某绦蛟O(shè)計方法來實現(xiàn)協(xié)議棧,這樣協(xié)議棧的結(jié)構(gòu)就更加清楚,使用也更加方便。
3.2.1通信對象的實現(xiàn)
通信對象的類視圖略——編者注,主要由4個接口和8個類組成,它們的繼承關(guān)系在類視圖中表示。接口類抽象了通信對象間以及通信對象與外部程序間的數(shù)據(jù)交互,需要處理CAN數(shù)據(jù)幀的類以實現(xiàn)ICANDataConsumer接口、向CAN總線發(fā)送數(shù)據(jù)幀的類以實現(xiàn)ISendCANData接口或者把ISendCANData作為內(nèi)嵌對象,實現(xiàn)同步傳輸功能的類(PDO)以實現(xiàn)ISyncMessageConsumer接口、實現(xiàn)高分辨率時鐘信號的類(TimeStamp)以實現(xiàn)IHighPrecisionTick接口。
CANopenStack類本身實現(xiàn)了Network Management(NMT)通信對象的功能,維護(hù)NMT狀態(tài)機,并把其他通信對象作為內(nèi)嵌對象,實現(xiàn)對所有通信對象的統(tǒng)一管理,外部程序只需通過此類的實例便可以完成CANopen相關(guān)操作。ClientSDO和ServerSDO類實現(xiàn)了Service Data Object(SDO)通信對象的功能,通過SDO可以訪問對象字典中任意可訪問的數(shù)據(jù),SDO通信總是由ClientSDO發(fā)起并由對應(yīng)的ServerSDO進(jìn)行響應(yīng)。TransmitPDO和ReceivePDO類實現(xiàn)了Process Data Object(PDO)通信對象的功能,通過PDO以及合適的配置可以高效地訪問應(yīng)用中的過程數(shù)據(jù)。SyncObject類實現(xiàn)了Synchronization Object(SYNC)通信對象的功能,它為總線上的通信提供了同步參考,PDO同步功能的實現(xiàn)就是以SYNC為參考的。TimeStamp類實現(xiàn)了Time Stamp Object(TIME)通信對象的功能,它為總線提供了一個簡單的時鐘。EmcyObject類實現(xiàn)了Emergency Object(EMCY)通信對象的功能,當(dāng)設(shè)備出現(xiàn)一些內(nèi)部錯誤時,便可以通過此類向總線匯報錯誤。
3.2.2對象字典的實現(xiàn)
對象字典是CANopen協(xié)議棧中的另一個重要內(nèi)容,一個設(shè)備的具體行為就是通過對象字典中的各個數(shù)據(jù)對象進(jìn)行定義的。這里設(shè)計了ObjDictionary類來抽象對象字典的行為,此類維護(hù)一個數(shù)據(jù)對象列表,對外提供AddDataObj、GetDataObj和Sort三個方法。AddDataObj方法可以向字典中添加新的數(shù)據(jù)項;GetDataObj方法可以獲取指定索引的數(shù)據(jù)對象;Sort方法對列表中對象按照索引(Index)進(jìn)行排序,以方便執(zhí)行高效的二分查找。字典中的數(shù)據(jù)對象均派生自同一個抽象類DataObjBase,此類定義了兩個純虛函數(shù)GetEntity和SetEntity,派生類依據(jù)各自特性對這兩個函數(shù)進(jìn)行實現(xiàn),這樣利用C++的多態(tài)特性便可以通過無差異的函數(shù)調(diào)用實現(xiàn)對不同類型數(shù)據(jù)對象的操作,保證了程序的可擴展性。當(dāng)需要新類型的數(shù)據(jù)對象時,僅需從DataObjBase派生一個新類并直接使用,而不必修改其他類的實現(xiàn)。這里主要派生了3個數(shù)據(jù)對象類,其中CommonDataObj為模板類,可以接收任意的簡單數(shù)據(jù)類型及一維數(shù)組,CANopen中預(yù)定義的“基本數(shù)據(jù)類型”和“擴展數(shù)據(jù)類型”均可以用此類來表示。對象字典相關(guān)類的類視圖略——編者注。
3.3CiA410兼容配置
此部分講述如何設(shè)計和配置傾角測量器的對象字典,從而使其符合CiA410標(biāo)準(zhǔn)[4]。CiA410是專門為傾角測量器設(shè)計的設(shè)備子協(xié)議,對實現(xiàn)一個傾角測量器所需的通信層和應(yīng)用層數(shù)據(jù)對象進(jìn)行了定義。下面對與傾角測量器相關(guān)的關(guān)鍵數(shù)據(jù)對象進(jìn)行說明。
3.3.1設(shè)備類型(0x1000)
此數(shù)據(jù)對象定義設(shè)備的類型為一個無符號32位變量,低16位為410(十進(jìn)制),表示符合CiA410標(biāo)準(zhǔn),高16位為0x0002(十六進(jìn)制),表示一個分辨率為16位的兩軸傾角測量器。
3.3.2TPDO1(0x1800、0x1A00)
數(shù)據(jù)對象0x1800和0x1A00分別定義了TPDO1的通信參數(shù)和映射參數(shù),TPDO1用于實時獲取16位分辨率的縱向傾角值和橫向傾角值。表1對TPDO1的定義進(jìn)行了說明。
除TPDO1外,CiA410標(biāo)準(zhǔn)還強制要求定義TPDO2,默認(rèn)配置為獲取32位分辨率的傾角值,由于這里僅僅實現(xiàn)了16位分辨率,為了保證符合標(biāo)準(zhǔn),這里對TPDO2的參數(shù)(0x1801、0x1A01)也做了定義,不過所有參數(shù)均為只讀,且0x1801的SubIndex1定義為0x8000 0280+nodeID,即TPDO2處于無效狀態(tài),且主機無法通過SDO使能TPDO2。
表1 TPDO1參數(shù)的定義
3.3.3應(yīng)用相關(guān)對象
應(yīng)用相關(guān)對象對傾角測量器的具體功能進(jìn)行了定義,具體定義及說明見表2。
4傾角測量的實現(xiàn)
本設(shè)計采用集成的三軸加速度計實現(xiàn)姿態(tài)的測量,基本原理是通過測量重力加速度在傳感器正交的3個測量
軸上的分量來計算出傾角測量器相對水平面的兩個傾角。測量平面由傳感器的X軸(縱軸)和Y軸(橫軸)定義,縱向傾角定義為縱軸與水平面的夾角,橫向傾角定義為橫軸與水平面的夾角。當(dāng)用gx、gy和gz分別表示傳感器沿3個敏感軸的測量值,縱向傾角αlong和橫向傾角αlateral分別由下式計算[5]:
表2 傾角測量器相關(guān)的數(shù)據(jù)對象定義
5實驗驗證
這里采用CANalyst-II CAN分析儀+CANPro分析軟件對所設(shè)計的傾角測量器進(jìn)行測試,采用這樣的測試組合可以直接對CANopen數(shù)據(jù)幀進(jìn)行識別和分析。測試時有兩個傾角測量器連接到分析儀,這兩個傾角測量器的Node-ID分別為10和11,參數(shù)依據(jù)3.3節(jié)進(jìn)行配置,可以通過默認(rèn)的TPDO1獲取傾角值,且TPDO1支持同步傳輸,測試過程的截屏略——編者注,通過CANPro分析工具以1 s的周期發(fā)送同步(SYNC)消息,緊隨SYNC消息后面是兩個傾角測量器在SYNC觸發(fā)下發(fā)送的TPDO數(shù)據(jù)(即測得的縱向傾角值和橫向傾角值),圖中數(shù)據(jù)以十六進(jìn)制表示。
結(jié)語
本文設(shè)計了一款兩軸傾角測量器,可以通過CAN總線方便地接入到CANopen分布式網(wǎng)絡(luò),符合CiA410子協(xié)議,可以方便地替換其他符合CiA410的設(shè)備。通過實驗測試,本傾角測量器可以在CANopen網(wǎng)絡(luò)中工作。
[1] Luczak S,Oleksiuk W,Bodnicki M.Sensing tilt with MEMS accelerometers[J] .Sensors Journal,2006,6(6):1669-1675.
[2] CiA.CANopen[EB/OL].[2015-08].http://www.can-cia.org/index.php?id=systemdesign-canopen.
[3] CiA301.CANopen application layer and communication profile[S] .CAN in Automation,2011.
[4] CiA410.Device profile for inclinometer[S] .CAN in Automation,2010.
Distributed Two-axis Inclinometer Design Based on CANopen※
Yao Guodong,Chou Wusheng
(Institute of Mechanical Engineering and Automation,Beihang University,Beijing 100191,China)
Abstract:A two-axis inclinometer is designed which can be networked by CANopen protocol.This inclinometer complies with CiA410 sub-protocol,so it can be integrated into the existing CANopen network easily.The dimension of the inclinometer is only 30 mm×45 mm×10 mm because of the using of the high integration chips,so it is very suitable for the space limited applications.CANopen protocol stack is designed using the object-oriented method,which has a clear structure and is easy to use.
Key words:inclinometer;distributed measurement;CANopen;CiA301;CiA410
收稿日期:(責(zé)任編輯:薛士然2015-08-19)
中圖分類號:TP212.12
文獻(xiàn)標(biāo)識碼:A
基金項目:*國家磁約束核聚變能研究專項資助項目(2012GB102006)。