Difference between revisions of "CanServo/Manual/Summary/en"
Line 76: | Line 76: | ||
*[[CanServo/Register/Read/en]] | *[[CanServo/Register/Read/en]] | ||
== | ==Applied time when setting value is changed== | ||
*Most user-use settings take effect immediately after change. | *Most user-use settings take effect immediately after change. | ||
*But, the following items, as an exception, are applied at the time of Servo Reset, so SAVE and RESET procedures must be performed. | *But, the following items, as an exception, are applied at the time of Servo Reset, so SAVE and RESET procedures must be performed. |
Revision as of 14:37, 13 December 2021
Under Construction
Overview of this page
CAN servo is a servo controlled through CAN communication. It supports CAN 2.0A, 2.0B and supports DroneCAN protocol.
This document summarizes the contents of the CAN Servo Manual and rearranges them from a functional point of view. For details, refer to the CAN servo manual.
F/W Types
It is divided according to the type of protocol supported.
- C Type = support CAN 2.0A, 2.0B
- U Type = support DroneCAN
- A Type = support CAN 2.0A, 2.0B, DroneCAN
Simple Test
C Type or A Type: The factory default setting of CAN servo is CAN 2.0A, 1000kbps, Servo Mode. For testing purposes, we send the following packets:
- CAN 2.0A packet, CAN ID = 0, DATA = 'w', 0, 0x1E, 0xAA, 0x2A, DLC = 5 ---> Move to +60 degree position
- CAN 2.0A packet, CAN ID = 0, DATA = 'w', 0, 0x1E, 0x00, 0x20, DLC = 5 ---> Move to 0 degree position
Communication settings
- Communication settings are applied at the time of Servo Reset.
- If you are using CAN communication for the first time, please refer to CAN/Overview.
CAN baudrate
Select the communication speed to use. The unit is kbps.
- Register Address: 0x38
- 0 - 1000
- 1 - 800
- 2 - 750
- 3 - 500
- 4 - 400
- 5 - 250
- 6 - 200
- 7 - 150
- 8 - 125
Select Protocol
Select the protocol type to be used for communication through CanServo/MODE/CAN/en.
Select from CAN 2.0A, 2.0B, or DroneCAN. Depending on the protocol, it may be necessary to change the FW Type.
The reason CAN 2.0A and B are divided is because the CAN ID value must also match, but the Type is also checked. That is, CAN ID = 100 with CAN 2.0A and CAN ID = 100 with CAN 2.0B are recognized differently.
- For details, refer to CanServo/Packet Accept Rule/en.
According to the status of CanServo/MODE/CAN/en, the following protocol is followed.
- CAN 2.0A, 2.0B: CanServo/Protocol/Control/en
- DroneCAN: CanServo/Protocol/UAVCAN/en
Servo ID designation
To control servos, you need to distinguish between servos. Servos are distinguished by two types of IDs.
- When using CAN 2.0A, 2.0B protocol, it is divided into CAN ID and Servo ID.
- When using DroneCAN, it is divided into Node ID and Actuator ID.
Set each ID:
- CAN ID and Node ID are set through Register CanServo/ID2/en.
- Servo ID and Actuator ID are set through Register CanServo/ID1/en.
Operation Mode
- CAN servo supports Servo Mode that operates within one rotation and Turn Mode that allows +/-32760 x 360 deg operation.
- Note: When Turn Mode is selected, the position at the time of servo reset becomes 0 deg, 0 Turn position.
- Choose from 2 options.
- Operation mode is applied at the time of servo reset.
- Please refer to Register CanServo/MODE/RUN/en.
Servo control method
- CAN servo has 128 registers of 2 byte size.
- It operates according to these values.
- For example
- In Servo Mode, if you set a value of 8192 in Register POSITION_NEW, it moves to the center position.
- If you read the Register CanServo/POSITION/en value, you can know the current position of the servo.
- CanServo/Protocol/Control/en
- CanServo/Register/en
- CanServo/Register/Write/en
- CanServo/Register/Read/en
Applied time when setting value is changed
- Most user-use settings take effect immediately after change.
- But, the following items, as an exception, are applied at the time of Servo Reset, so SAVE and RESET procedures must be performed.
- Communication settings: communication speed, communication protocol, ID2, ID1
- Operation mode ( CanServo/MODE/RUN/en )
- Stream CAN ID set value ( CanServo/Stream/CAN ID/en )
설정값의 저장
- 제어값(POSITION_NEW, TURN_NEW 등), 각종 상태값, 예외인 일부 항목등을 제외한 대부분의 Register 는, SAVE 명령시 저장되어 Servo Reset 후에도 유지됩니다.
- !!! 주의 !!!
- SAVE 는 모터를 정지 시킨 상태에서 하는 것을 추천합니다.
- SAVE 를 너무 자주 해서는 안됩니다.
- 특히 주기적으로 해서는 안됩니다.
- 가능한 여러가지 값을 변경 한 후 SAVE, Servo Reset 하는 것을 추천합니다.
- 단, 통신 설정값, ID, RUN_MODE 등은, 다른 값들과 함께 변경하지 말고 별도로 변경, Reset 하는 것을 추천합니다.
위치 좌표계
- CanServo/POSITION, POSITION_NEW: Resolution: 16384 = 360 deg
Servo Mode
- 1회전 이내에서 동작하는 모드 입니다.
- Register POSITION_NEW 에 원하는 위치를 넣습니다.
- Range: 0 ~ 16383
- Center: 8192
- POSITION_MIN, POSITION_MAX 로 동작 범위를 제한 할 수 있습니다.
Turn Mode
- 다회전 위치 제어 모드 입니다.
- CanServo/TURN_NEW 에 회전수를 넣고, CanServo/POSITION_NEW 에 360도 이내 각도를 넣으면 동작합니다.
- 두 값은 int16_t ( 16 bits signed integer ) 방식을 따르므로, 음수 지정이 가능합니다.
- !!! 주의 !!!
- 서보 Reset 될 때, 위치값이 0 으로 초기화 됩니다.
- 서보 Reset 직후, TURN_NEW = 0, POSITION_NEW = 0 을 전송하면 움직이지 않고 그대로 있습니다.
- 2개의 Register 를 동시에 전송할수 있는 'W' Write 메시지를 사용하는 것을 권장합니다.
- 따로 전송하면, 두 전송중 하나라도 에러가 발생하면 원치 않는 동작을 하게 됩니다.
UAVCAN UNITLESS 좌표계
- UAVCAN Actuator.ArrayCommand 메시지에서 목표 위치를 지정할때 UNITLESS 모드를 사용하면 -1.0000 부터 +1.0000 까지 정규화된 형태로 지정할수 있습니다.
- 이렇게 지정한 위치값은, -1 ~ 0 ~ +1 ---> POSITION_MIN, POSITION_MID, POSITION_MAX 까지의 실제 위치값으로 환산됩니다.
- 예를 들면, -0.5000 는 (POSITION_MIN+POSITION_MID)/2 가 됩니다.
통신 예제
예를 들어 다음과 같이 4개의 서보가 있다면
- S1: PROTOCOL=2.0A, ID2 = 10, ID1 = 101
- S2: PROTOCOL=2.0A, ID2 = 20, ID1 = 102
- S3: PROTOCOL=2.0B, ID2 = 10, ID1 = 103
- S4: PROTOCOL=2.0B, ID2 = 20, 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 를 쓰라는 명령을 뜻합니다.
- 자세한 내용은 CanServo/Protocol/Control 를 참조해 주십시오.
- 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 에서, 목표 위치를 지정하는 방식은, POSITION_NEW 의 음수 사용 여부에 따라 2가지 형태로 사용 가능합니다.
- 다음 3개의 예를 들어 보겠습니다.
- -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
- 다음 3개의 예를 들어 보겠습니다.
- 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 가 0보다 작을수 있습니다.
- 만일, POSITION_NEW 를 양수로 바꾸는 경우에는 CanServo/TURN 를 -1 합니다. (TYPE 2)
- 목표 각도 deg 를 POSITION 단위로 바꿉니다.
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
값 읽기
- Servo Mode 에서는, Register POSITION 또는 POSITION-32-LOW 를 읽습니다.
- Turn Mode 에서는, Register POSITION, TURN 를 읽습니다. 혹은 POSITION-32 를 읽습니다.
!!! 주의!!! POSITION 과 POSITION-32-LOW 의 차이
- POSITION 은 0 ~ 16383 까지만 들어가고, TURN 이 바뀌는 것은 TURN 를 읽어봐야 알수 있습니다.
- POSITION-32-LOW 는 2비트 추가로 있으므로, 앞뒤로 총 4 turn 까지 상태를 알수 있습니다.
속도 바꾸기
- 동작 최대 속도를 지정할수 있습니다.
- 0 으로 변경하면 목표 위치를 바꾸더라도 움직이지 않습니다.
CAN 서보에서 속도의 단위는 pos/100msec 입니다.
pos 의 단위는 16384 = 360 deg 입니다.
Vt (sec/60deg) 와 Vp (pos/100msec) 의 변환식은 다음과 같습니다. 단, PT = Reg PID TIME, PX = PT / 10
- Vp = 60 x 16384 / 360 / Vt / 10 x PX
- Vt = 60 x 16384 / 360 / Vp / 10 x PX
ex) 1920 pos/100msec = 0.142 sec/60deg, PX=1
ex) 1920 pos/100msec = 0.284 sec/60deg, PX=2
토크 바꾸기
- 최대 출력을 조절합니다.
- 최대 속도도 비례적으로 조정됩니다.
- 0 으로 변경하면 힘이 완전히 풀리면서 외력에 의해 움직일수 있습니다.
OLP
- Over Load Protection 기능입니다.
- 지정한 시간 이상 내부 제어기 출력이 Full 이 되면, 발동합니다.
- OLP 가 발동하면, OLP Ratio 로 지정된 값으로 출력이 조정됩니다.
- 90 이면 출력이 90% 가 됩니다.
- OLP 발동 시간은 PX = PT / 10, PT = PID TIME 에 의해 달라집니다.
- OLP 발동시간 = OLP Time x PX 입니다.
- PX = 2 이고 OLP Time = 3 이면, OLP 발동 시간은 6초가 됩니다.
비상 정지
- 일시적으로 서보 이동을 멈춥니다.
- 이 상태는 저장되지 않으며, 서보 Reset 후에는 풀립니다.
- 비상 정지 상태에 따라 정지까지의 과정과 상태 유지 방식이 다릅니다.
- 0 = 비상 정지 해제
- 1 = 즉시 모터 출력을 끕니다. 외력에 의해 움직일수 있습니다.
- 2 = Time Speed ES 값에 맞추어 감속하고, 정지 위치를 고수합니다.
- 3 = 즉시 멈추고, 정지 위치를 고수합니다.
전압, MCU 온도에 따른 비상 정지
- MCU 온도와 전압의 상태가 지정한 작동 범위를 벗어나면 모터 출력이 꺼집니다.
- 실시간은 아니고 어느정도 평균처리가 됩니다.
가감속 시간 지정 하기
- 가속 시간(Time Speed Up), 감속 시간(Time Speed Down)을 설정합니다.
- 추가로 비상 정지 시간(Time Speed ES: Emergency Stop)을 설정합니다.
- 이 기능은 사다리꼴 속도 프로파일을 구현합니다.
- 지정한 최대 속도까지 가속하는 시간, 최대 속도에서 속도 0까지 감속하는 시간을 지정할수 있습니다.
- 부드러운 가감속이 필요한 경우에 사용합니다.
- 일반적인 서보로서 사용할때는 0 으로 설정합니다.
- Time Speed Up/Down/ES 의 단위는 PX = PT / 10, PT = PID TIME 에 따라 달라집니다.
- 예를 들어
- PX = 1 이면: Time Speed Up = 100 = 100 msec 입니다.
- PX = 2 이면: Time Speed Up = 100 = 200 msec 입니다.
현재 속도 읽기
Register VELOCITY 를 읽으면 서보의 현재 속도를 알수 있습니다.
속도의 단위는 pos/100msec 입니다.
pos 의 단위는 16384 = 360 deg 입니다.
Vt (sec/60deg) 와 Vp (pos/100msec) 의 변환식은 다음과 같습니다.
- Vp = 60 x 16384 / 360 / Vt / 10
- Vt = 60 x 16384 / 360 / Vp / 10
ex) 1920 pos/100msec = 0.142 sec/60deg
현재 가속도 읽기
- Register ACC 를 읽으면 서보의 현재 가속도를 알수 있습니다.
서보 내부 온도 센서 종류
- CAN 서보는 제품에 따라 다양한 온도 센서를 가지고 있습니다.
- MCU 온도
- 제어 보드의 MCU 에 내장된 온도 센서의 데이터 입니다.
- 모터 온도
- 모터에 부착된 온도 센서의 데이터 입니다.
- 습도 센서의 온도
- 습도 센서에 포함된 온도 센서의 데이터 입니다.
- MCU 온도
- 온도에 의한 모터 출력 끄기
- MCU 온도의 최소, 최대 값을 각각 지정하여, 모터 출력을 끌 수 있습니다.
- 모터 온도, 습도 센서의 온도 데이터는 별도의 감시 코드가 없으므로, Host 에서 주기적으로 읽어서 판단하여 서보 출력을 끄거나 제어해야 합니다.
추가 기능
User Data
- Register 2개에 사용자가 원하는 정보를 넣어 둘수 있습니다.
- 값을 변경하고 SAVE 절차를 수행하면, Reset 되어도 유지됩니다.
Stream
- Register POSITION, CanServo/TURN 등의 정보를 지정한 간격으로 전송합니다.
- UAVCAN 에서는 Actuator Status 메시지를 발신합니다.
- CanServo/Stream 을 참조해 주십시오.
Stream Address
- 총 4개의 Register 를 통해, 원하는 주소 2개씩 최대 8개까지 지정 할수 있습니다.
- CanServo/Stream/Address 를 참조해 주십시오.
Stream CAN ID
- Stream CAN Packet 발신 때 사용할 CAN ID 를 별도 지정하는 기능입니다.
- CanServo/Stream/CAN ID 를 참조해 주십시오.
Start Position
- CAN 서보는 기동시 Reset 시점의 위치를 유지합니다.
- Reset 시점에 특정 위치로 이동시키고 싶을 때 사용하는 기능입니다.
- CanServo/Start Position 를 참조해 주십시오.
Fail Safe
- POSITION_NEW 가 일정 시간 동안 오지 않으면 특정 위치로 이동시키고 싶을 때 사용하는 기능입니다.
- 시간과 위치를 각각 설정합니다.
- CanServo/Fail Safe 를 참조해 주십시오.
Pause Stream
- Stream 발신을 일시적으로 정지시키는 기능입니다. 이 상태는 저장되지 않으며, 서보 Reset 이 되면 정지는 풀립니다.
- CanServo/Stream/Pause 를 참조해 주십시오.
Switch to Bootloader
- FW 실행 중에 Bootloader 로 전환하는 기능입니다.
- Bootloader 에서 사용할 통신 속도, CAN ID 등을 지정할수 있습니다.
- 이를 통해 각 서보가 모두 켜져 있는 상태에서 1대의 서보만 FW 를 업데이트 할수 있습니다.
- CanServo/Switch to Bootloader 를 참조해 주십시오.
기능별 구분
전류 측정 회로가 있는 경우
- MD 시리즈 일부 (예: MD89), SG 시리즈, RB 시리즈, DB 시리즈는 전류 측정 회로가 있습니다.
- 실시간 측정한 전압과 전류를 이용하여 출력을 조절합니다.
모터 온도 센서가 있는 경우
- 일부 모델에서는, 모터의 온도 데이터를 제공합니다.
- Host 에서 주기적으로 확인하여, 서보를 끄거나, 출력을 낮추어야 합니다.
전압 상승 방지 회로가 있는 경우
- 특정 전압 이상이 되지 못하도록 제한해 주는 회로가 장착된 모델이 있습니다.
- 예: SG50
- 서보는 동작 상황에 따라 발전이 되어 전압이 높아지는 경우가 있습니다.
- 예: 감속 동작, 윈치 내리기
- 이를 하드웨어적으로 방지하는 회로입니다.
- 다만, 한도를 넘어서면 전자 퓨즈에 의해 회로가 꺼지면서 기능이 멈춥니다.
- 이 회로가 꺼지면 그 다음으로 Over Voltage Brake 기능이 고전압을 잡아줍니다.
- SG50 의 경우에는 방지 회로가 1차로 막고, 2차로 Over Voltage Brake 기능이 막습니다.
습도 센서가 있는 경우
- 습도 센서가 추가로 있는 모델이 있습니다.
- 예: SG 시리즈 일부: SG33, SG50
- 습도 센서는 서보 내부의 상대 습도와 온도 데이터를 제공합니다.
- Low Data 를 그대로 제공하므로, 공식에 따라 계산해야 합니다.
- 주기적으로 데이터를 받아서, Host 에서 판단하여 서보를 끄거나, 동작을 제한해야 합니다.