Ethercat operation
개요
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 |
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 |
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) |
Figure 4. CiA402 state machine 다이어그램
###Control word (object 0x6040)
사용자별로 설정되며, 드라이브의 상태를 변경합니다.
Index | 0x6040 |
---|---|
이름 | controlword |
객체 코드 | VAR |
데이터 타입 | UINT |
접근 | RW |
PDO 맵핑 (pre-mapped) | Yes |
단위 | - |
범위 | - |
기본 값 | 0 |
Figure 5. Controlword의 자세한 설명
###Status word (object 0x6041)
드라이브 내부적으로 설정되며, 현재 드라이브의 상태를 표시합니다.
Index | 0x6041 |
---|---|
이름 | statusword |
객체 코드 | VAR |
데이터 타입 | UINT |
접근 | RO |
PDO 맵핑 (pre-mapped) | Yes |
단위 | - |
범위 | - |
기본 값 | - |
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 |
코드 | 이름 | 설명 |
---|---|---|
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 손상 -> 과전류 |
Figure 8. 토크 제어 루프
CORE 모듈 | 기어비 | 토크 상수(Nm/A) | Single-turn 엔코더 분해능(counts) |
---|---|---|---|
CORE100 | 101 | 0.058 | 65536 |
CORE200 | 121 | 0.087 | 65536 |
CORE500 | 121 | 0.0884 | 65536 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
digital_output:1 = 0xAAAA : 브레이크 해제
digital_output:1 = other values: 브레이크 상태* 브레이크 해제 선 사용: 드라이버의 각 브레이크 선(Brake lines) 커넥터 (J2)은 'Brake release' 선을 가지고 있으며, 이 선이 GND에 연결될 때 브레이크는 모터의 상태와 상관없이 해제됩니다.