PID 제어 이론 기초: 고압산소챔버 압력 제어로 이해하기

들어가며 에어컨을 26도에 맞춰두면, 실내 온도가 26도에 닿는 순간 딱 멈출까? 좋은 에어컨은 26도에 가까워질수록 슬슬 출력을 줄이다가 부드럽게 안착한다. 반대로 어설픈 온도 조절은 24도까지 확 떨어뜨렸다가 다시 28도로 올렸다가 출렁거린다. 이 “부드럽게 안착하느냐, 출렁거리느냐"의 차이를 만드는 게 바로 PID 제어다. 알게 모르게 우리는 하루 종일 PID를 쓴다. 오르막에서도 속도를 유지하는 자동차 크루즈 컨트롤, 바람 속에서 제자리에 떠 있는 드론, 3D 프린터 노즐 온도, 보일러… 전부 PID다. 세상에서 가장 널리 쓰이는 제어 알고리즘인데, 핵심 아이디어는 의외로 한 줄로 끝난다 — “목표랑 얼마나 차이 나는지 보고, 그만큼 조절한다.” ...

2026년 6월 12일 · 7 min · 서보민

임베디드 기초 7편 - 클럭 심화: 보드레이트와 SPI 속도는 어떻게 계산되는가

들어가며 UART 보드레이트 계산 BRR 레지스터 STM32 UART는 BRR(Baud Rate Register)로 분주비를 설정한다. 기본 16배 오버샘플링(OVER8=0) 기준: RM0383 19.3.4 — Fractional baud rate generation: BRR 레지스터와 USARTDIV 관계 1 Baud Rate = f_PCLK / (16 × USARTDIV) USARTDIV는 정수부(12비트)와 소수부(4비트)로 구성된다. 소수점 이하 4비트이므로 1/16 단위까지 설정 가능하다. 계산 예시 UART2, APB1 = 50 MHz, 목표: 115200 bps 1 2 3 4 5 6 USARTDIV = 50,000,000 / (16 × 115,200) = 27.127... 정수부: 27 소수부: 0.127 × 16 = 2.03 → 반올림 → 2 BRR = (27 << 4) | 2 = 0x01B2 실제 보드레이트 역산: ...

2026년 6월 9일 · 3 min · 서보민

임베디드 기초 6편 - 클럭 트리와 RCC: 주파수는 어디서 오는가

들어가며 UART 보드레이트를 설정할 때 115200을 입력한다. SPI 속도를 설정할 때 분주비(prescaler)를 고른다. 이 숫자들의 근거가 뭘까. 전부 클럭(Clock) 에서 나온다. MCU 안의 모든 주변장치는 클럭 신호를 기반으로 동작하고, 그 클럭이 얼마인지에 따라 통신 속도가 결정된다. 클럭 소스 (Clock Source) MCU는 기준 클럭을 어딘가에서 공급받아야 한다. STM32F4의 주요 클럭 소스는 두 가지다. HSI (High Speed Internal) MCU 내부 RC 오실레이터 16 MHz 고정 외부 부품 불필요 정밀도 낮음 — 온도와 전압에 따라 ±1% 수준의 오차 리셋 직후 기본으로 사용되는 클럭 소스 오차가 있는데도 HSI를 쓰는 이유가 있다. ...

2026년 6월 3일 · 4 min · 서보민

임베디드 기초 5편 - 인터럽트와 NVIC: CPU를 기다리게 하지 마라

