EtherCAT 통신
개요
CORE 모듈은 CiA402 CANopen 프로파일을 준수하고, CoE (CANopen over EtherCAT)라 부르는 EtherCAT을 통해 구현됩니다. 현재 FW 개정반(R1.10)에서는 ‘Cyclic Synchronization Torque’ (CST) 만 지원되며, 속도, 속도 제어 같은 다른 작동 모드는 CST 모드의 적용 레벨에서 얻어야 한다. CST 모드에서 CORE는 최대 12kHz의 마스터 업데이트 속도를 지원한다. 내부 토크 컨트롤러의 게인 값들은 각 모듈 유형에 맞게 조정 되었습니다. EtherCAT FoE (File over EtherCAT)를 이용하여 EtherCAT SDO CORE 지원 펌웨어 업데이트를 통해 이 게인 값들을 바꿀 수 있습니다.
일반 EtherCAT 장치 정보
장치 ID:
- 벤더 ID - 0x0000089a: Neuromeka EtherCAT vender ID
- 상품 코드 - 0x30000000: Neuromeka motion device
지원 프로토콜:
- CoE: EtherCAT 프로토콜을 통한 표준 CANopen
- FoE: 드라이버 펌웨어 업데이트에 사용되는 EtherCAT 기반 표준 파일
CoE 세부사항:
- SDO 활성화 및 전체 액세스 : 사용자가 SDO를 통해 사용 가능한 개체에 완전히 접근 가능
- PDO 할당 및 구성 지원 하지 않음 : PDO 맵핑이 고정되어 있어 사용자가 변경 불가능
- LWR 사용: 마스터가 동일한 EtherCAT 데이터그램에서 PDO 데이터를 읽거나 쓰기 가능
Distributed clock (DC):
- DC는 모든 EtherCAT 슬레이브 장치와 EtherCAT 마스터를 작은 오차(~100ns)에서 동기화하는 EtherCAT의 기능입니다.
- 뉴로메카 CORE는 64 bit DC clock을 지원합니다.
- CST mode에서는 DC의 활성화 여부에 상관 없이 모듈이 동작합니다.
SDO 접근
사용자는 SDO를 통해 CiA402에서 정의한 드라이브 변수에 완전히 접근이 가능합니다. SDO 객체는 두 가지로 분류 됩니다. * 원본 기능 목록: 이 목록들은 정의된 함수들로 사용되는 CiA402 표준 객체를 포함합니다. 이 목록의 목든 객체가 업데이트가 된 것은 아니다.(일부 객체는 항상 0입니다.) * 대체 기능 목록 : 드라이버 온도 데이타, 모듈 설정, 모듈 보정, 디버그 같은 다른 함수들에 몇몇의 객체가 사용됩니다.
아래 두 표는 모든 객체 목록을 보여줍니다. Neuromeka_CompleteSDO_List.pdf
원본 함수 객체 목록:
Figure 1. 원본 함수 객체 목록
대체 험수 객체 목록:
Figure 2. 대체 함수 객체 목록
Index: 객체의 표준 인덱스, 16진수 Sub-index: 각 객체는 하위 객체를 가지기도 하며, 그 객체의 하위 객체에 대한 인덱스 Name: 표준 객체 이름, 객체의 함수를 나타냄 Type: 객체의 데이터 타입 Attribute: OP mode의 접근 권한 Description: 객체에 대한 추가 설명
Slave process data (PDO)
PDO 데이터는 마스터 장치와 슬레이브 장치간에 주기적으로 송수신됩니다. 이것은 실시간(realtime) 통신 데이터입니다. 뉴로메카의 CORE는 최대 20kHz(50us)의 PDO 전송 속도를 제공합니다. CORE는 PDO 할당 및 구성을 지원하지 않으므로 사용자는 제조업체에서 할당한 기본 구성을 사용해야 합니다. 기본 PDO 맵핑은 모션 제어를 위해 지향되므로, 사전에 구성된 객체는 모션 제어 목적(위치, 속도, 토크)만 제공 됩니다. 온도와 같은 기타 드라이버 정보는, 사용자가 SDO를 통해 접근해야 합니다.
기본 PDO 맵핑
RxPDO 기본 RxPDO 객체 'Drive RxPDO'(index : 0x1600)는 sync-manager2(SM2)에 맵핑됩니다. RxPDO에는 5개의 PDO 항목이 있습니다.
PDO 이름 | 항목 | ||||
---|---|---|---|---|---|
Drive RxPDO | Index | Sub-index | Bit len | Name | Data type |
0x6040 | 0 | 16 | controlword | UINT | |
0x607a | 0 | 32 | target_velocity | DINT | |
0x60ff | 0 | 32 | target_velocity | DINT | |
0x6071 | 0 | 16 | target_torque | INT | |
0x6060 | 0 | 8 | modes_of_operation | SINT |
Table 1. 기본 RxPDO 맵핑
TxPDO 기본 TxPDO 객체 'Drive TxPDO'(index : 0x1A00)는 sync-manager3 (SM3)에 맵핑됩니다. RxPDO에는 5개의 PDO 항목이 있습니다.
PDO 이름 | 항목 | ||||
---|---|---|---|---|---|
Drive TxPDO | Index | Sub-index | Bit len | Name | Data type |
0x6041 | 0 | 16 | statusword | UINT | |
0x6064 | 0 | 32 | position_actual_value | DINT | |
0x606c | 0 | 32 | velocity_actual_value | DINT | |
0x6077 | 0 | 16 | torque_actual_value | INT | |
0x6061 | 0 | 8 | modes_of_operation_display | SINT |
Table 2. 기본 TxPDO 맵핑
CiA402 상태 기계(state machine)
- CoE CiA402 모션 프로파일이 구현된 CORE, SERVO-ON, SERVO-OFF은 CiA402 state machine에 따라 제어됩니다.
- state 그룹 3가지:
- 전원 비활성화(Power disabled): 드라이버 전압이 아직 활성화 되지 않음
- 전원 활성화(Power enabled): 고전압 상요 가능
- 고장(Fault): 모든 알람 신호는 드라이버를 고장 상태(fault sate)를 만듬
- 사각 블락은 드라이버의 상태
- 노란색의 강조된 숫자들은 상태 전이 경로(state transition path)
Figure 3. CiA402 state machine 다이어그램
드라이버 상태
드라이버 상태 | 설명 |
---|---|
Not Ready to Switch On | 초기상태, 전원을 켠 후 아주 빠르게 전달 |
Switch On Disabled | 시작이 완료료됨, 서보가 꺼진 상태(off state) |
Ready to Switch On | 꺼진 상태에서 control word로 서보에 명령 |
Switched On | 주 전압이 공급되어 활성화할 준비가 됨 |
Operation Enable | 완전히 활성화됨. 서보가 작동중 |
Quick Stop Active | 서보 드라이브가 사전 정의된 방법으로 중지 |
Fault Reaction Active | 서보는 켜진 상태(on state)지만 알람이 감지되어, 서보는 곧 꺼진 상태(off state)로 진입 |
Fault | 서보 꺼짐(off state) |
Table 3. 드라이버 상태(state) 요약
드라이버의 상태는 Statusword 객체로 표시됩니다. 한 상태에서 다른 상태로 변경하려면 마스터는 알맞은 COntrolword 값을 전송해야 합니다.
Figure 4. CiA402 state machine 다이어그램
Control word (object 0x6040)
사용자별로 설정되며, 드라이브의 상태를 변경합니다.
Index | 0x6040 |
---|---|
이름 | controlword |
객체 코드 | VAR |
데이터 타입 | UINT |
접근 | RW |
PDO 맵핑 (pre-mapped) | Yes |
단위 | - |
범위 | - |
기본 값 | 0 |
Table 4.Controlword 설명
Controlword는 비트단위 객체로, 각 비트는 각각의 제어의 의미를 가집니다. 몇개의 비트는 필수적(M)이고, 다른 것들은 선택적(O)입니다.
Figure 5. Controlword의 자세한 설명
Status word (object 0x6041)
드라이브 내부적으로 설정되며, 현재 드라이브의 상태를 표시합니다.
Index | 0x6041 |
---|---|
이름 | statusword |
객체 코드 | VAR |
데이터 타입 | UINT |
접근 | RO |
PDO 맵핑 (pre-mapped) | Yes |
단위 | - |
범위 | - |
기본 값 | - |
Table 5.Statusword 설명
Statusword는 비트 단위로 정의되고, 각 비트는 특정 상태를 나타냅니다.
Figure 6. Detail information of Statusword
SDO를 통한 서보의 on/off 변경
controlword, statusword를 포함한 모든 객체들을 SDO를 통해 접근할 수 있습니다. 그러므로 사용자들은 SDO를 통해 controlword의 적당한 값을 써 CORE 모듈의 on/off를 변경할 수 있습니다. CiA402 state machine에 따르면, 적당한 SERVO-ON 경로는 다음과 같습니다.\
Figure 7. Servo ON 경로
servo를 끄기 위한(SERVO-OFF) 가장 간단한 방법은 controword의 값을 0(transition#9) 0으로 설정하는 것입니다. 모듈을 켜기 전에, mode_of_operation을 먼저 설정하는 것을 권장합니다.
에러 코드(Error_code) (object 0x603F)
- 에러 코드(Error_code): 드라이브 내부의 오류를 나타냄
- 에러 코드(Error_code)는 작업을 시작하기 전과 고장 비트(Fault bit) statusword가 나타낼 때 확인해야 합니다.
Index | 0x603F |
---|---|
이름 | error_code |
객체 코드 | VAR |
데이터 타입 | UINT |
접근 | RO |
PDO 맵핑 (pre-mapped) | No |
단위 | - |
범위 | - |
기본 값 | 0 |
Table 6.Error_code 설명
CORE의 가능한 표준 에러 코드(FW revision 1.10까지):
코드 | 이름 | 설명 |
---|---|---|
0x2310 | ERROR_CONTINUOUS_OVER_CURRENT | 하드웨어 과전류, 재실행 전 리셋 필요 |
0x3110 | ERROR_MAINS_OVER_VOLTAGE | 주 공급의 전압(48V)이 너무 높음 (> 63V) |
0x3120 | ERROR_MAINS_UNDER_VOLTAGE | 주 공급의 전압(48V)이 너무 낮음 (< 41V) |
0x3210 | ERROR_DC_LINK_OVER_VOLTAGE | 드라이버 전압(활성화 후)이 너무 높음 (> 62V) |
0x3220 | ERROR_DC_LINK_UNDER_VOLTAGE | 드라이버 전압(활성화 후)이 너무 낮음 (< 40V) |
0x7310 | ERROR_SPEED | 드라이버 과속, 자동적으로 에러 복구 |
0xFF10 | ERROR_ENCODER_BAT_LOW | 엔코더 배터리 부족 -> 배터리 교환 |
0xFF11 | ERROR_ENCODER_ERR_BIT | 엔코더에 에러 비트-> 비트 카운트 확인 |
0xFF20 | ERROR_5V_SOURCE_OVER | 내부 5V 전원 너무 높음 (> 5.5V) |
0xFF21 | ERROR_5V_SOURCE_UNDER | 내부 5V 전원 너무 낮음 (< 4V) |
0xFF22 | ERROR_3_3V_SOURCE_OVER | 내부 3.3V 전원 너무 높음 (> 3.6V) |
0xFF23 | ERROR_3_3V_SOURCE_UNDER | 내부 3.3V 전원 너무 낮음 (< 3.0V) |
0xFF24 | ERROR_GATE_DRV_VOLTAGE_OVER | 내부 게이트 드라이버 전압이 너무 높음(> 13V) |
0xFF25 | ERROR_GATE_DRV_VOLTAGE_UNDER | 내부 게이트 드라이버 전압이 너무 높음(< 9V) |
0xFF31 | ERROR_MOSFET_UL_THRU | Low side MOSFET, 채널 U 손상 |
0xFF32 | ERROR_MOSFET_VL_THRU | Low side MOSFET, 채널 V 손상 |
0xFF34 | ERROR_MOSFET_WL_THRU | Low side MOSFET, 채널 W 손상 |
0xFF39 | ERROR_MOSFET_UH_THRU | High side MOSFET, 채널 U 손상 |
0xFF3A | ERROR_MOSFET_VH_THRU | High side MOSFET, 채널 V 손상 |
0xFF3C | ERROR_MOSFET_WH_THRU | High side MOSFET, 채널 W 손상 |
0xFF3F | ERROR_MOSFET_UNKNOWN_THRU | 일부 MOSFET 손상 -> 과전류 |
Table 7. CORE 모듈 에러 코드
주기적 동기 토크 모드(Cyclic synchronization torque mode, CST)
SERVO-ON 운전 모드가 CST(10)으로 설정되면, 타겟 토크는 드라이브에 의해 업데이트 될 것입니다. 프로세스 데이타의 시간제한은 50ms : EtherCAT 상태가 OP 모드로 변경되면, 50ms 미만의 주기로, 드라이브에 프로세스 데이터를 전송해야 합니다. 계속 진행 하기 전에 타켓 토크를 최대 토크(max_torque) 값(object 0x6072)와 비교 하게 됩니다.max_torque의 기본 값은 2048로 CORE500에서 42.5A에 해당하는 값입니다. 실제 모터 속도를 측정하고 최대 모터 속도(max_motor_speed, 객체 0x6080)와 비교합니다. max_motor_speed의 기본 값은 4600rpm입니다. max_torque와 max_motor_speed의 값을 사용자가 SDO 접근을 통해 변경할 수 있습니다.
Figure 8. 토크 제어 루프
기타
데이터 변환
토크 (전류): 이전 장에서 설명하였듯이, 모든 target_torque, actual_torque and max_torque values (called ecat_data)은 ADC 드라이버의 'count' 단위로 측정됩니다. 그러므로 각 값들을 토크 상수와 기어 비로 의미있는 물리적 단위(Amps, Nm)로 변환해야 합니다.
데이터 변환을 위한 기본 정보
CORE 모듈 | 기어비 | 토크 상수(Nm/A) | Single-turn 엔코더 분해능(counts) |
---|---|---|---|
CORE100 | 101 | 0.058 | 65536 |
CORE200 | 121 | 0.087 | 65536 |
CORE500 | 121 | 0.0884 | 65536 |
Table 8. CORE 모듈 - 데이터 변환을 위한 기본 정보
토크 (전류) 데이터 변환
CORE100 | ecat data | 모터 전류 (A) | 모터 토크 (Nm) | CORE 출력 토크 (Nm) |
---|---|---|---|---|
공식 | a | I = a/96 | t = 0.058*I = 0.00060417*a | T = 101*t = 0.061004*a |
예 | 96 | 1.0 | 0.058 | 5.858 |
Table 9. CORE100 토크 (전류) 데이터 변환
CORE200 | ecat data | 모터 전류 (A) | 모터 토크 (Nm) | CORE 출력 토크 (Nm) |
---|---|---|---|---|
공식 | a | I = a/96 | t = 0.087*I = 0.00090625*a | T = 121*t = 0.10965625*a |
예 | 96 | 1.0 | 0.087 | 10.527 |
Table 10. CORE200 토크 (전류) 데이터 변환
CORE500 | ecat data | 모터 전류 (A) | 모터 토크 (Nm) | CORE 출력 토크 (Nm) |
---|---|---|---|---|
공식 | a | I = a/48 | t = 0.0884*I = 0.0018417*a | T = 121*t = 0.2228457*a |
예 | 96 | 2.0 | 0.1768 | 21.393 |
Table 11. CORE500 토크 (전류) 데이터 변환
위치 데이터 변환
CORE100 | ecat data | 모터 회전(turns) | CORE 회전(turns) | CORE 축 각도(deg) |
---|---|---|---|---|
공식 | p | n = p/65536 | N = n/101= p/6619136 | A = 360*N = 360*p/6619136 |
예 | 1241088 | 18.9375 | 0.1875 | 67.5 |
Table 12. CORE100 위치 데이터 변환
CORE200 CORE500 |
ecat data | 모터 회전(turns) | CORE 회전(turns) | CORE 축 각도(deg) |
---|---|---|---|---|
공식 | p | n = p/65536 | N = n/121= p/7929856 | A = 360*N = 360*p/7929856 |
예 | 1982464 | 30.25 | 0.25 | 90 |
Table 13. CORE200/500 위치 데이터 변환
속도 데이터 변환
CORE100 | ecat data | 모터 속도 (deg/s) | 모터 속도 (rpm) | CORE 축 속도 (deg/s) |
---|---|---|---|---|
공식 | y | v = 360*y/65536 | r = 60*y/65536=v/6 | V = v/101=360*y/6619136 |
예 | 1311000 | 7201.538 | 1200.256 | 71.302 |
Table 14. CORE100 속도 데이터 변환
CORE200 CORE500 |
ecat data | 모터 속도 (deg/s) | 모터 속도 (rpm) | CORE 축 속도 (deg/s) |
---|---|---|---|---|
공식 | y | v = 360*y/65536 | r = 60*y/65536=v/6 | V = v/121=360*y/7929856 |
예 | 1311000 | 7201.538 | 1200.256 | 59.517 |
Table 15. CORE200/CORE500 데이터 변환
브레이크 제어
기본적으로, 브레이크 제어 회로는 활성화 되지 않고, 브레이크는 CORE을 정지 시킵니다. CORE 모듈 브레이크를 해제하는데 3가지 방법이 있습니다.
- 서보 켜기(Servo on): CORE가 servo-on(SDO나 PDO에 의해) 상태에 있을 경우 브레이크는 자동적으로 해제 됩니다.
- digital_output 객체 사용하기: 이 객체는 2가지 하위 index를 가지며(digital_output:0 and digital_output:1) 두 번째 하위 객체가 제어를 조절할 수 있습니다. 이 방법은 servo-off 상태에서만 작동한다는 점에 유의하십시오.
digital_output:1 = 0xAAAA : 브레이크 해제
digital_output:1 = other values: 브레이크 상태
- 브레이크 해제 선 사용: 드라이버의 각 브레이크 선(Brake lines) 커넥터 (J2)은 'Brake release' 선을 가지고 있으며, 이 선이 GND에 연결될 때 브레이크는 모터의 상태와 상관없이 해제됩니다.