AEGLOSLAB 로봇공학 전서(全書)

제5부 구동·액추에이터·동력전달

5.9 서보 시스템: 위치·속도·전류 루프 구조와 튜닝·공진 억제

5.9.1 이 장에서 배우는 것 / 선수 지식 / 특히 중요한 독자

이 장은 구동기 안에서 실행되는 서보 시스템, 곧 위치·속도·전류의 3중 루프를 다룬다. 루프의 계층 구조와 각 루프의 모델, 속도 PI 이득과 위치 이득의 선정, 디지털 지연이 정하는 대역폭 상한, 속도·가속도 전향 보상, 토크 포화와 적분 반포화, 모터-감속기-부하가 만드는 2질량 공진과 노치 필터에 의한 억제를 계산으로 확인한다. 전류 루프의 내부(인버터·PWM·dq 제어)는 5.6·5.7, 전력단은 5.8, 일반 제어 이론은 12.3·12.4, 유연 관절 모델은 3.9, 입력 성형은 12.11, 마찰은 3.8, 엔코더는 6.2, 관절 통합은 7.2와 이어진다.

배우는 것:

  • 3중 루프의 계층 — 전류 루프는 토크원, 속도 루프는 관성·감쇠, 위치 루프는 정확도를 맡고 바깥 루프는 안쪽 루프의 응답을 지연 없는 1차계로 근사한다.
  • 속도 루프의 이득 — $K_p=J\omega_s$, $K_i=K_p\omega_s/n$, 위상 여유의 닫힌 식과 디지털 지연의 대역폭 상한.
  • 위치 루프의 대역폭비 — $r=\omega_p/\omega_s$에 따른 위상 여유·초과·상승 시간.
  • 전향 보상과 반포화 — 속도·가속도 전향의 추종 오차 감소, 조건부 적분.
  • 공진 억제 — 반공진·공진, 노치 필터의 폭·깊이, 공진 이동에 대한 강건성.

선수 지식: 1.25(주파수 응답·z변환), 5.7(전류 루프), 5.8(제어 주기와 대역폭 상한).

특히 중요한 독자: 서보 드라이브의 이득을 조정하는 현장 엔지니어, 구동기 펌웨어에서 위치·속도 루프를 구현하는 개발자, 감속기 관절의 진동을 해석하는 연구자.

출처 방침. 기준 시점은 2026-11-05이다. 직접 읽은 자료: (1) mjbots moteus 문서 Theory of Operation과 설정 참조(servo.pid_position·motor_position.sources.*.pll_filter_hz) — GitHub 기본 브랜치. (2) ODrive 문서 Tuning the Controller(최신판) — 속도·위치·적분 이득 조정 절차. (3) Yaskawa 서보 모터 연혁 페이지와 FANUC 공식 연혁 페이지(연도 표지 확인). (4) 이 책 0.5의 ASEA IRB 6 절(0.5.5.1). 검색 요약으로만 확인한 것: 서보 드라이브 제조사 매뉴얼의 속도·위치 이득 관계와 노치 필터 지침(원문 PDF는 접속이 막히거나 읽지 못했으며 근거로 삼지 않았다 (확인 필요)). 읽지 못한 것: 서보 제어 교과서(Ellis 등), IEC 61800 시리즈 본문, 감속기 관절의 실측 공진 자료. 식은 이 장이 직접 유도하고 계산으로 확인했다. 모든 수치는 이 장이 정한 예시 축이며 어떤 제품의 제원도 아니다.

5.9.2 개념 — 안쪽 루프가 빠를수록 바깥 루프가 단순해진다

결론부터 적으면 다음과 같다. 서보는 세 개의 되먹임 루프가 시간 척도로 겹친 구조이다. 가장 안쪽의 전류 루프(5.7)가 모터 토크를 지령에 맞추는 토크원이 되고, 그 바깥의 속도 루프가 관성을 가진 대상에 속도 오차를 줄이는 PI 제어를 하며, 맨 바깥의 위치 루프가 속도 지령을 만든다. 안쪽 루프가 바깥 루프보다 충분히 빠르면 바깥 루프는 안쪽 루프를 1차 지연으로 근사해 설계할 수 있다. 디지털 구현에서는 샘플링·연산·ZOH·속도 추정의 지연이 가장 안쪽에서 바깥으로 갈수록 대역폭 상한을 정하고, 구동계에 탄성이 있으면 공진이 속도 루프의 대역폭을 제한한다.

위치 P 속도 PI 노치 필터 전류 루프 모터·부하 θ* 속도·가속도 전향 엔코더 속도 추정 θ
3중 루프 서보의 블록 선도. 위 행은 위치 지령에서 모터·부하까지의 순방향(위치 P, 속도 PI, 노치 필터, 전류 루프), 아래 행은 엔코더 위치에서 속도 추정과 위치 귀환이다. 회색 상자는 속도·가속도 전향 경로이다.

공개 구현의 구조는 다르게 나뉜다. moteus 문서는 위치와 속도를 하나의 PID(위치 오차에 비례, 속도 오차에 $k_d$, 위치 오차의 적분, 선택적 전향 토크)로 묶고 그 출력을 $q$축 전류 지령으로 보내는 2단 구조이며 두 단 모두 스위칭 주파수(기본 30 kHz)에서 실행된다고 기술한다. ODrive 문서는 위치 이득·속도 이득·속도 적분 이득을 순서대로 조정하는 절차를 적는다. 이 장의 P-PI 캐스케이드와 moteus의 PID는 위치 강성이 $K_{pv}K_{pp}$와 $k_p$, 감쇠가 $K_{pv}$와 $k_d$에 대응한다고 정리할 수 있으나 적분 항의 위치가 달라 같은 응답은 아니다(이 장의 정리).

