본문 바로가기
MCU/C2000

TI C2000 계열 내 RTOS 미사용의 공학적 배경 및 제어 아키텍처

by linuxgo 2026. 3. 2.

1. 개요 (Introduction)

TI C2000 시리즈는 일반적인 임베디드 제어가 아닌 실시간 디지털 전력 제어(Digital Power Control)모터 제어(Motor Control)에 최적화된 하이엔드 DSP(Digital Signal Processor)이다. 본 보고서에서는 왜 C2000 환경에서 RTOS 도입이 지연되거나 기피되는지, 그리고 이를 대체하는 아키텍처는 무엇인지 상세히 분석한다.

2. 하드웨어 가속기 및 인터럽트 중심 설계 (ISR-Centric Design)

2.1 제어 루틴의 극단적 실시간성 요구

C2000이 주로 사용되는 인버터나 컨버터 제어는 일반적으로 10kHz ~ 1MHz 사이의 스위칭 주파수를 가진다.

  • Control Loop 주기: 10$\mu s$ ~ 100$\mu s$ 이내에 ADC 읽기, PID 연산, PWM 업데이트가 완료되어야 한다.
  • RTOS의 한계: RTOS의 틱(Tick) 주기는 보통 1ms 단위이며, 컨텍스트 스위칭 오버헤드($T_{cs}$)가 수 $\mu s$ 단위로 발생한다. 수십 $\mu s$ 주기의 제어 루프 내에서 RTOS 스케줄러가 개입하는 것은 심각한 지연(Jitter)을 초래한다.

2.2 하드웨어 가속기 (CLA: Control Law Accelerator)

TI C2000에는 메인 CPU와 별개로 동작하는 CLA라는 독립적인 32비트 부동소수점 프로세서가 탑재되어 있다.

  • 병렬 처리: 메인 CPU가 통신이나 시스템 상태를 관리하는 동안, CLA가 하드웨어적으로 인터럽트를 받아 초고속 제어 연산을 수행한다.
  • 결과: CLA 자체가 하드웨어 기반의 실시간 처리를 보장하므로, 소프트웨어적인 RTOS 스케줄러의 필요성이 상쇄된다.

3. 인터럽트 우선순위 및 제어 수식 모델

3.1 하드웨어 인터럽트 우선순위 (HWI)

C2000은 PIE(Peripheral Interrupt Expansion) 블록을 통해 하드웨어 레벨에서 매우 세분화된 우선순위를 지원한다.

  • 수식 모델: 제어 작업의 지연 시간 $L$은 다음과 같이 표현된다.RTOS를 사용할 경우 여기에 스케줄링 오버헤드 $T_{sched}$가 추가되어 $L_{rtos} = T_{int_lat} + T_{algo} + T_{sched}$가 되며, 이는 제어 루프의 안정성 마진(Phase Margin)을 감소시킨다.$$L = T_{int\_lat} + T_{algo}$$

3.2 제어 안정성과 지터(Jitter)

디지털 제어 시스템에서 샘플링 지터 $\Delta t$는 위상 지연을 유발하며, 이는 시스템의 전달 함수 $G(z)$의 변동으로 이어진다. RTOS의 비결정론적 스케줄링은 $\Delta t$를 증가시켜 제어기 설계를 불안정하게 만든다.

4. 실무적 대안: FSM (Finite State Machine) 기반 아키텍처

많은 C2000 실무 프로젝트는 RTOS 대신 Interrupt-driven FSM 구조를 채택한다.

4.1 프로젝트 계층 구조

  1. Level 1 (Highest): PWM/ADC 하드웨어 인터럽트 (Critical Control Loop)
  2. Level 2 (Medium): 타이머 인터럽트 (Protection, State Monitoring)
  3. Level 3 (Lowest): Main Loop (Background Task, Communication, GUI)

4.2 C-Code 구현 사례 

/*
 * File: c2000_main.c
 * Description: High-speed Control Architecture without RTOS
 * Target: TI TMS320F2837xD
 */

#include "F28x_Project.h"

// 시스템 상태 정의 (System State Definitions)
typedef enum {
    STATE_IDLE,
    STATE_STARTUP,
    STATE_RUNNING,
    STATE_FAULT
} SystemState_t;

volatile SystemState_t g_systemState = STATE_IDLE;

// 1. 고속 제어 인터럽트 (High-speed Control ISR - 50kHz)
// 이 루틴은 RTOS 스케줄러의 간섭 없이 HW 하이브리드로 동작함
interrupt void adcA1ISR(void) {
    // 1. ADC 데이터 취득 (Read ADC Result)
    float32 v_out = AdcaResultRegs.ADCRESULT0;

    // 2. PID 제어 연산 (Execute PID Control)
    // Run_PID_Calculation();

    // 3. PWM 듀티 업데이트 (Update PWM Duty)
    EPwm1Regs.CMPA.bit.CMPA = Calculate_Duty();

    // 인터럽트 플래그 클리어 (Acknowledge PIE group)
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}

// 2. 백그라운드 태스크 (Background Task - Super Loop)
void main(void) {
    InitSysCtrl(); // 시스템 클럭 초기화
    InitPieCtrl(); // PIE 초기화
    
    // 인터럽트 벡터 등록 (Register ISR)
    EALLOW;
    PieVectTable.ADCA1_INT = &adcA1ISR;
    EDIS;

    while(1) {
        // 우선순위가 낮은 작업 수행 (Low-priority tasks)
        switch(g_systemState) {
            case STATE_IDLE:
                Check_Start_Condition();
                break;
            case STATE_RUNNING:
                Monitor_Temperature(); // 상대적으로 느린 센싱 (Slow sensing)
                Update_CAN_Communication(); // 통신 처리 (Comm handling)
                break;
            case STATE_FAULT:
                Handle_Fault_Recovery();
                break;
        }
        
        // Watchdog 서비스 (Service Watchdog)
        ServiceDog();
    }
}

5. 결론 및 향후 전망

5.1 C2000에서 RTOS를 쓰지 않는 이유 요약

  1. 오버헤드 방지:$\mu s$ 단위의 제어 주기에서 RTOS 오버헤드는 치명적임.
  2. 하드웨어 강점: CLA 및 PIE가 RTOS의 멀티태스킹 역할을 하드웨어적으로 대체함.
  3. 검증된 레거시: TI에서 제공하는 C2000Ware 및 ControlSUITE 예제들이 대부분 ISR 기반으로 최적화되어 있음.

5.2 변화의 흐름

최근 EtherCAT이나 고성능 TCP/IP 스택을 C2000에서 구동해야 하는 요구가 늘어나면서, TI-RTOS(SYS/BIOS)를 Application 레이어에만 한정적으로 적용하는 사례가 늘고 있다. 하지만 이 경우에도 핵심 제어 루프는 인터럽트가 RTOS를 선점(Bypass)하는 구조를 유지한다.