모션 소프트웨어로봇 액추에이터 제어 소프트웨어 개발로봇 액추에이터 제어기 펌웨어 설계
출제기준 좌표3·3·4·2
3과목 · 모션 소프트웨어

로봇 액추에이터 펌웨어 구조

로봇 액추에이터 제어 소프트웨어 개발로봇 액추에이터 제어기 펌웨어 설계
# 모션소프트웨어
01

📌 개요

  • 펌웨어(Firmware) = 하드웨어에 밀착되어 비휘발성 메모리(플래시)에 상주하는 소프트웨어
  • 액추에이터 제어기 펌웨어의 존재 이유 = 캐스케이드 제어 루프MCU의 제약 안에서 정확한 주기로 실행하는 것
  • 출제 포인트: 계층 구조(HAL의 목적), 실행 구조 3유형(슈퍼루프·인터럽트 기반·RTOS), 제어 주기별 태스크와 인터럽트 우선순위, 부트로더의 역할
02

📖 핵심 개념

펌웨어의 계층 구조 — 레이어로 나누는 이유

잘 만든 펌웨어는 하드웨어 의존 부분과 논리 부분을 계층(Layer)으로 분리한다.

  • ① 하드웨어 추상화 계층(HAL, Hardware Abstraction Layer) / 디바이스 드라이버: 레지스터 조작을 함수로 감싼 최하층. pwm_set_duty(0.5)처럼 하드웨어 세부를 감춘 인터페이스를 위층에 제공한다

  • ② 미들웨어 계층: 통신 프로토콜 스택(CAN 등), 필터·수학 라이브러리, (사용 시) RTOS

  • ③ 응용 계층(Application): 제어 알고리즘(PID·프로파일 처리), 상태 머신, 보호 로직 — 이 제품을 "액추에이터 제어기"로 만드는 본질적 로직

  • 계층화의 최대 이점 = 이식성(Portability)·유지보수성

    • MCU를 다른 칩으로 바꿔도 HAL만 다시 작성하면 응용 계층은 그대로 재사용
    • 각 층을 독립적으로 시험 가능 (모듈화 일반론은 모듈화 프로그래밍)

실행 구조의 3가지 유형

펌웨어 전체가 어떤 뼈대 위에서 돌아가는가에 따라 세 유형으로 나뉜다.

① 슈퍼루프(Super Loop, 베어메탈)

int main(void) {
    init_hw();            // 초기화
    while (1) {           // 무한 루프
        read_inputs();
        process();
        write_outputs();
    }
}
  • 초기화 후 무한 루프에서 일을 순차 반복하는 가장 단순한 구조
  • 이해·예측이 쉽고 오버헤드가 없음
  • 단, 한 작업이 길어지면 전체가 밀리고, 작업이 늘수록 타이밍 관리가 어려워짐
  • 소규모 장치에 적합

② 전경/배경 시스템(Foreground/Background) — 인터럽트 기반

  • 시간이 중요한 일(제어 루프)은 타이머 인터럽트의 ISR(전경) 에서 처리
  • 급하지 않은 일(통신 파싱, 모니터링)은 메인 루프(배경) 에서 처리
  • 슈퍼루프의 단순함을 유지하면서 실시간성 확보 → 단축 액추에이터 제어기의 가장 일반적인 구조

③ RTOS 기반(Real-Time Operating System)

  • 일을 태스크(Task) 로 나누고 스케줄러우선순위 기반 선점형(Preemptive) 으로 CPU를 배분
  • 높은 우선순위 태스크가 준비되면 낮은 태스크를 즉시 중단(선점)·실행 → 급한 일의 데드라인 보장
  • 태스크 간 통신(큐·세마포어) 등 관리 도구를 제공, 단 오버헤드·복잡도(우선순위 역전 등) 수반
  • 통신·다축 협조 등 일이 많고 복잡한 제어기에 적합 (상세: 로봇 소프트웨어 운영체제)

제어 주기의 구현 — 시간 축으로 본 구조

캐스케이드 루프의 주기 차이는 펌웨어에서 주기가 다른 태스크(또는 ISR)의 계층으로 나타난다. 전형적인 구성:

주기 (예) 담당 하는 일
10~20 kHz 고속 ISR (PWM/ADC 동기) 전류 샘플링, 전류 루프, PWM 갱신, 과전류 감시
1~5 kHz 중속 ISR/태스크 속도 계산, 속도 루프
0.1~1 kHz 태스크 위치 루프, 프로파일 보간
10~100 Hz 배경 태스크 통신 응답, 상태 보고, 온도 감시
전류 루프가 PWM·ADC와 동기인 이유

