錢 城,陳家新
(東華大學 機械工程學院,上海 201620)
目前,在伺服驅動領域中,PLC變頻器控制逐漸被運動控制器驅動器所取代,因此傳統的用來調試PLC和變頻器的方法已然無法適用。在現今的運動控制系統調試中,往往是通過控制器、驅動器、伺服電機三者聯調實現的[1]。然而,各廠家為了自身利益,主推自家一體化產品,使得不同廠家的控制器和驅動器難以直接互換使用,直接增加了研發的難度,拖慢了研發的時間。對此,各廠家通過PC模擬控制主機,通過CAN分析儀發送相關數據給驅動器,從而調試伺服電機。盡管該方法無需專門配備主機調試,降低了一部分成本,但是性能強大的CAN分析儀同樣價格不菲,而且使用CAN分析儀進行調試必須保證驅動器的CANopen協議通訊正常。
針對上述調試問題,在此,利用驅動器上閑置的串口資源進行系統開發,驅動器直接通過串口與上位機相連接,將調試命令與調試數據直接通過串口發送。這樣不僅無需控制主機的支持,繞開CAN通訊限制,同時不必經常為修改參數而擦除程序重新下載,因此也在一定程度上延長單片機壽命[2]。
文中首先在STM32F4芯片上實現了CANopen DS402協議從站的運行,進而在從站程序中嵌入了一套基于串口的調試電機的系統。其中,DS402協議從站運行的程序框架如圖1所示。

圖1 CANopen運動控制協議程序框架Fig.1 Program framework of CANopen motion control protoco
從機程序首先對波特率、中斷以及CAN控制器等進行相關初始化,再將設定好的對象字典寫入STM32的內存中去,最后初始化CANopen協議棧。根據協議要求,通訊系統首先進入未準備啟動狀態和預操作狀態,完成系統自檢之后自動進入取消啟動狀態。此時,通訊系統可以接收主機的指令,進入準備啟動狀態、啟動狀態、允許運行狀態和快速停止狀態,并能夠在這些狀態與取消準備狀態之間切換。在任何運行狀態中,一旦出現故障,就會進入到故障響應狀態,并且通過故障狀態進入到取消準備狀態[3]。
由于在CANopen DS402協議中從機的運行狀態復雜,為便于調試,在此利用閑置的串口資源設計了一套調試電機狀態的系統,其原理框架如圖2所示。

圖2 串口調試系統原理框架Fig.2 Principle frame of serial port debugging system
PC端可以通過串口調試工具直接發送命令消息,串口接收到預設的命令之后,會觸發定時器中斷,導致CANopen主程序暫停,轉而執行中斷程序。理論上在任何狀態下,都可以利用中斷程序實現修改CANopen設備的對象字典、切換設備的運行狀態等功能,但是為了保證運動控制的安全性,當設備處于允許運行狀態的時候,調試功能會被限制在一定的范圍內。除了設備的運行狀態信息之外,串口也會將從站設備的初始化信息,故障錯誤信息等發送給上位機,從而使相關人員能更方便地監控設備運行情況、排查錯誤原因。
STM32F407ZGT6是意法半導體公司開發的一款32位微處理器。這款芯片擁有非常多的片上外設,在此使用了SRAM,Flash,16位定時器、串口、CAN口等資源[4]。
CAN口的外圍硬件電路如圖3(a)所示。STM內部具有CAN控制器,因此外接1個CAN收發器就完成了CAN物理層連接。在此,選用TJA1050收發器;在VCC與GND之間增加1個104電容,可以起到濾波,消除高頻噪聲的作用;在CAN_H和CAN_L之間加上1個終端120 Ω電阻來匹配總線阻抗,以提高數據通信的抗干擾性及可靠行[5]。
由于PC的USB口不遵循TTL電平,因此需要CH340G芯片將USB轉換成TTL電平。串口外圍電路設計如圖3(b)所示。其中,RXD和TXD口分別與STM32的PA9和PA10引腳連接,D+和D-口通過標準的接口與USB相連即可。

