이 글은 진입과 퇴출 동작, 3kW 서버 전원 상태 머신 구현과 중복 방지 시리즈의 2편입니다. 앞 편에 이어 중앙 집중식 디스패치 구조와 상태 머신 구현, 자기 전이 처리 방식과 타이밍 지연 계산, 맺음말을 설명합니다.
중앙 집중식 디스패치 구조와 상태 머신 구현
진입 동작과 퇴출 동작을 실제 제어 펌웨어에 적용하기 위해서는 상태 전이를 총괄하는 중앙 집중식 디스패치(Centralized Dispatcher) 함수를 구성해야 합니다. 일반적인 임베디드 제어 루프에서는 상태 머신을 주기적으로 호출하여 현재 상태의 주 동작(Do Action)을 수행합니다. 상태 전이 조건이 만족되었을 때에는 전역 변수를 임의로 변경하지 않고 반드시 상태 전이 전담 디스패치 함수를 호출하도록 구현합니다.
중앙 집중식 디스패치 함수는 엄격한 3단계 순서에 따라 실행됩니다. 첫 번째 단계에서는 현재 상태의 퇴출 동작 함수(Exit Action)를 호출하여 이전 상태에서 사용하던 임시 자원이나 플래그를 안전하게 해제합니다. 두 번째 단계에서는 상태 변수를 새로운 목표 상태로 갱신합니다. 세 번째 단계에서는 갱신된 신규 상태의 진입 동작 함수(Entry Action)를 호출하여 하드웨어를 초기화하고 필요한 제어기를 가동합니다.
3kW 서버 전원 장치에 적용되는 4가지 상태별 구체적인 진입 및 퇴출 동작은 다음과 같이 구현됩니다. 대기 상태에서 퇴출될 때는 보조 전원 전압의 정상 여부를 확정하는 플래그를 정리합니다. 소프트 스타트 상태로 진입할 때는 주 변환부의 PWM 신호를 활성화하고, 전압 지령 램프 카운터와 PI 제어기 적분기 변수를 0으로 리셋합니다. 정상 운전 상태로 진입할 때는 출력 전압의 정밀 제어를 위한 동적 이득 테이블을 적용하고 고속 과전류 및 과전압 감지 하드웨어 인터럽트를 활성화합니다. 마지막으로 결함 차단 상태로 진입할 때는 어떠한 지연도 없이 모든 스위칭 소자의 PWM 출력을 하드웨어 수준에서 즉시 차단하고 결함 래치 플래그를 설정합니다. 이러한 중앙 집중식 실행 흐름을 통해 모든 상태 전이에서 하드웨어 제어 누락이나 중복 호출이 완벽히 방지됩니다.
자기 전이 처리 방식과 타이밍 지연 계산
상태 머신을 운용할 때 흔히 발생하는 설계적 난점 중 하나는 현재 상태와 목표 상태가 동일한 자기 전이(Self-transition) 상황입니다. 자기 전이는 크게 내부 자기 전이(Internal Transition)와 외부 자기 전이(External Transition)로 구분됩니다. 내부 자기 전이는 동일한 상태를 유지하면서 주기적인 제어 연산만 반복하는 경우이며, 이때는 진입 동작과 퇴출 동작을 다시 실행하지 않아야 불필요한 하드웨어 리셋이나 제어기 출력의 불연속성이 발생하지 않습니다. 반면 외부 자기 전이는 동일한 상태로의 재진입 명령이 명시적으로 주어졌을 때 진입 동작을 다시 실행하여 초기화를 수행하는 경우입니다.
서버 전원 장치에서는 스위칭 노이즈로 인한 센서 값의 일시적 변동 때문에 상태 전이 조건이 순간적으로 만족되는 채터링 현상이 발생할 수 있습니다. 이를 방지하기 위해 상태 전이 판정 시 디지털 지연 카운터를 적용하여 일정 시간 동안 조건이 유지될 때만 실제 전이를 수행합니다. 디지털 제어 루프의 샘플링 주기를 T_loop, 샘플링 주파수를 f_loop, 그리고 상태 전이를 확정하기 위해 요구되는 안정화 지연 시간을 t_delay라고 할 때, 지연 카운터의 임계값 N_delay는 식 (3)으로 계산됩니다.
실제 3kW 서버 전원 장치의 고속 전압 제어 루프 주기가 T_loop = 100 μs (f_loop = 10 kHz)로 동작하고, 소프트 스타트에서 정상 운전으로 넘어가기 위한 출력 전압 안정화 대기 시간을 t_delay = 5 ms (0.005 s)로 설정한 경우를 계산합니다. 식 (3)에 해당 수치를 대입하면 식 (4)와 같이 50 카운트가 도출됩니다.
즉, 출력 전압이 정상 범위에 도달한 후 100 μs 주기 루프가 50회 연속으로 조건을 만족해야만 비로소 중앙 디스패처를 통해 정상 운전 상태의 진입 동작을 호출합니다. 이를 통해 노이즈에 의한 오작동을 차단하고 매끄러운 전이 동작을 보장합니다.
맺음말
3kW 서버 전원 장치의 제어 소프트웨어에서 상태 머신의 진입과 퇴출 동작을 분리하고 중앙 집중식 디스패치 구조를 적용하는 것은 시스템의 신뢰성을 결정짓는 필수적인 설계 기법입니다. 본문에서 살펴본 바와 같이 상태별 진입 및 퇴출 동작을 단일 진실 공급원(SSOT)으로 분리함으로써 전이 경로 증가에 따른 코드 중복과 하드웨어 제어 누락 결함을 효과적으로 방지할 수 있습니다. 또한 4개의 핵심 상태를 기준으로 8개의 전담 함수 체계를 구축하고, 100 μs 제어 루프에서 5 ms 지연 시간(50 루프 카운트)을 적용하여 안정적인 전이 시퀀스를 확보할 수 있음을 확인할 수 있습니다.
실무에서 고신뢰성 제어 소프트웨어를 구현할 때는 다음의 설계 기준을 주의해야 합니다. 진입 동작과 퇴출 동작 함수 내부에는 루프 지연(Blocking Delay) 코드를 절대 포함해서는 안 되며, 모든 처리는 비차단(Non-blocking) 방식으로 즉시 완료되어야 합니다. 또한 인터럽트 서비스 루틴(ISR)과 백그라운드 태스크 간에 상태 변수를 공유할 때는 변수 접근의 원자성(Atomicity)을 보장하여 상태 불일치 현상을 방지해야 합니다. 아울러 결함 차단 상태의 진입 동작은 최우선 순위로 실행되어 주 스위칭 소자의 파손을 방지해야 합니다. 이러한 설계 기준을 철저히 적용함으로써 가혹한 환경에서도 중단 없이 안정적으로 동작하는 서버 전원 제어 시스템을 구축할 수 있습니다.
이 글은 앞선 내용을 몰라도 읽을 수 있게 썼습니다. 배경이 궁금하다면 무충격 절환, 150kW 전기차 구동 수동 자동 전환과 적분기 초기값 정합을 함께 보면 도움이 됩니다: https://www.infoshirimp.co.kr/?p=245
이것으로 시리즈를 마칩니다. 앞선 편들과 함께 읽으면 전체 흐름을 파악할 수 있습니다.