ON/OFF 제어
1. ON/OFF 제어의 기본 원리
원리 및 동작 방식
ON/OFF 제어는 온도 센서로부터 현재 온도(PV)를 측정하고 이를 사용자가 설정 온도(SV)와 비교한다. 비교 결과에 따라 히터 출력을 ON 또는 OFF 상태로 전환한다. 이처럼 제어 신호가 두 가지 상태(0%, 100%)로만 표현되기 때문에 '2위치 제어'라고도 부른다.
조절감도(HYSTERESIS) 적용
만약 현재 온도(PV)가 설정 온도(SV)와 정확히 일치하는 한 점에서만 전환된다면 미세한 변화에도 릴레이나 출력 소자가 반복적으로 작동(채털링)하여 장치에 부담을 주게 된다. 이를 방지하기 위해 설정 온도(SV) 주변에 일정한 범위( ±2℃)의 조절감도(HYSTERESIS) 또는 불감대(dead band)를 설정하여 온도가 해당 범위 내에서는 상태를 유지하도록 한다.
위 사진에서는 히터가 60 ℃ (SV)가 되면 OFF, 58 ℃ 에서 ON 되므로 58 ℃ 가 조절감도 라고 볼 수 있다.
2. ON/OFF 제어의 특징 및 한계
장점
- 구조의 단순성 : 복잡한 알고리즘이 없어 센서 신호를 단순 비교하여 동작하므로 구현 및 유지보수가 쉽다.
- 빠른 응답성 : 계산이나 복잡한 튜닝 없이 바로 ON 또는 OFF로 전환되기 때문에 빠른 응답을 보인다.
단점
- 오버슈트 : 초기 전원 투입 시 히터나 냉각기 등의 열전달 특성 때문에 실제 온도가 설정값을 초과할 수 있다.
- 헌팅 : 온도가 설정값 근처에서 조절감도(HYSTERESIS) 범위를 반복적으로 왔다 갔다 하며 ON과 OFF가 번갈아 발생하는 현상으로 제어 신호에 진동을 일으켜 제어의 정밀도를 저하시킨다.
- 정밀 제어 한계 : 온도와 같이 미세한 조절이 요구되는 시스템에서는 반복적인 헌팅과 오버슈트 때문에 정밀 제어가 어렵다.
추가 고려 사항
- 응답 지연 : 센서의 응답 속도와 히터 또는 냉각기의 열 전달 지연 등으로 인해 실제 온도 변화와 제어 신호 사이에 시간 차이가 발생할 수 있다.
- 출력 소자의 한계 : 릴레이나 솔리드 스테이트 릴레이(SSR) 등 출력 소자는 반복적인 ON/OFF 작동에 의해 기계적 또는 전기적으로 피로가 누적되어 수명이 단축될 수 있다. 따라서 출력 소자의 특성과 내구성을 고려해야 한다.
- 외부 환경 및 부하 특성 : 제어 대상의 열 용량, 히터의 용량, 주변 온도 변화 등 ON/OFF 제어의 동작 특성에 영향을 준다. 부하 특성에 맞춰 조절감도(HYSTERESIS) 폭을 적절히 설정해야 잦은 전환으로 인한 부하를 줄일 수 있다.
3. 보완 및 개선 방법
시간 비례 제어(Time Proportional Control)
단순한 ON/OFF 제어 대신 주기 내에서 ON 시간과 OFF 시간을 비례적으로 조절하는 방식이다. 예를 들어 주기 10초 내에서 온도 편차에 따라 히터의 ON 시간이 길어지거나 짧아지도록 하여 평균 조작량을 조절한다. 이를 통해 헌팅 현상을 다소 완화할 수 있다.
PID 제어와 하이브리드 접근
ON/OFF 제어의 구조의 단순성에 더해 비례(P), 적분(I), 미분(D) 제어를 결합한 PID 제어를 사용하면 오버슈트와 헌팅 현상을 줄이고 보다 정밀한 제어가 가능하다.
PID제어
1. PID제어의 기본 원리
피드백 제어기의 형태를 가지고 있으며 제어하고자 하는 대상의 출력값을 측정하여 이를 설정값과 비교하여 오차를 계산하고 이 오차값을 이용하여 제어에 필요한 제어값을 계산하는 구조로 구성되어 있다.
PID제어는 세 가지 항(비례, 적분, 미분)을 결합하여 현재 오차에 기반한 제어 출력을 산출한다.
수식으로 표현하면 아래와 같다.
- e(t) : 시간 t에서의 오차 (설정값 SV와 현재값 PV의 차이)
- Kp (비례 상수), Ki(적분 상수), Kd(미분 상수) : 각각의 제어 항에 대한 게인 값이다.
2. PID 제어의 구성 요소
2-1. 비례 제어(P)
- 동작 원리 : 현재 오차(e(t))에 비례하여 제어 출력을 결정한다. 온도가 목표값보다 낮으면 그 차이에 비례하여 히터의 출력이 증가한다.
- 장점 : 시스템의 응답을 빠르게 만들어 초기 오차를 신속하게 줄이는 효과가 있다.
- 단점 : 단독으로 사용하면 일정한 오차(Offset)가 남을 수 있다.
비례대를 크게 할 경우 : 더 낮거나 높은 온도에서 ON/OFF 되기 때문에 현재값이 설정값에 도달하는 시간이 길어지고 Offset이 커진다.
비례대를 작게 할 경우 : 설정값 근처에서 ON/OFF 되기 때문에 현재값이 설정값에 도달하는 시간이 짧고 Offset도 작아진다. 하지만 헌팅 현상이 발생하기 쉽다.
2-2. 적분 제어(I)
- 동작 원리 : 과거부터 현재까지의 누적 오차를 적분하여 보정 신호를 생성한다. 시간이 지남에 따라 누적된 오차를 반영하여 Offset을 보완해 목표값에 더 정확히 도달하게 한다.
- 장점 : 비례 제어에서 발생하는 Offset을 제거하는 데 효과적이며 장기적으로 설정값과 실제값의 차이를 없앤다.
- 단점 : 누적 오차가 과도하게 반영(적분기의 와인드업)되면 제어 출력이 급격하게 변동하여 오버슈트나 헌팅 현상이 발생할 수 있다.
적분 시간을 짧게 하면 Offset을 빠르게 없앨 수 있지만 헌팅이 발생하는 원인이 된다.
적분 시간을 길게 하면 Offset을 없애기까지 시간이 오래 걸린다.
2-3. 미분 제어(D)
- 동작 원리 : 오차의 변화율(오차의 기울기)을 측정하여 제어 출력에 반영한다. 빠르게 변화하는 외란이나 급격한 오차 변동에 대해 미리 보정하여 제어 출력이 과도하게 튀는 것을 방지한다.
- 장점 : 시스템의 응답을 예측하고 오버슈트를 줄여 보다 안정적인 제어를 가능하게 한다.
- 단점 : 센서 노이즈에 민감해 노이즈가 증폭될 수 있어 필터링이 필요하다.
미분 시간을 짧게 하면 급격한 온도 변화에 대한 응답이 늦어지지만 오버 슈트가 발생하지 않는다.
미분 시간을 길게 하면 설정값에 도달하는 시간은 짧아지지만 오버 슈트가 발생하기 쉽다.
정리하자면 아래와 같다.
비례항(P) : 현재 상태에서의 오차값의 크기에 비례한 제어작용
적분항(I) : 정상상태 오차를 없애는 작용
미분항(D) : 출력값의 급격한 변화에 제동을 걸어 오버슈팅을 줄이고 안정성 향상
3. PID 제어의 장단점 및 특성
- 연속 제어 : PID 제어는 ON/OFF 제어와 달리 제어 출력을 0%에서 100% 사이의 연속적인 값으로 조절한다. 따라서 미세한 조절이 가능하여 목표값에 보다 정밀하게 도달할 수 있다.
- 오버슈트와 헌팅의 최소화 : 적분 및 미분 항을 통해 오프셋을 제거하고 급격한 외란에 신속히 대응해 오버슈트와 헌팅 현상을 줄인다.
- 응답성 및 안정성 : 비례(P)항은 빠른 반응, 적분(I)항은 장기적인 오차 보정, 미분(P)항은 급변에 대한 안정성을 제공하여 시스템 성능을 향상시킨다.
- 튜닝의 복잡성 : 각 항의 상수를 시스템의 특성에 맞게 튜닝해야 하므로 복잡할 수 있다. 대표적인 튜닝 기법으로는 Ziegler-Nichols 방법, Cohen-Coon 방법 등이 있다.
제어 알고리즘 순서
초기 설정 값
ON/OFF 제어 시 사용자 입력값
- 설정 온도(SV)
- 조절 감도(HYSTERESIS)
- 제어 사이클 시간(Cycle Time)
PID 제어 시 사용자 입력값
- 설정 온도(SV)
- 비례 상수(P)
- 적분 상수(I) 또는 적분 시간
- 미분 상수(D) 또는 미분 시간
- 출력 제한, 샘플링 주기
1. 데이터 샘플링 및 전처리
샘플링 주기 설정
온도 센서의 아날로그 출력은 A/D 컨버터를 통해 디지털 데이터로 변환되고 이 데이터는 250ms 또는 500ms 간격으로 읽어진다. 센서 종류와 응용 분야에 따라 결정되지만 예를 들어 Omron의 디지털 온도 조절기는 온도 입력 시 250~500ms의 주기를 사용하는 경우가 많다.
필터링
센서 데이터에는 노이즈가 포함될 수 있으므로 소프트웨어에서 이동 평균 필터나 저역 통과 필터와 같이 간단한 디지털 필터를 적용하여 데이터를 평활해야 한다. 이를 통해 단기적인 잡음에 의한 오작동을 줄일 수 있다.
2. 제어 오차 계산
소프트웨어는 각 샘플링 주기마다 읽어 들인 현재 온도(PV)와 사용자가 입력한 설정 온도(SV)를 비교하여 오차(e)를 계산한다. (e = SV - PV)
이 오차 값은 제어 알고리즘이 다음 단계에서 어떻게 동작할지를 결정하는 기초 자료가 된다.
3. 제어 알고리즘 실행
ON/OFF 제어의 경우
단순 비교를 통해 만약 PV가 SV보다 낮아져 조절감도(HYSTERESIS) 범위를 벗어나면 히터를 켜고 반대로 SV보다 높아지면 히터를 끈다.
이 방식은 매우 간단하며 각 샘플링 주기마다 센서 데이터를 기반으로 ON 또는 OFF 상태를 결정한다.
PID 제어의 경우
소프트웨어는 현재 오차(e), 이전 오차값, 그리고 오차의 누적값을 이용하여 제어 출력을 계산한다.
일반적으로 연속 시간 PID 제어식을 이산 시간 방식으로 변환하여 각 샘플링 주기마다 아래와 같이 계산한다.
이렇게 계산된 제어 출력은 0%에서 100% 사이의 연속적인 값으로 나타내며 액추에이터를 통해 세밀하게 제어된다.
제어 알고리즘은 매 샘플링 주기마다 최신 센서 데이터를 바탕으로 오차를 계산하고 그 오차에 따라 액추에이터에 보낼 제어 신호를 산출한다.
4. 출력 신호 전송 및 액추에이터 구동
계산된 제어 신호는 디지털 I/O, PWM 출력, 또는 통신 인터페이스를 통해 실제 히터, 냉각, 팬 등 제어 대상 장치로 전달된다.
ON/OFF 제어의 경우 신호는 단순히 ON과 OFF 상태로 전달되며 PID 제어는 연속적인 제어 값에 따라 장치의 동작 정도를 미세하기 조절할 수 있다.
5. 실시간 제어 루프 반복
위 과정(샘플링 -> 오차 계산 -> 제어 알고리즘 실행 -> 출력 전송)은 설정된 주기마다 반복된다.
임베디드에서는 주로 타이머 인터럽트를 이용해 정해진 간격마다 제어 루프를 실행하도록 구현하고 이를 통해 시스템은 지속적으로 환경 변화를 감지하고 제어 신호를 갱신한다.
좀 더 디테일하게 알고리즘을 구현해 보면 아래와 같다.
소프트웨어 구현
※ 제약 조건 : 잦은 스위칭에 출력 소자(릴레이, SSR 등)가 무리가 가지 않도록 해야 한다.
1. 시스템 아키텍처 개요
두 개의 스레드 또는 태스크 구현
1-1. 센서 데이터 수집 태스크
동작 주기 : 250 ~ 500ms
역할 : 온도 센서의 아날로그 출력을 A/D 컨버터를 통해 디지털 값으로 변환하여 읽어 들인다.
데이터 처리 : 읽어 들인 개별 센서 데이터에 대해 노이즈 제거를 위해 이동 평균이나 저역 필터 등 간단한 디지털 필터링을 적용한다.
데이터 저장 : 일정 기간 동안의 센서 값들을 버퍼에 저장하거나 실시간으로 누적/평균하여 최신 상태를 업데이트한다.
1-2. 제어 업데이트 태스크
동작 주기 : 10s
역할 : 최근 10초간 센서로부터 수집한 데이터를 기반으로 제어 알고리즘(ON/OFF 또는 PID)을 실행하여 최종 제어 명령을 산출하고 액추에이터(릴레이, SSR, PWM 등)에 전달한다.
데이터 활용 : 센서 태스크에서 필터링된 평균값 또는 대표값을 사용하여 순간적인 잡음의 영향을 최소화한 상태에서 제어를 수행한다.
센싱은 빠르게 하여 높은 해상도의 데이터를 확보하고 제어 업데이트는 느리게 하여 액추에이터의 잦은 스위칭을 방지한다.
2. ON/OFF 제어 구현
2-1. 센서 데이터 수집 (250~500ms)
센서 데이터를 주기적으로 읽고 이동 평균 필터 등을 적용하여 최근 10초간의 대표 온도를 계산한다.
every 250ms:
current_value = readTemperatureSensor()
updateMovingAverage(current_value) // 최근 10초간의 값 업데이트
2-2. 제어 업데이트 (10s)
10초마다 저장된 데이터의 평균을 사용하여 현재 온도(PV)를 결정한다.
설정 온도(SV)와 비교한 후 조절감도(HYSTERESIS) 범위를 적용하여 제어 결정을 내린다.
every 10sec:
avg_value = getMovingAverage() // 최근 10초 평균 온도
if avg_value < (SV - hysteresis):
setActuatorState(ON) // 밸브를 열어서 히터 작동
else if avg_value > (SV + hysteresis):
setActuatorState(OFF) // 밸브를 닫아서 히터 차단
else 유지 (no change)
조절감도 범위가 ±2℃로 설정된 경우
평균 온도가 (설정 온도 - 2℃) 보다 작으면 히터 ON
평균 온도가 (설정 온도 - 2℃) 보다 크면 히터 OFF
그 외에는 현재 상태 유지
3. PID 제어 구현
3-1. 센서 데이터 수집 (250~500ms)
ON/OFF 제어와 동일하게 센서 데이터를 250~500ms 간격으로 읽어서 이동 평균이나 필터링을 통해 PV를 계산한다.
이 과정에 각 샘플의 오차(e = SV - PV)를 실시간으로 기록할 수도 있다.
every 250ms:
current_value = readTemperatureSensor()
updateMovingAverage(current_value) // 최근 10초 값 업데이트
e_current = SV - current_value
storeError(e_current) // 오차 저장
3-2. 제어 업데이트 (10s)
10초마다 필터링된 평균 온도를 기준으로 PID 제어 알고리즘을 실행한다.
이산 PID 제어식은 아래와 같이 표현할 수 있다. (샘플링 주기 T = 10s)
e[k]는 최근 10초 간의 평균 오차이다.
계산된 제어 출력 u[k]는 0%에서 100%의 연속적인 제어 출력 값을 의미한다.
하지만 최종 액추에이터에서 PWM을 사용하지 않고 ON/OFF 제어만 지원한다면 이 연속 출력 값을 10초 주기 내에서 시간 비례 제어로 변환해야 한다.
시간 비례 제어 방식 사용
예를 들어 PID 출력이 70%라면 10초 주기 동안 밸브를 7초 동안 ON 하고 3초 동안 OFF 하는 식으로 제어한다.
every 10sec:
avg_temperature = getMovingAverage() // 10초간의 평균 온도
current_error = SV - avg_temperature
integral_error += current_error * T // T는 10초
derivative = (current_error - previous_error) / T
u = Kp * current_error + Ki * integral_error + Kd * derivative
previous_error = current_error
// u가 0~100 사이의 값으로 산출되었다고 가정하고, 이를 10초 주기 내의 ON 시간으로 변환
on_time = (u / 100) * 10sec
off_time = 10sec - on_time
// 이제 10초 동안 밸브 제어: on_time 동안 ON, off_time 동안 OFF
setActuatorState(ON) for on_time seconds
setActuatorState(OFF) for off_time seconds
3-3. 구현 시 고려사항
1. PID 파라미터 튜닝
제어 주기가 10초인 점을 고려하여 튜닝해야 한다. 긴 제어 주기에서는 오차가 누적될 수 있으므로 적분 항의 강도 조절에 주의해야 한다.
2. 출력 스무딩
단순 on/off 스위칭으로 전환할 때 너무 짧은 ON/OFF 전환으로 인한 무리가 가지 않도록 하기 위해 최소 스위칭 시간을 고려해야 한다.
3. 타임 프로포셔닝 주기 선택
10초 주기는 밸브 같은 기계적 장치의 응답 특성에 맞추어 선택되고 시스템에 따라 이 주기를 조정할 수 있다.
4. 센서 데이터의 필터링
빠른 센싱 주기를 통해 얻은 데이터를 평균화하여 PID 알고리즘에 제공되는 입력의 노이즈를 최소화한다.
4. 결론
4-1. ON/OFF 제어
250~500ms 주기로 센서를 빠르게 모니터링하고 10초마다 이동 평균값을 기반으로 설정 온도와 비교하여 히스테리시스 범위를 벗어나면 단순히 밸브를 열거나 닫는다.
4-2. PID제어
250~500ms 주기로 센서를 빠르게 모니터링하고 10초마다 이동 평균을 사용하여 PID 알고리즘으로 연속적인 제어 출력을 산출한 후 이를 10초 주기 내에서 on/off의 시간 비율로 변환하여 밸브를 제어한다. 이때 PWM처럼 높은 주파수로 스위칭하는 대신 10초라는 긴 주기를 활용하여 기계적 부담을 줄인다.
참고문헌
[1] Temperature_ko_20240424_W.pdf Autonics [online] https://www.autonics.com/common/download/508720
[2] widipedia [online] https://ko.wikipedia.org/wiki/PID_%EC%A0%9C%EC%96%B4%EA%B8%B0