전류는 PWM 스위칭에 맞춰 출렁이므로, PWM 주기의 정해진 시점에 ADC를 트리거해 읽어야 깨끗한 평균 전류를 얻는다. 그래서 전류 제어 ISR은 PWM 하드웨어 이벤트에 묶는다 — 하드웨어와 소프트웨어가 맞물린 대표적 지점이다.

  • 인터럽트 우선순위 = 주기가 짧고 급한 것부터: 전류(+보호) > 속도 > 위치 > 통신 > 배경
  • 우선순위가 높은 ISR은 낮은 ISR을 중단시키고 실행 (중첩 인터럽트)

메모리 구조와 부트로더

플래시 메모리는 보통 두 영역으로 나눈다.

  • 부트로더(Bootloader) 영역: 전원 인가 시 가장 먼저 실행되는 작은 프로그램. 애플리케이션의 유효성을 확인한 후 실행을 넘기며, 통신(CAN·UART)으로 새 펌웨어를 받아 애플리케이션 영역을 다시 쓰는 펌웨어 업데이트 기능을 담당한다 — 로봇을 분해해 디버거를 꽂지 않고도 현장에서 업데이트할 수 있게 하는 장치
  • 애플리케이션 영역: 실제 제어 펌웨어
  • 파라미터 영역(EEPROM/플래시 일부): 제어 게인, 리미트, 엔코더 오프셋 등 전원이 꺼져도 유지되어야 하는 설정값을 저장 (손상 감지용 체크섬과 함께)

상태 머신 — 펌웨어의 동작 골격

  • 제어기는 항상 "지금 어떤 상태인가"를 명확히 하고, 상태에 따라 허용되는 동작만 수행
  • 전형적 상태: 초기화 → 대기(서보 OFF) → 운전(서보 ON) → 오류(Fault)
  • 상태 머신(State Machine)으로 설계하면 "오류 상태에서는 토크 지령을 받지 않는다" 같은 규칙이 구조적으로 보장
  • 설계 방법은 로봇 액추에이터 펌웨어 설계에서 다룸
03

📊 다이어그램 · 수식

펌웨어 계층 구조

