Difference between revisions of "CanServo/Protocol/Control"

From HITEC_HELP
Jump to navigation Jump to search
m (Adam moved page CanServo/Message Format to CanServo/Protocol/Control without leaving a redirect)
Line 1: Line 1:
CAN 서보는 서보의 [[CanServo/ID2]] 에 설정된 ID2 값에 해당하는 CAN ID 와 아래 메시지 포맷을 따르는 Data 를 가지는 CAN 패킷을 발신하여 제어 할수 있습니다.
CAN Data 에 들어가는 메시지의 구성에 따라 서보 동작의 기초가 되는 데이터가 들어있는 Register 를 변경하거나 읽을 수 있습니다.
* 간단한 예를 들어 보면, 아래의 패킷을 발신하면 수신한 모든 서보가 Register 0x30 를 0x1234 라는 값으로 변경합니다.
** CAN ID = 0
** CAN DATA = 'w', 0, 0x30, 0x34, 0x12
** DLC = 5


CAN Packet 의 Data 8 byte 에 들어가는 메시지는 구형 3가지 신형 8가지, 총 11가지가 있습니다.
CAN Packet 의 Data 8 byte 에 들어가는 메시지는 구형 3가지 신형 8가지, 총 11가지가 있습니다.
첫 바이트는 메시지의 종류를 나타냅니다.
첫 바이트는 메시지의 종류를 나타냅니다.


여기서 Target Servo ID 는 Servo 의 [[CanServo/ID1]] 의 값과 일치해야 합니다.
여기서 Target Servo ID 는 Servo 의 [[CanServo/ID1]] 의 값과 일치해야 합니다.
만일 0 을 지정하면, 모든 서보가 반응합니다.
만일 0 을 지정하면, 모든 서보가 반응합니다.


구식 포맷:
구식 포맷:


* Old Write Command
* Old Write Command
Line 12: Line 23:
*** 0x96, (target servo id), (address), 2, (data low byte), (data high byte), (chksum)
*** 0x96, (target servo id), (address), 2, (data low byte), (data high byte), (chksum)
*** DLC = 7
*** DLC = 7
* Old Read Command
* Old Read Command
** read 1 register
** read 1 register
*** 0x96, (target servo id), (address), 0, (chksum)
*** 0x96, (target servo id), (address), 0, (chksum)
*** DLC = 5
*** DLC = 5
* Old Return Message
* Old Return Message
** return 1 register
** return 1 register
*** 0x69, (servo id), (address), 2, (data low byte), (data high byte), (chksum)
*** 0x69, (servo id), (address), 2, (data low byte), (data high byte), (chksum)
*** DLC = 7
*** DLC = 7
* Old message's chksum
* Old message's chksum
** add all bytes before chksum, except first byte
** add all bytes before chksum, except first byte


신형 포맷:
 
신형 포맷: (Checksum 이 제거되었습니다)
 


* Write Command
* Write Command
Line 32: Line 51:
*** 'W', (target servo id), (address 0), (data 0 low byte), (data 0 high byte), (address 1), (data 1 low byte), (data 1 high byte)
*** 'W', (target servo id), (address 0), (data 0 low byte), (data 0 high byte), (address 1), (data 1 low byte), (data 1 high byte)
*** DLC = 8
*** DLC = 8


* Read Command
* Read Command
Line 40: Line 60:
*** 'R', (target servo id), (address 0), (address 1)
*** 'R', (target servo id), (address 0), (address 1)
*** DLC = 4
*** DLC = 4


* Write and Read Command
* Write and Read Command
Line 48: Line 69:
*** 'X', (target servo id), (address 0), (data 0 low byte), (data 0 high byte), (address 1), (data 1 low byte), (data 1 high byte)
*** 'X', (target servo id), (address 0), (data 0 low byte), (data 0 high byte), (address 1), (data 1 low byte), (data 1 high byte)
*** DLC = 8
*** DLC = 8


* Return Message : Servo --> Host
* Return Message : Servo --> Host

Revision as of 00:21, 18 September 2021

CAN 서보는 서보의 CanServo/ID2 에 설정된 ID2 값에 해당하는 CAN ID 와 아래 메시지 포맷을 따르는 Data 를 가지는 CAN 패킷을 발신하여 제어 할수 있습니다. CAN Data 에 들어가는 메시지의 구성에 따라 서보 동작의 기초가 되는 데이터가 들어있는 Register 를 변경하거나 읽을 수 있습니다.

  • 간단한 예를 들어 보면, 아래의 패킷을 발신하면 수신한 모든 서보가 Register 0x30 를 0x1234 라는 값으로 변경합니다.
    • CAN ID = 0
    • CAN DATA = 'w', 0, 0x30, 0x34, 0x12
    • DLC = 5


CAN Packet 의 Data 8 byte 에 들어가는 메시지는 구형 3가지 신형 8가지, 총 11가지가 있습니다. 첫 바이트는 메시지의 종류를 나타냅니다.


여기서 Target Servo ID 는 Servo 의 CanServo/ID1 의 값과 일치해야 합니다. 만일 0 을 지정하면, 모든 서보가 반응합니다.


구식 포맷:


  • Old Write Command
    • write 1 register
      • 0x96, (target servo id), (address), 2, (data low byte), (data high byte), (chksum)
      • DLC = 7


  • Old Read Command
    • read 1 register
      • 0x96, (target servo id), (address), 0, (chksum)
      • DLC = 5


  • Old Return Message
    • return 1 register
      • 0x69, (servo id), (address), 2, (data low byte), (data high byte), (chksum)
      • DLC = 7


  • Old message's chksum
    • add all bytes before chksum, except first byte


신형 포맷: (Checksum 이 제거되었습니다)


  • Write Command
    • write 1 register
      • 'w', (target servo id), (address), (data low byte), (data high byte)
      • DLC = 5
    • write 2 registers
      • 'W', (target servo id), (address 0), (data 0 low byte), (data 0 high byte), (address 1), (data 1 low byte), (data 1 high byte)
      • DLC = 8


  • Read Command
    • read 1 register
      • 'r', (target servo id), (address)
      • DLC = 3
    • read 2 registers
      • 'R', (target servo id), (address 0), (address 1)
      • DLC = 4


  • Write and Read Command
    • write and read: 1 register
      • 'x', (target servo id), (address), (data low byte), (data high byte)
      • DLC = 5
    • write and read: 2 registers
      • 'X', (target servo id), (address 0), (data 0 low byte), (data 0 high byte), (address 1), (data 1 low byte), (data 1 high byte)
      • DLC = 8


  • Return Message : Servo --> Host
    • return 1 register
      • 'v', (servo id), (address), (data low byte), (data high byte)
      • DLC = 5
    • return 2 registers
      • 'V', (servo id), (address 0), (data 0 low byte), (data 0 high byte), (address 1), (data 1 low byte), (data 1 high byte)
      • DLC = 8