CanServo/Manual/Summary

From HITEC_HELP
Jump to navigation Jump to search

개요

CAN 서보는 CAN 통신을 통해 제어하는 서보 입니다. CAN 2.0A, 2.0B 을 지원하며, UAVCAN protocol 을 지원합니다.

  • 문서 개요
    • 이 문서는 요약본입니다.
    • 각 Register 의 정확한 주소는 Manual 을 참조해 주십시오.

FW Type

지원하는 Protocol 의 종류에 따라 나뉩니다.

  • C Type = CAN 2.0A, 2.0B 지원
  • U Type = UAVCAN 지원
  • A Type = CAN 2.0A, 2.0B, UAVCAN 지원

통신 설정

  • 통신 설정은 서보 Reset 시점에만 적용됩니다.

통신 속도

사용할 통신 속도를 선택합니다. 단위는 kbps 입니다.

  • 1000
  • 800
  • 750
  • 500
  • 350
  • 250
  • 125

통신 Protocol

통신에 사용할 Protocol 을 선택합니다.

CAN 2.0A, 2.0B, UAVCAN 중에 선택합니다. Protocol 에 따라서는 FW Type 을 바꾸어야 할 수 있습니다.

CAN 2.0A,B 가 나뉘어 있는 것은, CAN ID 의 값도 일치해야 하지만, Type 도 확인하기 때문입니다. 즉, CAN 2.0A 인 CAN ID = 100 과 CAN 2.0B 인 CAN ID = 100 은 다르게 인식합니다.

CAN 2.0A, 2.0B 에서는 다음 메시지 포맷을 따릅니다.

서보의 ID 지정

특정 서보의 Register 를 읽거나 쓰려면, 서보를 구분할수 있어야 합니다.

서보 구분용 ID 는 2가지 입니다.

  • CAN 2.0A,B 에서는 CAN ID, Servo ID
  • UAVCAN 에서는 Node ID, Actuator ID 입니다.

ID 설정은

  • CAN ID, Node ID 는 Register Ko/CanServo/ID2 를 통해 설정합니다.
  • Servo ID, Actuator ID 는 Register Ko/CanServo/ID1 을 통해 설정합니다.

동작 모드 ( Ko/CanServo/RUN_MODE )

  • CAN 서보는 1회전이내로 동작하는 Servo Mode 와 +/-32760 x 360 deg 동작이 가능한 Turn Mode 를 지원합니다.
    • 주의: Turn Mode 선택시, 서보 Reset 시점의 위치가 0 deg, 0 Turn 위치가 됩니다.
  • 2가지 중에 선택합니다.
  • 동작 모드는 서보 Reset 시점에 적용됩니다.

서보의 제어 방식

  • CAN 서보는 2 byte 크기의 Register 128개 가지고 있습니다.
  • 이 값들에 따라 동작합니다.
  • 예를 들어
    • Servo Mode 에서는, Register POSITION_NEW 에 8192 라는 값을 넣으면, 중앙 위치로 이동합니다.
    • Register POSITION 값을 읽어보면, 서보의 현재 위치값을 알수 있습니다.

설정값 변경시 적용 시점

  • 대부분의 사용자용 설정값은 변경 즉시 적용됩니다.
  • 다음 예외 항목들은, Servo Reset 시점에 적용되므로, SAVE, RESET 절차를 수행해야 합니다.

설정값의 저장

  • 제어값(POSITION_NEW, TURN_NEW 등), 각종 상태값, 예외인 일부 항목등을 제외한 대부분의 Register 는, SAVE 명령시 저장되어 Servo Reset 후에도 유지됩니다.
  • !!! 주의 !!!
    • SAVE 는 모터를 정지 시킨 상태에서 하는 것을 추천합니다.
    • SAVE 를 너무 자주 해서는 안됩니다.
    • 특히 주기적으로 해서는 안됩니다.
    • 가능한 여러가지 값을 변경 한 후 SAVE, Servo Reset 하는 것을 추천합니다.
    • 단, 통신 설정값, ID, RUN_MODE 등은, 다른 값들과 함께 변경하지 말고 별도로 변경, Reset 하는 것을 추천합니다.

위치 좌표계

  • POSITION, POSITION_NEW: Resolution: 16384 = 360 deg
    • Position Sensor's Actual Resolution: 4096 = 360 deg

