# 01. ZLAC8015D V4 하드웨어 스펙

출처: `resource/ZLAC8015D V4 Series Manual Version 1.03-20251111.pdf`

## 1.1 개요

* 제조사: Shenzhen Zhongling Technology (ZLTECH)
* 허브 서보 모터 전용 디지털 AC 서보 드라이버로, **1대가 좌/우 모터 2개(듀얼 채널)를 동시 구동**한다.
* RS485(Modbus RTU) 및 CANopen(CiA301/CiA402) 버스 통신을 내장.
* 위치/속도/토크 제어 모드를 지원.
* 용도: AGV, 배송 로봇, 서비스 로봇, 자동화 이송 장비 등 — 본 프로젝트에서는 실외 스키드 스티어
  4WD 로봇의 좌우 휠 페어 구동에 사용된다.

## 1.2 전기 사양

| 파라미터 | 최소 | 표준 | 최대 | 단위 |
| :--- | :---: | :---: | :---: | :--- |
| 입력 전압 | 20 | 36 | 48 | VDC |
| 출력 전류 (피크) | 0 | 15 | 30 | A |
| 제어 신호 입력 전류 | 7 | 10 | 16 | mA |
| 과전압 보호 | - | 75 | - | VDC |
| 저전압 보호 | - | 16 | - | VDC |
| 입력 신호 전압 | - | 5 | - | VDC |
| 절연 저항 | 18 | 20 | - | MΩ |

> 채널당 정격전류 150(=15.0A), 최대전류 300(=30.0A)이 레지스터 `0x2033/0x2034`(좌),
> `0x2063/0x2064`(우)의 공장 기본값이며, 위 표의 15A/30A와 일치한다.
> 자세한 내용은 [05-error-troubleshooting.md](05-error-troubleshooting.md)의 전류 한계 절 참고.

## 1.3 환경 사양

| 항목 | 내용 |
| :--- | :--- |
| 냉각 방식 | 자연 냉각 또는 강제 냉각 |
| 사용 장소 | 먼지, 유분(oil mist), 부식성 가스 회피 |
| 동작 온도 | 0 ~ 50 ℃ |
| 최대 습도 | 90% RH (결로 없음) |
| 보관 온도 | -10 ~ 70 ℃ |
| 진동 | 10~55Hz / 0.15mm |

실외 로봇에 탑재되므로 방진/방수 인클로저 내부에 설치하고, 방열이 충분한 방향(narrow side,
방열판 면)으로 장착할 것을 매뉴얼이 권장한다. 주변 온도가 60℃를 넘는 밀폐/금속 분진 환경은
피해야 한다.

## 1.4 외형/설치 치수

* 크기: 150 × 97 × 31mm 내외 (방열판 폭 제외 케이스 기준, `resource/ZLAC8015D V4 Series.pdf` 도면 참고)
* M3 나사로 4모서리(와이드 사이드) 또는 양측면(네로우 사이드) 고정. 방열을 위해 네로우 사이드
  설치 권장.
* 장착 시 진동/충격 보호 필요 (차체에 완충 마운트 권장).

## 1.5 커넥터 핀맵

### J1/J2 — 좌측 모터 전원 (5핀)

| Pin | 표기 | 기능 |
| :-: | :--- | :--- |
| 1 | DC | 전원 입력 24-48V |
| 2 | GND | 전원 GND |
| 3 | U | 좌모터 U상 |
| 4 | V | 좌모터 V상 |
| 5 | W | 좌모터 W상 |

### 우측 모터 전원 (5핀, 핀 순서 반대)

| Pin | 표기 | 기능 |
| :-: | :--- | :--- |
| 5 | GND | 전원 GND |
| 4 | DC | 전원 입력 24-48V |
| 3 | W | 우모터 W상 |
| 2 | V | 우모터 V상 |
| 1 | U | 우모터 U상 |

전원은 좌/우 커넥터 중 한쪽 또는 양쪽 동시 입력이 가능하다(퀵스타트 가이드 확인).

### J2/J6 — 좌/우 모터 인크리멘탈 엔코더 & 홀 (12핀)

| Pin | 표기 | 기능 |
| :-: | :--- | :--- |
| 1-4 | iA+/iA-/iB+/iB- | 인크리멘탈 엔코더 A/B상 |
| 5-6 | RTC+/RTC- | 온도 센서 |
| 7-8 | V/W (Hall) | 홀 센서 |
| 9 | U (Hall) | 홀 센서 |
| 10 | GND | 전원 GND |
| 11 | VCC | 엔코더/홀 전원 출력 |
| 12 | GND | 전원 GND |

### J3 — 모터 제어 신호 포트 (8핀)

| Pin | 표기 | 기능 |
| :-: | :--- | :--- |
| 1 | BGND-L | 좌 브레이크 전원- |
| 2 | -BR-L | 좌 브레이크- |
| 3 | BDC-L | 좌 브레이크 전원+/브레이크+ |
| 4 | BGND-R | 우 브레이크 전원- |
| 5 | -BR-R | 우 브레이크- |
| 6 | BDC-R | 우 브레이크 전원+/브레이크+ |
| 7 | OUTPUT1 | 내부 풀업 5V 출력 (CAN/RS485로 기능 설정 가능) |
| 8 | OUTPUT2 | 내부 풀업 5V 출력 (CAN/RS485로 기능 설정 가능) |

전자식 브레이크는 레지스터 `0x201A`(B0, 좌)/`0x201B`(B1, 우)로 제어한다
(`0`=해제, `1`=잠금). 코드의 `MotorDriver::setBrakes()`가 이 두 레지스터에 동시에 쓴다.

### J4 — 모터 제어 신호 포트 (8핀)

