STM32F103C8T6 보드를 기반으로 제작한 고추 건조기 제어 및 임베디드 아키텍처 개선 프로젝트
이 저장소는 단순한 기능 구현을 넘어, 임베디드 시스템에서 흔히 발생하는 자원 제약 및 타이밍 충돌 문제를 해결하기 위해 시스템 아키텍처를 동기식(Sync) 구조에서 비동기식(Async) 구조로 고도화한 트러블슈팅 과정을 담고 있음
설계 패러다임의 변화에 따라 두 개의 독립된 프로젝트로 분리되어 관리 상세 코드와 트러블슈팅 과정은 각 폴더의 README에 정리
| 디렉터리 (Path) | 설명 (Description) |
|---|---|
| 📁 legacy_blocking_fnd | [Version 1] 메인 루프 기반 동기식 제어 버전. DS18B20 온도 측정과 FND 표시가 메인 루프에서 혼재되어 디스플레이 깜빡임(Flickering) 문제가 존재하는 초기 릴레이 제어 모델. |
| 📁 cooperative_multitasking | [Version 2] 하드웨어 타이머(TIM3) 인터럽트를 도입하여 DS18B20 통신 태스크와 FND 스캔 태스크를 분리한 최적화 버전. 플리커링 문제를 해결한 논블로킹(Non-blocking) 아키텍처의 핵심 상세 내용이 포함되어 있습니다. |
시스템 성능과 디스플레이 안정성을 확보하기 위해 다음과 같이 구조를 개선했습니다. 상세 원인 분석 및 해결 코드는 cooperative_multitasking 디렉터리에서 확인하실 수 있습니다.
| 항목 (Metrics) | Version 1: Legacy Blocking | Version 2: Cooperative Multitasking |
|---|---|---|
| 제어 아키텍처 | 동기식 포그라운드 폴링 (Sync Polling) | 비동기식 백그라운드 인터럽트 구동 (Async) |
| FND 다중화 방식 | 메인 루프 소모형 블로킹 지연 (Blocking) | 정적 상태 머신 기반 논블로킹 (Non-blocking) |
| 디스플레이 안정성 | 통신 지연 시 주기적 Flickering 발생 | main loop blocking에 의존하지 않도록 분리, 데모 영상 기준 visible flickering 개선 |
목표 온도(50.0°C)를 기준으로 릴레이가 스위칭되며 히터(드라이기) 전원을 제어하는 동작을 소리로 확인 가능
IMG_3801-1.mov
메인 루프 블로킹 현상으로 인해 디스플레이가 불안정하던 V1과 달리, 인터럽트 기반 비동기 처리(V2)를 통해 센서 통신 중에도 화면 흔들림 없이 실시간 온도를 안정적으로 디스플레이 또한 50.0°C 초과 시 OFF, 45.0°C 미만일 시 ON 으로 히터 Overshoot 완화
cooperative_multitasking_fnd_demo-1.mov
- MCU: STM32F103C8T6 (ARM Cortex-M3)
- Temperature Sensor: DS18B20 (OneWire Interface)
- Display: 4-Digit Multiplexed 7-Segment FND (다이나믹 구동 방식)
- Shift Register: 74HC595D
- Actuator: 1 Channel Relay Module (히터 전원 제어용)
- FND flickering 해결 완료: 다이나믹 구동 한계 극복 및 TIM3 인터럽트 기반 비동기 스캔 적용
- 히터 Overshoot 완화:
- Hysteresis 제어 적용
- 목표 온도 근처에서 선제적 Heater OFF 로직 구현