비례–적분–미분 (PID) 제어기는 다양한 임베디드 및 산업용 제어 공정에서 사용되는 전통적인 제어 시스템입니다. 이 글에서는 아두이노 우노 R4 미니마를 제어기로, 그리고 MikroElektronika 히터 클릭 보드를 제어하는 시스템으로 사용하는 실제 온도 제어 PID 응용 사례를 소개합니다.
MIKROE 3996 히터 클릭 보드 (이하 “히터”)는 mikroBUS 시스템용으로 설계된 소형 브레이크아웃 기판입니다. 그림 1과 그림 2에서 볼 수 있듯이, 이 보드는 긴 PCB 트레이스로 구성된 발열부를 갖추고 있습니다. 그림 1은 열화상 이미지이며, 그림 2는 온도 센서와 PCB 발열 트레이스를 보여줍니다.
DMG3420U-7 MOSFET으로 히터를 제어하기 때문에 PWM 신호로 손쉽게 시스템을 제어할 수 있습니다. 텍사스 인스트루먼트의 TMP235 온도 센서로 모니터링한 온도로 마이크로칩의 MCP3221 12비트 ADC를 구동하며, ADC는 mikroBUS 소켓을 통한 I²C 인터페이스를 제공합니다.
이 글은 임베디드 제어 엔지니어의 관점에서 히터를 간략하게 소개하며, 특히 계단 응답과 아두이노 코드 인터페이스에 중점을 두고 있습니다. 글의 마지막 부분에서는 두 개의 설정값 사이에서 전환하도록 설계된 PID 제어기의 성능에 대해 정리하였습니다.
PID 제어기 설계의 주요 내용도 포함하고는 있지만, 이 글은 PID 제어기 튜토리얼이 아니므로 PID 제어기에 대한 추가적인 설명은 이 입문용 게시글을 참조하시기 바랍니다. PDI 제어기 자체는 교육적인 관점에서 설계되었으며, P, I, D 각 요소는 백분율 형태로 구현되었습니다. 이러한 접근 방식을 통해 학생들은 각 요소가 전체 시스템에 미치는 영향을 더 쉽게 이해할 수 있습니다.
본 프로젝트의 코드는 이 파일에 포함되어 있습니다: Heater.zip (2.9 KB)
그림 1: 동작 중인 MIKROE 히터 클릭 보드의 열화상 이미지. 보드 중앙의 온도는 약 175 °F (80 °C)입니다.
기술 팁: 그림 1에서 PCB 중앙에 고온 영역이 형성되어 있음을 확인할 수 있습니다. 이는 전력 소모와 회로 레이아웃에 있어 중요한 부분을 시사합니다. 히터를 실질적으로는 다수의 개별 저항들이 병렬로 배치되어 있다고 생각한다면, 각 저항들은 인접한 저항의 발열에 영향을 미치게 됩니다. 그 결과, 중앙에 위치한 저항들이 가장 뜨겁고, 가장자리로 갈수록 점차 온도가 낮아집니다. PCB 설계 시, 과도한 발열을 방지하기 위해 중앙에 위치한 저항들 주변에 추가적인 간격을 확보해야 합니다.
이와 유사한 특성은 케이블에도 적용됩니다. 전선 다발은 개별적으로 분리된 전선에 비해 방열 능력이 떨어지므로, 전선이 전선관을 통과한다면 화재 안전 측면에서 매우 중요한 의미를 갖습니다. 반드시 관련 규정을 준수하고, 시스템 정격을 적절히 낮춰 적용해야만 합니다.
그림 2: PCB 트레이스와 TMP235 온도 센서를 보여주는 확대 이미지.
mikroBUS와 아두이노 간의 물리적 연결
그림 3과 같이 MIKROE-5739 클릭 쉴드를 사용해 히터를 아두이노 우노 R4 미니마에 연결합니다.
MIKROE‑3996의 기본 설정을 그대로 사용하였습니다. VCC SEL의 0 옴 점퍼는 3V3에 연결되어 논리 회로들은 3.3 VDC로 구동되며, VIN SEL의 0 옴 점퍼는 5V에 연결되어 발열부에는 아누이노의 5 VDC 전원이 mikroBUS 소켓을 통해 공급됩니다.
그림 3: MIKROE‑5739 클릭 쉴드를 통해 아두이노 우노 R4 미니마에 장착된 히터의 모습.
MikroElektronika 히터 클릭 보드의 프로그래밍 인터페이스
아래에 히터의 핵심 프로그래밍 인터페이스를 7줄의 코드로 설명하였습니다. 처음 세 줄은 마이크로칩의 MCP3221 ADC로부터 데이터를 읽어오는 부분입니다. 이에 해당하는 데이터 전송을 Digilent Analog Discovery를 사용해 캡처하면 그림 4와 같습니다.
그 다음 두 줄은 12비트 ADC 데이터의 스케일링을 보여줍니다. 개인적으로는 먼저 전압으로 변환한 뒤 다시 원하는 단위로 변환하는 2단계 방식을 사용하는 편입니다. 이 방식은 ADC가 읽은 값을 시리얼 포트로 출력해 ADC의 실제 입력 전압과 비교함으로써 문제를 쉽게 진단할 수 있습니다. 다음 사항에 유의하십시오:
- MCP3221은 전원 및 기준 전압으로 3.3 VDC를 사용합니다.
- 히터의 TMP235는 10 mV/°C 특성을 가지며, 0 °C는 0.5 VDC에 해당합니다.
- 잡음을 줄이기 위해 최근 16개 샘플에 대한 이동 평균 필터를 사용합니다.
히터에는 발열부를 켜고 끄기 위한 MOSFET이 장착되어 있습니다. PWM 신호를 사용해 analogWrite() 함수로 이 MOSFET을 구동합니다.
Wire.requestFrom(0b1001101, 2);
uint8_t upper_byte = Wire.read();
uint8_t lower_byte = Wire.read();
uint16_t ADC_12_bit_binary = (upper_byte << 8) | lower_byte;
float ADC_voltage = f_map((float)ADC_12_bit_binary, 0, 4095, 0, 3.3);
float averagADCVoltage = runningAverageOf16(ADC_voltage);
float temp_in_F = f_map(averagADCVoltage, 0.5, 1.5, 32.0, 212.0);
// Placeholder for PID code
analogWrite(PWM_PIN, duty_cycle_8_bit);
그림 4: 아두이노와 MCP3221 사이의 I²C 신호를 로직 분석기로 캡처한 화면.
첫 번째 단계로 시스템 특성 정의
제어 시스템에서는 계단 응답을 알아내는 것이 중요한 첫 번째 단계입니다. 이 정보를 바탕으로 시스템의 특성을 전반적으로 파악할 수 있으며, 적절한 샘플링 시간도 결정할 수 있습니다.
히터의 경우, 히터를 켜고 그 결과를 기록만 하면 되기 때문에 이 과정은 매우 간단합니다. 이 시스템의 1차 시스템 응답 특성은 직렬 저항을 통해 커패시터를 충전할 때와 매우 유사합니다. 그림 5는 시정수를 75초로 가정했을 때의 계산 결과와 실측 결과를 보여줍니다.
Calculated = T_{final} – (T_{final} – T_{initial})\exp^{-t/\tau} = 163 - (163 - 86.33) \exp^{-t/75}
실측값과 계산값이 매우 유사하다는 것은 발열부의 열적 절연 특성이 우수함을 나타냅니다. 따라서, 이러한 1차 시스템 응답은 다른 구조물의 발열을 무시할 수 있음을 시사합니다. 즉, 2차 이상의 응답 특성을 고려할 필요가 없습니다. 이는 그림 1에서 확인한 뛰어난 열적 절연 특성을 뒷받침합니다.
그림 5: 히터의 1차 계단 응답을 보여주는 그래프로, 시스템의 시정수가 75초임을 보여주고 있습니다.
PID 제어기
PID 제어기의 핵심 루틴은 이 글에서 이미 설명한 바 있습니다. 그림 6은 제어기의 주요 설계 특징을 보여줍니다:
- 병렬형 PID 구조.
- 각 P, I, D의 계산에는 ±100.0으로 제한된 리미터 블록이 포함되어 있습니다. 이를 통해 시스템 동작을 백분율 기준으로 분석할 수 있어 PID 제어기의 동작을 보다 쉽게 이해할 수 있습니다.
- P 항이 포화될 경우 적분 누적값을 고정하는 적분기 와인드업 방지 기능 (락아웃)이 포함되어 있습니다.
- 설정값 변경 시 임펄스 발생을 방지하기 위해, 미분 항은 피드백 신호로부터 직접 계산합니다.
- D 항의 잡음을 줄이기 위해 이동 평균 기반의 저역통과 필터가 포함되어 있습니다.
그림 6: 각 P, I, D 항에 포화 블록을 포함시켜 개별 제한할 수 있게 실용적으로 수정한 PID 제어기 구조.
PID 제어기의 샘플링 시간은 어떻게 결정되나요?
그림 6의 시계 아이콘은 이 시스템이 샘플링 기반임을 의미합니다. 1차 근사로서, 그림 5에서 계산된 시스템 시정수 75초보다 10배 또는 20배 빠른 PID 샘플링 시간을 가정해 보겠습니다.
이상적으로는 PID 루틴을 7.5초마다 (10배 샘플링) 또는 3.75초마다 (20배 샘플링) 한 번씩 실행할 수 있습니다. 그러나 실제로는 시스템에 잡음이 존재합니다. 그림 5에서는 잘 드러나지 않지만, 온도를 ±1도 이내로 유지하려고 하면 상황이 그리 단순하지가 않습니다.
한 가지 해결책은 피드백 신호를 저역통과시키는 것입니다. 그러나 필터는 지연이 발생한다는 점에서 문제가 될 수 있습니다. PID는 “현재” 값 기반으로 동작하는 것이 아니라, 과거에 발생한 값들의 평균에 기반하여 동작하게 됩니다. 시스템의 시정수가 75초라는 것을 알고 있기 때문에 일정 수준의 필터링을 허용할 수 있습니다. 본 예제에서는 샘플링 클록을 250 ms로 설정하고 16단 저역통과 필터를 적용하였습니다. 이로 인한 약 4초의 지연이 시스템 동작에는 큰 문제를 일으키지 않는 것으로 보입니다.
PID 컨트롤러 성능
성능 시연을 위해 시스템이 1.5 분마다 120 °F와 130 °F 간에 전환되도록 설정하였습니다. 그림 7은 결과를 보여줍니다. 시스템은 초기 동작 시 약간의 난조를 보이지만 약 400초 이후에는 안정화됩니다. 정상 상태 온도에 수렴하기 전 약간의 오버슈트도 관찰됩니다.
그림 7: 두 온도 간에 전환될 때의 시스템 응답.
기술 팁: 본 시스템은 온도 상승과 하강이 비대칭적이기 때문에 두 개의 설정 온도 사이를 전환하는 동작이 쉽지는 않습니다. 능동적으로 열을 가할 수는 있지만, 냉각은 수동적일 수밖에 없습니다. 성능을 높이기 위해, 본 시스템을 상대적으로 높은 온도에서 동작시켜 냉각이 원활하도록 하였습니다. 만약 시스템을 더 낮은 온도에서 운용한다면, PID 튜닝 파라미터 역시 달라져야 합니다.
그림 8은 이에 대응하는 제어기의 내부 동작을 보여줍니다. 이 그림에서 개별 P, I, D 항은 백분율 형태로 표시되어 있습니다:
- 큰 온도 변화가 요구되면 P항은 포화됩니다.
- D 항은 온도 변화에 반대 방향으로 동작합니다. 이는 온도가 두 설정값 사이에서 빠르게 변할 때 가장 두드러지게 나타납니다.
- I 항은 오차가 시간에 따라 누적되는 양상을 보여줍니다. P 항이 포화되면 적분 항은 해당 값에서 고정됩니다. 이러한 동작은 시스템이 두 설정값 사이에서 급격히 변할 때 발생할 수 있는 적분 와인드업 (integral windup)에 대한 합리적인 해결책입니다.
그림 8: 개별 P, I, D 항의 백분율 기여도.
기술 팁: P, I, D 항을 백분율로 표현하면 PID 제어기의 동작을 쉽게 시각화 할 수 있습니다.
그림 9는 P, I, D 항의 합으로 구성된 최종 플랜트 (plant, 제어 대상) 구동 신호를 보여줍니다. 본 시스템에서 0보다 작은 값은 구동하지 않는 상태로 간주됩니다. 역회전이 가능한 모터와 달리, 이와 같은 단순한 시스템에서는 열 전달 방향을 “반대로” 되돌릴 수 있는 방법이 없습니다.
그림 9: 플랜트 구동 신호의 백분율 표시. 음수 값은 구동하지 않는 상태로 간주됩니다.
다음 단계
이 프로젝트는 아직 완료되었다고 할 수 없으며, 다음과 같은 다양한 실험을 해 볼 수 있습니다:
- 제어 시스템을 처음 접하는 학생이나 초보자의 경우, 이전 단계인 발열 소자를 단순한 온·오프 방식으로 제어하는 “뱅뱅” (bang-bang) 제어기를 먼저 구현해 보십시오. 기본적인 제어기부터 살펴보는 것은 충분히 가치가 있습니다. 결국 우리는 가능한 한 가장 단순한 제어기를 사용하되, 당면한 과제에서 요구되는 수준보다 단순해서는 안 됩니다.
- 열 제어 시스템의 특성을 보다 잘 이해할 수 있도록 제어기를 P 제어만으로 동작시켜 보고, 그다음에는 PI 제어만으로 동작시켜 보십시오.
- 이 PID 제어기와 교과서에 소개된 PID 제어기 사이의 차이점을 찾고 분석해 보십시오.
- 샘플링 시간을 최적화해 보십시오.
- 노이즈 특성을 분석하고 필터의 성능 한계를 파악해 보십시오.
- ADC에 정밀한 기준 전압을 사용할 수 있도록 클릭 보드를 수정해 보십시오.
- PID 알고리즘을 최적화해 보십시오.
- 이 비선형 시스템에서 PID를 자동으로 조정하는 방법을 알아내 보십시오.
- 히터를 단열 챔버 (오븐) 내부에 장착해 보십시오.
- 성능 향상을 위해 이득 스케줄링 (gain scheduling)을 적용해 보십시오. 예를 들어, 중·장기 정상 상태 안정성을 위해 시스템 시작 시점과 다른 이득 및 필터 설정을 사용할 수 있을 것입니다.
- 히터를 더 큰 시스템에 통합해 보십시오.
- 시스템의 열을 제거하기 위해 냉각 팬을 추가해 보십시오.
- TMP235와 MCP3221를 사용하거나 다른 부품으로 변경하여 자신만의 PCB를 설계해 보십시오.
글을 맺으며
실제 제어 시스템은 가장 좋은 학습 기회가 될 수 있습니다. MIKROE‑3996 히터 클릭 보드는 그 대표적인 예시입니다. 앞서 살펴본 바와 같이, 이 보드는 마이크로컨트롤러에 쉽게 연결할 수 있으면서도, 제어 시스템과 관련된 다양한 가르침을 제공합니다.
이 실험을 직접 재현해 보고 자신의 목적에 맞게 응용해 보기를 권장합니다. 관찰 결과와 개선 아이디어는 댓글을 통해 공유해 주시기 바랍니다.
감사합니다.
APDahlen
관련 정보
다음 링크를 통해 관련된 유용한 정보를 확인해 보시기 바랍니다:
저자 소개
미합중국 해안경비대(USCG) 소령(LCDR)으로 전역한 Aaron Dahlen은 디지키에서 애플리케이션 엔지니어로 근무하고 있습니다. 27년간의 군 복무 동안 기술자 및 엔지니어로서 쌓아온 그 만의 전자 및 자동화에 대한 지식은 12년간의 교단을 통해 (상호 연계되어) 더욱 향상되었습니다. 미네소타 주립대학, Mankato에서 전기공학 석사(MSEE) 학위를 받은 Dahlen은 ABET(Accreditation Board for Engineering and Technology, 미국 공학 기술 인증 위원회) 공인 전기공학 과정을 가르치고, EET(Electrical Engineering Technology, 전기공학 기술) 과정의 프로그램 조정관으로 일했으며, 군 전자 기술자에게 부품 수준의 수리에 대해 가르쳤습니다. 미네소타 주 북부의 집으로 돌아와 이런 류의 연구와 글쓰기를 즐기고 있습니다.
영문 원본: PID Controller Example with Arduino Minima and MIKROE Heater Click








