1. 程式人生 > 其它 >CANopen筆記3 -- DS402運動控制子協議

CANopen筆記3 -- DS402運動控制子協議

  DS301就是一個通訊協議棧,DS402是建立在DS301基礎之上的伺服類控制協議。協議中規定好每個物件字典值的作用,比如0x6040,是控制字。DS402把一個伺服控制系統應該具有的功能都定義好了,廠家和使用者按照協議定義即可開發和使用符合標準的裝置。

  • NMT

  NMT是網路管理報文,用於實現一些管理操作,比如節點重啟、進入執行狀態等,網路管理狀態轉換圖如下:

  初始化:裝置處於啟動狀態,不能進行通訊
  預執行:裝置啟動完畢,還未進入執行模式。裝置僅回覆SDO、NMT訊息
  執行:正常工作,可回覆SDO、NMT、PDO
  停止:僅能傳送NMT(包括心跳訊息)

  NMT報文格式很簡單,COB-ID固定為0x000,資料為:NMT命令 + 從裝置節點ID(0x00表示廣播

  • Boot-up Messages

  裝置開機啟動完成初始化進入預執行狀態時,會產生boot-up事件,傳送一條boot-up訊息。boot-up訊息的COB-ID為:0x700 + Node ID。
  假設節點ID為1,則該節點開機後會傳送boot-up message(0x00 data, always 0

  • 裝置控制

  根據DS402協議(Chapter 6:Device Control Objects),裝置的狀態由下圖描述。The device states and possible control sequence of the drive are described by the state machine,

as depicted in the following figure:

  如上圖所示,狀態機可以分成三部分:“ Power Disabled(主電關閉)、“ Power Enabled”(主電開啟)和“Fault”。所有狀態在發生報警後均進 入“Fault”。在上電後 ,驅動器完成初始化, 然後進入SWITCH_ON_DISABLED狀態。在該狀態,可以進行CAN通訊,可以對驅動器進行配置(例如,將驅動器的工作模式設定成“ PP”模式)。此時,主電仍然關閉,電機沒有被勵磁。經過State Transition234 後,進入OPERATION ENABLE。此時,主電已開啟,驅動器根據配置的工作模式控制電

機。因此,在該狀態之前必須先確認已經正確配置了驅動器的引數。 State Transition9 完成關閉電路主電。一旦驅動器發生報警,驅動器的狀態都進入FAULT

  裝置上電自檢和初始化完成後,會自動進入switch on disabled狀態(The drive performs transitions 0 and 1 after initiation, either at power up or at NMT node reset)。狀態之間的轉變可以通過向物件字典0x6040處寫入控制字實現(參考DS402-Chapter 6.5);查詢裝置狀態可以通過讀取狀態字實現(參考DS402-Chapter 6.6)。

  下面進行一個測試,通過USB-CAN介面用PC機給elmo電機驅動器傳送SDO資料幀(COB型別為:SDO-Receive,以驅動器的角度來看傳送和接收),來查詢裝置狀態。驅動器節點ID為1,SDO-Receive對應的功能碼為0b1100,則COB-ID為:0b1100 0000 001->0x601。資料域中第一個位元組為SDO命令,這裡為0x40;接著3個位元組為物件索引和物件子索引,由於沒有子索引,該位元組為0x00;最後四個位元組為保留位元組,全部為0。按照小端模式,資料域中的8個位元組資料為0x40 41 60 00 00 00 00 00裝置返回資料幀ID為0x581(SDO-Transmit對應的功能碼為0b1011,則COB-ID為:0b1011 0000 001->0x581)。資料域中第一個位元組0x4B表示返回資料有16位,即0x0250。狀態字中的Bits 0-3, 5 and 6這幾位的組合表示驅動器所處的狀態,根據描述表,可知0x0250表示驅動器處於Switch on disabled的狀態。

  從Switch on disabled狀態到Ready to switch on狀態傳送: 0x2B 40 60 00 06 00 00 00

  從Ready to switch on狀態到Switch on狀態傳送:     0x2B40 60 0007 00 00 00

  從Ready to switch on或Switch on到Operation enable狀態傳送:0x2B 40 60 000F 00 0000

具體狀態轉變傳送的指令參考下表:

  • 控制模式

  The drive behavior depends on the activated modes of operation.The modes-of-operation variables are initialized at reset to nomode (value 0) .If set to OPERATION ENABLE, the motor stands still until an explicit motion command is receivedvia a control word.Modes of operation用於設定控制模式,Modes of operation display用於讀取當前控制模式。

  常見的一些模式如下:

  傳送0x40 61 60 00 00 00 00 00查詢當前驅動器控制模式,返回資料為:0x4F 61 60 00 01 00 00 00. 根據上表可知,驅動器處於位置控制模式。傳送0x2F 60 60 00 04 00 00 00,可以將其改為力矩/電流模式。

  一般伺服都有三種控制方式:速度控制方式,轉矩控制方式,位置控制方式。之所以有這三中控制方式,是因為伺服一般為三個環控制。所謂三環就是3個閉環負反饋PID調節系統。由伺服系統的三個控制迴路來實現。

  第1環是電流環,它是最內環。此環完全在伺服驅動器內部進行,通過霍爾裝置檢測驅動器給電機的各相的輸出電流,負反饋給電流的設定進行PID調節,從而達到輸出電流盡量接近等於設定電流,電流環就是控制電機轉矩的,所以在轉矩模式下驅動器的運算最小,動態響應最快

  第2環是速度環,它是次外環,通過檢測的電機編碼器的訊號來進行負反饋PID調節,它的環內PID輸出直接就是電流環的設定,所以速度環控制時就包含了速度環和電流環,換句話說任何模式都必須使用電流環,電流環是控制的根本,在速度和位置控制的同時系統實際也在進行電流(轉矩)的控制以達到對速度和位置的相應控制

  第3環是位置環,它是最外環,可以在驅動器和電機編碼器間構建也可以在外部控制器和電機編碼器或最終負載間構建,要根據實際情況來定。由於位置控制環內部輸出就是速度環的設定,位置控制模式下系統進行了所有3個環的運算,此時的系統運算量最大,動態響應速度也最慢。

  • 位置模式運動引數

  target position 是給定目標位置,該位置可以是相對值,也可以是絕對值,取決於controlword的bit6
  profile velocity 是指電機啟動完成加速階段後達到的速度
  max profile velocity 是位置模式下運動過程中允許的最大速度
  end velocity 是到達給定位置時的速度。通常為了在到達給定位置時停止驅動器,該引數設定為 0;但在連續多點位置時,該值可以設定成非零值
  maximal acceleration/deceleration 是指最大加減速度,用來限制加減速度範圍,防止電機和運動機構遭受損壞
  profile acceleration 是到達給定位置期間的加速度
  profile deceleration 是到達給定位置期間的減速度
  quick stop deceleration 是急停命令(Quick Stop command)發出時的減速度
  motion profile type 被用來選擇何種速度曲線

  • 位置控制模式

  位置模式的控制字(0x6040):

  其中第4,5,6位所代表的資訊與具體執行模式有關,位置模式下的控制字如下:

  位置模式的狀態字(0x6041):

  按照下表寫入相應的控制字,可以設定期望的位置運動模式:

  If the change set immediately bit of theControlwordis set to 1, one set-point is still in progressand a new one is activated, the previous motion is discarded without setting thetarget reachedbitand a new one is started with its target position and speed. Thetarget reachedbit is set on theend of the new profile.

  給定目標位置有兩種方法:
單步設定:電機到達目標位置後,驅動器通知主機“目標位置到達”,然後獲取新的目標位置並開始運動。在獲取新的目標位置前,電機速度減速到零。
連續設定:電機到達目標位置後,立即繼續朝下一個事先設定好的目標位置運動。這樣可達到無停頓的連續運動效果,在兩個目標位置之間,電機可以無需減速到零。

======================================================================================

  單步設定方法的步驟:
1、首先設定節點NMT狀態為Operational(0x01 start remote node;0x00 means "for all nodes")
0x00 0x01 0x00
2、設定執行模式為位置模式
  0x601 0x22 0x60 0x60 0x00 0x01 0x00 0x00 0x00
3、設定位置模式的運動引數(如速度、加速度等)
  0x601 0x22 0x81 0x60 0x00 XX XX XX XX
  0x601 0x22 0x83 0x60 0x00 XX XX XX XX
4、裝置進入Ready to switch on狀態
  0x601 0x22 0x40 0x60 0x00 0x06 0x00 0x00 0x00
5、裝置進入Switch on狀態
  0x601 0x22 0x40 0x60 0x00 0x07 0x00 0x00 0x00
6、裝置進入Operation enable狀態
  0x601 0x22 0x40 0x60 0x00 0x0F 0x00 0x00 0x00
7、設定目標位置(10000)
  0x601 0x22 0x7A 0x60 0x00 0x10 0x27 0x00 0x00
8、設定位置模式控制字(absolute,immediate,not blended)
  0x601 0x22 0x40 0x60 0x00 0x3F 0x00 0x00 0x00
或設定為:relative,immediate,not blended
0x601 0x22 0x40 0x60 0x00 0x7F 0x00 0x00 0x00

9、 傳送指令?Set-point acknowledge位?
  0x601 0x22 0x40 0x60 0x00 0x0F 0x00 0x00 0x00
10、設定新目標位置(假設為0)
  0x601 0x22 0x7A 0x60 0x00 0x00 0x00 0x00 0x00
11、設定位置模式控制字,開始運動
  0x601 0x22 0x40 0x60 0x00 0x3F 0x00 0x00 0x00

========================================================================================

  • 單位換算

  伺服驅動器被廣泛應用在各種場合。為了在各類應用時都能方便地設定引數,驅動器內部的單位換算單元可以將任意使用者單位引數值自動與驅動器內部單位值自動互換。

  position factor物件將使用者端的所有長度單位轉換成驅動器內部單位(脈衝),同時也將驅動器輸出量的長度單位(脈衝)轉換成使用者端的長度單位(position units)。Position value in user units can be calculated from position in internal units by the formula:

  • Binary Interpreter Commands

  The Binary Interpreter is designedto simplify the way by whichCAN master can get and set Elmo commands. By default, PDO2 is mapped to the BinaryInterpreter objects. In that way, the CAN host can address the Elmo commands immediatelyafter power up.The Binary Interpreter uses the 2-letters format where the first two bytes are the explicitcommand for example in order to get the AC command, the first two transmitted bytes will beASCII value of ‘A’ & ‘C’ which is 0x41 & 0x43 respectively. For detailed information about theElmo commands, please refer to the Gold Command Reference manual.

  注意:由於Binary Interpreter使用了RPTO2和TPDO2,因此驅動器需要處於Operational NMT狀態,否則不能進行PDO通訊(NMTstart node command must be sent before)。通過CAN傳送2進位制指令和通過RS-232串列埠傳送ASCII指令的區別如下:

  RS-232 operation is fast and simple, requiring no detailed understanding of communication processes. CANopen communication achieveshigher ratesand is able to supportadvanced functions.

  Set and Query Commands

  The host (client) sends commands (RPDO2) for setting variables in eight bytes (DLC=8). Thedrive (server) transmits the reply (TPDO2) as an asynchronous event of the received object.

RPDO2用來設定驅動器引數和讀取相關值,命令結構如下:

位元組0—位元組1: 指令的ASCII碼(注意字母都是大寫),比如"PX"指令,相應的ASCII碼為0x50 0x58,分別代表大寫字母P和X

位元組4—位元組7: 4位元組的資料,可以為整數或浮點數,以小端模式儲存

位元組2—位元組3: command index(when needed) and data type(float or integer)

  位元組2的0-7位和位元組3的0-5位:In array commands in which the index is used (as in ET[100]), the lowest significant bits are inbyte 2 (bits 0 to 7) and the most significant bits are in byte 3.

  位元組3的第6位:When this bit is set to 1, the drive treats the command as aqueryand not as asetting.In thiscase, the rest of the data bytes are discarded. (For compatibility reasons, bytes 4 to 7 should be 0.)

  位元組3的第7位:Always use the bit 7 of byte 3 to indicate the data type (float or integer) in the transmittedmessage.

  驅動器通過TPDO2回覆客戶端的設定或查詢指令。The server (drive) replies (TPDO2) to query and set requests in eight bytes (DLC=8):

  Bytes 0 to 3 are the header, which includes the responding command, command index(when needed) and data type (float or integer). It also indicates whether the responsedata is true data or an error code. When this byte 3,bit 6 is 1 for TPDO, the data in bytes 4 to 7 should be interpreted as an error code.Bytes 4 to 7 are dataor an error code.

  驅動器的回覆格式如下(Byte3的第6位如果為1,則資料為錯誤程式碼):

Example:

  1. 設定CL[1] = 1.0,浮點數1.0表示為3F800000h(參考IEEE 754標準),則通過RPDO2傳送的資料如下:

  2. 設定AC=150000(0249F0h),傳送的資料如下:

  3. 獲取AC的值,傳送資料如下(資料長度為4位元組):

    或者傳送如下資料(資料長度為8位元組):

  4. 獲取ET[992](992 = 3E0h)的值,假設該值為32121(7D79h),則傳送如下資料:

  5. 獲取編碼器位置,通過RS232傳送字串指令"PX"或通過CAN介面傳送二進位制指令:

  TPDO2返回資料為0x2710 —> 10000,即當前編碼器在10000個脈衝位置。

  設定編碼器位置為0(需要先關閉電機,傳送"MO=0",或通過RPDO2傳送:0x4D 4F 00 00 00 00 00 00),傳送如下圖所示的資料幀後,編碼器位置被清零,文字框中的10000變為了0。

  6. 傳送"PA/PR=10000"和"BG"指令,控制電機運動到絕對/相對位置10000,實現相同的功能可通過RPDO2傳送如下指令:

  PA=10000:0x50 41 00 00 10 27 00 00  PR=10000:0x50 52 00 00 10 27 00 00
  BG:0x42 47 00 00

  傳送"PR=-10000"讓電機朝相反方向運動(-10000的補碼為:0xFF FF D8 F0),則傳送如下指令設定相對運動位置:
  0x50 52 00 00 F0 D8 FF FF

  7. 傳送TC指令設定電流大小,並切換到力矩/電流模式,電機即可運動。比如通過RS232傳送"TC=1.5",電機即以指定的電流大小運動。

  8. 傳送JV和BG指令,電機將以指定的速度執行。

  9. 通過KP[1],KI[1]調整力矩/電流模式下的比例和積分系數。

  Execute Command

  Execute指令不帶運算元,用於控制驅動器完成特定的功能。The reply to thesecommands is only an acknowledgement or an error code.

  Example: 傳送BG指令(BG – Begin Motion:The BG command is used to activate the next profiled motion),傳送資料如下:

  返回資料長度為8位元組,並表明操作成功或失敗(失敗時資料為錯誤程式碼):

參考:

http://blog.csdn.net/gw569453350game/article/details/51025425

http://www.itek.net.cn/bbs/thread-328-1-1.html

位置 速度 轉矩3種控制方式介紹