Servo Mode

  • 1회전 이내에서 동작하는 모드 입니다.
  • Register POSITION_NEW 에 원하는 위치를 넣습니다.
    • 위치값은 0 ~ 16383
  • POSITION_MIN, POSITION_MAX 로 동작 범위를 제한 할 수 있습니다.

Turn Mode

  • 다회전 모드 입니다.
  • TURN_NEW 에 회전수를 넣고, POSITION_NEW 에 360도 이내 각도를 넣으면 동작합니다.
  • 두 값은 int16_t ( 16 bits signed integer ) 방식을 따르므로, 음수 지정이 가능합니다.
    • Range: -32768 ~ 0 ~ +32767
  • !!! 주의 !!!
    • 서보가 Reset 될 때의 위치값이 0 으로 초기화 됩니다.
    • 서보 Reset 직후, TURN_NEW = 0, POSITION_NEW = 0 을 전송하면 움직이지 않고 그대로 있습니다.
  • 목표 위치를 지정하는 방식은, POSITION_NEW 의 음수 사용 여부에 따라 2가지 형태로 사용 가능합니다.
    • 목표의 예로, -370 deg, -10 deg, 10 deg
      • -370 deg = -370 x 16384 / 360 = -16839.111 = -16839
      • -10 deg = -10 x 16384 / 360 = -455.111 = -455
      • 10 deg = 10 x 16384 / 360 = 455.111 = 455
    • -370 deg
      • TURN_NEW = -1, POSITION_NEW = -455 -> 음수 사용
      • TURN_NEW = -2, POSITION_NEW = 15929 -> 음수 비사용
    • -10 deg
      • TURN_NEW = 0, POSITION_NEW = -455 -> 음수 사용
      • TURN_NEW = -1, POSITION_NEW = 15929 -> 음수 비사용
    • 10 deg
      • TURN_NEW = 0, POSITION_NEW = 455

UAVCAN UNITLESS 좌표계

  • UNITLESS: -1.0000 ~ 0 ~ +1.0000 ---> POSITION_MIN ~ POSITION_MID ~ POSITION_MAX 를 기준으로 환산합니다.
  • 예를 들면, -0.5000 는 (POSITION_MIN+POSITION_MID)/2 가 됩니다.

현재 위치

  • Register TURN_COUNT, POSITOIN 를 통해 서보의 현재 위치를 알 수 있습니다.
    • 위치값 = TURN_COUNT x 16384 + POSITION
      • TURN_COUNT: Range: -32768 ~ +32767
      • POSITION: Range: 0 ~ 16383
    • 도단위 = ( TURN_COUNT x 16384 + POSITION ) x 360 / 16384
  • 위의 위치값 데이터가 32 비트 값으로 들어가 있는 Register 2개를 사용 할수 도 있습니다.
    • POSITION_32_LOW, POSITION_32_HIGH
    • type: int32_t ( 32 bits signed integer )
  • 주의
    • Register POSITION: 0 ~ 16383
    • 위치 0 에서 -1 된다면, POSITION 은 -1 이 아닌 16383 이 되고 TURN_COUNT 가 -1 됩니다.

통신 예제

예를 들어 다음과 같이 4개의 서보가 있다면

  • S1: PROTOCOL=2.0A, ID2 = 10, ID1 = 101
  • S2: PROTOCOL=2.0A, ID2 = 10, ID1 = 102
  • S3: PROTOCOL=2.0B, ID2 = 11, ID1 = 103
  • S4: PROTOCOL=2.0B, ID2 = 11, ID1 = 104

S2 서보의 Register 0x30 에 0x11 값을 쓴다고 하면

  • CAN ID = 0, TYPE=2.0A, DATA = 'w', 102, 0x30, 0x11, 0x00 -> S2 가 수신 및 처리
  • CAN ID = 0, TYPE=2.0B, DATA = 'w', 102, 0x30, 0x11, 0x00 -> S2 가 무시, TYPE 틀림
  • 여기서 DATA 의 첫 바이트 'w' 는 1개의 Register 를 쓰라는 명령을 뜻합니다.
  • DATA 두번째 102 는 Target Servo ID 를 뜻하며, 102 이므로 S2 를 가리킵니다.

기본 사용법