서보 구성의 변천은 제조사 연혁에서 확인된다. Yaskawa는 1960년대 DC 서보 모터, 1983년 AC 서보 모터 출시를 적고, 1980년대 전반의 브러시 없는 AC 서보는 전류 제어가 아날로그이고 8비트 마이크로컴퓨터를 사용해 DC 서보의 제어 성능에 미치지 못했으며 1980년대 후반에 전 디지털 AC 서보가 상용화되었다고 적는다. FANUC 연혁은 1974년 DC 서보 모터 생산·판매 시작(Gettys 사 라이선스), 1982년 AC 서보 모터 개발, 1986년 디지털 서보 완성을 적는다. 로봇 제어기의 마이크로프로세서화(ASEA IRB 6의 제어기 S1·S2)는 0.5.5.1에서 다룬다. 연혁 서술은 각 사의 자사 기록이다.

이 장의 계산 결과를 미리 적으면 다음과 같다. ① 강체 부하의 속도 루프 위상 여유는 닫힌 식 $\arctan n-\arctan(\omega_s/\omega_c)-\omega_sT_d$와 0.5° 이내로 맞는다($\omega_s=800$ rad/s에서 59.5°). ② 위치 루프 대역폭비 $r=1/4$는 위상 여유 79.6°, 계단 초과 0 %, 상승 7.7 ms이고 $r=1/2$은 초과 8.3 %이다. ③ 공진 3162 rad/s(503 Hz)인 2질량 축에서 필터 없이는 $M_s\le2$인 최대 $\omega_s$가 186 rad/s이고 넓은 노치를 사용하면 997 rad/s로 5.3배이다. ④ 노치 주파수가 공진에서 6.5 % 낮아지면 $M_s$가 1.68에서 2.38로 커진다. ⑤ 속도 전향은 등속 구간 추종 오차를 396 mrad에서 6.8 mrad로 줄인다. ⑥ 조건부 적분이 없으면 1.5 rad 위치 계단의 초과가 54 %이고 2 rad에서는 발산한다. ⑦ 제어 지연 200 µs·전류 루프 1 kHz에서 강체 부하의 속도 루프 상한은 1895 rad/s이다.

5.9.3 원리

5.9.3.1 루프 구조와 지연 모델

속도 루프 대상은 전류 루프를 거친 토크로 구동되는 모터 관성이다. 전류 루프의 폐루프를 $\omega_c/(s+\omega_c)$로 근사하고(5.7에서 $\omega_c=2\pi\cdot1000$ rad/s), 강체 부하의 총 관성 $J=J_m+J_L$이면 대상은 $\omega_m/T=1/(Js)$이다. 디지털 속도 루프의 지연은 세 가지의 합이다. 표본 시각의 오차로 계산한 토크가 다음 주기에 인가되는 1 샘플, 인가 토크가 주기 동안 일정한 ZOH의 반 샘플, 위치 차분으로 속도를 구하는 데 따른 반 샘플이며 합 $T_d=2T_s$이다($T_s$는 속도·위치 루프 주기, 이 장 100 µs). 개루프는 다음이다.

$$L_s(s)=\Bigl(K_p+\frac{K_i}{s}\Bigr)e^{-sT_d}\,\frac{\omega_c}{s+\omega_c}\,P_m(s).$$

5.9.3.2 속도 루프 — 이득과 대역폭 상한

결론부터 적으면 이득 $K_p=J\omega_s$, $K_i=K_p\omega_s/n$으로 두면 $\omega_s$ 근처에서 $\lvert L_s\rvert\approx1$이고 위상 여유는 다음 닫힌 식이다.

$$PM\approx\arctan n-\arctan\frac{\omega_s}{\omega_c}-\omega_sT_d.$$

세 항은 PI의 영점 위치(적분이 위상을 깎는 정도), 전류 루프의 1차 지연, 샘플 지연이다. $n$을 키울수록(영점이 낮아질수록) 여유는 커지지만 적분 시정수가 길어진다. 대역폭 상한은 $PM$ 요구에서 정해지며 $\omega_s\le(\arctan n-PM_{min})/(T_d+1/\omega_c)$ 근처이다. 지연 $T_d$가 같으면 전류 루프가 빠를수록 상한이 올라가나 $T_d$가 수렴 한계를 준다(풀이 예제 ⑧). 속도 루프를 튜닝하는 입력은 총 관성 $J$이며, 관성이 변하는 관절에서는 $J$의 오차가 곧 대역폭의 오차이다(3.4, 5.2).

5.9.3.3 위치 루프 — 대역폭비