DIAGRAM
flowchart TD
    subgraph APP["응용 계층"]
        SM["상태 머신·보호 로직"]
        CTRL["제어 알고리즘
(캐스케이드 PID·프로파일)"] end subgraph MID["미들웨어 계층"] COM["통신 스택 (CAN 등)"] LIB["필터·수학 라이브러리 / RTOS"] end subgraph HAL["하드웨어 추상화 계층 (HAL·드라이버)"] D1["PWM"] D2["ADC"] D3["엔코더"] D4["통신 컨트롤러"] end HW["MCU 하드웨어 (레지스터)"] APP --> MID --> HAL --> HW

주기 태스크와 인터럽트 우선순위

DIAGRAM
flowchart LR
    subgraph FG["전경 (ISR, 우선순위 높음 → 낮음)"]
        T1["전류 루프 ISR
10~20 kHz (PWM 동기)"] T2["속도 루프
1~5 kHz"] T3["위치 루프
0.1~1 kHz"] end subgraph BG["배경 (메인 루프)"] T4["통신 처리·상태 보고
온도 감시·로깅"] end T1 --> T2 --> T3 -.-> T4
04

🎯 핵심 요약 · 암기 포인트

익힘 0 / 12카드를 눌러 뒤집고, 앞면에서 아는지 표시하세요.
Q · 1
펌웨어란?
A
하드웨어에 밀착되어 비휘발성 메모리(플래시)에 상주하며 장치를 직접 제어하는 소프트웨어
Q · 2
펌웨어의 3계층 구조는?
A
응용 계층(제어 알고리즘·상태 머신) / 미들웨어(통신 스택·라이브러리) / HAL·드라이버(레지스터 추상화)
Q · 3
HAL(하드웨어 추상화 계층)의 목적은?
A
레지스터 조작을 함수 인터페이스로 감춰 상위 코드의 이식성·유지보수성을 확보 — MCU 교체 시 HAL만 재작성
Q · 4
슈퍼루프 구조의 장점과 한계는?
A
단순하고 예측 쉬움 / 한 작업이 길어지면 전체가 밀리고 작업이 늘면 타이밍 관리가 어려움
Q · 5
전경/배경(foreground/background) 구조란?
A
급한 일은 타이머 인터럽트 ISR(전경), 급하지 않은 일은 메인 루프(배경)에서 처리하는 인터럽트 기반 구조
Q · 6
RTOS 선점형 스케줄링이란?
A
높은 우선순위 태스크가 준비되면 실행 중인 낮은 태스크를 즉시 중단하고 CPU를 넘겨받는 방식
Q · 7
액추에이터 펌웨어에서 가장 빠른 주기로 도는 루틴은?
A
전류 루프 ISR (10~20 kHz급, PWM·ADC와 동기)
Q · 8
전류 제어 ISR을 PWM 주기와 동기시키는 이유는?
A
전류가 스위칭에 맞춰 맥동하므로 PWM 주기의 정해진 시점에 ADC를 트리거해야 정확한 전류를 읽을 수 있어서
Q · 9
액추에이터 펌웨어의 인터럽트 우선순위 순서는?
A
전류(+보호) > 속도 > 위치 > 통신 > 배경 작업
Q · 10
부트로더의 두 가지 역할은?
A
기동 시 애플리케이션 검증·실행 이관 + 통신을 통한 펌웨어 업데이트(재플래싱)
Q · 11
제어 게인·엔코더 오프셋 같은 설정값은 어디에 저장하나?
A
EEPROM 또는 플래시의 파라미터 영역 (비휘발성, 체크섬으로 손상 감지)
Q · 12
액추에이터 제어기의 전형적 상태 머신 4상태는?
A
초기화 → 대기(서보 OFF) → 운전(서보 ON) → 오류(Fault)
05

✏️ 예상문제

1. 펌웨어에서 하드웨어 추상화 계층(HAL)을 두는 주된 목적은?

① 실행 속도를 높이기 위해 ② 하드웨어 세부를 감춰 상위 계층의 이식성과 유지보수성을 높이기 위해 ③ 메모리 사용량을 줄이기 위해 ④ 인터럽트 응답 시간을 줄이기 위해

정답 및 해설

정답: ② HAL은 레지스터 수준의 조작을 함수 인터페이스로 감싼다. 하드웨어가 바뀌어도 HAL만 다시 쓰면 제어 알고리즘 등 상위 계층을 그대로 재사용할 수 있다. 추상화는 오히려 약간의 오버헤드를 수반하므로 ①④는 목적이 아니다.

2. 슈퍼루프(super loop) 구조의 설명으로 옳지 않은 것은?

① 초기화 후 무한 루프에서 작업을 순차적으로 반복한다 ② 구조가 단순해 동작 예측이 쉽다 ③ 우선순위 기반 선점형 스케줄러가 태스크를 관리한다 ④ 한 작업의 처리가 길어지면 다른 작업이 지연된다

정답 및 해설

정답: ③ 선점형 스케줄러와 태스크는 RTOS 기반 구조의 특징이다. 슈퍼루프는 스케줄러 없이 루프가 도는 순서대로 처리하므로, 긴 작업 하나가 전체 타이밍을 무너뜨릴 수 있다.

3. 액추에이터 제어 펌웨어에서 인터럽트 우선순위를 가장 높게 부여해야 하는 것은?

① 통신 명령 수신 처리 ② 상태 모니터링 전송 ③ 전류 제어 및 과전류 보호 루틴 ④ 위치 프로파일 보간

정답 및 해설

정답: ③ 전류 루프는 주기가 가장 짧고(수십 µs~), 과전류 보호는 소자 파손·안전과 직결되는 하드 실시간 작업이다. 주기가 짧고 치명도가 높을수록 우선순위를 높게 둔다.

4. 부트로더(bootloader)의 역할로 가장 적절한 것은?

① 제어 루프의 주기를 생성한다 ② 전원 인가 시 애플리케이션을 검증·실행하고, 통신을 통한 펌웨어 업데이트를 수행한다 ③ 모터의 초기 위치를 탐색한다 ④ 제어 게인을 자동으로 튜닝한다

정답 및 해설

정답: ② 부트로더는 플래시의 독립 영역에 상주하는 작은 프로그램으로, 리셋 직후 가장 먼저 실행된다. 애플리케이션이 유효하면 실행을 넘기고, 업데이트 요청이 있으면 통신으로 새 펌웨어를 받아 애플리케이션 영역을 다시 쓴다. 덕분에 장비를 분해하지 않고 현장 업데이트가 가능하다.

5. 전류 제어 루틴을 PWM 캐리어 주기에 동기된 ADC 트리거로 실행하는 이유는?

① 통신 프로토콜과 시각을 맞추기 위해 ② 스위칭에 따라 맥동하는 전류를 정해진 시점에 샘플링해 정확한 값을 얻기 위해 ③ 플래시 메모리 수명을 늘리기 위해 ④ 부트로더와의 충돌을 피하기 위해

정답 및 해설

정답: ② 모터 전류는 PWM ON/OFF에 맞춰 리플이 생긴다. 아무 때나 읽으면 리플의 꼭대기·바닥이 섞여 값이 튀므로, PWM 주기 중 일정한 시점(예: 캐리어 중앙)에 ADC를 하드웨어 트리거해 평균에 해당하는 전류를 얻는다.

06

🔗 관련 노트

로봇소프트웨어개발기사 필기 · 학습 교재출제기준 2025.1.1 – 2027.12.31