목표 위치 바꾸기

  • Register POSITION_NEW 를 통해 목표 위치를 지정할수 있습니다.
    • Turn Mode 에서는 Register TURN_NEW 추가 사용
    • Servo Mode 에서는 Register TURN_NEW 가 무시됩니다.
  • POSITION_NEW, TURN_NEW 는 저장되지 않습니다.
  • Turn Mode 에서 TURN_NEW, POSITION_NEW 변경하기
    • 목표 각도 deg 를 POSITION 단위로 바꿉니다.
      • pos = (정수 환산) ( deg x 16384 / 360 )
    • turn 과 나머지를 구합니다.
      • TURN_NEW = pos / 16384
      • POSITION_NEW = pos % 16384 ( C style )
    • 두 값을 전송 (TYPE 1)
    • 만일, POSITION_NEW 를 양수로 바꾸는 경우에는 TURN_COUNT 를 -1 합니다. (TYPE 2)
int32_t pos = (int32_t)(deg * 16384 / 360);
int32_t turn = pos / 16384;
int32_t posi = pos % 16834;
// TYPE 1: send 'W' command: turn -> TURN_NEW, posi -> POSITION_NEW
while( posi < 0 )
{
    posi += 16384;
    turn -= 1;
}
// TYPE 2: send 'W' command: turn -> TURN_NEW, posi -> POSITION_NEW

목표 위치 제한 하기

  • Servo Mode 에서는 Register POSITION_MIN, POSITION_MAX 에 동작 범위를 지정할수 있습니다.
  • Resolution 은 16384 = 360 deg 입니다.
  • 권장 최대 가동 범위: Center(8192) +/- 150도
  • 예를 들어, +/- 60도 를 지정한다면
    • 60 deg = 60 x 16384 / 360 = 2730
    • POSITION_MIN = -60 deg = 8192 - 2730 = 5462
    • POSITION_MAX = +60 deg = 8192 + 2730 = 10922

현재 위치 읽기

  • Register TURN_COUNT, POSITION 또는 POSITION_32_LOW, POSITION_32_HIGH 을 읽으면 현재 위치를 알수 있습니다.
  • Servo Mode 에서는, POSITION 또는 POSITION_32_LOW 를 읽습니다.
  • Turn Mode 에서는, POSITION, TURN_COUNT 를 읽습니다. 혹은 POSITION_32_LOW, POSITION_32_HIGH 를 읽습니다.
  • POSITION 과 POSITION_32_LOW 의 차이
    • POSITION 은 0 ~ 16383 까지만 들어가고, TURN 이 바뀌는 것은 TURN_COUNT 를 읽어봐야 알수 있습니다.
    • POSITION_32_LOW 는 2비트 추가로 있으므로, 앞뒤로 총 4 turn 까지 상태를 알수 있습니다.

속도 바꾸기

  • 동작 최대 속도를 지정할수 있습니다.
  • 0 으로 변경하면 목표 위치를 바꾸더라도 움직이지 않습니다.

토크 바꾸기

  • 최대 출력을 조절합니다.
  • 최대 속도도 비례적으로 조정됩니다.
  • 0 으로 변경하면 힘이 완전히 풀리면서 외력에 의해 움직일수 있습니다.

비상 정지

  • 일시적으로 모터 출력을 끕니다.
  • 이 상태는 저장되지 않으며, 서보 Reset 후에는 풀립니다.
  • 비상 정지 모드에 따라 정지까지의 과정과 상태 유지 방식이 다릅니다.
    • 0 = 비상 정지 해제
    • 1 = 즉시 모터 출력을 끕니다. 외력에 의해 움직일수 있습니다.
    • 2 = Time Speed ES 값에 맞추어 감속하고, 정지 위치를 고수합니다.
    • 3 = 즉시 멈추고, 정지 위치를 고수합니다.

전압, MCU 온도에 따른 비상 정지

  • MCU 온도와 전압의 상태가 지정한 작동 범위를 벗어나면 모터 출력이 꺼집니다.
  • 실시간은 아니고 어느정도 평균처리가 됩니다.

가감속 시간 지정 하기

  • 이 기능은 사다리꼴 속도 프로파일을 구현합니다.
  • 지정한 최대 속도까지 가속하는 시간, 최대 속도에서 속도 0까지 감속하는 시간을 지정할수 있습니다.

현재 속도 읽기

  • Register VELOCITY 를 읽으면 서보의 현재 속도를 알수 있습니다.

현재 가속도 읽기

  • Register ACC 를 읽으면 서보의 현재 가속도를 알수 있습니다.