위치 루프는 속도 지령을 만드는 P 이득 $K_{pp}=\omega_p$이고, 속도 루프의 폐루프 $T_v=L_s/(1+L_s)$를 1차 지연 $\omega_s/(s+\omega_s)$로 근사하면 위치 루프 개루프는 $\omega_p/s\cdot T_v$이다. 1차 근사의 위상 여유는 $90^\circ-\arctan r$($r=\omega_p/\omega_s$)이며 속도 루프의 영점·지연으로 수치와 몇 도 어긋난다. 결론은 $r\le1/3$ 정도부터 위상 여유가 70° 이상이고 계단 초과가 사라지며, 대가는 상승 시간이 $\propto1/\omega_p$로 늘어난다는 점이다. 벤더 매뉴얼에서도 위치 이득을 속도 이득의 약 1/4 이하로 제한하는 지침이 있는 것으로 검색 요약에서 보였으나 원문을 읽지 못했다 (확인 필요).

5.9.3.4 전향 보상 — 속도와 가속도

위치 루프만으로는 등속 구간에서 추종 오차가 $v/K_{pp}$이다(속도 적분기는 속도 오차를 지우지만 위치 오차를 지우지 않는다). 속도 지령에 $K_{vff}\dot\theta^*$를 더하고 $K_{vff}=1$이면 이 오차가 거의 사라지며, 토크 지령에 $J\ddot\theta^*$를 더하면(가속도 전향) 가속·감속 구간의 오차가 줄어든다. 전향은 폐루프의 안정성을 바꾸지 않고 추종 성능만 바꾸지만 $J$·마찰 모델의 정확도에 의존한다(3.8, 12.3).

5.9.3.5 토크 포화와 적분 반포화

토크가 전류 한계 $T_{max}$에서 포화하면 속도 PI의 적분기가 오차를 계속 적분해(와인드업) 해제된 뒤 큰 초과가 생긴다. 조건부 적분(포화 중 오차가 포화 방향이면 적분을 멈춘다)과 역계산(포화 초과분을 적분기에서 빼는 방식, 5.7에서 AN1078의 $K_c$)이 대표적이다. 위치 지령의 속도·가속도·저크를 제한하는 궤적 생성(moteus 문서의 선택적 궤적 계획기)은 포화 자체를 피한다.

5.9.3.6 2질량계와 공진 억제

모터 관성 $J_m$, 부하 관성 $J_L$(모두 모터 측 환산), 축 강성 $K$, 축 감쇠 $c$의 2질량계에서 모터 속도 전달함수는 다음이다(3.9.3.3의 $J$·$M$을 이 장은 $J_m$·$J_L$로 적는다).

$$\frac{\omega_m}{T}(s)=\frac{J_Ls^2+cs+K}{s\,[\,J_mJ_Ls^2+(J_m+J_L)(cs+K)\,]},\quad \omega_{ar}=\sqrt{\tfrac{K}{J_L}},\ \ \omega_r=\sqrt{\tfrac{K(J_m+J_L)}{J_mJ_L}}.$$

예시 축은 $\omega_{ar}=1581$ rad/s, $\omega_r=3162$ rad/s이고 공진 감쇠비는 $\zeta_r=c(J_m+J_L)/(2J_mJ_L\omega_r)=0.019$이다. 병치(모터 속도를 모터 토크로 제어) 구성이므로 대상의 위상은 $-90^\circ$에서 $+90^\circ$ 사이에 있으나 지연이 공진 주파수 부근에서 여유를 깎는다. 공진 위쪽 주파수에서 대상의 위상은 $-90^\circ$이므로 개루프 위상은 약 $-90^\circ-\arctan(\omega_r/\omega_c)-\omega_rT_d$이고 이 예에서 $-153.0^\circ$로 $-180^\circ$까지 27.0°뿐이다. 공진 봉우리가 0 dB를 넘으면 봉우리 위쪽의 이득 교차에서 이 여유가 곧 위상 여유가 된다(풀이 예제 ③·④). 억제 수단은 속도 루프의 대역폭을 공진보다 훨씬 낮추거나, 토크 지령에 노치 필터(분자 $s^2+2\zeta_z\omega_ns+\omega_n^2$, 분모 $s^2+2\zeta_p\omega_ns+\omega_n^2$, 깊이 $\zeta_z/\zeta_p$)를 넣어 공진의 이득을 낮추는 것이다. 노치는 공진보다 낮은 주파수에서 위상 지연을 더하므로 폭($\zeta_p$)이 클수록 강건하나 대역폭을 깎는다. 그 밖의 방법(입력 성형 12.11, 출력 측 센서, 외란 관측기 12.3)은 이 장에서 비교하지 않았다.

5.9.3.7 튜닝 절차

ODrive 문서의 절차는 속도 적분 이득을 0으로 하고 속도 이득을 약 30 %씩 올리다가 진동이 생기면 그 값의 50 %로 내리며, 위치 이득을 올려 초과가 나타나면 내리고, 마지막으로 적분 이득을 올려 과도 진동이 나타난 값의 약 50 %로 둔다. 모델 기반 절차(이 장)는 다음 순서이다. 관성 $J$를 식별하고 $\omega_r$을 주파수 소인으로 찾고, 지연과 전류 루프로 강체 상한을 계산하며, $M_s\le2$인 $\omega_s$를 정하고(필요하면 노치로 상향), $n=4$와 $r=1/4$에서 시작해 응답을 보며 조정한다. 엔코더 입력 필터의 차단 주파수(pll_filter_hz)는 moteus 설정 참조가 기술하듯 입력 갱신 주파수의 10배 미만이면서 기계 대역폭보다 높게 두고 그 범위에서 소음과 성능을 절충한다.

5.9.4 알고리즘

