서보 SCS 통신 프로토콜
1 통신 프로토콜 개요
통신 레벨은 고속 통신에 호환되는 TTL 레벨 방식과 강한 노이즈 내성을 가진 RS485 방식을 채택합니다. 통신은 여전히 비동기 전이중이며, 송신과 수신 신호는 비동기 처리됩니다.
컨트롤러와 서보 간에는 질의 응답 방식으로 통신합니다. 컨트롤러가 명령 프레임을 보내고, 서보가 응답 프레임을 반환합니다.
하나의 버스 제어 네트워크에는 여러 서보가 연결될 수 있으므로, 각 서보에는 네트워크 내에서 고유한 ID 번호가 할당됩니다. 컨트롤러가 보내는 제어 명령에는 ID 정보가 포함되어 있으며, ID 번호가 일치하는 서보만 이 명령을 완전히 수신하고 응답 정보를 반환합니다.
통신 방식은 직렬 비동기 방식으로, 한 프레임은 1 스타트 비트, 8 데이터 비트, 1 스톱 비트, 패리티 비트 없음, 총 10비트입니다.
메모리 테이블의 일부 파라미터가 2바이트 값을 사용하는 경우, 두 바이트의 순서는 서보 모델에 따라 구분됩니다. 전위차계 타입 서보는 빅엔디언 형식(높은 바이트 먼저, 낮은 바이트 나중), 자기 엔코더 타입 서보는 리틀엔디언 형식(낮은 바이트 먼저, 높은 바이트 나중)입니다. 각 서보는 기능이 약간씩 다르므로 실제 제어 시에는 구체적인 모델의 메모리 테이블을 참조하세요.
2 명령 프레임
헤더: 0xFF를 연속 두 번 수신하면 데이터 패킷이 도착했음을 나타냅니다. ID 번호: 각 서보에는 ID 번호가 있습니다. ID 번호 범위는 0~253이며, 16진수로는 0x00~0xFD입니다.
브로드캐스트 ID: ID 번호 254가 브로드캐스트 ID입니다. 컨트롤러가 보내는 ID 번호가 254(0xFE)이면 모든 서보가 명령을 수신하지만, PING 명령을 제외한 다른 명령은 응답 정보를 반환하지 않습니다(여러 서보가 버스에 연결된 경우 브로드캐스트 PING 명령은 사용할 수 없습니다).
데이터 길이: 전송할 파라미터 N에 2를 더한 값, 즉 "N+2"입니다.
명령: 데이터 패킷의 기능 코드입니다. 자세한 내용은 1.3 명령 유형을 참조하세요.
파라미터: 명령 외에 추가로 필요한 제어 정보입니다. 파라미터는 최대 2바이트로 하나의 메모리 값을 나타냅니다. 바이트 순서는 서보 사용 설명서의 메모리 제어 테이블을 참조하세요(모델에 따라 바이트 순서가 다릅니다).
체크섬: 체크섬(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(16진수로 전송)
헤더: FF FF
ID: 01
길이: 02
명령: 01
체크섬: FB응답 프레임: FF FF 01 02 00 FC(16진수 표시)
헤더: FF FF
ID: 01
길이: 02
상태: 00
체크섬: FC4.2 읽기 명령 READ DATA
기능: 서보 메모리 제어 테이블에서 데이터 읽기
길이: 0x04
명령: 0x02
파라미터1: 데이터 읽기 세그먼트의 시작 주소
파라미터2: 읽을 데이터 길이
예2: ID 1인 서보의 현재 위치 읽기(낮은 바이트 먼저, 높은 바이트 나중). 위치 파라미터의 메모리 테이블 주소는 0X38이며, 연속된 2바이트입니다.
명령 프레임: FF FF 01 04 02 38 02 BE(16진수로 전송)
헤더: FF FF
ID: 01
길이: 04
명령: 02
파라미터: 38 02(현재 위치 주소 읽을 데이터 길이)
체크섬: BE응답 프레임: FF FF 01 04 00 18 05 DD(16진수 표시)
헤더: FF FF
ID: 01
길이: 04
상태: 00
파라미터: 18 05
체크섬: DD읽은 두 바이트 데이터는(리틀엔디언 구조): 낮은 바이트 L 0x18, 높은 바이트 H 0x05. 두 바이트를 합성한 16비트 데이터는 0X0518이며, 10진수로 현재 위치는 1304입니다.
4.3 쓰기 명령 WRITE DATA
기능: 서보 메모리 제어 테이블에 데이터 쓰기
길이: N+2(N은 파라미터 길이)
명령: 0x03
파라미터1: 데이터 쓰기 세그먼트의 시작 주소
파라미터2: 쓰는 첫 번째 데이터
파라미터3: 쓰는 두 번째 데이터 …
파라미터N: 쓰는 n번째 데이터, N=n+1
예3: 브로드캐스트 ID (0xFE)를 사용하여 임의 번호 서보의 ID를 1로 설정합니다. 메모리 테이블에서 ID 번호를 저장하는 주소는 5입니다.
명령 프레임: FF FF FE 04 03 05 01 F4 (16진수로 전송)
헤더: FF FF
ID: 01
길이: 04
명령: 03
파라미터: 05 01(ID 주소 새 ID 값)
체크섬: F4브로드캐스트 ID로 명령을 전송하므로 데이터가 반환되지 않습니다. 또한 메모리 테이블 EPROM에는 보호 잠금 스위치가 있어 ID를 변경하기 전에 꺼야(0) 합니다. 끄지 않으면 예시의 ID 번호가 전원 차단 시 저장되지 않습니다. 자세한 작업은 구체적인 서보 모델의 메모리 테이블 또는 작동 설명서를 참조하세요.
예4: ID1 서보를 초당 1000스텝 속도로 2048 위치까지 회전. 메모리 테이블 목표 위치의 시작 주소는 0x2A이므로 주소 0x2A부터 연속 6바이트 데이터를 씁니다.
위치 데이터 0x0800(2048)
예약 데이터 0x0000(0)
속도 데이터 0x03E8(1000)
명령 프레임: FF FF 01 09 03 2A 00 08 00 00 E8 03 D5(16진수로 전송)
헤더: FF FF
ID: 01
길이: 09
명령: 03
파라미터:
2A(시작 주소)
00 08(위치)
00 00(예약)
E8 03(속도)
체크섬: D5응답 프레임: FF FF 01 02 00 FC(16진수 표시)
헤더: 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: 쓰는 첫 번째 데이터
파라미터3: 쓰는 두 번째 데이터
파라미터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: 첫 번째 서보의 ID 번호
파라미터4: 첫 번째 서보에 쓰는 첫 번째 데이터
파라미터5: 첫 번째 서보에 쓰는 두 번째 데이터 …
파라미터L+3: 첫 번째 서보에 쓰는 L번째 데이터
파라미터L+4: 두 번째 서보의 ID 번호
파라미터L+5: 두 번째 서보에 쓰는 첫 번째 데이터
파라미터L+6: 두 번째 서보에 쓰는 두 번째 데이터 …
파라미터2L+4: 두 번째 서보에 쓰는 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(16진수로 전송)
헤더: 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: 첫 번째 서보의 ID 번호
파라미터4: 두 번째 서보의 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(16진수로 전송)
응답 프레임: FF FF 01 02 00 FC(16진수 표시)4.9 위치 보정 명령
기능: 현재 위치를 설정값으로 재보정
길이: 0x02 또는 0x04
명령: 0x0B
파라미터: 없음 또는 설정값
비고: 위치 보정 명령에 파라미터가 없으면 현재 위치를 중앙 위치로 보정합니다. 보정 명령은 일부 모델 서보만 지원하며, 지원 여부는 아래 표를 참조하세요.
예10: 현재 위치를 중앙 위치로 재보정.
명령 프레임: FF FF 01 02 0B F1(16진수로 전송)
응답 프레임: FF FF 01 02 00 FC(16진수 표시)예11: 현재 위치를 1024로 재보정.
명령 프레임: FF FF 01 04 0B 00 04 EB(16진수로 전송)
헤더: FF FF
ID: 01
길이: 04
명령: 0B
설정값: 00 04(1024)
체크섬: EB응답 프레임: FF FF 01 02 00 FC(16진수 표시)
헤더: FF FF
ID: 01
길이: 02
상태: 00
체크섬: FC4.10 파라미터 복원 명령
기능: ID 번호 외 서보 파라미터 복원
길이: 0x02
명령: 0x06
파라미터: 없음
예11: 서보 파라미터 복원.
명령 프레임: FF FF 01 02 06 F6(16진수로 전송)
응답 프레임: FF FF 01 02 00 FC(16진수 표시)비고: 서보 파라미터를 복원하기 전에 eprom 파라미터를 잠금 해제
4.11 파라미터 백업 명령
기능: 파라미터 백업(파라미터 복원 명령에 사용)
길이: 0x02
명령: 0x09
파라미터: 없음
예12: 서보 파라미터 백업.
명령 프레임: FF FF 01 02 09 F3(16진수로 전송)
응답 프레임: FF FF 01 02 00 FC(16진수 표시)비고: 서보 파라미터를 백업하기 전에 eprom 파라미터를 잠금 해제
4.12 재시작 명령
기능: 재시작 명령(서보 재시작)
길이: 0x02
명령: 0x08
파라미터: 없음
예13: 서보 재시작.
명령 프레임: FF FF 01 02 08 F4(16진수로 전송)
응답 프레임: 없음(재시작 시간 약 800ms)비고: 서보를 재시작하기 전에 토크 스위치를 끄기

