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
설명
- SetValue와 InputValue의 차이를 기반으로 PID 연산을 수행합니다.
- 반환된 output 값은 outmin과 outmax 범위로 제한됩니다.
- 일반적으로 output은 pwm 듀티 제어 등에 사용됩니다.
주의사항
- PID는 일정한 주기로 호출해야 안정적으로 동작합니다.
- 기본값은 kp=100, ki=0, kd=0으로 시작하는 것을 권장합니다.
- 시스템 특성에 따라 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 제어만 먼저 동작시켜보고, 목표값 근처에서 흔들리거나 오차가 남는 경우에만 ki 와 kd 를 조금씩 추가하는 방식이 가장 쉽고 안정적입니다.