한 서보 주기(Ts, 예 100 µs):
  1. theta ← 엔코더 ; w ← (theta - theta_prev) / Ts  (필터)
  2. v* ← Kpp (theta* - theta) + Kvff w*        (위치 P + 속도 전향)
  3. e ← v* - w ;  u ← Kp e + xi + Kaff J a*     (속도 PI + 가속도 전향)
  4. u_s ← sat(u, ±Tmax) ; 조건부 적분: 포화 중 e와 u가 같은 부호면 xi 고정, 아니면 xi += Ki Ts e
  5. u_s ← notch(u_s)                              (공진 억제 필터)
  6. i_q* ← u_s / Kt                               (다음 주기에 전류 루프로 전달)

5.9.5 풀이 예제 — 강체 루프, 위치 루프, 2질량 공진, 전향·반포화

결론부터 적으면 다음과 같다. ① 강체 속도 루프의 위상 여유가 닫힌 식과 일치한다. ② $r=1/4$가 위상 여유·초과·상승 시간의 절충점이다. ③ 공진이 있는 축에서는 노치로 속도 루프 상한이 5.3배가 되나 공진 이동에 민감하다. ④ 속도 전향이 추종 오차를 크게 줄이고, 조건부 적분이 포화 시 발산을 막는다.

구현. plant_m·loop_L·margins·notch_p·lpf_p·tustin2·servo_run. 아래 코드는 핵심 알고리즘이며 입력·탐색·표·그림은 스크립트에 있다.

항목값
예시 축(모터 측 환산)$J_m=2.0\times10^{-4}$, $J_L=6.0\times10^{-4}$ kg·m², $K=1500$ N·m/rad, $c=0.018$ N·m·s/rad, $\omega_{ar}=1581$, $\omega_r=3162$ rad/s(503 Hz), $\zeta_r=0.019$
루프속도·위치 주기 $T_s=100$ µs, 지연 $T_d=200$ µs, 전류 루프 $\omega_c=2\pi\cdot1000$ rad/s(1차 근사)
이득$K_p=(J_m+J_L)\omega_s$, $K_i=K_p\omega_s/n$($n=4$), $K_{pp}=r\omega_s$($r=1/4$)
안정성 판정감도 피크 $M_s=\max\lvert1/(1+L)\rvert\le2$(6 dB), 위상 여유는 모든 이득 교차의 최솟값
입력 1강체 속도 루프: $(n,\omega_s)$ 6개 조합, 속도 계단 5 rad/s
입력 2위치 루프: $\omega_s=800$ rad/s, $r$ 0.5~0.1, 위치 계단 0.05 rad(강체)
입력 3필터: 노치 $(\zeta_z,\zeta_p)$ = (0.01, 0.1)·(0.03, 0.3)·(0.05, 0.5)에서 $\omega_n=\omega_r$, 2차 저역 통과 800 rad/s·$\zeta=0.7$
입력 4전향: 사다리꼴 속도 궤적(가속 400 rad/s², 40 rad/s, 각 구간 0.1 s). 반포화: $T_{max}=6$ N·m, 위치 계단 1·1.5·2 rad
import cmath
from math import sin, cos, sqrt, pi, log10, tan, degrees

def ev(p, s):                        # 다항식 값(최고차 먼저)
    r = 0j
    for c in p:
        r = r * s + c
    return r

def notch_p(wn, zz, zp):             # 노치: 깊이 zz/zp
    w2 = wn * wn
    return [1, 2 * zz * wn, w2], [1, 2 * zp * wn, w2], wn

def lpf_p(wf, z):                    # 2차 저역 통과
    return [0, 0, wf * wf], [1, 2 * z * wf, wf * wf], wf

def plant_m(P, w):
    """모터 속도/토크 2질량 전달함수. K=None: 강체."""
    s = 1j * w
    Jm, JL, K, c = P['Jm'], P['JL'], P['K'], P['c']
    if K is None:
        return 1 / ((Jm + JL) * s)
    return (JL * s * s + c * s + K) / (
        s * (Jm * JL * s * s + (Jm + JL) * (c * s + K)))

def loop_L(P, g, w):
    """속도 루프 개루프: PI·지연·전류 루프·필터·플랜트."""
    s = 1j * w
    L = (g['kp'] + g['ki'] / s) * cmath.exp(-s * g['Td'])
    L *= g['wc'] / (s + g['wc']) * plant_m(P, w)
    for num, den, _ in g.get('flt', []):
        L *= ev(num, s) / ev(den, s)
    return L

def margins(Lf, w0=1.0, w1=3e4, n=6000):
    """(최악 PM[deg], 첫 이득 교차, 감도 피크 Ms, 주파수)."""
    ws = [w0 * (w1 / w0) ** (k / n) for k in range(n + 1)]
    Ls = [Lf(w) for w in ws]
    pm, wgc, ms, wms = 360.0, None, 0.0, None
    for k in range(n):
        if (abs(Ls[k]) - 1) * (abs(Ls[k + 1]) - 1) < 0:
            a = degrees(cmath.phase(Ls[k]))
            pm = min(pm, abs((a + 360) % 360 - 180))
            wgc = wgc or ws[k]
    for w, x in zip(ws, Ls):
        if 1 / abs(1 + x) > ms:
            ms, wms = 1 / abs(1 + x), w
    return pm, wgc, ms, wms

