임베디드 설계 노트 (1/6) — 범용 IO 모듈 펌웨어 설계: DI·DO·AO·UI 전체 아키텍처

범용 IO 모듈 펌웨어 설계 노트 — DI, DO, AO, UI 전체 아키텍처 정리

노이즈, 전원 변동, 하드웨어 오차, 안전 설계를 모두 고려한 IO 제어 설계 경험


핵심 요약

  • IO 모듈의 네 가지 채널(UI, AO, DI, DO) 각각에 대해 현장 환경을 고려한 설계 판단을 정리했다
  • AVCC 전원 변동이 ADC 입력과 DAC 출력 모두에 영향을 미치며, 소프트웨어 보정이 핵심이다
  • 물리 포트와 논리 기능을 테이블 기반으로 분리하면 펌웨어 수정 없이 설정만으로 기능 변경이 가능하다

배경

회사에서 진행한 IO 모듈 펌웨어 개발 경험을 정리한 글이다. 제품 기능보다는 임베디드 소프트웨어 관점에서의 설계 판단과 제어 로직에 초점을 맞췄다. 현장에서는 노이즈, 전원 변동, 하드웨어 오차, 안전 설계를 모두 동시에 고려해야 한다.

UI (Universal Input) — 2포트

본문

AO (Analog Output) — 2포트, 0~10V

UI (Universal Input) — 2포트

지원 모드: 0~10V 전압, 무전압 접점, 저항(NTC/PTC)

  • ADC 샘플링 주기 1ms (Timer Interrupt), Sliding Window Average 필터 적용
  • 기본 평균 구간 200ms (설정 범위 50~500ms)
  • 주의: 부팅 직후 윈도우가 채워지지 않는 초기 200ms 동안 값이 유효하지 않다. 이 구간을 명시적으로 Invalid 처리하지 않으면 오동작 원인이 된다
  • 전압 모드는 12-bit ADC Raw → 스케일링 테이블로 물리량 변환
  • 접점 모드는 Open 시 약 3.24V, 1V 기준으로 Open/Short 판정 (히스테리시스 적용)

AO (Analog Output) — 2포트, 0~10V

하드웨어 경로: MCU DAC (12-bit) → OP-AMP (2.2배 증폭) → Output

Fail-Safe: 부팅 중, 시스템 에러, 통신 Timeout 시 출력을 강제로 안전 상태(0V)로 전환. 설정에 따라 Hold(현상 유지)도 가능.

정확도 이슈: 목표 오차 ±300mV이나, 기준 전압(AVCC 5V) 변동과 OP-AMP 증폭 과정에서 오차가 확대된다. 10V 근처에서는 OP-AMP Headroom 부족, 12V 구동 전원 변동 시 출력 포화 가능성이 있다. 초기에 PWM DAC도 검토했으나, 정밀도 요구로 12-bit DAC 구조로 확정.

DI (Digital Input) — 4포트, 무전압 접점

스캔 주기 1ms. 단순 Delay 대신 카운터 누적 방식 적용: - 매 스캔마다 High/Low 카운트 누적, 임계값(기본 250회) 도달 시 상태 확정 - 장점: 노이즈 환경 오판정 확률 극히 낮음 - 단점: 응답 속도 약 250~500ms

DO (Digital Output) — 2포트, Relay Open/Short

부팅 중, 시스템 에러, 비상 정지 시 무조건 OFF(Open). 릴레이의 물리적 동작 시간(약 20ms)을 고려한 상태 전이 설계 필요.

IO 매핑과 전원 보정

물리 포트와 논리 기능을 테이블 기반으로 분리해, 펌웨어 수정 없이 설정만으로 기능 변경이 가능하다. 부팅 시 매핑 무결성 검사, 중복/범위 초과 시 에러 처리.

가장 까다로웠던 부분은 AVCC(5V) 변동이다. ±5% 변동 시 ADC 입력(UI)과 DAC 출력(AO) 모두 동일 비율로 오차가 발생한다.

float k_ref = 5.000f / AVCC_Measured;
UI_Value = (ADC_Raw * AVCC_Measured / 4096.0f) * k_ref;

이상적으로는 AVCC Loopback 보정이나 전압 안정 회로 추가가 좋지만, 비용과 회로 제약으로 허용 오차 내 정리.

시행착오 / 주의사항

  • UI의 부팅 초기 Invalid 구간 처리를 빠뜨리면 시스템 시작 시 오동작이 발생한다
  • AO의 Fail-Safe 미구현 시 통신 끊김이 곧 위험 상황으로 이어진다
  • AVCC 변동은 입출력 양쪽 모두에 영향을 미치므로, 보정 로직은 시스템 레벨에서 통합 관리해야 한다

마무리

IO 제어는 단순하지 않다. 노이즈, 전원, 오차, 안전 설계를 무시하면 반드시 현장에서 문제가 된다. 각 채널의 특성을 이해하고, 하드웨어 한계를 소프트웨어로 보완하는 설계 판단이 핵심이다.

댓글