서보 내부 온도 센서 종류

  • CAN 서보는 제품에 따라 다양한 온도 센서를 가지고 있습니다.
    • MCU 온도
      • 제어 보드의 MCU 에 내장된 온도 센서의 데이터 입니다.
    • 모터 온도
      • 모터에 부착된 온도 센서의 데이터 입니다.
    • 습도 센서의 온도
      • 습도 센서에 포함된 온도 센서의 데이터 입니다.
  • 온도에 의한 모터 출력 끄기
    • MCU 온도의 최소, 최대 값을 각각 지정하여, 모터 출력을 끌 수 있습니다.
  • 모터 온도, 습도 센서의 온도 데이터는 별도의 감시 코드가 없으므로, Host 에서 주기적으로 읽어서 판단하여 서보 출력을 끄거나 제어해야 합니다.

추가 기능

User Data

  • Register 2개에 사용자가 원하는 정보를 넣어 둘수 있습니다.
  • 값을 변경하고 SAVE 절차를 수행하면, Reset 되어도 유지됩니다.

Stream

  • Register POSITION, TURN_COUNT 등의 정보를 지정한 간격으로 전송합니다.
  • UAVCAN 에서는 Actuator Status 메시지를 발신합니다.
  • Ko/CanServo/Stream 을 참조해 주십시오.

Stream Address

  • 총 4개의 Register 를 통해, 원하는 주소 2개씩 최대 8개까지 설정할수 있습니다.
  • PROTOCOL = CAN 2.0A, 2.0B 에서만 적용됩니다.
  • Ko/CanServo/Stream/Address 를 참조해 주십시오.

Stream CAN ID

  • Stream CAN Packet 발신 때 사용할 CAN ID 를 별도 지정하는 기능입니다.
  • Ko/CanServo/ID2 값 대신 사용됩니다.
  • PROTOCOL = CAN 2.0A, 2.0B 에서만 적용됩니다.

Start Position

  • CAN 서보는 기동시 Reset 시점의 위치를 유지합니다.
  • Reset 시점에 특정 위치로 이동시키고 싶을 때 사용하는 기능입니다.

Fail Safe

  • POSITION_NEW 가 일정 시간 동안 오지 않으면 특정 위치로 이동시키고 싶을 때 사용하는 기능입니다.
  • 시간과 위치를 각각 설정합니다.
  • Ko/CanServo/Fail Safe 를 참조해 주십시오.

Pause Stream

  • Stream 발신을 일시적으로 정지시키는 기능입니다. 이 상태는 저장되지 않으며, 서보 Reset 이 되면 정지는 풀립니다.

Switch to Bootloader

  • FW 실행 중에 Bootloader 로 전환하는 기능입니다.
  • Bootloader 에서 사용할 통신 속도, CAN ID 등을 지정할수 있습니다.

기능별 구분

전류 측정 회로가 있는 경우

  • MD 시리즈 일부 (예: MD89), SG 시리즈, RB 시리즈, DB 시리즈는 전류 측정 회로가 있습니다.
  • 실시간 측정한 전압과 전류를 이용하여 출력을 조절합니다.

모터 온도 센서가 있는 경우

  • 일부 모델에서는, 모터의 온도 데이터를 제공합니다.
  • Host 에서 주기적으로 확인하여, 서보를 끄거나, 출력을 낮추어야 합니다.

전압 상승 방지 회로가 있는 경우

  • 특정 전압 이상이 되지 못하도록 제한해 주는 회로가 장착된 모델이 있습니다.
    • 예: SG50
  • 서보는 동작 상황에 따라 발전이 되어 전압이 높아지는 경우가 있습니다.
    • 예: 감속 동작, 윈치 내리기
    • 이를 하드웨어적으로 방지해 주는 회로입니다.
    • 다만, 어느 한도가 넘어서면, 전자 퓨즈에 의해 회로가 꺼지면서 기능이 멈춥니다.
  • 이 회로가 꺼지면 그 다음으로 Over Voltage Brake 기능이 고전압을 잡아줍니다.
  • SG50 의 경우에는 방지 회로가 1차로 막고, 2차로 Over Voltage Brake 기능이 막습니다.

습도 센서가 있는 경우

  • 습도 센서가 추가로 있는 모델이 있습니다.
    • 예: SG 시리즈 일부: SG33, SG50
  • 습도 센서는 서보 내부의 상대 습도와 온도 데이터를 제공합니다.
  • Low Data 를 그대로 제공하므로, 공식에 따라 계산해야 합니다.
  • 주기적으로 데이터를 받아서, Host 에서 판단하여 서보를 끄거나, 동작을 제한해야 합니다.