def deriv(x, T, P):
    """x=(thm, wm, thL, wL, Tact). K=None이면 강체."""
    thm, wm, thL, wL, Ta = x
    if P['K'] is None:
        a = Ta / (P['Jm'] + P['JL'])
        return (wm, a, wm, a, P['wc'] * (T - Ta))
    tq = P['K'] * (thm - thL) + P['c'] * (wm - wL)
    return (wm, (Ta - tq) / P['Jm'], wL, tq / P['JL'],
            P['wc'] * (T - Ta))

def rk4(x, T, P, h):
    k1 = deriv(x, T, P)
    k2 = deriv([a + h / 2 * b for a, b in zip(x, k1)], T, P)
    k3 = deriv([a + h / 2 * b for a, b in zip(x, k2)], T, P)
    k4 = deriv([a + h * b for a, b in zip(x, k3)], T, P)
    return [a + h / 6 * (b + 2 * c + 2 * d + e)
            for a, b, c, d, e in zip(x, k1, k2, k3, k4)]

def tustin2(num, den, Ts, wp):
    """2차 필터의 프리워핑 Tustin 계수 (b, a), a0=1."""
    k = wp / tan(wp * Ts / 2)
    def z(p):
        a, b_, c_ = p[0] * k * k, p[1] * k, p[2]
        return [a + b_ + c_, 2 * (c_ - a), a - b_ + c_]
    b, a = z(num), z(den)
    return [x / a[0] for x in b], [x / a[0] for x in a]

def servo_run(P, g, ref, T, Ts=1e-4, ff=(0, 0), awu=True):
    """위치 P+속도 PI+전향+필터, 1샘플 지연."""
    x, xi, Ta, thp = [0.0] * 5, 0.0, 0.0, 0.0
    Jt, fl, out = P['Jm'] + P['JL'], [], []
    for n_, d_, w_ in g.get('flt', []):
        b, a = tustin2(n_, d_, Ts, w_)
        fl.append((b, a, [0.0, 0.0]))
    for k in range(int(T / Ts)):
        r = ref(k * Ts)
        wm, thp = (x[0] - thp) / Ts, x[0]
        ev_ = g['kpp'] * (r[0] - x[0]) + ff[0] * r[1] - wm
        u = g['kp'] * ev_ + xi + ff[1] * Jt * r[2]
        us = max(-g['Tmax'], min(g['Tmax'], u))
        if not awu or abs(u) <= g['Tmax'] or ev_ * u < 0:
            xi += g['ki'] * Ts * ev_
        for b, a, z in fl:            # 쌍2차 직접형 II 전치
            y = b[0] * us + z[0]
            z0 = b[1] * us - a[1] * y + z[1]
            z[1] = b[2] * us - a[2] * y
            z[0] = z0
            us = y
        for _ in range(10):
            x = rk4(x, Ta, P, Ts / 10)
        Ta = us
        out.append((k * Ts, r[0], x[0], x[2], x[1], x[3], Ta))
    return out

① 강체 속도 루프.

PI 영점비 $n$$\omega_s$ (rad/s)위상 여유 (°)닫힌 식 (°)감도 피크 $M_s$계단 초과 (%)10~90 % 상승 (ms)
420072.171.81.0714.36.7
440067.967.71.1415.23.1
480059.559.51.3017.91.3
4160043.443.31.7633.80.6
280047.447.01.3831.21.1
880066.566.51.289.91.5

닫힌 식이 수치 위상 여유와 0.5° 이내로 맞는다. 계단 초과는 PI 영점 때문이며 $n$이 작을수록 크다. $\omega_s=1600$ rad/s에서 여유가 43.4°로 줄어 샘플 지연이 상한을 정한다. 공진 없는 강체 부하의 $M_s\le2$ 상한은 1895 rad/s이다.

② 위치 루프 대역폭비($\omega_s=800$ rad/s, 강체).

대역폭비 $r=\omega_p/\omega_s$위치 루프 위상 여유 (°)1차 근사 (°)이득 교차 (rad/s)$M_s$계단 초과 (%)상승 (ms)정착 2 % (ms)
0.5056.863.44741.618.32.613.0
0.3371.471.63201.380.04.317.2
0.2579.676.02331.280.07.721.7
0.2083.978.71801.220.012.026.3
0.1089.284.3831.110.026.549.9

③ 필터별 속도 루프 상한(2질량, $M_s\le2$).

필터(공진 $\omega_r=3162$ rad/s)최대 $\omega_s$ (rad/s)같은 값 (Hz)위상 여유 (°)
없음1863034.8
노치 좁음4507246.9
노치 중간74711954.0
노치 넓음99715942.9
2차 저역 통과2964739.0
(참고) 공진 없는 강체 부하1895302—

필터가 없으면 공진 봉우리가 0 dB 위로 올라 속도 루프를 186 rad/s로 제한한다. 2차 저역 통과는 위상 지연이 공진까지 퍼져 296 rad/s에 그치고, 노치는 공진 부근만 낮추므로 997 rad/s까지 올라간다. 폭이 넓을수록(깊이를 같은 비율로) 공진 이동에 강건하나 낮은 주파수의 위상 지연이 커서 위상 여유가 줄어든다.

