
UVW 스테이지는 비전 시스템과 연동하여 3축 또는 4축 구동 로봇으로 기판·부품·패널 등의 정밀 정렬 보정을 수행하는 유닛입니다.
주로 반도체·디스플레이·인쇄전자 공정에서 비전 카메라가 검출한 위치 오차(X, Y 이동량 + θ 각도 틀어짐)를 각 모터 축이 분담하여 보정하는 방식으로 동작합니다.
그런데 구조상 각 축이 X·Y·회전 방향으로 비스듬하게 배치되어 있어서, 삼각함수를 활용한 좌표 변환이 필수적입니다.
처음 접하는 분들이 어려워하는 부분이 바로 이 지점이죠.
이 글에서는 스터디 및 실제 설비 적용이 가능한 샘플 프로그램을 통해 다음 두 가지를 설명합니다.
- UVW 스테이지 보정 이동량 계산 — X, Y, T(각도) 보정값 → 각 UVW 축 이동량 산출
- 현재 위치 역산 — 각 UVW 축 현재값 → X, Y, T 환산
여기서 다루는 평면 좌표 변환(평행 이동 + 회전 성분 분해)은 여러 헤드가 같은 축을 공유하는 장비의 충돌 예측에도 그대로 응용됩니다. 좌표 영역(Band) 기반으로 이동 중 충돌을 미리 막는 방법은 PLC 경로 기반 충돌 방지 알고리즘에서 이어집니다.
축 명칭 관계 정리
샘플 프로그램에서 사용하는 축 명칭과 실제 모터 축의 관계를 먼저 잡아두겠습니다.
| 논리 축 | 물리 축 | 위치 방향 |
|---|---|---|
| U | X1 | 45° 방향 |
| V | Y1 | 135° 방향 |
| W | X2 | 225° 방향 |
| (X) | Y2 | 315° 방향 (4축 전용) |
3축 UVW 스테이지는 U, V, W(X1, Y1, X2) 3개 축만 사용합니다. 이 글의 샘플은 4축 기준이며, 3축 적용 시 Y2(X축) 연산값을 무시하면 됩니다.
프로그램 구성

프로그램은 크게 3개 블록으로 구성됩니다.
| 블록 | 설명 | 디바이스 시작 |
|---|---|---|
| Set UVW Stage Parameter | 기구 스펙 파라미터 등록 | ZR0 |
| Compute UVW Moving Amount | 보정 이동량 연산 | D0 |
| Compute Current X, Y, T Degree | 현재 위치 역산 | D300 |
1. UVW 스테이지 기구 스펙 파라미터 설정

UVW 스테이지의 기구적 사양에 맞게 파라미터를 등록합니다.
샘플은 아래 그림과 같은 4축 UVW 스테이지 기구 기반입니다.

샘플 기준 스펙:
| 파라미터 | 값 |
|---|---|
| 각 축 베어링 중심 반지름 | 134.35 mm |
| θ X1 (U축 방향각) | 45° |
| θ Y1 (V축 방향각) | 135° |
| θ X2 (W축 방향각) | 225° |
| θ Y2 (X축 방향각) | 315° |

각 축의 스트로크 리미트도 함께 설정합니다. 샘플에서는 UVWX 각 축이 ±10 mm(총 20 mm 스트로크) 구동 가능한 스테이지를 기준으로 작성되었습니다.
실제 장비 적용 시 수정 항목:
- 베어링 중심 반지름 → 도면 또는 제조사 스펙 시트 확인
- 각 축 방향각(θ) → 스테이지 배치 방향에 따라 조정
- 각 축 스트로크 리미트 → 모터 드라이버 스펙과 일치시킬 것
2. UVW 스테이지 보정 이동량 계산

계산의 핵심 개념:
비전이 검출한 보정값은 (X방향 이동, Y방향 이동, θ각도 회전) 3가지입니다.
이 세 가지가 동시에 필요할 때, 각 축이 얼마나 움직여야 하는지를 삼각함수로 분해하는 것이 이 블록의 역할입니다.
각 축의 이동량 = 직선 이동 성분 + 회전 이동 성분의 합으로 구성됩니다.
⚠️ Mitsubishi Q-series 삼각함수 단위 주의
GX Works2의FSIN,FCOS명령은 라디안(Radian) 단위를 사용합니다.
파라미터로 입력하는 각도(°)는 반드시 래더 내에서 라디안으로 변환해야 합니다.
변환식:라디안 = 각도(°) × π ÷ 180
샘플 프로그램에서는 이 변환이 파라미터 설정 블록에 포함되어 있습니다.
1. U (X1) 축 이동량 계산