들어가며 4편에서 벡터 테이블을 다뤘다. [0]은 MSP, [1]은 Reset_Handler 주소였고, 나머지 항목들(NMI_Handler, HardFault_Handler, TIM2_IRQHandler…)은 그냥 지나쳤다. 이것들이 전부 인터럽트 핸들러다. 임베디드 코드의 상당 부분이 이 핸들러들 안에서 돌아간다. 폴링 vs 인터럽트 외부 이벤트(버튼 입력, 센서 데이터 도착 등)를 처리하는 방법은 두 가지다. 폴링 (Polling) 1 2 3 4 5 6 while (1) { if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_RESET) { // 버튼 눌림 처리 } do_something_else(); } CPU가 주기적으로 상태를 직접 확인한다. CPU가 루프를 돌며 GPIO를 계속 읽어야 하고, 짧은 펄스나 빠른 이벤트를 놓칠 수 있다. 확인할 이벤트가 늘어날수록 반응 속도도 느려진다. ...

2026년 5월 28일 · 4 min · 서보민

임베디드 기초 4편 - ARM Cortex-M 부팅 과정: 전원 인가에서 main()까지

들어가며 3편에서 .c 파일이 .elf를 거쳐 플래시에 올라가는 빌드 과정을 정리했다. 이제 반대 방향을 볼 차례다. 플래시에 올라간 펌웨어를 MCU가 어떻게 실행하는가. 전원이 켜지는 순간 CPU는 어디서부터 코드를 시작할까? 내가 작성한 main()이 첫 번째로 실행되는 것일까? 그렇지 않다. main() 이전에 이미 여러 단계가 실행된다. ARM Cortex-M 메모리 맵 Cortex-M은 모든 제조사가 공통으로 따르는 표준 메모리 맵을 갖는다. STM32든 nRF52든 RP2040이든 코어 수준에서는 동일한 주소 배치를 사용한다. ...

2026년 5월 21일 · 4 min · 서보민

Advances in Hyperbaric Oxygen Therapy: Medical Benefits and Technical Perspectives

한 줄 요약: HBOT 챔버 내 유체 거동을 수학적으로 모델링하고, 축소 실험 챔버 + MCU 기반 압력 제어 시스템으로 검증한 연구 논문 정보 항목 내용 제목 Advances in Hyperbaric Oxygen Therapy: Medical Benefits and Technical Perspectives 저자 Antoanela Naaji, Monica Ciobanu, Marius Popescu 저널 / 학회 Annals of Biomedical Engineering 연도 2026 DOI / 링크 https://doi.org/10.1007/s10439-026-04027-7 분야 biomedical 문제 정의 기존 HBOT 시스템은 대부분 empirical calibration에 의존하고 있으며, gas flow 및 pressure dynamics에 대한 predictive model이 부족하다. 또한 압력·산소 제어의 자동화 수준이 낮고, control loop의 feedback delay 문제가 있어 치료 재현성이 떨어진다. 이 논문은 이러한 한계를 수학적·실험적 framework으로 해결하고자 한다. ...

2026년 5월 16일 · 3 min · 서보민

임베디드 기초 3편 - 빌드 과정: 소스 코드가 플래시에 올라가기까지

들어가며 2편에서 .text/.data/.bss 섹션과 링커 스크립트를 다뤘다. .data > RAM AT > FLASH 구문이 LMA와 VMA를 분리한다는 것까지 정리했다. 그런데 이 링커 스크립트는 누가, 언제, 어떻게 처리하는 걸까. main.c 하나를 작성하고 빌드 버튼을 누르면 어떤 일이 일어나는지 정확히 알지 못한 채로 쓰고 있었다. ARM Cortex-M 툴체인 ARM Cortex-M을 타겟으로 빌드할 때 쓰는 컴파일러는 arm-none-eabi-gcc다. 이름을 뜯어보면: arm: 타겟 아키텍처 none: 운영체제 없음 (bare-metal) eabi: Embedded ABI — 함수 호출 규약, 데이터 정렬 방식 표준 gcc: GNU Compiler Collection STM32CubeIDE나 PlatformIO 같은 IDE를 쓰면 이 툴체인이 자동으로 설정된다. 직접 Makefile이나 CMake를 구성할 때는 직접 지정해야 한다. ...

2026년 5월 14일 · 3 min · 서보민

임베디드 기초 2편 - 메모리 구조와 변수 저장 원리

들어가며 1편에서 펌웨어가 플래시에 저장되고, 변수는 RAM에서 동작한다고 정리했다. 그런데 막상 “전역변수는 어디 저장돼요?”, “const는요?” 라는 질문을 받으면 정확하게 대답하기가 쉽지 않다. Flash vs RAM 다시 짚기 플래시(Flash) 비휘발성(non-volatile) — 전원을 꺼도 데이터가 유지된다 읽기는 자유롭지만, 쓰기는 Erase → Write 순서로 페이지/섹터 단위로만 가능하다 속도가 RAM보다 느리다 코드(명령어), 상수, 전역변수 초기값이 저장된다 RAM 휘발성(volatile) — 전원을 끄면 데이터가 사라진다 자유롭게 읽기/쓰기 가능하고 속도가 빠르다 실행 중 변하는 데이터(전역변수, 지역변수, 동적 할당(dynamic allocation))가 올라간다 메모리 섹션: .text / .data / .bss 링커는 빌드 결과물을 목적에 따라 여러 섹션으로 분리해서 관리한다. ...

2026년 5월 10일 · 4 min · 서보민

임베디드 기초 1편 - 임베디드 시스템과 펌웨어란 무엇인가

들어가며 학부 때 ESP32로 재활 자전거 IoT 모니터링 시스템을 만들고, 석사에서는 Tinker Board 2S와 STM32를 써서 HBOT 챔버 제어 시스템을 구축했다. 그 과정에서 꽤 다양한 것들을 다뤘다. 근데 기술 스택을 쌓는 데 집중하다 보면 정작 가장 기본적인 개념들이 흐릿해지기 마련이다. 그래서 지금까지 해온 것들의 기반이 되는 기초 개념들을 처음부터 다시 정리해보기로 했다. 당연하게 써왔던 것들의 의미를 되짚어보는 시리즈다. 임베디드 시스템 임베디드 시스템(Embedded System) 은 특정 목적을 위해 만들어진 컴퓨터 시스템이다. ...

2026년 5월 7일 · 3 min · 서보민

PID Control System Analysis, Design, and Technology

한 줄 요약: 산업 현장에서 90% 이상 사용되는 PID 제어기는 단순한 구조 덕분에 살아남았지만, derivative 항 하나를 잘못 튜닝하면 오히려 시스템을 불안정하게 만들 수 있다. 논문 정보 항목 내용 제목 PID Control System Analysis, Design, and Technology 저자 Kiam Heong Ang, Gregory Chong, Yun Li 저널 / 학회 IEEE Transactions on Control Systems Technology 연도 2005 DOI / 링크 https://doi.org/10.1109/TCST.2005.847331 분야 control embedded 읽게 된 이유 석사 연구 중에 HBOT 챔버 회사에 재직 중인 선배님께 조언을 구할 기회가 있었다. 그때 선배님이 짧게 한마디 하셨다. “미분항은 실제로 잘 안 써요.” ...

2026년 5월 2일 · 6 min · 서보민