錢 城,陳家新
(東華大學(xué) 機械工程學(xué)院,上海 201620)
目前,在伺服驅(qū)動領(lǐng)域中,PLC變頻器控制逐漸被運動控制器驅(qū)動器所取代,因此傳統(tǒng)的用來調(diào)試PLC和變頻器的方法已然無法適用。在現(xiàn)今的運動控制系統(tǒng)調(diào)試中,往往是通過控制器、驅(qū)動器、伺服電機三者聯(lián)調(diào)實現(xiàn)的[1]。然而,各廠家為了自身利益,主推自家一體化產(chǎn)品,使得不同廠家的控制器和驅(qū)動器難以直接互換使用,直接增加了研發(fā)的難度,拖慢了研發(fā)的時間。對此,各廠家通過PC模擬控制主機,通過CAN分析儀發(fā)送相關(guān)數(shù)據(jù)給驅(qū)動器,從而調(diào)試伺服電機。盡管該方法無需專門配備主機調(diào)試,降低了一部分成本,但是性能強大的CAN分析儀同樣價格不菲,而且使用CAN分析儀進行調(diào)試必須保證驅(qū)動器的CANopen協(xié)議通訊正常。
針對上述調(diào)試問題,在此,利用驅(qū)動器上閑置的串口資源進行系統(tǒng)開發(fā),驅(qū)動器直接通過串口與上位機相連接,將調(diào)試命令與調(diào)試數(shù)據(jù)直接通過串口發(fā)送。這樣不僅無需控制主機的支持,繞開CAN通訊限制,同時不必經(jīng)常為修改參數(shù)而擦除程序重新下載,因此也在一定程度上延長單片機壽命[2]。
文中首先在STM32F4芯片上實現(xiàn)了CANopen DS402協(xié)議從站的運行,進而在從站程序中嵌入了一套基于串口的調(diào)試電機的系統(tǒng)。其中,DS402協(xié)議從站運行的程序框架如圖1所示。
圖1 CANopen運動控制協(xié)議程序框架Fig.1 Program framework of CANopen motion control protoco
從機程序首先對波特率、中斷以及CAN控制器等進行相關(guān)初始化,再將設(shè)定好的對象字典寫入STM32的內(nèi)存中去,最后初始化CANopen協(xié)議棧。根據(jù)協(xié)議要求,通訊系統(tǒng)首先進入未準備啟動狀態(tài)和預(yù)操作狀態(tài),完成系統(tǒng)自檢之后自動進入取消啟動狀態(tài)。此時,通訊系統(tǒng)可以接收主機的指令,進入準備啟動狀態(tài)、啟動狀態(tài)、允許運行狀態(tài)和快速停止?fàn)顟B(tài),并能夠在這些狀態(tài)與取消準備狀態(tài)之間切換。在任何運行狀態(tài)中,一旦出現(xiàn)故障,就會進入到故障響應(yīng)狀態(tài),并且通過故障狀態(tài)進入到取消準備狀態(tài)[3]。
由于在CANopen DS402協(xié)議中從機的運行狀態(tài)復(fù)雜,為便于調(diào)試,在此利用閑置的串口資源設(shè)計了一套調(diào)試電機狀態(tài)的系統(tǒng),其原理框架如圖2所示。
圖2 串口調(diào)試系統(tǒng)原理框架Fig.2 Principle frame of serial port debugging system
PC端可以通過串口調(diào)試工具直接發(fā)送命令消息,串口接收到預(yù)設(shè)的命令之后,會觸發(fā)定時器中斷,導(dǎo)致CANopen主程序暫停,轉(zhuǎn)而執(zhí)行中斷程序。理論上在任何狀態(tài)下,都可以利用中斷程序?qū)崿F(xiàn)修改CANopen設(shè)備的對象字典、切換設(shè)備的運行狀態(tài)等功能,但是為了保證運動控制的安全性,當(dāng)設(shè)備處于允許運行狀態(tài)的時候,調(diào)試功能會被限制在一定的范圍內(nèi)。除了設(shè)備的運行狀態(tài)信息之外,串口也會將從站設(shè)備的初始化信息,故障錯誤信息等發(fā)送給上位機,從而使相關(guān)人員能更方便地監(jiān)控設(shè)備運行情況、排查錯誤原因。
STM32F407ZGT6是意法半導(dǎo)體公司開發(fā)的一款32位微處理器。這款芯片擁有非常多的片上外設(shè),在此使用了SRAM,F(xiàn)lash,16位定時器、串口、CAN口等資源[4]。
CAN口的外圍硬件電路如圖3(a)所示。STM內(nèi)部具有CAN控制器,因此外接1個CAN收發(fā)器就完成了CAN物理層連接。在此,選用TJA1050收發(fā)器;在VCC與GND之間增加1個104電容,可以起到濾波,消除高頻噪聲的作用;在CAN_H和CAN_L之間加上1個終端120 Ω電阻來匹配總線阻抗,以提高數(shù)據(jù)通信的抗干擾性及可靠行[5]。
由于PC的USB口不遵循TTL電平,因此需要CH340G芯片將USB轉(zhuǎn)換成TTL電平。串口外圍電路設(shè)計如圖3(b)所示。其中,RXD和TXD口分別與STM32的PA9和PA10引腳連接,D+和D-口通過標準的接口與USB相連即可。
圖3 硬件相關(guān)電路Fig.3 Hardware correlation circuit
調(diào)試平臺使用串口進行通信,串口波特率設(shè)為115200,停止位設(shè)為1 b,數(shù)據(jù)位設(shè)為8 b,奇偶校驗選擇無。上位機可以使用任意的串口調(diào)試軟件。
系統(tǒng)啟動后會顯示調(diào)試的幫助信息,幫助信息中包含2個指令:help和list指令。help指令可以隨時獲得調(diào)試的幫助信息;list指令可以顯示當(dāng)前可用的函數(shù)名和列表。
函數(shù)中存在常量UART_USE_HELP,其值默認設(shè)置為1,這樣一旦系統(tǒng)開始運行,幫助信息界面就會顯示;如果對幫助系統(tǒng)比較熟悉,可以將其改為0。另外,list中的函數(shù)并不是要進入list界面之中才能使用。在系統(tǒng)啟動之后,隨時可以輸入list中的函數(shù)進行調(diào)用。
由于CANopen中運行狀態(tài)復(fù)雜,顯示當(dāng)前的運行狀態(tài)是非常必要的。系統(tǒng)內(nèi)部顯示流程如圖4所示。
圖4 顯示流程Fig.4 Display flow chart
一旦STM32外設(shè)初始化之后,會顯示CANopen系統(tǒng)的基本信息。隨著CANopen協(xié)議棧初始化的完成,節(jié)點號、CAN控制器、對象字典以及CANopen各項服務(wù)的初始化信息也會在界面上進行顯示。在STM32和協(xié)議棧初始化時,如果程序發(fā)生錯誤,界面上會顯示錯誤信息,程序也會停止運行。當(dāng)設(shè)備開始運行之后,運行狀態(tài)只有改變之后才會才上位機上顯示。運行狀態(tài)出現(xiàn)錯誤會使得設(shè)備進入故障響應(yīng)狀態(tài),并不會使程序停止運行,上位機也會及時顯示當(dāng)前的錯誤信息以及運行狀態(tài)。
CANopen DS402協(xié)議的運動控制相關(guān)參數(shù)均保存在對象字典里,因此利用串口對相關(guān)的對象字典進行寫操作即可修改CANopen運行中的參數(shù)。為了方便調(diào)試,可用的修改指令都添加在list指令之下,調(diào)試人員可以按照list所顯示的函數(shù)清單通過編寫好的函數(shù)進行相關(guān)參數(shù)的修改。文中針對運動控制中一些常用的參數(shù)進行了修改程序的編寫,可修改的相關(guān)參見表1。
表1 常用參數(shù)Tab.1 Common parameter
上位機通過串口調(diào)試軟件與STM32進行串口通訊,實現(xiàn)了初始化顯示、人機交互以及修改參數(shù)的功能。完成串口程序設(shè)置后打開串口,就會進入初始化顯示。
初始化顯示信息如圖5所示。首先顯示項目名稱,使用人信息以及系統(tǒng)版本號。其次顯示初始化節(jié)點信息和CANopen各項服務(wù)的初始化信息,至此就開始等待主機通訊。在等待主機通訊的同時進行自檢,直至設(shè)置完成PDO,SDO的通道,從機可對主機命令進行執(zhí)行與應(yīng)答操作,狀態(tài)機也將從未準備啟動狀態(tài)切換到準備啟動狀態(tài)。
人機交互界面中help指令和list指令顯示的信息如圖6所示。在初始化完成之后的任何時間都可以直接使用這2個指令。help指令會呼出幫助界面,方便調(diào)試者了解系統(tǒng)的幫助指令;list指令會呼出系統(tǒng)所有可用的函數(shù)命令以及調(diào)用命令的格式,無需調(diào)試人員記住所有調(diào)用的函數(shù)及其格式。幫助系統(tǒng)并非僅支持這2個指令,使用者還可以按照自己的想法,在程序里定義的結(jié)構(gòu)體變量sys_cmd_tab中,添加幫助指令及其功能。
修改參數(shù)功能是利用STM32的中斷,對CANopen程序中對象字典的相關(guān)參數(shù)進行讀寫操作,從而達到上位機直接修改進行調(diào)試的目的。因此可以通過讀取對象字典中相應(yīng)的參數(shù)來對此功能進行驗證。
圖5 初始化顯示信息Fig.5 Initialize display information
圖6 人機交互顯示信息Fig.6 Human-computer interaction display information
在系統(tǒng)啟動之后,利用傳統(tǒng)的CAN分析儀通過SDO服務(wù)來讀取相關(guān)對象字典,讀取的各參數(shù)初始值如圖 7(a)所示。
在CANopen協(xié)議中,數(shù)據(jù)位第1個字節(jié)為功能碼,第2和第3字節(jié)為對象字典主索引,第4字節(jié)為子索引,之后的4個字節(jié)為傳輸?shù)臄?shù)據(jù)位[6]。因此,由圖可見,程序初始化后初值除電機狀態(tài)、實際轉(zhuǎn)矩、軌跡速度之外全部為0。
在獲得初值之后,上位機通過串口調(diào)試軟件,利用調(diào)試系統(tǒng)對相關(guān)參數(shù)進行修改,修改界面及相關(guān)參數(shù)值如圖7(b)所示。由于CANopen通訊中所有參數(shù)為16進制數(shù),因此在輸入?yún)?shù)時程序中會將輸入的參數(shù)值轉(zhuǎn)換為16進制。
修改結(jié)束后,通過SDO服務(wù)讀取電機參數(shù)的對象字典,可以發(fā)現(xiàn)參數(shù)值已經(jīng)改變成重新設(shè)定的值,如圖 7(c)所示。
圖7 電機控制參數(shù)相關(guān)值Fig.7 Motor control parameter correlation values
針對傳統(tǒng)CANopen設(shè)備調(diào)試繁瑣的問題,利用閑置的串口資源,設(shè)計了一個小型的調(diào)試系統(tǒng),實現(xiàn)了上位機繞過CANopen服務(wù)主機,直接控制從機對電機進行調(diào)試,免去以往調(diào)試、修改、下載、再次調(diào)試的復(fù)雜操作。目前,該調(diào)試系統(tǒng)已在企業(yè)機械臂運動調(diào)試中投入應(yīng)用,縮短了設(shè)備調(diào)試的時間,提高了工作效率。