그라운드 임베디드 유튜브 구독

노트 / 제어공학

PID 제어: 현재, 과거, 미래의 오차

P는 현재 오차에, I는 쌓인 오차에, D는 오차의 변화 속도에 반응합니다. 각 항의 효과와 튜닝 순서.

GROUND EMBEDDED · 정리 노트제어공학 06PID 제어 1float pid_step(pid_t *p, float target, … 2 float e = target - meas; 3 p->integ += p->ki * e * dt; 4 p->integ = clamp(p->integ, -p->imax…// 안티…

u = Kp·e + Ki·∫e dt + Kd·de/dt

각 항의 역할

항 반응 대상 올리면
P 지금의 오차 빨라지지만 오버슈트, 진동 증가. 정상상태 오차 남음
I 쌓인 오차 정상상태 오차 제거, 너무 크면 느린 출렁임
D 오차 변화 속도 오버슈트 억제(브레이크), 노이즈 증폭

코드

float pid_step(pid_t *p, float target, float meas, float dt) {
    float e = target - meas;
    p->integ += p->ki * e * dt;
    p->integ = clamp(p->integ, -p->imax, p->imax);       // 안티 와인드업
    float deriv = -(meas - p->prev_meas) / dt;             // 측정값 미분 (목표 급변 시 튐 방지)
    p->prev_meas = meas;
    return clamp(p->kp * e + p->integ + p->kd * deriv, -p->umax, p->umax);
}

튜닝 순서 (현장식)

  1. I, D를 0으로 두고 P를 올리며 응답이 빨라지되 진동 직전까지
  2. P를 조금 낮추고 I를 올려 정상상태 오차 제거
  3. 오버슈트가 크면 D를 조금 추가 (D 앞에 저역통과 필터)
  4. 외란(손으로 밀기, 무게 추가)을 주고 회복을 확인

실험실의 PID 3D 시뮬레이션에서 게인을 바꾸며 각 항의 효과를 눈으로 확인해 보세요.

3D 실험실에서 직접 돌려 보기값을 바꾸며 이 노트의 원리를 확인합니다→