舵機SCS通信協議
1 通信協議概要
通訊電平採用兼容高速通信的TTL電平方式與具有較強抗干擾能力的RS485方式,通訊仍是採用異步雙工,發送與接收信號是異步處理。
控制器和舵機之間採用問答方式通信,控制器發出指令幀,舵機返回應答幀。
一個總線控制網絡中允許有多個舵機,所以每個舵機都分配有一個網絡內唯一的ID號。控制器發出的控制指令中包含ID信息,只有匹配上ID號的舵機才能完整接收這條指令,並返回應答信息。
通信方式爲串行異步方式,一幀數據分爲1位起始位,8位數據位和1位停止位,無奇偶校驗位,共10位。
內存表的部分參數採用兩個字節的值域時,兩個字節順序根據舵機型號區分,電位器類型舵機爲大端格式(高字節在前低字節在後),磁編碼類型舵機爲小端格式(低字節在前高字節在後)。每款舵機因功能略有不同,因此實際控制時請參照具體型號的內存表爲準。
2 指令幀
字頭:連續收到兩個0xFF ,表示有數據包到達。 ID號:每個舵機都有一個ID號。ID號範圍0~253,轉換爲十六進制0x00~0xFD。
廣播ID:ID號254爲廣播ID,若控制器發出的ID號爲254(0xFE),所有的舵機均接收指令,除PING指令外其它指令均不返回應答信息(多個舵機連接在總線上不能使用廣播PING指令)。
數據長度:等於待發送的參數N加上2,即“N+2”。
指令:數據包操作功能碼,詳見1.3指令類型。
參數:除指令另外需要補充的控制信息,參數最大支持雙字節參數表示一個內存值,字節順序參考舵機使用手冊內存控制表(不同型號舵機字節順序不一樣)。
校驗和:校驗和Check Sum,計算方法如下 Check Sum = ~ (ID + Length + Instruction + Parameter1 + … Parameter N) 若括號內的計算和超出255, 則取最低的一個字節,“~”表示取反。
3 應答幀
返回的應答幀包含舵機的當前狀態ERROR,若舵機當前工作狀態不正常,會通過這個字節反映出來(各狀態所代表意義詳見手冊內存控制表),若ERROR爲0,則舵機無報錯信息。
4 指令類型
4.1 查詢狀態指令PING
功能:讀取舵機的工作狀態
長度:0x02
指令:0x01
參數:無
PING指令使用廣播地址,舵機同樣返回應答信息。
例1:讀取ID號爲1的舵機的工作狀態。
指令幀:FF FF 01 02 01 FB(按十六進制發送)
字头:FF FF
ID:01
长度:02
指令:01
校验和:FB應答幀: FF FF 01 02 00 FC(十六進制顯示)
字头:FF FF
ID:01
长度:02
状态:00
校验和:FC4.2 讀指令READ DATA
功能:從舵機內存控制表裏讀出數據
長度:0x04
指令:0x02
參數1:數據讀出段的首地址
參數2:讀取數據的長度
例2:讀取ID爲1的舵機的當前位置(低位字節在前,高位字節在後)。位置參數內存表地址爲0X38,連續二個字節。
指令幀:FF FF 01 04 02 38 02 BE(按十六進制發送)
字头:FF FF
ID:01
长度:04
指令:02
参数:38 02(当前位置地址 读数据长度)
校验和:BE應答幀:FF FF 01 04 00 18 05 DD(十六進制顯示)
字头:FF FF
ID:01
长度:04
状态:00
参数:18 05
校验和:DD讀出兩個字節數據分別是(小端結構):低位字節L 0x18 高位字節H 0x05,兩字節合成16位數據0X0518,用十進制表示當前的位置爲1304。
4.3 寫指令WRITE DATA
功能:寫數據到舵機內存控制表
長度:N+2(N爲參數長度)
指令:0x03
參數1:數據寫入段的首地址
參數2:寫入第1個數據
參數3:寫入第2個數據 …
參數N:寫入第n個數據,N=n+1
例3:使用廣播ID (0xFE)把任意編號舵機的ID設置爲1,在內存表裏保存ID號的地址爲5。
指令幀:FF FF FE 04 03 05 01 F4 (按十六進制發送)
字头:FF FF
ID:01
长度:04
指令:03
参数:05 01(ID地址 新ID值)
校验和:F4因爲採用廣播ID發送指令,所以不會有數據返回。另外內存表EPROM 具有保護鎖開關,修改ID前需要把它關掉(置0),不然示例ID號掉電將不保存。詳細操作請查閱具體舵機型號的內存表或操作手冊。
例4:控制ID1舵機以1000步每秒的速度轉動到2048的位置。內存表目標位置的首地址爲0x2A,所以在地址0x2A處開始寫入連續六個字節數據。
位置數據0x0800(2048)
預留數據0x0000(0)
速度數據0x03E8(1000)
指令幀:FF FF 01 09 03 2A 00 08 00 00 E8 03 D5(按十六進制發送)
字头:FF FF
ID:01
长度:09
指令:03
参数:
2A(首地址)
00 08(位置)
00 00(预留)
E8 03(速度)
校验和:D5應答幀:FF FF 01 02 00 FC(十六進制顯示)
字头:FF FF
ID:01
长度:02
状态:00
校验和:FC返回工作狀態爲0,表示舵機正確無錯接收到指令並已開始執行。發送指令包的ID使用非廣播ID (0xFE),所以指令接收完成後舵機將返回狀態包。
4.4 異步寫指令REG WRITE
REG WRITE指令相似於WRITE DATA,只是執行的時間不同。當收到REG WRITE指令幀時,把收到的數據儲存在緩衝區備用,並把異步寫標誌寄存器置1。當收到ACTION指令後,儲存的指令最終被執行。
長度:N+2(N爲參數長度)
指令:0x04
參數1:數據要寫入區的首地址
參數2:寫入的第1個數據
參數3:寫入的第2個數據
參數N:寫入的第n個數據,N=n+1
例5:控制ID1到ID10舵機以1000每秒的速度轉動到2048的位置。
ID 1:异步写指令帧:FF FF 01 09 04 2A 00 08 00 00 E8 03 D4
ID 1:应答帧:FF FF 01 02 00 FC
ID 2:异步写指令帧:FF FF 02 09 04 2A 00 08 00 00 E8 03 D3
ID 2:应答帧:FF FF 02 02 00 FB
ID 3:异步写指令帧:FF FF 03 09 04 2A 00 08 00 00 E8 03 D2
ID 3:应答帧:FF FF 03 02 00 FA
ID 4:异步写指令帧:FF FF 04 09 04 2A 00 08 00 00 E8 03 D1
ID 4:应答帧:FF FF 04 02 00 F9
ID 5:异步写指令帧:FF FF 05 09 04 2A 00 08 00 00 E8 03 D0
ID 5:应答帧:FF FF 05 02 00 F8
ID 6:异步写指令帧:FF FF 06 09 04 2A 00 08 00 00 E8 03 CF
ID 6:应答帧:FF FF 06 02 00 F7
ID 7:异步写指令帧:FF FF 07 09 04 2A 00 08 00 00 E8 03 CE
ID 7:应答帧:FF FF 07 02 00 F6
ID 8:异步写指令帧:FF FF 08 09 04 2A 00 08 00 00 E8 03 CD
ID 8:应答帧:FF FF 08 02 00 F5
ID 9:异步写指令帧:FF FF 09 09 04 2A 00 08 00 00 E8 03 CC
ID 9:应答帧:FF FF 09 02 00 F4
ID10:异步写指令帧:FF FF 0A 09 04 2A 00 08 00 00 E8 03 CB
ID10:应答帧:FF FF 0A 02 00 F34.5 執行異步寫指令ACTION
功能:觸發REG WRITE指令
長度:0x02
指令:0x05
參數:無
1、ACTION 指令在同時控制多個舵機時非常有用。
2、在控制多個舵機時,使用ACTION指令可以使第一個和最後一個舵機同時執行各自的動作,中間無延時。
3、對多個舵機發送ACTION指令時,要用到廣播ID(0xFE)因此,發送此指令不會有數據幀返回。
例6:控制ID1到ID10舵機以1000每秒的速度轉動到2048的位置的異步寫指令發完後,需要執行異步寫指令。
指令帧:FF FF FE 02 05 FA
应答帧:无4.6 同步寫指令SYNC WRITE
功能:用於同時控制多個舵機。
ID:0xFE
長度:(L+1)*n+4(L:發給每個舵機的數據長度,n:舵機的個數)
指令:0x83
參數1:寫入數據的首地址
參數2:寫入的數據的長度(L)
參數3:第1個舵機的ID號
參數4:寫入第1個舵機的第1個數據
參數5:寫入第1個舵機的第2個數據 …
參數L+3:寫入第1個舵機的第L個數據
參數L+4:第2個舵機的ID號
參數L+5:寫入第2個舵機的第1個數據
參數L+6:寫入第2個舵機的第2個數據 …
參數2L+4:寫入第2個舵機的第L個數據 …
不同於REG WRITE+ACTION指令的是實時性比它更高,一條SYNC WRITE指令可一次修改多個舵機的控制表內容,而REG WRITE+ACTION指令是分步做到的。 儘管如此,使用SYNC WRITE指令時,寫入的數據長度和保存數據的首地址必須相同。
例7:對ID1-ID4共4個舵機首地址0x2A寫入位置0x0800時間0X0000和速度0x03E8 (低位字節在前,高位節位在後)。
指令幀: FF FF FE 20 83 2A 06 01 00 08 00 00 E8 03 02 00 08 00 00 E8 03 03 00 08 00 00 E8 03 04 00 08 00 00 E8 03 58(按十六進制發送)
字头:FF FF
ID:FE
有效数据长度:20
指令:83
参数:
2A 06(首地址 数据长度)
01 00 08 00 00 E8 03(ID1舵机指令)
02 00 08 00 00 E8 03(ID2舵机指令)
03 00 08 00 00 E8 03(ID3舵机指令)
04 00 08 00 00 E8 03(ID4舵机指令)
校验和:584.7 同步讀指令SYNC READ
功能:用於同時查詢多個舵機。
ID:0xFE
長度:n+4(n爲舵機個數)
指令:0x82
參數1:讀數據的首地址
參數2:讀數據的長度
參數3:第1個舵機的ID號
參數4:第2個舵機的ID號 …
參數N:第n個舵機的ID號,N=n+2
一條SYNC READ指令可一次查詢多個舵機的控制表內容,同步讀指令中指定了需要查詢舵機的ID,舵機返回應答包順序按指令包中ID順序返回,使用SYNC READ指令時,所有查詢的數據長度和數據的首地址必須相同(此指令針對部分串行總線舵機開放)。
例8:查詢ID1-ID2共2個舵機的當前位置、當前速度、當前負載、當前電壓、當前溫度(首地址0x38,共8字數據,低位字節在前,高位節位在後)。
指令幀:FF FF FE 06 82 38 08 01 02 36
字头:FF FF
ID:FE
长度:06
指令:82
参数:
38 08(数据首地址 数据长度)
01 02(ID01 ID02)
校验和:36應答幀:
ID01舵机:FF FF 01 0A 00 00 08 00 00 00 00 79 1E 55
ID02舵机:FF FF 02 0A 00 FF 07 00 00 00 00 77 23 53應答幀可按讀指令進行解碼
4.8 狀態重置指令RESET
功能:重置舵機狀態(重置舵機圈數)
長度:0x02
指令:0x0A
參數:無
例9:復位舵機,ID號爲01。
指令帧:FF FF 01 02 0A F2(按十六进制发送)
应答帧:FF FF 01 02 00 FC(十六进制显示)4.9 位置校準指令
功能:當前位置重校準爲設定值
長度:0x02或0x04
指令:0x0B
參數:無或設定值
備註:位置校準指令無參數表示當前位置校準爲中位;校準指令只支持部分型號舵機,舵機型號支持情況查閱下表說明。
例10:當前位置重校準爲中位。
指令帧:FF FF 01 02 0B F1(按十六进制发送)
应答帧:FF FF 01 02 00 FC(十六进制显示)例11:當前位置重校準爲1024。
指令幀:FF FF 01 04 0B 00 04 EB(按十六進制發送)
字头:FF FF
ID:01
长度:04
指令:0B
设定值:00 04(1024)
校验和:EB應答幀:FF FF 01 02 00 FC(十六進制顯示)
字头:FF FF
ID:01
长度:02
状态:00
校验和:FC4.10 參數恢復指令
功能:恢復舵機除ID號外其它參數
長度:0x02
指令:0x06
參數:無
例11:恢復舵機參數。
指令帧:FF FF 01 02 06 F6(按十六进制发送)
应答帧:FF FF 01 02 00 FC(十六进制显示)備註:恢復舵機參數前先解鎖eprom參數
4.11 參數備份指令
功能:參數備份(用於參數恢復指令)
長度:0x02
指令:0x09
參數:無
例12:備份舵機參數。
指令帧:FF FF 01 02 09 F3(按十六进制发送)
应答帧:FF FF 01 02 00 FC(十六进制显示)備註:備份舵機參數前先解鎖eprom參數
4.12 重啓指令
功能:重啓指令(重啓舵機)
長度:0x02
指令:0x08
參數:無
例13:重啓舵機。
指令帧:FF FF 01 02 08 F4(按十六进制发送)
应答帧:无(重启时间约800ms)備註:重啓舵機前,先關閉扭矩開關