10 100 1000 10 k −40 −20 0 20 ω (rad/s) 개루프 이득 (dB) 필터 없음 노치 넓음
2질량 축의 속도 루프 개루프 이득($\omega_s=600$ rad/s). 파랑은 필터가 없는 경우이며 반공진(1581 rad/s)의 골과 공진(3162 rad/s)의 봉우리가 있고 봉우리가 0 dB를 넘는다. 주황 점선은 공진에 맞춘 넓은 노치($\zeta_z=0.05$, $\zeta_p=0.5$)로 봉우리가 거의 0 dB에 내려온다. 곡선은 계산값이다.

④ 같은 이득에서의 계단 응답(속도 계단 5 rad/s, 부하 속도).

구성$\omega_s$ (rad/s)$M_s$상승 (ms)초과 (%)비틀림 속도 최대 (% 계단)
없음1501.839.2014.311.63
없음6005.941.8022.339.99
노치 넓음8001.681.2040.113.56
0 10 20 30 40 0 5 10 시간 (ms) 모터 속도 (rad/s) 없음 ωs = 150 없음 ωs = 600 노치 넓음 ωs = 800
속도 계단 5 rad/s에 대한 모터 속도(공진 진동이 가장 크게 나타나는 신호). 필터 없이 $\omega_s=150$ rad/s는 느리고($M_s=1.83$), $\omega_s=600$ rad/s는 빠르나 공진으로 진동하며($M_s=5.94$), 노치를 넣은 $\omega_s=800$ rad/s는 빠르고 진동이 작다($M_s=1.68$). 곡선은 계산값이다.

필터 없이 $\omega_s=600$ rad/s로 올리면 $M_s=5.94$이고 비틀림 속도가 계단의 40 %까지 진동한다. 노치를 넣은 $\omega_s=800$ rad/s는 비틀림이 14 %로 줄고 상승 시간이 1.2 ms이다. 계단 초과 40 %는 위상 여유가 줄어서이며 지령 필터나 2자유도 구조로 줄여야 한다(이 장은 구현하지 않았다).

⑤ 부하 관성 변화에 대한 노치 강건성(이득은 공칭 값으로 고정. 노치 고정·추종은 $\omega_s=800$ rad/s, 노치 없음은 필터 없이 $M_s\le2$를 지키는 $\omega_s=150$ rad/s).

부하 관성 배율공진 (rad/s)$M_s$ 노치 고정 ($\omega_s$ = 800)$M_s$ 노치 추종 ($\omega_s$ = 800)$M_s$ 노치 없음 ($\omega_s$ = 150)
0.733271.691.631.83
1.031621.681.681.83
1.330701.681.711.82
1.630101.671.741.81
2.029582.381.761.80
3.028875.371.791.79

노치 주파수가 공진에서 6.5 % 낮아지면(부하 관성 2배) $M_s$가 1.68에서 2.38로 커지고 8.7 %에서는 5.37이다. 노치를 공진에 맞춰 추종시키면 $M_s$가 1.8 이하로 유지되며 필터가 없는 $\omega_s=150$ rad/s 구성은 공진 이동에 무관하다.

⑥ 전향 보상(강체, $\omega_s=400$ rad/s).

구성가속 구간 최대 오차 (mrad)등속 구간감속 구간
없음355.8396.0396.0
속도 전향4.26.88.0
속도+가속도 전향4.24.04.1

⑦ 조건부 적분 반포화.

위치 계단 (rad)조건부 적분초과 (%)상승 (ms)정착 (ms)
1.0없음20.511.251
1.0사용0.022.752
1.5없음53.912.8128
1.5사용0.021.953
2.0없음발산——
2.0사용0.020.149

반포화가 없으면 포화 구간에서 적분기가 누적되어 1.5 rad에서 초과 54 %이고 2 rad에서는 포화를 벗어나지 못해 발산한다(이 시뮬레이션은 속도 지령을 제한하지 않았다). 조건부 적분은 상승 시간이 느려지는 대가로 초과를 없앤다.

⑧ 대역폭 상한의 지연·전류 루프 의존(강체, $M_s\le2$인 최대 $\omega_s$를 rad/s로 적고, 괄호 안은 $\omega_c/\omega_s$).

지연 $T_d$ \ 전류 루프 대역폭500 Hz1000 Hz2000 Hz
100 µs2009 (1.6)2896 (2.2)3789 (3.3)
200 µs1448 (2.2)1895 (3.3)2288 (5.5)
400 µs947 (3.3)1144 (5.5)1297 (9.7)

⑨ 독립 라이브러리 대조.

비교결과
속도 루프 개루프 $L(j\omega)$: 이 장의 식 대 control.tf+evalfr와 지연(4개 구성, 120점) 최대 상대 차이6.4e-15
강체 속도 루프 위상 여유: 이 장 대 control.margin(6차 Padé 지연, $\omega_s$=400·800·1600 rad/s) 최대 차이0.01°
감도 피크 $M_s$: 이 장 대 control 직접 평가(2질량 3개 구성) 최대 상대 차이7.1e-04
폐루프 최대 극 실수부(6차 Padé): $M_s=2$ 구성 두 개 · 위반 구성(없음, $\omega_s=800$)-79.3 · -108.1 · -61.2
공진 $\omega_r$ 닫힌 식 대 상태행렬 고유값 크기(고유값 곱 $\lvert\lambda\rvert^2=\omega_r^2$) · 반공진 $\omega_{ar}$ 대 전달함수 영점 크기0.0e+00 · 1.4e-16
노치 Tustin 계수 대 signal.iirnotch(깊이 0, 같은 $Q$) 최대 계수 차이 · 부분 깊이 노치 주파수 응답 대 control.sample_system(bilinear, 프리워핑)5.9e-03 · 3.2e-15
강체 위치 계단 응답(0.05 rad, 500 샘플): RK4 시뮬레이션 대 cont2discrete 정확 이산화 최대 위치 차이2.5e-12 rad
2질량 속도 계단 응답(노치, 300 샘플): 이 장 대 cont2discrete+signal.lfilter 최대 부하 속도 차이1.3e-08 rad/s