2. V (Y1) 축 이동량 계산

3. W (X2) 축 이동량 계산

4. X (Y2) 축 이동량 계산 *(4축 스테이지 전용)*
3축 UVW 스테이지라면 이 Y2 연산 결과는 사용하지 않습니다.
이어서 X축 방향과 Y축 방향의 순수 이동량을 계산합니다.

각 축의 총 이동량(회전 성분 + 직선 성분 합산)을 구합니다.

마지막으로 현재 위치에 이동량을 더해 최종 이송 목표값(절대 좌표)을 산출합니다.

HMI 화면에서 흐름을 한눈에 보면 아래와 같습니다.

| 입력 | 연산 | 출력 |
|---|---|---|
| 이송 전 UVW 현재 위치 | 각 축 이동량 계산 | 각 축 절대 이송 목표값 |
| 보정할 X, Y, T 이동량 | 직선 + 회전 성분 합산 |
3. UVW 스테이지 현재 X, Y, T 위치값 역산
각 UVW 축이 어느 위치에 있는지는 알고 있는데, 이 상태에서 스테이지가 X방향으로 얼마나, Y방향으로 얼마나, 각도가 얼마나 틀어져 있는지를 환산해야 하는 경우가 있습니다.
예를 들어 전원 재투입 후 원점 복귀 없이 현재 위치를 읽어야 한다거나, 외부에서 스테이지가 수동으로 움직여진 경우가 이에 해당합니다.
아래 그림처럼 스테이지가 어떤 상태로 위치해 있을 때—

X는 얼마, Y는 얼마, T는 몇 도인지를 역산으로 구할 수 있습니다.
역산 원리 — 기하학으로 이해하기
아래 그림은 이 샘플의 4축 UVW 스테이지 배치입니다. 각 축은 스테이지 중심에서 반지름 R 위치에 배어링이 있고, 주어진 각도(θ) 방향으로 뻗어 있습니다.
| 사분면 | 축 | 각도 |
|---|---|---|
| 우상단 | X1 (U축) | 45° |
| 좌상단 | Y1 (V축) | 135° |
| 좌하단 | X2 (W축) | 225° |
| 우하단 | Y2 (X축) | 315° |
X1(45°)과 X2(225°)는 정확히 180° 반대편에 있습니다.
Y1(135°)과 Y2(315°)도 마찬가지로 서로 반대입니다.
이 대칭 배치가 역산을 가능하게 합니다.
각 축의 이동량 분해
스테이지가 (ΔX, ΔY, ΔT) 만큼 움직일 때, 각 축의 변화량은 직선 성분 + 회전 성분으로 분해됩니다.
X1 변화량 = X 직선성분 + Y 직선성분 + 회전성분
X2 변화량 = X 직선성분 - Y 직선성분 - 회전성분
X2는 X1의 정반대(180°) 위치이므로 → Y 성분과 회전 성분의 부호가 반전됩니다.
X2는 X1의 정반대 위치이므로, Y 성분과 회전 성분은 부호가 뒤집힙니다.
X 성분만 양쪽이 동일하게 나타납니다.
1. X 위치값 역산

수식 전개:
X1 = X성분 + Y성분 + 회전성분
X2 = X성분 - Y성분 - 회전성분 *(부호 반전)*
X1 + X2 = 2 × X성분 → Y성분과 회전성분이 서로 상쇄
∴ X = (X1 + X2) / 2
수치 예제 (X=1.0mm, Y=0, T=0° 이동):
- 연산 결과: X1 = +0.7071, X2 = +0.7071 (각 cos(45°) × 1.0 기여)
- 역산: (0.7071 + 0.7071) / 2 = 0.7071 ... 라고 생각하면 틀립니다.
실제로는 파라미터 설정 블록에서 각도별 스케일이 이미 보정되어 있어서 X=1.0mm 입력 → X1 = 1.0, X2 = 1.0 (스케일 보정 완료)이고, 역산: (1.0 + 1.0) / 2 = 1.0 ✓
2. Y 위치값 역산

수식 전개:
X1 = X성분 + Y성분 + 회전성분
X2 = X성분 - Y성분 - 회전성분 *(부호 반전)*
X1 - X2 = 2 × Y성분 + 2 × 회전성분 → X성분이 상쇄
Y성분과 회전성분이 함께 묶여 있으므로, 여기서 회전 기여분을 분리해야 합니다.
Y1축은 135°에 위치하며 이 방향에서의 Y성분과 회전성분을 독립적으로 가집니다.
Y1 = Y성분 + 회전성분 *(Y1 고유 기여)*
∴ Y = (X1 - X2) / 2 - Y1
수치 예제 (X=0, Y=1.0mm, T=0°):
- 연산 결과: X1 = +1.0, X2 = -1.0, Y1 = 0
- 역산: (1.0 - (-1.0)) / 2 - 0 = 1.0 ✓
3. T (각도) 위치값 역산

