PID 제어

PID 제어 기능을 사용하여 목표값(SetValue)과 현재값(InputValue)의 차이를 기반으로 출력값을 계산할 수 있습니다.

PidConfig

PidConfig pidno, kp, ki, kd, outmin, outmax

파라미터 설명
pidno PID 채널 번호 (0 ~ 7)
kp 비례 게인 (×100 스케일 정수, 예: 150 → 1.50)
ki 적분 게인 (×100 스케일 정수, 예: 10 → 0.10)
kd 미분 게인 (×100 스케일 정수, 예: 5 → 0.05)
outmin 출력 최소값 (일반적으로 0)
outmax 출력 최대값 (예: PWM 사용 시 10000)

지정한 PID 채널의 제어 파라미터를 설정합니다. 8개의 채널이 있으며 각 채널은 독립적으로 동작합니다.

게인 값 타입

kp, ki, kd는 정수(integer) 값으로 입력합니다.

내부적으로는 실수로 변환되어 연산되며, 입력 값은 100을 기준으로 스케일된 값입니다.

예:
150 → 1.50
10  → 0.10
5   → 0.05

PidRun

output = PidRun(pidno, setvalue, inputvalue)

파라미터 설명
output 계산된 출력값 (반환값, outmin~outmax 범위)
pidno PID 채널 번호
setvalue 목표값 (제어하려는 기준 값)
inputvalue 현재 측정값 (센서 또는 입력 값)

PID 연산을 수행하고 계산된 출력값을 반환합니다.

사용 예

Dim temp As Integer
Dim output As Integer
Dim setpoint As Integer
 
setpoint = 800
 
Freepin 12
 
Pidconfig 0, 100, 0, 0, 0, 1000
 
Do
  temp = Tadin(0)
  output = Pidrun(0, setpoint, temp)
  Pwm 12, 1000, output
  Print "in:", Dec temp, " out:", Dec output, Cr
  Wait 100
Loop

설명

  1. SetValue와 InputValue의 차이를 기반으로 PID 연산을 수행합니다.
  2. 반환된 output 값은 outmin과 outmax 범위로 제한됩니다.
  3. 일반적으로 output은 pwm 듀티 제어 등에 사용됩니다.

주의사항

  1. PID는 일정한 주기로 호출해야 안정적으로 동작합니다.
  2. 기본값은 kp=100, ki=0, kd=0으로 시작하는 것을 권장합니다.
  3. 시스템 특성에 따라 kp, ki, kd 값을 조정해야 합니다.

PID 제어가 왜 필요한가요?

단순히 ON/OFF만 사용하는 제어는 목표값 근처에서 계속 흔들리거나(진동), 목표값에 정확히 도달하지 못하는 경우가 많습니다. 예를 들어 히터를 사용하여 온도를 50°C로 유지한다고 가정해봅시다.

단순 ON/OFF 방식은:

  • 49°C → 히터 ON
  • 51°C → 히터 OFF

이런 방식으로 반복되어 온도가 계속 오르내리게 됩니다. PID 제어는 현재 오차(Error)를 계산하여, 출력 세기를 자동으로 조절합니다.

예를 들어:

  • 목표 온도와 차이가 크면 → 강하게 가열
  • 목표 온도에 가까워지면 → 출력을 줄임
  • 목표값을 넘으려 하면 → 출력을 미리 감소

이렇게 동작하여 목표값에 더 빠르고 안정적으로 도달할 수 있습니다. PID는 다음과 같은 곳에 많이 사용됩니다.

  • 온도 제어 (히터, 인큐베이터, 온도 유지)
  • 모터 속도 제어 (RPM 유지)
  • 압력/유량 제어
  • 수위(Level) 유지
  • 위치 제어

PID 구성 요소

PID는 다음 3가지 요소를 조합합니다.

  • P (비례 제어) : 현재 오차가 클수록 강하게 반응
  • I (적분 제어) : 작은 오차가 계속될 때 누적 보정
  • D (미분 제어) : 변화 속도를 보고 과도한 오버슈트를 줄임

처음에는 아래처럼 시작하는 것을 권장합니다.

kp = 100
ki = 0
kd = 0

즉, P 제어만 먼저 동작시켜보고, 목표값 근처에서 흔들리거나 오차가 남는 경우에만 kikd 를 조금씩 추가하는 방식이 가장 쉽고 안정적입니다.

← CUBLOC2 목차로 돌아가기