대조 결과는 개루프 전달함수·위상 여유(Padé 지연)·감도 피크·2질량 고유값이 독립 구현과 일치함을 보인다. 폐루프 극은 $M_s\le2$ 구성에서 모두 좌반면이다. 노치 계수는 control.sample_system(프리워핑)과 기계 정밀도로 일치하고 iirnotch와의 차이는 설계 정의의 차이이다(iirnotch는 $-3$ dB 대역폭을 디지털 영역에서 정의). 시간 응답은 정확 이산화 상태공간과 일치한다. 전향·반포화의 논리는 라이브러리 대조 없이 시나리오로만 확인했다.

한계. 전류 루프를 1차 지연으로, 속도 검출을 후방 차분으로 모델링했고 엔코더 양자화·잡음, 마찰·백래시(3.8)·토크 상수 오차, 전류 루프의 비선형(포화·전압 한계)이 없다. 2질량 모델은 선형·병치 구성이며 출력 측 위치 귀환(비병치)·다중 모드·감속기 비선형 강성은 다루지 않았다. 반포화 시나리오는 속도 지령 제한이 없고, 전향의 모델 오차 민감도를 시험하지 않았다. 모든 정수는 예시이다.

견해: 감속기 관절의 속도 루프는 먼저 공진 주파수를 측정하고 노치로 상한을 올리기보다 필터 없이 $M_s\le2$를 지키는 대역폭(이 예제에서 186 rad/s, 공진의 약 $1/17$)에 두는 것을 기본으로, 부족할 때만 노치를 추가하는 것이 강건하다고 본다. 공진의 $1/10$(316 rad/s)은 이 예제의 필터 없는 상한을 넘어 대역폭의 경험칙으로 사용하기에 불충분하다. 근거는 이 예제에서 노치로 $\omega_s$를 5.3배 올릴 수 있으나 공진이 6.5 %만 이동해도 $M_s$가 1.68에서 2.38로 나빠지는 점이다. 이 장은 공진이 온도·부하에 따라 이동하는 실제 크기를 확인하지 못했다 (확인 필요).

5.9.6 설계 트레이드오프 — 피드백 위치와 구조

  • ① 모터 측 피드백만(세미클로즈드). 병치 구성이라 공진에서 위상이 안정적이고 단순하다. 감속기 비틀림·백래시가 위치 오차로 남는다.
  • ② 이중 엔코더(속도는 모터 측, 위치는 출력 측). 위치 정확도가 높아지나 위치 루프가 비병치 요소를 포함해 대역폭이 공진에 더 제한된다(3.9.3.3).
  • ③ 출력 측 단일 피드백(풀클로즈드). 정확도가 가장 높으나 공진·백래시가 루프 안에 들어와 대역폭이 가장 낮다.
구조위치 정확도루프 안정성요구위험
① 모터 측감속기 오차 포함높음엔코더 1개비틀림·백래시
② 이중출력 측중간엔코더 2개, 관절 센서공진 이동
③ 출력 측출력 측낮음출력 엔코더한계 사이클

견해: 위치 정확도 요구가 큰 관절은 이중 엔코더를 사용하되 속도 루프는 모터 측에 두고 위치 루프의 대역폭을 낮게 유지하는 것이 이 예제의 결과와 맞는다고 본다. 근거는 속도 루프가 병치 구성에서 $M_s\le2$로 997 rad/s까지 올라간 반면 위치 루프는 $r$이 1/3을 넘으면(이 예에서 $r=0.5$) 초과가 생기고 $r=1/4$는 상승 7.7 ms라는 점이다. 이 장은 이중 엔코더 구성을 시뮬레이션하지 않았다.

5.9.7 응용 축 비교

응용 축서보 루프에 거는 요구비고관련 장
산업·제조높은 대역폭, 정착 시간, 진동 억제노치·적응 필터를 드라이브가 제공하는 경우가 많다 (확인 필요)7.2, 27.7
물류·이동바퀴 속도 제어, 토크 한계, 큰 관성비위치 루프 없이 속도·토크 모드8.1
도로 주행조향·제동의 위치·토크 제어, 기능 안전이 장은 차량 서보를 다루지 않았다26.5
서비스저소음, 부드러운 움직임낮은 이득과 큰 감쇠8.9
의료·헬스케어저속 정밀도, 낮은 진동, 이중 센서노치로 상한을 올리는 것은 강건성 검토 필요26.7
휴머노이드·범용임피던스·토크 제어, 높은 토크 밀도, 관절 탄성위치 모드보다 토크 모드5.18, 12.11
필드온도·부하 변동에 의한 공진 이동강건한 대역폭 설정5.25
국방·안보신뢰성, 진동 환경이 장은 군 규격을 확인하지 않았다8.9

이 표는 이 책의 정리이며 장별 요구의 수치는 이 장이 확인하지 않았다.