圖3 硬件相關電路Fig.3 Hardware correlation circuit
調試平臺使用串口進行通信,串口波特率設為115200,停止位設為1 b,數據位設為8 b,奇偶校驗選擇無。上位機可以使用任意的串口調試軟件。
系統啟動后會顯示調試的幫助信息,幫助信息中包含2個指令:help和list指令。help指令可以隨時獲得調試的幫助信息;list指令可以顯示當前可用的函數名和列表。
函數中存在常量UART_USE_HELP,其值默認設置為1,這樣一旦系統開始運行,幫助信息界面就會顯示;如果對幫助系統比較熟悉,可以將其改為0。另外,list中的函數并不是要進入list界面之中才能使用。在系統啟動之后,隨時可以輸入list中的函數進行調用。
由于CANopen中運行狀態復雜,顯示當前的運行狀態是非常必要的。系統內部顯示流程如圖4所示。

圖4 顯示流程Fig.4 Display flow chart
一旦STM32外設初始化之后,會顯示CANopen系統的基本信息。隨著CANopen協議棧初始化的完成,節點號、CAN控制器、對象字典以及CANopen各項服務的初始化信息也會在界面上進行顯示。在STM32和協議棧初始化時,如果程序發生錯誤,界面上會顯示錯誤信息,程序也會停止運行。當設備開始運行之后,運行狀態只有改變之后才會才上位機上顯示。運行狀態出現錯誤會使得設備進入故障響應狀態,并不會使程序停止運行,上位機也會及時顯示當前的錯誤信息以及運行狀態。
CANopen DS402協議的運動控制相關參數均保存在對象字典里,因此利用串口對相關的對象字典進行寫操作即可修改CANopen運行中的參數。為了方便調試,可用的修改指令都添加在list指令之下,調試人員可以按照list所顯示的函數清單通過編寫好的函數進行相關參數的修改。文中針對運動控制中一些常用的參數進行了修改程序的編寫,可修改的相關參見表1。

表1 常用參數Tab.1 Common parameter
上位機通過串口調試軟件與STM32進行串口通訊,實現了初始化顯示、人機交互以及修改參數的功能。完成串口程序設置后打開串口,就會進入初始化顯示。
初始化顯示信息如圖5所示。首先顯示項目名稱,使用人信息以及系統版本號。其次顯示初始化節點信息和CANopen各項服務的初始化信息,至此就開始等待主機通訊。在等待主機通訊的同時進行自檢,直至設置完成PDO,SDO的通道,從機可對主機命令進行執行與應答操作,狀態機也將從未準備啟動狀態切換到準備啟動狀態。
人機交互界面中help指令和list指令顯示的信息如圖6所示。在初始化完成之后的任何時間都可以直接使用這2個指令。help指令會呼出幫助界面,方便調試者了解系統的幫助指令;list指令會呼出系統所有可用的函數命令以及調用命令的格式,無需調試人員記住所有調用的函數及其格式。幫助系統并非僅支持這2個指令,使用者還可以按照自己的想法,在程序里定義的結構體變量sys_cmd_tab中,添加幫助指令及其功能。
修改參數功能是利用STM32的中斷,對CANopen程序中對象字典的相關參數進行讀寫操作,從而達到上位機直接修改進行調試的目的。因此可以通過讀取對象字典中相應的參數來對此功能進行驗證。

圖5 初始化顯示信息Fig.5 Initialize display information

圖6 人機交互顯示信息Fig.6 Human-computer interaction display information
在系統啟動之后,利用傳統的CAN分析儀通過SDO服務來讀取相關對象字典,讀取的各參數初始值如圖 7(a)所示。
在CANopen協議中,數據位第1個字節為功能碼,第2和第3字節為對象字典主索引,第4字節為子索引,之后的4個字節為傳輸的數據位[6]。因此,由圖可見,程序初始化后初值除電機狀態、實際轉矩、軌跡速度之外全部為0。
在獲得初值之后,上位機通過串口調試軟件,利用調試系統對相關參數進行修改,修改界面及相關參數值如圖7(b)所示。由于CANopen通訊中所有參數為16進制數,因此在輸入參數時程序中會將輸入的參數值轉換為16進制。
修改結束后,通過SDO服務讀取電機參數的對象字典,可以發現參數值已經改變成重新設定的值,如圖 7(c)所示。

圖7 電機控制參數相關值Fig.7 Motor control parameter correlation values
針對傳統CANopen設備調試繁瑣的問題,利用閑置的串口資源,設計了一個小型的調試系統,實現了上位機繞過CANopen服務主機,直接控制從機對電機進行調試,免去以往調試、修改、下載、再次調試的復雜操作。目前,該調試系統已在企業機械臂運動調試中投入應用,縮短了設備調試的時間,提高了工作效率。