| Pin | 표기 | 기능 |
| :-: | :--- | :--- |
| 1 | AOUT-R | 우모터 엔코더 A 출력 |
| 2 | BOUT-R | 우모터 엔코더 B 출력 |
| 3 | AOUT-L | 좌모터 엔코더 A 출력 |
| 4 | BOUT-L | 좌모터 엔코더 B 출력 |
| 5 | +5V | 엔코더 5V 출력 (<100mA) |
| 6 | GND | 엔코더 GND |
| 7 | INPUT1 | 프로그래머블 입력 (기본 비상정지 등으로 설정 가능) |
| 8 | INPUT2 | 프로그래머블 입력 |

INPUT1/INPUT2 펄스폭은 10ms 이상 유지해야 드라이버가 정상 인식한다. 입력 레벨은 기본 5V이며
12V 사용 시 1kΩ/0.5W, 24V 사용 시 2kΩ/0.5W 전류제한 저항을 외부에 추가해야 한다.

### J5 — 통신 포트 (5핀)

| Pin | 표기 | 기능 |
| :-: | :--- | :--- |
| 1 | CANH | CAN |
| 2 | CANL | CAN |
| 3 | SGND | 통신 GND |
| 4 | A | RS485 A |
| 5 | B | RS485 B |

**본 프로젝트는 이 중 SGND/A/B 3선을 사용해 RS485 Modbus RTU 통신을 한다.** 통신선은
차폐 트위스트페어 사용 및 접지 연결을 매뉴얼이 권장한다.

### eRS-R/eRS-L — 절대값 엔코더 인터페이스 (4핀, 미사용)

RS485 방식 외장 절대값 엔코더용 인터페이스. 본 로봇은 인크리멘탈 엔코더 기반 속도제어만
사용하므로 미배선.

### SW — DIP 스위치 (2핀)

| SW | 기능 |
| :-: | :--- |
| SW1 | CAN 종단저항 선택 |
| SW2 | RS485 종단저항 선택 |

데이지체인 마지막 드라이버에서만 종단저항을 ON 하는 것이 일반적인 RS485 배선 원칙이다.

### RES — 회생 저항 입력 (2핀)

| Pin | 표기 | 기능 |
| :-: | :--- | :--- |
| 1 | R- | 브레이크 저항 |
| 2 | R+ | 브레이크 저항 |

100RPM 이상 속도 또는 급정지/비상정지 기능을 사용할 경우, 급감속 시 발생하는 역기전력으로부터
드라이버를 보호하기 위해 외부 회생 저항(권장 5~10Ω/100W) 연결을 권장한다. 본 로봇은 최고속도
0.4m/s(둘레 반경 131.5mm 기준 약 29RPM)로 저속 운용이라 리스크는 낮지만, 급제동(decel 150ms)
프로파일을 쓰므로 실외 장시간 운용 시 회생 저항 장착을 검토할 가치가 있다.

## 1.6 상태 LED

* **녹색 LED**: 전원 표시. 전원 인가 시 항상 점등.
* **적색 LED**: 알람 표시. 알람 발생 시 코드 횟수만큼 점멸 후 일시정지, 반복.

| 상태 | 점멸 횟수 | 원인 |
| :-: | :-: | :--- |
| Over-Voltage | 1 | 공급 전압이 최대 정격 초과 |
| Under-Voltage | 2 | 공급 전압이 최소 동작 전압 미만 |
| Over-Current | 3 | 상간 단락 등으로 모터 상전류 초과 |
| Over-Load | 4 | 상전류가 설정 과부하 전류 초과 |
| Current out-of-tolerance | 5 | (예약) |
| Position out-of-tolerance | 6 | 목표 위치와 출력 위치 오차 초과 |
| Speed out-of-tolerance | 7 | 목표 속도와 출력 속도 오차 초과 |
| Internal reference error | 8 | 드라이버 내부 오류 |
| Parameter reading error | 9 | EEPROM 파라미터 읽기 오류 |
| Hall fault | 10 | 홀 케이블 미접속 또는 신호 오류 |
| High motor temperature | 11 | 모터 과열 |
| Encoder error | 12 | 엔코더 케이블 헐거움/핀 순서 오류 |
| Driver overtemperature | 13 | 드라이버 과열 |
| Speed setting error | 14 | 지령 속도가 정격 속도 초과 |
| Mixed error | 15 | 2개 이상 알람 동시 발생 |

RS485로는 이 상태를 레지스터 `0x20A5`(좌)/`0x20A6`(우)에서 비트마스크로 읽을 수 있으며,
`xbox_motor_control.cpp`의 `decodeDriverError()`가 이를 한글 문자열로 변환한다. 상세는
[05-error-troubleshooting.md](05-error-troubleshooting.md) 참고.

## 1.7 배선 요약도 (본 프로젝트 기준)

```
              ┌─────────────────────────┐
 배터리 24-48V ─┤ DC/GND (좌 또는 우 or 양쪽) │
              │                         │
 좌측 허브모터  ─┤ U/V/W (좌)               │  드라이버 #1 (Station ID 1)
              │                         │  → 전방 좌/우 모터 구동
 우측 허브모터  ─┤ U/V/W (우)               │
              │                         │
 좌 엔코더/홀   ─┤ J2                      │
 우 엔코더/홀   ─┤ J6                      │
              │                         │
 RS485 A/B/GND ┤ J5 ── (데이지체인) ──────┼──→ 드라이버 #2 (Station ID 2)
              │                         │      → 후방 좌/우 모터 구동
 좌/우 브레이크 ─┤ J3                      │
              └─────────────────────────┘
                         │
                    /dev/ttyUSB0 (RS485-USB 컨버터)
                         │
                     제어 PC (xbox_motor_control_cpp)
```