5.9.8 관련 규격·프로토콜

문서발행무엇을 정하나상세 장
CiA 402(구동·모션 제어 장치 프로파일)CiA프로파일 위치·속도·토크, 주기 동기 위치·속도·토크 모드 등 드라이브 운전 모드, 판 (확인 필요)27.7
EtherCAT CoEETG드라이브 프로파일의 주기 데이터 전달8.17
IEC 61800 시리즈(전력 구동 시스템)IEC전력 구동 시스템의 요건·인터페이스, 판 (확인 필요)26.7
moteus 문서mjbots오픈소스 서보 드라이브의 위치·속도 PID·전향 토크·궤적 계획(직접 읽음)이 장
ODrive 튜닝 문서ODrive Robotics위치·속도·적분 이득 조정 절차(직접 읽음)이 장

공개 구현 사례(기준 시점 2026-11-05): moteus는 위치 모드의 제어 법칙을 torque = integrator + kp·kp_scale·position_error + kd·kd_scale·velocity_error + command_torque로 적고 kp_scale·kd_scale로 위치·속도·토크 모드를 제어 주기마다 전환할 수 있다고 기술한다. 두 문서의 성능 수치는 이 장이 검증하지 않았다 (공개 주장치).

5.9.9 관련 규제·인증 요구와의 연결

서보 루프 구조 자체를 규정하는 법령·인증 요건은 확인하지 못했다. 속도·위치 한계는 안전 기능(안전 제한 속도 SLS 등, 26.7)이 서보 루프와 독립인 경로에서 감시해야 하며 성능 수준·SIL 입증은 26.5·26.6와 이어진다. 필터·이득 변경이 안전 기능의 응답 시간에 미치는 영향은 해당 규격의 요구로 확인해야 하며 이 장은 조항을 읽지 못했다 (확인 필요).

5.9.10 한계·유의점·미해결

  • 선형 모델. 마찰·백래시·토크 한계·양자화를 제외했다. 관절 마찰은 저속에서 한계 사이클(헌팅)을 만든다(3.8).
  • 공진 이동. 부하 관성·온도·마모에 따른 공진 이동을 정량하지 않았고 노치는 이동에 민감하다(풀이 예제 ⑤).
  • 지연 모델. $T_d=2T_s$는 이 구현의 값이며 다른 구현(2배 갱신, 보간)에서는 달라진다.
  • 구조 선택. 2자유도 구조, 외란 관측기, 모델 예측 제어는 비교하지 않았다(12.3, 12.4).
  • 실측. 폐루프 대역폭·공진 주파수의 측정은 5.26의 시험 방법에 속한다.

5.9.11 체크포인트·연구 질문·출처

체크포인트:

  1. 속도 루프 위상 여유 $\arctan n-\arctan(\omega_s/\omega_c)-\omega_sT_d$를 $L_s$에서 유도하고 $T_d=2T_s$의 세 항을 설명하라.
  2. 위치 루프 대역폭비 $r$이 커질 때 초과가 나타나는 이유를 위상 여유에서 설명하라.
  3. 병치 2질량계에서 공진 봉우리가 0 dB를 넘으면 위상 여유가 어떻게 정해지는지 $\omega_rT_d$와 $\arctan(\omega_r/\omega_c)$로 계산하라.
  4. 노치 필터의 폭과 깊이가 위상 여유와 공진 이동 강건성에 주는 영향을 설명하라.
  5. 속도 전향 $K_{vff}=1$이 등속 추종 오차를 지우는 이유를 위치 루프의 형에서 설명하라.
  6. 조건부 적분과 역계산의 차이를 포화 시 적분기 거동으로 설명하라.

연구 질문:

  • 공진이 온도·부하에 따라 이동하는 감속기 관절에서 노치를 온라인으로 추종하는 방법의 강건성은 어떻게 정량하는가?
  • 이중 엔코더 구성에서 위치 루프 대역폭을 공진·백래시와 함께 최적화하는 설계 방법은 무엇인가?
  • 학습 기반 이득 조정은 모델 기반 $M_s$ 기준과 어떻게 결합되는가?

1차 출처(조회 2026-11-05).

  • mjbots, moteus 문서: Theory of Operation(docs/reference/theory.md)·설정 참조(docs/reference/configuration.md), GitHub 기본 브랜치 — 직접 읽음.
  • ODrive Robotics, Tuning the Controller, docs.odriverobotics.com(최신판) — 직접 읽음.
  • Yaskawa Electric, Servo Motor History(yaskawa-global.com/product/servomotor/history) — 직접 읽음(자사 기록).
  • FANUC, FANUC's History(fanuc.co.jp/en/profile/history/) — 직접 읽음(연도 표지 확인, 자사 기록).
  • 이 책 0.5.5.1(ASEA IRB 6의 제어기와 구동) — 직접 읽음.
  • SciPy 1.18.1(signal.iirnotch·cont2discrete·lfilter), numpy 2.5.4(linalg.eigvals), python-control 0.10.2(tf·evalfr·margin·pade·sample_system).

다음 장. 5.10는 파동기어(strain wave gear)의 구조·치형·토크 센서 내장형을 다룬다. 이 장의 2질량 공진과 반공진은 감속기의 비틀림 강성과 모터·부하 관성에서 정해지므로 감속기의 강성이 서보 루프의 대역폭 상한에 직접 연결된다.