李 芃
(四川大學(xué)錦城學(xué)院,四川 成都 610000)
電機(jī)協(xié)同控制系統(tǒng)在實(shí)際生產(chǎn)過(guò)程中的應(yīng)用相當(dāng)廣泛,如配料、工業(yè)切割、機(jī)械手臂、傳動(dòng)等生產(chǎn)過(guò)程必須多臺(tái)電機(jī)協(xié)同控制。尤其是在大工件切割加工過(guò)程中,由于電機(jī)比較多、分布比較廣,采用傳統(tǒng)的控制器與電機(jī)驅(qū)動(dòng)器一對(duì)一的脈沖控制模式,不僅控制線路復(fù)雜,抗干擾能力差,且在控制過(guò)程中脈沖容易丟失或引進(jìn)干擾脈沖、可靠性低。
現(xiàn)場(chǎng)總線打破了傳統(tǒng)控制系統(tǒng)一對(duì)一的結(jié)構(gòu)形式,采用智能現(xiàn)場(chǎng)設(shè)備,把傳統(tǒng)的脈沖傳送改為智能型總線數(shù)據(jù)傳送并具有數(shù)據(jù)完整性校驗(yàn)和重發(fā)機(jī)制等糾錯(cuò)功能。近年來(lái)利用現(xiàn)場(chǎng)總線實(shí)現(xiàn)電機(jī)群控制有了較多的研究,本設(shè)計(jì)利用CAN 總線通信方式靈活,通信速率高,可靠性、實(shí)時(shí)性和抗干擾能力強(qiáng)[1],且低成本的優(yōu)點(diǎn),探索基于CAN 總線的電機(jī)群控制系統(tǒng),通過(guò)編制控制協(xié)議改善電機(jī)群的協(xié)同控制性能。
本系統(tǒng)設(shè)計(jì)分為硬件設(shè)計(jì)、CAN 通信網(wǎng)絡(luò)應(yīng)用層協(xié)議設(shè)計(jì)、軟件設(shè)計(jì)三個(gè)部分。
基于CAN 總線的電機(jī)群控制系統(tǒng)的由運(yùn)動(dòng)控制器、步進(jìn)電機(jī)或伺服電機(jī)(4 臺(tái))及相應(yīng)帶CAN 總線的電機(jī)驅(qū)動(dòng)器等組成。通過(guò)CAN 總線連接成一個(gè)完整的通訊網(wǎng)絡(luò),實(shí)時(shí)傳輸各運(yùn)行參數(shù)、控制命令。系統(tǒng)的控制對(duì)象主要是4 臺(tái)電機(jī),即M1:X 軸向運(yùn)動(dòng)電機(jī)、M2:Y 軸方向運(yùn)行電機(jī)、M3:刀頭上下移動(dòng)電機(jī)(Z 軸電機(jī)),M4:刀頭旋轉(zhuǎn)電機(jī)(U 軸)。電機(jī)群控制系統(tǒng)結(jié)構(gòu)圖如圖1 所示:
圖1 基于CANopen 協(xié)議的電機(jī)群控制系統(tǒng)框圖
1.1.1 運(yùn)動(dòng)控制模塊
本系統(tǒng)的主控制CPU 及各個(gè)??炜刂艭PU 均選用的基于ARM Cortex-M3 內(nèi)核的STM32F103RBT6 嵌入式處理器。該處理器帶有64KB 的Flash 和20KB 的SRAM 資源,主頻為72MHz,信號(hào)處理最高可達(dá)1.25DMips/MHz,運(yùn)算速度快,非常符合電機(jī)群控制系統(tǒng)數(shù)據(jù)計(jì)算量大的需求。因該芯片內(nèi)部帶有2 .0A 和2 .0B 的CAN 控制器,不再需要另加CAN 控制器,給CAN 通訊外圍電路設(shè)計(jì)帶來(lái)了便捷。主控制器負(fù)責(zé)位置、速度數(shù)據(jù)的運(yùn)算,將數(shù)據(jù)指令通過(guò)CAN 總線發(fā)送各分布式控制模塊。各節(jié)點(diǎn)運(yùn)動(dòng)控制模塊接到命令后,進(jìn)行相應(yīng)的操作,驅(qū)動(dòng)各自所帶電機(jī)運(yùn)動(dòng)。
1.1.2 電機(jī)驅(qū)動(dòng)模塊
下位節(jié)點(diǎn)接收主控制器發(fā)送的數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行分析處理,將其轉(zhuǎn)成脈沖信號(hào)送入步進(jìn)電機(jī)驅(qū)動(dòng)器。由于數(shù)據(jù)計(jì)算量大,且要求運(yùn)算速度快,故下位機(jī)同樣采用STM32 芯片作為CPU。步進(jìn)電機(jī)的驅(qū)動(dòng)選用LV8731V 芯片。LV8731V 是2ch H 橋驅(qū)動(dòng),內(nèi)置1ch PWM 電流控制步進(jìn)電機(jī)驅(qū)動(dòng),能設(shè)定2 相/1-2 相/W1-2 相/4W1-2 相勵(lì)磁模式,只要輸入STEP 信號(hào)、勵(lì)磁STEP 就可以進(jìn)行,非常適合帶動(dòng)步進(jìn)電機(jī),并且內(nèi)置輸出短路保護(hù)電路,無(wú)需控制電源。切割機(jī)電機(jī)系統(tǒng)采用激光切割,只需要一般的步進(jìn)電機(jī)帶動(dòng)激光探頭即可。所以這樣的組合不需要額外的驅(qū)動(dòng)設(shè)備,結(jié)構(gòu)簡(jiǎn)單,性價(jià)比高,非常適合切割機(jī)電機(jī)系統(tǒng)。
LV8731V 的OUTA1,OUTA2,OUTB1,OUTB2 管腳,直接連接步進(jìn)電機(jī)。LV8731V 的DC12 管腳與stm32 PA7 管腳(TIM1)相連,通過(guò)設(shè)置TIM1 來(lái)調(diào)節(jié)輸出的PWM 波控制速度。勵(lì)磁模式設(shè)定為8 細(xì)分4W1-2 相勵(lì)磁模式,通過(guò)stm32 PA6,PA7 管腳來(lái)控制。設(shè)定DM 接地,使端子為STM 模式,能控制CLK—IN 輸入的1ch 步進(jìn)電機(jī)。
CAN 總線是一種有效支持分布式控制或?qū)崟r(shí)控制的串行通信局域網(wǎng)絡(luò)[2]。從OSI 網(wǎng)絡(luò)模型的角度來(lái)看[1],CAN 現(xiàn)場(chǎng)總線僅僅定義了第1 層即物理層、第2 層即數(shù)據(jù)鏈路層(見(jiàn)ISO11898 標(biāo)準(zhǔn));沒(méi)有規(guī)定應(yīng)用層,需要一個(gè)高層協(xié)議來(lái)定義CAN 報(bào)文中的11/29 位標(biāo)識(shí)符、8 字節(jié)數(shù)據(jù)的使用。目前占領(lǐng)市場(chǎng)主流的應(yīng)用層協(xié)議是:DeviceNet 協(xié)議和CANopen 協(xié)議[5]。但是DeviceNet 和CANopen 協(xié)議難度大、規(guī)范復(fù)雜,開(kāi)發(fā)周期長(zhǎng)、成本高。針對(duì)本控制系統(tǒng)的控制對(duì)象為4 臺(tái)電機(jī)的情況,根據(jù)CAN 總線的要求,必須研究一套簡(jiǎn)單而有效的高層通信協(xié)議。
1.2.1 CAN 報(bào)文的分配
CAN 一個(gè)數(shù)據(jù)幀[3]包括了幀起始、仲裁場(chǎng)(標(biāo)識(shí)符+RTR)、控制場(chǎng)、數(shù)據(jù)場(chǎng)(0-8bytes)、CRC、應(yīng)答場(chǎng)、幀結(jié)束。用戶協(xié)議需要自行設(shè)計(jì)的為仲裁場(chǎng)、控制場(chǎng)和數(shù)據(jù)場(chǎng)。在本電機(jī)群控制系統(tǒng)中,每一個(gè)節(jié)點(diǎn)有且只有一個(gè)其專(zhuān)屬的地址,地址碼和系統(tǒng)中各電機(jī)模塊對(duì)應(yīng),總線上按照地址來(lái)傳送數(shù)據(jù)。電機(jī)控制系統(tǒng)中主控節(jié)點(diǎn)為1,X 軸、Y 軸、Z 軸、U軸電機(jī)節(jié)點(diǎn)依次為2、3、4、5。由于系統(tǒng)規(guī)模比較小,節(jié)點(diǎn)數(shù)少于16個(gè),地址碼設(shè)定為4 位,同一系統(tǒng)中地址碼不能重復(fù)。目的地址的標(biāo)識(shí)符定為ID3-ID0,源地址標(biāo)識(shí)符定ID7-ID4[5]。ID9-ID8 定義為功能碼,用于表示報(bào)文所要實(shí)現(xiàn)的功能。兩位標(biāo)識(shí)符定義了4 個(gè)功能碼,分別是:0X00 表示對(duì)單個(gè)或多個(gè)節(jié)點(diǎn)寫(xiě)入數(shù)據(jù);0X01 表示斷開(kāi)與電機(jī)控制系統(tǒng)從節(jié)點(diǎn)的通訊連接;0X10 表示和電機(jī)控制系統(tǒng)從節(jié)點(diǎn)建立通訊連接;0X11 表示檢測(cè)網(wǎng)絡(luò)上的ID 從節(jié)點(diǎn)是否存在[2]。ID10 位定義為ACK 響應(yīng)位[4],該位用來(lái)區(qū)分幀的類(lèi)型。當(dāng)響應(yīng)標(biāo)志位為0 時(shí),表示發(fā)送的是命令幀,節(jié)點(diǎn)需要應(yīng)答。控制場(chǎng)有6 個(gè)位組成,標(biāo)準(zhǔn)格式里的幀包括數(shù)據(jù)長(zhǎng)度代碼、IDE 位、保留位r0[5]。數(shù)據(jù)場(chǎng)由數(shù)據(jù)幀里的發(fā)送數(shù)據(jù)組成。它可以為0~8 個(gè)字節(jié),每個(gè)字節(jié)包含了8 位。第一個(gè)字節(jié)為命令,接下來(lái)字節(jié)都為具體要發(fā)送的數(shù)據(jù)。發(fā)送的優(yōu)先級(jí)由節(jié)點(diǎn)的ID 決定,ID 越小[4],優(yōu)先級(jí)越高。
1.2.2 數(shù)據(jù)通訊的實(shí)現(xiàn)
數(shù)據(jù)通訊定義了網(wǎng)絡(luò)中傳輸數(shù)據(jù)的內(nèi)容和傳輸?shù)姆绞?。電機(jī)群控制系統(tǒng)的CAN 用戶層協(xié)議通訊模式由主從方式和事件觸發(fā)方式構(gòu)成。兩種模式搭配使用,增強(qiáng)了通訊協(xié)議的靈活性。主從通訊模式用于CAN 網(wǎng)絡(luò)中的主站對(duì)于從站的訪問(wèn)。事件觸發(fā)通訊模式用于從站主動(dòng)向主站傳送數(shù)據(jù)報(bào)文。
1.2.3 網(wǎng)絡(luò)管理
網(wǎng)絡(luò)管理的對(duì)象是于網(wǎng)絡(luò)中節(jié)點(diǎn)和報(bào)文發(fā)送狀態(tài)。對(duì)于CAN 網(wǎng)絡(luò)管理,其主要任務(wù)是處理網(wǎng)絡(luò)中的錯(cuò)誤,協(xié)調(diào)各個(gè)節(jié)點(diǎn)的狀態(tài),監(jiān)控報(bào)文的發(fā)送情況??梢苑譃楣?jié)點(diǎn)控制和通訊控制兩部分。節(jié)點(diǎn)管理[5]是指對(duì)總線上所有應(yīng)用節(jié)點(diǎn)進(jìn)行初始化,讓每個(gè)節(jié)點(diǎn)在通訊前處于準(zhǔn)備狀態(tài)并排除總線上是否存在相同的節(jié)點(diǎn)。通訊管理是管理網(wǎng)絡(luò)中通訊的報(bào)文,保證報(bào)文能夠正常地接受發(fā)送。
1.2.4 電機(jī)設(shè)備協(xié)議的原則
電機(jī)設(shè)備協(xié)議是網(wǎng)絡(luò)中電機(jī)設(shè)備的描述規(guī)則,在本系統(tǒng)中對(duì)CAN 應(yīng)用層協(xié)議的電機(jī)描述設(shè)備以及要執(zhí)行的命令參數(shù)定義見(jiàn)表1。
表1 命令類(lèi)型表
部分主要代碼如下:
void CAN1_Init(void),在此函數(shù)中設(shè)置過(guò)濾器,波特率以及管腳配置、中斷配置;
void Init_RxMes(CanRxMsg *RxMessage),初始化接收幀;
void CAN_SendInit (u8 addr),初始化節(jié)點(diǎn),addr 為目標(biāo)地址,當(dāng)addr 值取0X00 時(shí),表示廣播,各節(jié)點(diǎn)都收到信息;
void CANSetCo(u8 addr,s32 co),設(shè)置坐標(biāo),addr 為目標(biāo)地址,co 為設(shè)置的坐標(biāo);
void CANSetSpeed(u8 addr,s32 speed),設(shè)置速度,addr為目標(biāo)地址,speed 為設(shè)置的速度;
void USB_LP_CAN1_RX0_IRQHandler(void),下 位 機(jī)CAN1 接 收中斷處理函數(shù),更新線圈和寄存器。通過(guò)swtich 語(yǔ)句來(lái)實(shí)現(xiàn)不同信息的處理。
圖2 系統(tǒng)軟件流程圖
在電機(jī)群控制系統(tǒng)中,系統(tǒng)軟包括主控制器發(fā)送接收模塊、運(yùn)動(dòng)控制器發(fā)送接收模塊、CAN 通訊模塊。主控制器發(fā)送接收模塊向各個(gè)電機(jī)的運(yùn)動(dòng)控制器發(fā)送運(yùn)動(dòng)信息(設(shè)定位置、速度等),等待來(lái)自各運(yùn)動(dòng)控制器的反饋信息;運(yùn)動(dòng)控制器發(fā)送接收模塊接收到來(lái)自主控制器的命令后,對(duì)命令進(jìn)行解析,執(zhí)行相應(yīng)的操作控制電機(jī),并將電機(jī)的狀態(tài)信息反饋給主控制器。CAN 通訊模塊負(fù)責(zé)主控制器與各運(yùn)動(dòng)控制器之間數(shù)據(jù)通訊。系統(tǒng)軟件流程圖如圖2 所示。本設(shè)計(jì)采用美國(guó)Keil Software 公司出品的Keil uVision4 軟件開(kāi)發(fā)系統(tǒng),使用C 語(yǔ)言來(lái)開(kāi)發(fā)。
在試驗(yàn)中,用2 個(gè)電機(jī)進(jìn)行模擬測(cè)試,主控制器(節(jié)點(diǎn)1)向X 軸(節(jié)點(diǎn)2)和Y 軸(節(jié)點(diǎn)3)兩個(gè)電機(jī)的控制器發(fā)送指令,將LA1032 邏輯分析儀直接接入節(jié)點(diǎn)2 和節(jié)點(diǎn)3 的控制芯片的TIM1 上,同時(shí)測(cè)量節(jié)點(diǎn)2 和節(jié)點(diǎn)3 的脈沖波形,通過(guò)對(duì)比分析兩電機(jī)的協(xié)同工作情況及CAN 通訊協(xié)議的通信效果。
按編制的CAN 通訊協(xié)議,節(jié)點(diǎn)1 先發(fā)送一個(gè)廣播幀對(duì)各站點(diǎn)進(jìn)行初始化,再向節(jié)點(diǎn)2、節(jié)點(diǎn)3 同時(shí)發(fā)送周期為140us,占空比為50%的脈沖;1ms 以后,向節(jié)點(diǎn)2、節(jié)點(diǎn)3 發(fā)送周期為14us,占空比為50%的脈沖,兩種頻率不同的脈沖交替發(fā)送,相隔時(shí)間為1ms。邏輯分析儀觀察到節(jié)點(diǎn)2 和節(jié)點(diǎn)3 的波形圖如圖3。從圖3 可以看出,兩節(jié)點(diǎn)電機(jī)的執(zhí)行命令的時(shí)間差在20us 左右。表明通信協(xié)議是可行的,兩電機(jī)的同步控制誤差比較小。
圖3 邏輯分析儀顯示的節(jié)點(diǎn)2 和節(jié)點(diǎn)3 的波形圖
以STM32RBT6 ARM 芯片為主、從控制器,通過(guò)CAN 總線利用總線廣播模式實(shí)現(xiàn)電機(jī)群協(xié)同控制,其CAN 總線通信協(xié)議比較簡(jiǎn)單,電機(jī)群的協(xié)同控制效果好,且成本低,可靠性高,響應(yīng)速度快,該系統(tǒng)可實(shí)際應(yīng)用于工件切割、數(shù)控鉆孔。
[1]鄔寬明.CAN 總線原理和應(yīng)用的系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,1996.
[2]麥毅強(qiáng),倪文秀,王仁龍.基于DSP 的CAN 總線通信技術(shù)研究[J].微計(jì)算機(jī)信息,2010,8-2:111-113.
[3]彭剛.基于ARMCortex-M3 的STM32 系列嵌入式微控制器應(yīng)用實(shí)踐[M].北京:電子工業(yè)出版社,2011.
[4]劉濤,王宗義,孔慶磊,武光田.基于CAN 總線的多電機(jī)協(xié)調(diào)運(yùn)動(dòng)控制系統(tǒng)研究[J].機(jī)床與液壓,2010:38-3.
[5]佟為明,李鳳閣,林景波.基于CAN 總線的電力監(jiān)控器的研究[J].電工技術(shù)雜志,2004,8:68-71.