수식 전개:
각도 역산은 X1, X2, Y1이 회전 중에 이동한 거리를 반지름 R로 나누어 호 길이에서 각도를 환산합니다.
스테이지가 ΔT만큼 회전할 때 각 축의 기여량:
X1의 회전 기여 = +R × sin(ΔT)
X2의 회전 기여 = -R × sin(ΔT) *(반대 방향)*
Y1의 회전 기여 = +R × sin(ΔT)
역삼각함수로 환산:
회전성분 = (X1 - X2) / 2 - (Y 직선 성분)
ΔT = ASIN( 회전성분 / R )
라디안 변환 주의:ASIN결과는 라디안 단위입니다. 도(°) 출력을 위해× 180 / π변환이 필요하며, 샘플 래더에 이미 포함되어 있습니다.
수치 예제 (X=0, Y=0, T=+1.0°, R=134.35):
- 먼저 T=1° → 라디안: 1 × π/180 = 0.01745 rad
- X1 회전 기여 = 134.35 × sin(0.01745) ≈ 2.344 mm
- X2 회전 기여 = -2.344 mm (반대)
- 역산: ASIN(2.344 / 134.35) = ASIN(0.01745) ≈ 0.01745 rad = 1.0° ✓
4축 스테이지에서 Y2(315°)가 하는 역할
3축 스테이지는 X1·Y1·X2 세 축만으로 X, Y, T를 역산합니다.
그렇다면 4번째 축 Y2(315°)는 왜 필요할까요?
| 사분면 | X-쌍 (기존 3축) | Y-쌍 (4번째 축 추가) |
|---|---|---|
| 우상단 45° | X1 (U축) | |
| 좌상단 135° | Y1 (V축) | |
| 좌하단 225° | X2 (W축) | |
| 우하단 315° | Y2 (X축) ← 4번째 축 |
X1-X2가 쌍을 이루듯, Y1-Y2도 180° 대칭 쌍을 이룹니다.
Y1(135°)과 Y2(315°)는 X1-X2 쌍과 동일하게 서로 정반대 위치(180°)입니다.
따라서 Y-쌍에도 같은 대칭 원리가 성립합니다.
Y1 = Y성분 + X성분 + 회전성분
Y2 = Y성분 - X성분 - 회전성분 *(Y2는 Y1의 정반대 위치 → X성분·회전성분 부호 반전)*
Y1 + Y2 = 2 × Y성분 → X성분과 회전성분이 상쇄
∴ Y = (Y1 + Y2) / 2 ← Y2를 사용한 독립적인 Y 역산 경로
즉, 4축 스테이지에서 Y는 두 가지 독립 경로로 역산할 수 있습니다.
| 역산 경로 | 사용 축 | 수식 |
|---|---|---|
| 경로 A (X-쌍 활용) | X1, X2, Y1 | (X1 - X2) / 2 - Y1 |
| 경로 B (Y-쌍 활용) | Y1, Y2 | (Y1 + Y2) / 2 |
두 경로의 결과는 같아야 정상입니다.
이 일치 여부로 스테이지 이상을 감지할 수 있습니다.
Y2가 주는 실질적 이점 3가지:
(1) 측정 정확도 향상 — 두 경로 평균
Y_확정 = ( 경로A 결과 + 경로B 결과 ) / 2
두 독립 경로를 평균하면 기계적 유격, 엔코더 노이즈, 열팽창 오차가 일부 상쇄됩니다.
고정밀 정렬 공정에서 ±1μm 수준의 재현성을 요구할 때 의미가 있습니다.
(2) 이중화(Redundancy) — 한 축 이상 시 대응
Y1이 엔코더 이상 등으로 값을 잃더라도, Y2와 X-쌍만으로 Y를 복원할 수 있습니다.
반대로 X2에 이상이 생기면 Y-쌍(경로 B)으로 Y를 단독 역산할 수 있습니다.
X2 이상 시 → Y = (Y1 + Y2) / 2 로 경로 B 단독 사용
Y1 이상 시 → Y = (X1 - X2) / 2 에서 Y2 정보로 대체
(3) T(각도) 역산 경로 추가 — 회전 정확도 향상
3축에서 T 역산은 X-쌍 정보(X1-X2)에만 의존합니다.
4축에서는 Y-쌍 차이(Y2-Y1)도 회전 성분을 포함하므로, T도 두 경로로 추정 가능합니다.
T 경로 A (X-쌍 기반): ASIN( (X1 - X2) / 2에서 추출한 회전성분 / R )
T 경로 B (Y-쌍 기반): ASIN( (Y2 - Y1) / 2에서 추출한 회전성분 / R )
T_확정 = (T_경로A + T_경로B) / 2
미세 각도(0.001° 수준) 정렬이 필요한 공정에서 이 평균값이 단일 경로 대비 정확도를 높입니다.
※ 샘플 프로그램에서의 Y2:
첨부된 샘플은 4축 기준으로 작성되었지만, Y2를 평균 계산에 사용하는 구현까지는 포함되어 있지 않습니다.
Y2 이중화 역산을 활용하려면 위 경로 B 수식을 별도 블록으로 추가 구현하면 됩니다.
3축 스테이지라면 Y2 계산 결과를 무시하는 것으로 충분합니다.
세 역산 공식 요약 (4축 기준):
| 항목 | 1차 역산 공식 | Y2 보완 경로 |
|---|---|---|
| X | (X1 + X2) / 2 |
-(Y1 - Y2) / 2 (교차 검증) |
| Y | (X1 - X2) / 2 - Y1 |
(Y1 + Y2) / 2 (독립 경로) |
| T | ASIN(X-쌍 회전성분 / R) |
ASIN(Y-쌍 회전성분 / R) (독립 경로) |
역산 결과 확인:

역산 결과는 D390(X), D392(Y), D394(T) 순서로 저장됩니다.
디바이스 맵 요약
| 디바이스 범위 | 용도 |
|---|---|
| ZR0~ | UVW 스테이지 기구 스펙 파라미터 |
| D0~ | 보정 이동량 연산 워크 영역 |
| D300~ | 현재 위치 역산 워크 영역 |
| D390 | 역산 결과 — X 현재 위치 |
| D392 | 역산 결과 — Y 현재 위치 |
| D394 | 역산 결과 — T 현재 각도 |
동작 확인 방법
첨부 파일의 래더 프로그램(.gxw)과 HMI 작화(.prx)를 GX Works2 시뮬레이터 또는 실물 PLC에 다운로드하여 테스트할 수 있습니다.
확인 순서:
- 파라미터 블록(ZR0~)에 사용 스테이지 스펙 입력
- 보정 이동량 블록 입력에 임의값 입력 (예: X=0, Y=0, T=1.0도)
- 각 축 연산 결과값 확인 — 예상값과 비교
- 역산 블록에서 D390/D392/D394 값이 입력값과 일치하는지 검증
검증 팁: 보정 이동량 연산 → 각 축 이동 → 역산 결과가 원래 입력값과 일치하면 연산이 올바르게 구성된 것입니다.
마무리
※ 3축 UVW 스테이지에서는 Y2(X축) 이동량 연산 결과를 무시하면 됩니다.
베어링 반지름, 각 축 세타 각도 파라미터만 실제 스테이지 스펙에 맞게 수정하면 범용적으로 활용 가능합니다.
UVW 스테이지의 수학이 낯설게 느껴지더라도, 동작하는 샘플을 손에 넣은 것만으로도 충분한 출발점입니다.
수치를 바꿔가며 결과를 확인하다 보면 자연스럽게 구조가 잡힙니다.
같은 Mitsubishi Q-series 에서 시리얼 통신·데이터 파싱 같은 또 다른 실무 알고리즘을 구현하는 과정이 궁금하다면 Modbus 입문 가이드 1편도 함께 참고하세요. 좌표 연산 외의 PLC 알고리즘 구현 사례를 정리해 두었습니다.
'PLC 전기제어 기술자료 > 모션 기술자료' 카테고리의 다른 글
| 모션 충돌방지 알고리즘 5편: 견고한 양보 (복귀·설치방향·N축 확장) (0) | 2026.07.05 |
|---|---|
| 모션 충돌방지 알고리즘 4편: 누가 양보하나 (적격 판정과 우선권) (0) | 2026.07.04 |
| 모션 충돌방지 알고리즘 3편: 데드락과 양보(Yield) 제어 (0) | 2026.07.02 |
| PLC 경로충돌방지 알고리즘 2편: 비대칭 마진 최적화와 Follow 추종 제어 (0) | 2026.06.18 |
| PLC 경로충돌방지 알고리즘 1편: 이동 영역(Band)으로 충돌 예측 (0) | 2026.04.22 |