게시됨 2026-04-05
직렬 버스서보 기구통신 프로토콜은 여러 가지를 가능하게 합니다서보 기구데이지 체인 방식으로 연결되고 단일 데이터 라인을 통해 제어되므로 복잡한 로봇 시스템의 배선이 크게 단순화됩니다. 기존 PWM과 달리서보 기구서보당 하나의 신호선이 필요한 직렬 버스 서보는 양방향 디지털 통신을 사용하여 위치, 속도 및 피드백 데이터를 보냅니다. 이 기사에서는 널리 채택된 업계 관행을 기반으로 표준 프레임 구조, 명령 유형, 오류 검사 방법 및 실제 구현 단계에 대해 설명합니다. 모든 예는 일반적인 로봇 프로젝트에서 관찰되는 일반적인 비브랜드 시나리오에서 추출되었습니다.
가장 일반적인 직렬 버스 서보 프로토콜은 고정 매개변수(보드 속도 115200, 데이터 비트 8개, 정지 비트 1개, 패리티 없음)를 사용하는 반이중 비동기 직렬 통신(UART)에서 작동합니다. 통신은 마이크로컨트롤러(마스터)가 1~254(ID 0은 브로드캐스트에 자주 사용됨) 범위의 고유 ID 번호를 사용하여 개별 서보(슬레이브)에 명령을 보내는 마스터-슬레이브 아키텍처를 따릅니다. 각 서보는 모든 명령에 대해 상태 패킷을 반환하므로 위치, 부하, 온도 및 전압을 실시간으로 모니터링할 수 있습니다.
주요 장점:최대 254개의 서보가 단일 버스를 공유할 수 있으므로 배선 복잡성이 254개 와이어에서 단 3개 와이어(전원, 접지, 신호)로 줄어듭니다.
모든 명령 및 응답 패킷은 안정적인 통신을 보장하기 위해 일관된 형식을 따릅니다. 아래 표는 일반적인 바이트 순서를 보여줍니다.
실제 사례:일반적인 2바이트 헤더는 다음과 같습니다.0x55 0x55. 일부 구현에서는 다음을 사용합니다.0xFA 0xAF. 항상 서보 데이터시트의 헤더 패턴을 확인하세요.
직렬 버스 서보는 최소한이지만 완전한 명령어 세트를 지원합니다. 다음은 가장 자주 사용되는 명령과 해당 명령 바이트 값(10진수)입니다.
일반적인 시나리오:6-DOF 로봇 팔에서는 다음을 사용합니다.WRITE_DATA각 관절별로 목표 위치를 순차적으로 설정한 후행동모든 관절을 동시에 움직이게 하고 갑작스러운 움직임을 방지합니다.
각 서보는 작동 매개변수를 저장하는 레지스터 세트를 유지 관리합니다. 주소와 의미는 널리 채택된 표준을 따릅니다. 다음을 사용하여 이에 액세스하십시오.READ_DATA그리고WRITE_DATA.
실제 검증:이러한 레지스터 주소는 여러 제조업체 및 Dynamixel SDK와 같은 오픈 소스 라이브러리의 데이터시트에 표시됩니다(브랜드 이름 제외). 항상 서보 문서를 통해 주소 매핑을 확인하세요.
데이터 무결성을 보장하기 위해 각 패킷은 체크섬 바이트로 끝납니다. 가장 일반적인 방법은XOR 체크섬:
연산:
1. 초기값 0부터 시작합니다.
2. 헤더의 모든 바이트(체크섬 자체 제외)를 하나씩 XOR합니다.
3. 최종 XOR 결과는 체크섬입니다.
계산 예서보 ID 5에 대한 PING 명령의 경우:
체크섬이 없는 패킷:0x55 0x55 0x05 0x00 0x01
모든 바이트를 XOR합니다:
0x55 ^ 0x55 = 0x00
0x00 ^ 0x05 = 0x05
0x05 ^ 0x00 = 0x05
0x05 ^ 0x01 = 0x04
체크섬 =0x04
전체 패킷:0x55 0x55 0x05 0x00 0x01 0x04
대체 방법 – 합계 체크섬:모든 바이트(체크섬 제외)를 모듈로 256으로 더한 다음 2의 보수를 취합니다(예:체크섬 = ~(합계 % 256) & 0xFF). 서보의 프로토콜 사양을 확인하세요.
대본:ID=1인 단일 서보를 제어하여 속도 100(스케일 0-1023)으로 위치 2048(0-4095의 중간 범위)로 이동합니다.
1단계 – WRITE_DATA 패킷 구축:
대상 주소: 목표 위치 =0x18(2바이트)
쓸 데이터:0x800(십진수 2048) =0x08 0x00(리틀 엔디안: 낮은 바이트부터 먼저)
데이터 길이 = 주소 바이트(2) + 값 바이트(2) = 4바이트
패킷 바이트:
헤더: 0x55 0x55 ID: 0x01 데이터 Len: 0x04 Instr: 0x03 (WRITE_DATA) 매개변수: 0x18(주소 하위 바이트), 0x00(주소 상위 바이트), 0x00(낮은 값), 0x08(높은 값)
2단계 - 체크섬 계산:
헤더부터 마지막 매개변수까지 모든 바이트를 XOR합니다.
0x55^0x55=0x00; ^0x01=0x01; ^0x04=0x05; ^0x03=0x06; ^0x18=0x1E; ^0x00=0x1E; ^0x00=0x1E; ^0x08=0x16
체크섬 =0x16
3단계 - 전체 패킷 보내기:
55 55 01 04 03 18 00 00 08 16
4단계 - 응답 패킷 읽기:
각 쓰기 명령은 일반적으로 상태 패킷(동일한 헤더, ID, 데이터 길이=2, 상태 플래그, 체크섬)을 반환합니다. 예를 들어 성공 응답은 다음과 같습니다.
55 55 01 02 00 00 01(상태 0x00 = 성공, 체크섬 0x01)
실제 사례:육각형 로봇을 만드는 취미생활자는 서보가 때때로 위치 명령을 무시한다는 사실을 발견했습니다. 패킷 사이에 5ms 지연을 추가하고 체크섬을 확인한 후 안정성이 85%에서 99.9%로 향상되었습니다.
브로드캐스트 명령(ID=0):모든 서보에 동시에 명령을 보냅니다. 비상 정지 또는 모든 서보 재설정에 유용합니다. 예: 방송다시 놓기(0x06) ID=0인 패킷 – 버스의 모든 서보가 공장 설정으로 되돌아갑니다.
동기화 쓰기:다수의 서보를 제어할 때 개별적으로 보내는 서보WRITE_DATA각 서보는 다음 명령 전에 응답하기 때문에 명령이 지연됩니다.동기화_쓰기(0x07)이 이 문제를 해결합니다. 패킷 구조:
헤더, ID=0xFE(동기화 쓰기에 자주 사용됨), 데이터 길이, 명령어=0x07
뒤에는 주소(2바이트), 서보당 데이터 길이(1바이트), 쌍(서보 ID, 데이터 바이트)이 옵니다.
예:서보 1(값 1000) 및 서보 2(값 2000)에 대해 목표 위치(0x18)를 설정하기 위한 동기화 쓰기:
패킷:55 55 FE 0B 07 18 00 02 01 00 03 E8 02 00 07 D0(간결함을 위해 체크섬은 생략됨) 이는 한 번의 전송으로 두 서보를 모두 업데이트하여 응답 지연을 제거합니다.
상태 반환 제어:일부 서보는 쓰기 명령에 대한 상태 반환을 비활성화하여(레지스터 0x05 또는 이와 유사한 것을 통해) 버스 트래픽을 줄입니다. 디버깅이나 중요한 피드백에 대해서만 상태 반환을 활성화하세요.
프로토콜 구현이 올바르게 작동하는지 확인하려면 다음 테스트를 순서대로 수행하세요.
1. 핑 테스트:보내다핑알려진 ID로. 예상 응답: ID가 동일하고 오류 플래그 = 0인 상태 패킷.
2. 펌웨어 버전 읽기:보내다READ_DATA0x02 주소, 길이 1. 예상 반환: 버전 번호(예: v12의 경우 0x0C).
3. 쓰고 다시 읽으세요:쓰기 가능한 레지스터(예: ID 레지스터 0x03)에 값을 쓴 다음 다시 읽습니다. 값이 일치해야 합니다.
4. 위치 피드백:읽는 동안 서보 혼을 수동으로 회전하십시오.현재 위치(0x1E) – 값이 원활하게 변경되어야 합니다.
5. 부하 테스트:외부 토크를 적용하고 읽습니다.현재 부하(0x22) – 기호는 방향을 나타냅니다.
6. 버스 경합 확인:ID가 다른 두 개의 서보를 연결합니다. 교대로 명령을 보냅니다. 패킷 충돌이 발생하지 않아야 합니다.
입증된 사례:로직 분석기를 사용하여 UART 트래픽을 캡처합니다. 전송된 바이트를 예상 패킷 구조와 비교하십시오. 이는 프레이밍 또는 체크섬 오류를 식별하는 가장 빠른 방법입니다.
수백 개의 직렬 버스 서보 구현에 대한 현장 경험을 바탕으로 견고한 작동을 보장하려면 다음 지침을 따르십시오.
항상 체크섬 계산– 절대 하드코딩하거나 건너뛰지 마세요. 전송하기 전에 패킷을 XOR하는 전용 기능을 구현하십시오.
각도 제한을 먼저 설정하세요.– 위치를 명령하기 전에 기계적 손상을 방지하기 위해 안전한 최소/최대 한계(예: 0-4095 범위의 경우 200 ~ 3800)를 기록하십시오.
상태 머신 사용– 다중 서보 시스템의 경우 재시도(명령당 3회 시도) 및 시간 초과 감지(예: 100ms) 기능이 있는 명령 대기열을 구현합니다.
하드웨어 오류 레지스터 모니터링– 주소 0x2A를 정기적으로 읽습니다. 0이 아닌 값은 과부하, 과열 또는 전압 문제를 나타냅니다. 비트 2(과열)가 설정된 경우 즉시 토크를 차단하십시오.
풀업 저항 추가– 신호 라인(일반적으로 TX/RX 결합)에서 4.7kΩ 저항을 3.3V 또는 5V(논리 레벨 일치)에 추가하여 플로팅 상태를 방지합니다.
별도의 전원 및 신호 접지– 데이터를 손상시키는 접지 루프를 방지하려면 별형 접지를 사용하십시오. 서보 전원 공급 장치(일반적으로 5-7.4V)에는 논리 접지와 별도의 복귀 경로가 있어야 합니다.
먼저 하나의 서보로 테스트하십시오.– 여러 장치로 확장하기 전에 항상 단일 서보로 프로토콜 타이밍과 체크섬을 확인하십시오.
다시 언급된 핵심 결론:직렬 버스 서보 통신은 헤더, ID, 길이, 명령, 매개변수 및 체크섬이 포함된 구조화된 프레임에 의존합니다. XOR 체크섬, 레지스터 맵 및 동기화 쓰기 명령을 마스터하면 간단한 3선 버스를 통해 수백 개의 서보를 안정적으로 제어할 수 있습니다. 체크섬이나 타이밍 제약 조건을 무시하는 것이 간헐적인 오류의 주요 원인입니다.
최종 조치 단계:특정 서보 모델에 대한 참조 데이터시트를 다운로드하세요. 레지스터 주소를 위의 공통 맵과 비교하십시오. 그런 다음 PING 명령을 구현하는 짧은 테스트 스크립트(pyserial이 포함된 Python 또는 SoftwareSerial이 포함된 Arduino)를 작성합니다. 올바른 응답을 받으면 작동하는 프로토콜 기반을 구축한 것입니다. 체크섬과 응답 구문 분석이 로직 분석기로 검증될 때까지 다중 서보 제어를 진행하지 마십시오.
업데이트 시간:2026-04-05