TMS320F28X 개발보드 V2 예제

[F28P55x] 칩 하나가 소리를 듣고 판단한다! 마이크 소리(부저·박수·조용함)를 NPU로 분류하는 Edge AI 예제 (데이터 수집 → 학습 → 보드 추론, DriverLib

인터럽트 2026.10.23 15:03:52 조회수 24
3줄 요약
① 개발보드의 마이크로 소리를 모아 부저 · 박수 · 조용함 3가지로 분류하는 Edge AI 예제입니다. 서버나 인터넷 없이 칩 안에서 돌아갑니다.
② 소리 수집 → TI Edge AI Studio 학습 → 결과 파일 적용 → 보드 추론의 전 과정을 화면 캡처와 함께 따라 할 수 있고, 학습 데이터 58개도 함께 제공합니다.
③ 같은 모델을 F28P55x의 NPU(신경망 가속기)와 CPU로 각각 돌려 비교할 수 있습니다. 보드 측정에서 추론 완료까지 NPU 695.73 µs, CPU 9,884.95 µs(약 14.2배 차이)였습니다.

 

1. 실습 안내

본 예제는 TMS320F28P55x(F28P559SJ9-Q1) 제어 모듈이 탑재된 TMS320F28X 개발보드(EVM) V2를 대상으로 합니다.

Edge AI는 AI 계산을 서버가 아니라 센서 바로 옆의 칩이 하는 방식입니다. 인터넷이 끊겨도 동작하고, 결과가 빠르고, 데이터가 밖으로 나가지 않습니다. 모터·전원 제어에 쓰던 C2000 칩 중 F28P55x에는 AI 계산 전용 회로인 NPU가 들어 있어서, 제어하던 칩이 그 자리에서 판단까지 할 수 있습니다.

개발보드의 '(4) VREF & MIC & BUZZER' 회로에는 마이크와 부저가 있습니다. 이 예제는 이 마이크로 아래 3가지 소리를 구분합니다.
- buzzer : 보드 부저가 울리는 소리 (4kHz)   /   clap : 박수 소리   /   silence : 조용한 상태

전체 과정은 아래 5단계이며, 예제는 두 개의 프로젝트로 나뉩니다.

단계할 일사용하는 것
① 수집보드 마이크를 20kHz로 녹음해 PC에 CSV 파일로 저장 (클래스별 폴더)4_EdgeAI_MicLogger_Driverlib + PC 프로그램 MicCollector.exe
② 학습수집한 데이터를 TI Edge AI Studio에 올려 작은 신경망(CNN)을 학습·컴파일PC의 Edge AI Studio (보드 필요 없음)
③ 적용Studio가 만든 결과 파일 4개를 프로젝트에 덮어쓰기4_EdgeAI_MicSound_Driverlib
④ 추론25.6 ms마다 마이크 소리를 분류해 결과를 갱신 (NPU / CPU 두 가지 빌드 구성)4_EdgeAI_MicSound_Driverlib
⑤ 확인CCS Watch 창의 변수로 분류 결과와 시간을 확인CCS Expressions

이미 학습한 모델과 학습 데이터(58개)가 저장소에 들어 있어서, ①~③을 건너뛰고 ④부터 바로 실행해 보실 수도 있습니다.

 

2. 실습 준비

본 예제는 아래의 개발환경에서 컴파일/링크를 확인했습니다.

1) CCS 버전 : Code Composer Studio v21.x (Theia)
2) 컴파일러 버전 : TI C2000 CGT v25.11.1.LTS (Edge AI Studio가 요구하는 TI C28-CLA Compiler 25.11.01.00과 같은 계열)
3) 개발보드 : TMS320F28X 개발보드 V2
4) 프로세서 모듈 : 싱크웍스 TMS320F28P55x 모듈 (F28P559SJ9-Q1)
5) 예제버전 : v1.00
6) 기타 : Mini-B 5핀 USB 케이블 1개 (PC ↔ '(11) 2채널 SCI-to-USB' 회로, 데이터 수집용), 점퍼 케이블 2개(마이크·부저), 데이터를 수집할 때는 SCI용 2개를 더해 총 4개, TI Edge AI Studio for Time Series (학습용, PC)
7) 프로젝트 구성 : 두 개의 DriverLib 프로젝트입니다.
- 4_EdgeAI_MicLogger_Driverlib : 마이크 소리를 녹음해 시리얼(230400bps)로 PC에 보내는 펌웨어 + PC 수집 도구(MicCollector.exe, Python 스크립트)
- 4_EdgeAI_MicSound_Driverlib : 학습한 모델로 소리를 분류하는 펌웨어. CPU1_FLASH(NPU가 추론)와 CPU1_FLASH_SOFT(CPU가 추론) 두 구성
8) 확인 범위 :
- 보드에서 확인함 (2026-10-19, 마이크를 A Side 43번에 꽂았을 때) : NPU/CPU 두 구성 모두 selfTestPass=1, frameOverruns=0, 추론 시간 측정, 조용함/부저/박수 분류
- 그 뒤 마이크 입력을 A Side 41번(ADCINA0)으로 바꿨습니다. 41번으로 바꾼 뒤의 보드 동작은 아직 확인하지 않았습니다.
- 이 글의 학습 과정을 다시 따라 해서 얻은 새 결과 파일은 컴파일/링크까지만 확인했고, 보드 실행은 확인 전입니다.
- NPU 구성의 npuTimeouts와, 다른 장소·거리·배경 소음에서의 정확도도 확인 전입니다. 학습한 데이터는 58개 파일, 같은 날 같은 환경에서 모은 것입니다.

 

3. 실습 예제 다운로드 (GitHub ZIP 다운로드 안내)

초보자분들도 손쉽게 다운로드하여 사용하실 수 있도록 전체 소스 코드와 학습 데이터를 GitHub에 공개해 두었습니다.
아래 안내에 따라 ZIP 압축 파일로 다운로드하세요.

[다운로드 순서]
① 아래의 링크를 클릭하여 GitHub 저장소 페이지로 이동합니다.
② GitHub 페이지 우측 상단의 초록색 <> Code ▼ 버튼을 클릭합니다.
③ 나타나는 메뉴 맨 아래의 Download ZIP 항목을 클릭하여 압축 파일을 다운로드합니다.
④ 다운로드한 ZIP 파일을 원하는 폴더에 압축 해제합니다.
- 권장 위치 예시 : C:/SyncWorks/TMS320F28X_EVM_V2_28P55x/04_EdgeAI_BuzzerMic
(※ 주의 : 경로 중 한글이나 공백이 포함되지 않도록 주의해 주세요.)

압축을 풀면 아래와 같이 구성되어 있습니다.

폴더 / 파일내용
4_EdgeAI_MicLogger_Driverlib/① 소리 수집 펌웨어 + tools/(MicCollector.exe, 수집 스크립트)
4_EdgeAI_MicSound_Driverlib/④ 소리 분류 펌웨어 (model_npu/, model_soft/, model/에 모델 파일)
dataset/, dataset.zip학습에 쓴 소리 데이터 58개 (buzzer 18 / clap 22 / silence 18), Studio에 올리는 형식의 zip
edgeai_studio_result/Edge AI Studio가 만든 결과 파일 원본 (mod.a, tvmgen_default.h, test_vector.c, user_input_config.h, model.onnx)
README.md, docs/전체 설명서와 화면 이미지

 

4. CCS 프로젝트 불러오기 (CCS V20 기준) 및 컴파일

>> [유튜브] CCS V20 기준 프로젝트 불러오기 방법 소개 영상

① Code Composer Studio(CCS)를 실행합니다.
② 상단 메뉴에서 File > Import Projects... 를 클릭합니다.
③ Specify Search Directory 버튼을 눌러 앞서 압축을 푼 폴더를 선택합니다.
④ 검색된 프로젝트 목록에서 4_EdgeAI_MicLogger_Driverlib과 4_EdgeAI_MicSound_NPU_Driverlib 두 프로젝트를 체크하여 선택합니다. (소리 분류 프로젝트의 이름은 다른 예제와 겹치지 않게 4_EdgeAI_MicSound_NPU_Driverlib입니다.)
⑤ "Copy projects into workspace" 체크는 해제한 뒤 Finish 버튼을 클릭합니다.
⑥ 프로젝트를 마우스 우클릭하여 Build Project를 실행합니다.
- 4_EdgeAI_MicLogger_Driverlib : CPU1_RAM 또는 CPU1_FLASH 구성 중 하나
- 4_EdgeAI_MicSound_NPU_Driverlib : CPU1_FLASH = NPU가 추론, CPU1_FLASH_SOFT = CPU가 추론. Build Configuration에서 원하는 구성을 고르세요. 두 구성은 같은 소스에 모델 라이브러리(mod.a)만 다릅니다.

 

5. 개발보드 점퍼선 연결 안내

아래와 같이 F28P55x 모듈의 핀-헤더와 개발보드 회로 블록을 점퍼선으로 연결합니다. 마이크는 A Side, 부저와 시리얼은 B Side 핀-헤더를 사용합니다.

번호신호EVM V2 핀-헤더할당 신호명연결 대상
1마이크 입력A Side 41번 핀A0/B15 (ADCINA0)(4) 블록 "MIC OUT"
2부저 출력B Side 33번 핀GPIO0 / EPWM1A(4) 블록 "BUZZ IN"
3SCI TX (수집할 때만)B Side 19번 핀GPIO43 / SCIC_TX(11) 블록 "TX1"
4SCI RX (수집할 때만)B Side 21번 핀GPIO42 / SCIC_RX(11) 블록 "RX1"

* 마이크는 반드시 A Side 41번 핀에 꽂으세요. A Side 46번은 A9/GPIO227이라 ADCINA0이 아닙니다. (이전 버전 소스는 43번(ADCINA1)을 썼습니다. 현재 소스는 41번입니다.)
* 소리를 분류만 할 때(④단계)는 1, 2번(마이크·부저) 점퍼선 2개면 됩니다. 3, 4번은 데이터를 수집할 때(①단계)만 필요합니다.
* F28P55x에서 GPIO42/43의 시리얼 기능은 SCI-C입니다. (F28P65x 예제는 SCI-A이고 TX/RX 핀 번호가 반대이니 혼동하지 마세요.)
* '(11) 2채널 SCI-to-USB' 회로의 미니 5핀 USB 커넥터를 PC와 케이블로 연결하면 PC에서 'USB Serial Port' 2개가 인식됩니다. 이 중 1채널(RX1/TX1)에 해당하는 포트를 사용하세요. 어느 포트인지는 장치관리자에서 확인할 수 있습니다.
* 부저와 마이크가 가까우면 부저 소리가 너무 커서 마이크 신호가 포화될 수 있습니다. 수집할 때 거리를 두세요.



(점퍼선 연결도: 빨강 = 마이크 A Side 41번 → MIC OUT, 파랑 = 부저 B Side 33번 → BUZZ IN, 파랑 · 초록 = SCI B Side 19번 → TX1 / 21번 → RX1. 클릭하시면 큰 이미지를 자세히 확인하실 수 있습니다.)

 

6. ① 소리 데이터 수집 (MicLogger + MicCollector.exe)

학습할 모델은 직접 모은 소리 데이터로 만듭니다. 보드가 마이크(ADC)를 20kHz로 읽어 시리얼로 보내면, PC 프로그램이 클래스 이름의 폴더에 CSV 파일로 저장합니다. 한 번에 약 1.64초(32,768샘플)를 녹음합니다.

※ 저장소의 dataset/에 이미 모은 데이터 58개(buzzer 18 / clap 22 / silence 18)가 들어 있습니다. 이 단계를 건너뛰고 7번으로 가셔도 됩니다.

[준비]
① 5번의 점퍼선 4개(마이크, 부저, SCI TX/RX)를 연결하고, '(11)' 회로의 USB를 PC에 연결합니다.
② CCS에서 4_EdgeAI_MicLogger_Driverlib을 Debug(F11) 한 뒤 Resume(F8)으로 실행해 둡니다.

[MicCollector.exe 사용 방법]  (저장소의 4_EdgeAI_MicLogger_Driverlib/tools/MicCollector.exe를 더블클릭, Python 설치 불필요)
(※ 서명되지 않은 프로그램이라 Windows SmartScreen 경고가 뜰 수 있습니다. "추가 정보 > 실행"을 누르세요.)

① 보드 연결 : COM 포트 목록에서 'USB Serial Port(COMxx)'를 고르고 연결을 누릅니다. 목록에 없으면 새로고침을 누르세요. 오른쪽에 초록색 ● 연결됨이 보이면 됩니다.
② 수집 설정
- 클래스 이름 : silence, buzzer, clap 중에서 고르거나 직접 입력합니다. 이 이름이 저장 폴더(classes/<클래스>/)가 됩니다.
- 녹음 횟수 : 한 번에 몇 개를 녹음할지 정합니다. (예 : 15)
- 녹음 전 대기(초) : 녹음 시작 전 기다리는 시간입니다. 이 시간에 소리 낼 준비를 합니다. (예 : 2)
- 녹음하는 동안 부저(4kHz) 울리기 : buzzer 클래스를 모을 때만 체크합니다.
- 안내 문구 : 녹음 중 화면에 보일 안내입니다. (예 : "녹음 중에 박수를 여러 번 치세요")
- 저장 폴더 : 기본값은 프로그램이 있는 폴더 옆의 dataset입니다.
③ 녹음 : ▶ 수집 시작을 누르면 녹음 횟수만큼 자동으로 반복합니다. 멈추려면 ■ 중지를 누릅니다. 미리 녹음(저장 안 함)은 저장하지 않고 마이크가 살아 있는지만 확인합니다.
④ 확인 : 아래 마지막 녹음 파형에서 위쪽은 전체(1.64초) 윤곽, 아래쪽은 처음 20ms 확대입니다. 오른쪽 저장된 데이터 표에 클래스별 개수가 쌓이고, 로그에 파일 이름과 min, max, 평균이 나옵니다.
⑤ 모두 모았으면 dataset.zip 만들기를 눌러 Studio에 올릴 파일을 만듭니다.


(조용함(silence) 수집 중 화면. 로그의 평균이 2045 안팎이면 정상입니다. 클릭하시면 큰 이미지를 확인하실 수 있습니다.)


[클래스별 수집 요령]

클래스설정과 요령
silence부저 체크를 해제하고 조용한 상태로 둡니다. 로그의 평균이 2045 안팎이면 정상입니다.
buzzer부저 울리기를 체크합니다. 마이크와 부저가 너무 가까우면 min=0 max=4095(ADC 포화)가 되고 [주의] ADC가 0 또는 4095에 닿았습니다 경고가 뜹니다. 그러면 거리를 두세요. 포화된 녹음은 학습에서 빼는 것이 좋습니다.
clap부저 체크를 해제하고, 안내 문구에 "녹음 중에 박수를 여러 번 치세요"를 적습니다. 대기 시간 안에 준비한 뒤 녹음 중에 박수를 칩니다.

  
(왼쪽 : 부저 수집 (포화 경고 예시) / 오른쪽 : 박수 수집)


* 클래스마다 같은 날, 같은 위치에서 모으면 일관된 데이터가 됩니다. 저장소의 58개도 그렇게 모았습니다.
* 마이크 신호가 평평하게만 나오면(신호가 거의 평평합니다 경고) A Side 41번 ↔ "MIC OUT" 배선을 확인하세요.
* 명령행으로 모으려면 python tools/collect_mic_data.py --port COM5 --label buzzer --count 15 --buzzer 처럼 실행합니다.

 

7. ② Edge AI Studio로 학습하기

TI의 CCStudio Edge AI Studio for Time Series(화면은 v1.7.1, Tiny ML Backend 1.4.1 기준)에서 위 데이터로 모델을 학습하고 컴파일합니다. 아래는 저장소의 데이터로 처음부터 다시 따라 한 기록입니다. 학습은 PC에서 하며 보드는 필요 없습니다.

[미리 준비] Edge AI Studio 설치, 그리고 아래 ⑦번 화면에서 확인하는 TI C28-CLA Compiler 25.11.01.00(Windows에서는 C:    i 아래에 설치). 학습 데이터는 저장소 루트의 dataset.zip을 쓰면 됩니다. zip 맨 위에 classes/ 폴더가 와야 합니다.

① 예제 프로젝트 가져오기 : 첫 화면에서 Example Project Library 탭을 열고 Task = Time Series Classification, Device Family = C2000 real-time microcontrollers, Device = F28P55로 좁힙니다. 목록의 Timeseries Classification 오른쪽 Import Project into Workspace 아이콘을 누릅니다.

② 프로젝트 열기 : 프로젝트가 열리면 Getting Started 화면이 보입니다. 예제의 샘플 파일이 남아 있으면 휴지통 아이콘(Delete all files)으로 먼저 비웁니다.

③ 데이터 올리기 : IMPORT ▼ > Import Annotated Archived Dataset을 고르고 dataset.zip을 엽니다. 성공하면 왼쪽 Project Files의 classes 아래에 buzzer, clap, silence가 생깁니다. (폴더 이름이 클래스 이름입니다.)

④ 새 학습 만들기 - 장치 : Training 탭의 + New Run을 누르면 5단계 창이 열립니다. 첫 단계 Device Selection에서 F28P55를 고릅니다. (NPU가 있는 칩입니다.)

⑤ 모델 : Model Selection에서 CLS_1k_NPU를 고릅니다. 파라미터 약 1k개의 NPU 지원 분류 모델입니다.

⑥ 파라미터 : 아래 표처럼 설정합니다. 전처리 값은 프리셋 1. Generic_512Input_FFTBIN_32Feature_8Frame을 고르면 자동으로 채워지고, 회색 칸은 자동 계산입니다.

항목값의미
Preprocessing Mode / TransformFeature Extraction / FFTBIN파형을 FFT 구간(bin) 값으로 바꿔 넣음
Frame Size512512샘플 = 20kHz에서 25.6ms
Feature Size per Frame32프레임마다 32개 주파수 구간
Frames to Concatenate8최근 8프레임(약 0.2초)을 이어 붙임
AI Model Input Feature Size256 (자동)32 × 8 = 모델 입력 크기
Channels / Stride Size1 / 0.1마이크 한 채널 / 프레임 이동 비율
Epochs / Learning Rate / Batch Size20 / 0.04 / 256학습 설정
AI OptimizationHigh Speed
Compilation PresetDefault Presetc, ti-npu type=hard skip_normalize=true output_int=true (NPU 하드웨어용 코드)

⑦ 의존성 : TI C28-CLA Compiler의 Recommended Version과 Installed Version이 같고 초록 체크가 보이면 됩니다.

⑧ 확인과 시작 : 마지막 Review에서 장치(F28P55), 모델(CLS_1k_NPU), 전처리·컴파일 설정을 확인하고 Finish를 누릅니다.

⑨ 학습 진행 : Training Runs 표에 Run #01이 생기고 진행률이 올라가며, 위쪽 그래프에 Loss와 Accuracy가 그려집니다. 로그에 auto_quantization ... bitwidth will be overridden 같은 WARNING이 나오지만 학습은 계속 진행됩니다. 학습이 끝나면 이어서 컴파일이 진행됩니다.

[학습 결과]
- 학습 초반 1~2에폭에는 검증 정확도가 약 31%(찍기 수준)였고, 10에폭 부근에서 약 99.8%까지 올랐습니다.
- 시험 데이터에서 세 클래스 모두 정확도 100%였습니다. (아래 혼동 행렬)
- 모델은 총 파라미터 893개(ONNX 파일 약 14KB)의 아주 작은 CNN입니다. 입력 256 → 합성곱 3단 → 분류 3개 구조입니다.
- 이 결과는 같은 환경·소량 데이터(58개)의 것이며 일반 성능이 아닙니다. 장소·거리·배경 소음이 다른 데이터로는 아직 확인하지 않았습니다.

  
(왼쪽 : 학습 곡선 / 오른쪽 : 시험 데이터 혼동 행렬 - 클래스당 171개 모두 정답)

 

8. ③ 결과 파일을 프로젝트에 적용하기

학습 결과 중 4개 파일만 4_EdgeAI_MicSound_Driverlib에 덮어쓰면 됩니다. 이번 학습의 원본 파일은 저장소의 edgeai_studio_result/에도 들어 있습니다. Studio에서 프로젝트를 내보낸 ZIP(<프로젝트ID>_project.zip)을 풀었을 때의 위치는 아래와 같습니다. (<Run>은 Studio가 붙인 날짜-시간 이름)

파일Studio 결과 안의 위치복사할 곳
mod.a
(NPU 모델 라이브러리)
train/<Run>/compile/<Run>/output/artifacts/4_EdgeAI_MicSound_Driverlib/model_npu/
tvmgen_default.h
(모델 입출력 정의)
같은 artifacts/ 폴더model_npu/
user_input_config.h
(전처리 설정)
train/<Run>/output/training_quantization/golden_vectors/model/
test_vector.c
(부팅 자체 시험용 입력·정답)
같은 golden_vectors/ 폴더model/

놓치기 쉬운 점
- golden_vectors는 training_base와 training_quantization 두 곳에 있습니다. training_quantization 것을 쓰세요. (training_base는 양자화 전 float 모델의 것입니다.)
- mod.a는 compile/<Run>/output/artifacts/ 안의 것입니다. 컴파일 설정이 Default Preset(ti-npu type=hard)이어야 NPU용입니다. forced_soft_npu_preset으로 만든 mod.a는 CPU 추론이 되지 않으니 쓰지 마세요.
- 4개를 같은 학습의 것으로 한 벌로 바꿉니다. 부팅 때 test_vector.c로 모델을 한 번 돌려 정답과 비교하므로(selfTestPass), 서로 다른 학습의 파일이 섞이면 0이 될 수 있습니다.

[적용 순서]
① 위 4개 파일을 표의 위치에 덮어씁니다. (CCS 작업공간에 프로젝트를 복사해 두었다면 작업공간 안의 model/, model_npu/ 폴더에 덮어쓰거나, 프로젝트를 지우고 다시 Import하세요.)
② 클래스 순서 확인 : 클래스 폴더 이름의 알파벳순으로 번호가 붙습니다(buzzer 0, clap 1, silence 2). app_config.h의 kClassNames가 같은 순서여야 합니다. 클래스를 바꿨다면 test_vector.c의 Class: ... 주석 순서를 보고 고치세요.
③ 전처리 값 확인 : model/user_input_config.h가 FE_FRAME_SIZE 512, FE_FEATURE_SIZE_PER_FRAME 32, FE_NUM_FRAME_CONCAT 8, FE_NN_OUT_SIZE 3이어야 펌웨어의 특징 추출과 맞습니다. 샘플링은 수집할 때와 같은 20kHz(SAMPLE_RATE_HZ)입니다.
④ 구성 CPU1_FLASH로 Clean 후 Build합니다. 링크 후 맵 파일(.map)에 TINIE_start가 있으면 NPU 코드가 들어간 것입니다.

[CPU 구성(CPU1_FLASH_SOFT)까지 바꾸려면] model_soft/는 NPU 없는 F28P65 대상으로 컴파일한 결과가 필요합니다. Studio에서 장치를 F28P65로 하고 같은 설정으로 새 학습을 만든 뒤, 그 mod.a를 model_soft/make_cpu_mod.py로 변환해 model_soft/에 두고 같은 학습의 tvmgen_default.h도 복사합니다. 자세한 방법은 저장소 README의 4-3절을 보세요.

※ 이 절차는 새로 학습한 결과 파일 4개를 위 순서대로 복사한 사본을 CCS와 같은 옵션으로 컴파일·링크해서 오류가 없는 것까지 확인했습니다. 같은 데이터·설정으로 다시 학습하면 test_vector.c와 user_input_config.h는 이전 학습과 바이트 단위로 같았습니다. 새 mod.a를 보드에서 실행한 확인은 아직 하지 않았습니다.

 

9. ④ 실행 및 동작 확인 (소리 분류)

① 5번의 마이크·부저 점퍼선 2개를 연결합니다. (시리얼 선은 필요 없습니다.)
② JTAG 에뮬레이터를 연결하고 디버그(Debug, F11) 후 실행(Resume, F8)합니다. 구성은 CPU1_FLASH(NPU) 또는 CPU1_FLASH_SOFT(CPU)입니다.
③ Expressions(Watch) 창에 아래 변수를 등록해서 값을 확인합니다. (CCS에서 View > Expressions)
※ 이 예제는 실행 중 printf를 쓰지 않습니다(실시간 모드에서 CIO 오류가 남). 모든 확인은 Watch 변수로 합니다.

변수정상 값의미
selfTestPass1부팅 때 TI 테스트 벡터로 모델을 돌려 정답과 일치한 결과. 0이면 모델 파일이 맞지 않거나 NPU에 문제가 있는 것
modelIsNpuNPU 구성 1 / CPU 구성 0현재 빌드가 NPU 실행인지 확인
npuTimeouts0NPU가 한 프레임(25.6ms) 안에 끝내지 못한 횟수
frameOverruns0처리가 늦어 덮어쓴 프레임 수
frameCount계속 증가멈춰 있으면 ADC/타이머 인터럽트가 안 도는 것
micResult조용할 때 2000 안팎마이크 ADC 값. 0이나 4095에 붙어 있으면 배선 또는 기준전압 문제
soundClass0 / 1 / 2최근 프레임의 분류 결과 (buzzer 0, clap 1, silence 2)
stableClass, stableClassNamebuzzer / clap / silence같은 결과가 3프레임 연속 나온 안정화된 최종 분류값과 그 이름
scores[]-클래스별 점수. 결과가 흔들릴 때 어느 클래스와 겹치는지 볼 때 사용
feUs, launchUs, inferUs, cpuLoadPct10번 표 참고특징 추출 시간, 모델 실행 호출 시간, 추론 완료까지 시간, CPU 부하 (µs / %)
ToneOutFlag직접 1로 쓰기1이면 부저가 4kHz로 울립니다. 분류 시험용

④ 시험 순서
- ⓐ selfTestPass == 1, modelIsNpu가 구성과 맞는지 확인합니다.
- ⓑ 조용한 상태에서 micResult가 2000 안팎이고 stableClassName이 silence인지 확인합니다.
- ⓒ ToneOutFlag를 1로 바꿔 부저를 울리면 stableClassName이 buzzer로 바뀝니다. 다시 0으로 되돌립니다.
- ⓓ 마이크 가까이서 박수를 치면 clap으로 바뀌는지 확인합니다.
- ⓔ 몇 분 두고 npuTimeouts와 frameOverruns가 0으로 유지되는지 확인합니다.


(CCS Watch 화면 예시. 클릭하시면 큰 이미지를 확인하실 수 있습니다. 마이크를 A Side 43번에 꽂았을 때의 화면입니다.)

 

10. 측정 결과 : NPU 효과

같은 칩(150MHz), Flash 실행, 최적화 없음(--opt_level=off) 조건에서 같은 모델을 NPU와 CPU로 각각 실행해 Watch 변수로 측정했습니다. 2026-10-19 재측정에서도 같은 경향이었습니다. (마이크를 A Side 43번에 꽂았을 때의 측정입니다.)

항목NPU
(CPU1_FLASH)
CPU
(CPU1_FLASH_SOFT)
추론 완료까지 (inferUs)695.73 µs9,884.95 µs
특징 추출 (feUs)약 401~402 µs약 402~403 µs
CPU 부하 (cpuLoadPct)2.17 %40.18 %
selfTestPass / frameOverruns1 / 01 / 0

- 추론 완료까지 약 14.2배 단축, 특징 추출까지 포함하면 약 9.4배 단축입니다.
- 참고 : F28P65x(NPU 없음, CPU 추론)에서 같은 모델은 7,785.40 µs였습니다.

  
(왼쪽 : NPU 구성 Watch / 오른쪽 : CPU 구성 Watch, 2026-10-19)


해석할 때 주의할 점
- cpuLoadPct 2.17%의 의미 : NPU 완료를 바쁜 대기로 기다리는 시간을 뺀 값입니다. 실제 CPU 점유율이 2%라는 뜻이 아닙니다.
- 작은 모델은 NPU 없이도 충분합니다. CPU 구성도 프레임 초과가 0이었습니다. 지금 NPU의 이득은 '지연 단축'이며, '여유 확보'는 아직 확인하지 않았습니다. 모델이 커지거나 다른 작업이 많아질 때 NPU의 가치가 커집니다.
- 정확도는 제한된 조건의 값입니다. 58개 파일, 같은 환경입니다.

 

11. 자주 묻는 질문과 다음 단계

Q. 왜 이렇게 작은 모델인가요?
A. MCU의 메모리·연산 한계 때문입니다. 3가지 소리를 구분하는 데는 파라미터 893개로 충분했습니다.

Q. NPU가 꼭 필요한가요?
A. 지금 모델은 CPU로도 프레임 안에 처리됩니다. 모델이 커지거나 다른 작업이 많아질 때 NPU 가치가 커집니다.

Q. 정확도 100%를 믿어도 되나요?
A. 같은 환경, 소량 데이터의 결과입니다. 장소·거리·소음 환경을 늘려 재검증이 필요합니다.

Q. 학습은 어디서 하나요?
A. PC의 TI Edge AI Studio에서 합니다. 보드는 학습된 모델의 실행만 합니다.

[다음 단계] ① 환경이 다른 데이터를 추가해 재학습 ② NPU 대기를 인터럽트 방식으로 바꿔 CPU 여유 시간 재측정 ③ 다른 Edge AI 예제(이상 감지 등)로 확장

어떤 소리를 알아맞히게 해보고 싶으신지(모터 소리로 고장 감지, 문 닫히는 소리 구분 등) 댓글로 남겨 주세요. 다음 예제에 반영하겠습니다.
번호 제목 작성자 날짜
번호 제목 날짜 작성자 조회
공지 [공지] TMS320F28X 개발보드 V2용 예제 업데이트 관련 2021.05.17 싱크웍스 1500
95 [F28P65x / CPU1] CLB와 SysConfig로 로터리 엔코더를 읽어 7-세그먼트에 00~99 표시하기 이미지첨부 있음 2026.10.28 인터럽트 20
94 [F28P55x] 칩 하나가 소리를 듣고 판단한다! 마이크 소리(부저·박수·조용함)를 NPU로 분류하는 Edge AI 예제 (... 이미지첨부 있음 2026.10.23 인터럽트 24
93 [F28P65x / CPU1] 28X 칩의 eQEP로 로터리 엔코더를 읽어 7-세그먼트에 00~99 표시하기 예제 (Bitfi... 이미지첨부 있음 2026.10.14 인터럽트 28
92 [F28P65x / CPU1] 28X 칩에 시리얼 EEPROM(M95M04)을 연결해 읽고 쓰기 예제 (SPI + SCI 콘솔... 이미지첨부 있음 2026.10.13 인터럽트 23
91 [F28P65x / CPU1] 28X 칩에 Micro SD 카드를 연결해 파일 읽고 쓰기 예제 (SPI + FatFs, SCI... 이미지첨부 있음 2026.10.07 인터럽트 30
90 [F28P65x / CPU1] 28X 칩과 PC간 SCI 시리얼 통신 예제 (SCI-to-USB, 택트 스위치 보고 + LED... 이미지첨부 있음 2026.10.02 인터럽트 39
89 [F28P65x / CPU1] 28X 칩의 USB 이동식 디스크(MSC) 에뮬레이션 예제 (USB Device MSC, Bit... 이미지첨부 있음 2026.10.01 인터럽트 29
88 [F28P65x / CPU1] 28X 칩과 USB 마우스간 연결 예제 (USB Host Mouse, Bitfield/Drive... 이미지첨부 있음 2026.09.28 인터럽트 30
87 [F28P65x / CPU1] 피에조 부저 공진주파수(4kHz) + 마이크 ADC 확인 예제 (Bitfield/DriverLi... 이미지첨부 있음 2026.09.22 인터럽트 39
86 [F28P65x / CPU1] 개발보드 2채널 가변전압 출력 회로 테스트 (Potentiometer ADC) 이미지첨부 있음 2026.09.18 인터럽트 32
85 [F28P65x / CPU1] 개발보드 LED 테스트 예제 이미지첨부 있음 2026.09.18 인터럽트 32
84 [F28P65x / CPU1] 개발보드 토글(Toggle) 스위치 테스트 예제 이미지첨부 있음 2026.09.18 인터럽트 25
83 [F28P65x / CPU1] 개발보드 택트(Tactile) 스위치 테스트 예제 이미지첨부 있음 2026.09.18 인터럽트 16
82 [F28P65x / CPU1] 3채널 PWM-to-Analog 출력 예제 이미지첨부 있음 2026.09.18 인터럽트 24
81 [F28P55x / CPU1] I2C 통신 External Loopback 예제 이미지첨부 있음 인기글 2026.01.20 싱크웍스 232
80 [F28P55x / CPU1] RS232 통신 External Loopback 예제 이미지첨부 있음 인기글 2026.01.19 싱크웍스 106
79 [F28P55x / CPU1] RS485 통신 External Loopback 예제 이미지첨부 있음 인기글 2026.01.15 싱크웍스 152
78 [F28P55x / CPU1] MCAN 통신 External Loopback 예제 이미지첨부 있음 인기글 2026.01.15 싱크웍스 174
77 [F28P55x / CPU1] 개발보드 로터리 엔코더(24P/R) 테스트 예제 이미지첨부 있음 인기글 2026.01.13 싱크웍스 107
76 [F28P55x / CPU1] 개발보드 7-세그먼트 테스트 예제 이미지첨부 있음 인기글 2026.01.13 싱크웍스 150
75 [F28P55x / CPU1] 개발보드 Serial(SPI) FLASH R/W/V 테스트 예제 이미지첨부 있음 인기글 2026.01.12 싱크웍스 134
74 [F28P55x / CPU1] 개발보드 Serial(SPI) EEPROM R/W/V 테스트 예제 이미지첨부 있음 인기글 2026.01.12 싱크웍스 131
73 [F28P55x / CPU1] 개발보드 SCI(RS232)-to-USB 회로 테스트 예제 (Echo-back Test) 이미지첨부 있음 2026.01.12 싱크웍스 43
72 [F28P55x / CPU1] μ SD 카드 테스트 예제 - 2 이미지첨부 있음 2026.01.09 싱크웍스 40
71 [F28P55x / CPU1] μ SD 카드 테스트 예제 - 1 (FAT FS 라이브러리 이용) 이미지첨부 있음 2026.01.09 싱크웍스 65
70 [F28P55x / CPU1] 개발보드 2채널 가변전압 출력 회로 테스트 (Potentiometer ADC) 이미지첨부 있음 2026.01.06 싱크웍스 45
69 [F28P55x / CPU1] 개발보드 LED 테스트 예제 이미지첨부 있음 2026.01.06 싱크웍스 48
68 [F28P55x / CPU1] 개발보드 토글(Toggle) 스위치 테스트 예제 이미지첨부 있음 2026.01.05 싱크웍스 22
67 [F28P55x / CPU1] 개발보드 택트(Tactile) 스위치 테스트 예제 이미지첨부 있음 2026.01.05 싱크웍스 46
66 [F28P55x / CPU1] USB 메모리 제어(RW) 예제 (USB_Host_MSC) 이미지첨부 있음 2025.12.24 싱크웍스 58
65 [F28P55x / CPU1] 28X 칩과 USB 마우스간 연결 예제 (USB Host Mouse) 이미지첨부 있음 인기글 2025.12.12 싱크웍스 119
64 [F28P55x / CPU1] PC 마우스 장치 에뮬레이션 예제 (USB Device Mouse) 이미지첨부 있음 2025.12.11 싱크웍스 42
63 [F28P55x / CPU1] 피에조 부저(Piezo Buzzer) 소리 ADC 확인 예제 이미지첨부 있음 2025.12.10 싱크웍스 44
62 [F28P55x / CPU1] 피에조 부저(Piezo Buzzer)를 이용한 음계 출력 예제 이미지첨부 있음 2025.12.10 싱크웍스 45
61 [F28P55x / CPU1] 3채널 PWM-to-Analog 출력 예제 이미지첨부 있음 인기글 2025.12.05 싱크웍스 172
60 [F2838x / CPU1] I2C 통신 External Loopback 예제 이미지첨부 있음 인기글 2022.12.09 싱크웍스 1158
59 [F2838x / CPU1] RS232 통신 External Loopback 예제 이미지첨부 있음 인기글 2022.12.09 싱크웍스 805
58 [F2838x / CPU1] RS485 통신 External Loopback 예제 이미지첨부 있음 인기글 2022.12.09 싱크웍스 717
57 [F2838x / CPU1] CAN 통신 External Loopback 예제 이미지첨부 있음 인기글 2022.12.09 싱크웍스 1219
56 [F2838x / CPU1] 개발보드 로터리 엔코더(24P/R) 테스트 예제 이미지첨부 있음 인기글 2022.12.08 싱크웍스 444
55 [F2838x / CPU1] 개발보드 7-세그먼트 테스트 예제 이미지첨부 있음 인기글 2022.12.07 싱크웍스 543
54 [F2838x / CPU1] 개발보드 Serial(SPI) FLASH R/W/V 테스트 예제 이미지첨부 있음 인기글 2022.12.06 싱크웍스 764
53 [F2838x / CPU1] 개발보드 Serial(SPI) EEPROM R/W/V 테스트 예제 이미지첨부 있음 인기글 2022.12.06 싱크웍스 610
52 [F2838x / CPU1] 개발보드 SCI(RS232)-to-USB 회로 테스트 예제 (Echo-back Test) 이미지첨부 있음 인기글 2022.12.05 싱크웍스 605
51 [F2838x / CPU1] Micro SD 메모리 카드 제어 예제 2 (RW Test / SD_Card) 이미지첨부 있음 인기글 2022.12.05 싱크웍스 136
50 [F2838x / CPU1] Micro SD 메모리 카드 제어 예제 1 (FAT FS / SD_Card) 이미지첨부 있음 인기글 2022.12.05 싱크웍스 192
49 [F2838x / CPU1] 개발보드 2채널 가변전압 출력 회로 테스트 (Potentiometer ADC) 이미지첨부 있음 인기글 2022.12.02 싱크웍스 319
48 [F2838x / CPU1] 개발보드 LED 테스트 예제 이미지첨부 있음 인기글 2022.11.28 싱크웍스 808
47 [F2838x / CPU1] 개발보드 토글(Toggle) 스위치 테스트 예제 이미지첨부 있음 인기글 2022.11.28 싱크웍스 179
46 [F2838x / CPU1] 개발보드 택트(Tactile) 스위치 테스트 예제 이미지첨부 있음 인기글 2022.11.25 싱크웍스 165
45 [F2838x / CPU1] USB 메모리 제어(RW) 예제 (USB_Host_MSC) 이미지첨부 있음 인기글 2022.11.25 싱크웍스 204
44 [F2838x / CPU1] 28X 칩과 USB 마우스간 연결 예제 (USB Host Mouse) 이미지첨부 있음 인기글 2022.11.25 싱크웍스 104
43 [F2838x / CPU1] PC 마우스 장치 에뮬레이션 예제 (USB Device Mouse) 이미지첨부 있음 인기글 2022.11.25 싱크웍스 143
42 [F2838x / CPU1] 피에조 부저(Piezo Buzzer) 소리 ADC 확인 예제 이미지첨부 있음 인기글 2022.11.25 싱크웍스 197
41 [F2838x / CPU1] 피에조 부저(Piezo Buzzer)를 이용한 음계 출력 예제 이미지첨부 있음 인기글 2022.11.24 싱크웍스 127
40 [F2838x / CPU1] 3채널 PWM-to-Analog 출력 예제 이미지첨부 있음 인기글 2022.11.24 싱크웍스 823
39 [F28335] I2C 통신 테스트 예제 이미지첨부 있음 인기글 2022.07.11 싱크웍스 380
38 [F28335] SPI 통신 Internal Loopback Test 예제 (FIFO / Interrupt) 이미지첨부 있음 인기글 2022.07.11 싱크웍스 552
37 [F28335] RS232 통신 External Loopback 예제 이미지첨부 있음 인기글 2022.07.07 싱크웍스 261
36 [F28335] RS485 통신 External Loopback 예제 이미지첨부 있음 인기글 2022.07.07 싱크웍스 335
35 [F28335] CAN 통신 External Loopback 예제 이미지첨부 있음 인기글 2022.07.07 싱크웍스 434
34 [F28335] 개발보드 로터리 엔코더(24P/R) 테스트 예제 이미지첨부 있음 인기글 2022.07.07 싱크웍스 233
33 [F28335] 개발보드 7-세그먼트 테스트 예제 이미지첨부 있음 인기글 2022.06.29 싱크웍스 345
32 [F28335] 개발보드 Serial(SPI) FLASH R/W/V 테스트 예제 이미지첨부 있음 인기글 2022.06.29 싱크웍스 259
31 [F28335] 개발보드 Serial(SPI) EEPROM R/W/V 테스트 예제 이미지첨부 있음 인기글 2022.06.29 싱크웍스 161
30 [F28335] 개발보드 SCI(RS232)-to-USB 회로 테스트 예제 (Echo-back Test) 이미지첨부 있음 인기글 2022.06.28 싱크웍스 197
29 [F28335] Micro SD 메모리 카드 R/W 테스트 예제 (SPI_SD_Card) 이미지첨부 있음 인기글 2022.06.28 싱크웍스 146
28 [F28335] 개발보드 2채널 가변전압 출력 회로 테스트 (Potentiometer ADC) 이미지첨부 있음 인기글 2022.06.28 싱크웍스 370
27 [F28335] 개발보드 LED 테스트 예제 이미지첨부 있음 인기글 2022.06.28 싱크웍스 457
26 [F28335] 개발보드 토글(Toggle) 스위치 테스트 예제 이미지첨부 있음 인기글 2022.06.28 싱크웍스 130
25 [F28335] 개발보드 택트(Tactile) 스위치 테스트 예제 이미지첨부 있음 인기글 2022.06.27 싱크웍스 107
24 [F28335] 피에조 부저(Piezo Buzzer) 소리 ADC 확인 예제 이미지첨부 있음 인기글 2022.06.27 싱크웍스 111
23 [F28335] 피에조 부저(Piezo Buzzer)를 이용한 음계 출력 예제 이미지첨부 있음 2022.06.27 싱크웍스 74
22 [F28335] 3채널 PWM-to-Analog 출력 예제 이미지첨부 있음 인기글 2022.06.27 싱크웍스 568
21 [F2837xD / CPU1] I2C 통신 External Loopback 예제 이미지첨부 있음 인기글 2021.05.17 싱크웍스 495
20 [F2837xD / CPU1] SPI 통신 External Loopback 예제 이미지첨부 있음 인기글 2021.05.17 싱크웍스 717
19 [F2837xD / CPU1] RS232 통신 External Loopback 예제 이미지첨부 있음 인기글 2021.05.14 싱크웍스 360
18 [F2837xD / CPU1] RS485 통신 External Loopback 예제 이미지첨부 있음 인기글 2021.05.14 싱크웍스 596
17 [F2837xD / CPU1] CAN 통신 External Loopback 예제 이미지첨부 있음 인기글 2021.05.12 싱크웍스 1199
16 [F2837xD / CPU1] 개발보드 로터리 엔코더(24P/R) 테스트 예제 이미지첨부 있음 인기글 2021.05.12 싱크웍스 250
15 [F2837xD / CPU1] 개발보드 7-세그먼트 테스트 예제 이미지첨부 있음 인기글 2021.05.12 싱크웍스 304
14 [F2837xD / CPU1] 개발보드 Serial(SPI) FLASH R/W/V 테스트 예제 파일첨부 있음 이미지첨부 있음 인기글 2021.05.11 싱크웍스 451
13 [F2837xD / CPU1] 개발보드 Serial(SPI) EEPROM R/W/V 테스트 예제 파일첨부 있음 이미지첨부 있음 인기글 2021.05.11 싱크웍스 442
12 [F2837xD / CPU1] 개발보드 SCI(RS232)-to-USB 회로 테스트 예제 (Echo-back Test) 이미지첨부 있음 인기글 2021.05.11 싱크웍스 538
11 [F2837xD / CPU1] Micro SD 메모리 카드 제어(RW) 예제 (SD_Card) 이미지첨부 있음 인기글 2021.05.11 싱크웍스 511
10 [F2837xD / CPU1] 개발보드 2채널 가변전압 출력 회로 테스트 (Potentiometer ADC) 이미지첨부 있음 인기글 2021.05.11 싱크웍스 542
9 [F2837xD / CPU1] 개발보드 LED 테스트 예제 이미지첨부 있음 인기글 2021.05.11 싱크웍스 792
8 [F2837xD / CPU1] 개발보드 토글(Toggle) 스위치 테스트 예제 이미지첨부 있음 인기글 2021.05.07 싱크웍스 269
7 [F2837xD / CPU1] 개발보드 택트(Tactile) 스위치 테스트 예제 이미지첨부 있음 인기글 2021.05.07 싱크웍스 258
6 [F2837xD / CPU1] USB 메모리 제어(RW) 예제 (USB_Host_MSC) 이미지첨부 있음 인기글 2021.05.06 싱크웍스 298
5 [F2837xD / CPU1] 28X 칩과 USB 마우스간 연결 예제 (USB Host Mouse) 이미지첨부 있음 인기글 2021.05.04 싱크웍스 325
4 [F2837xD / CPU1] PC 마우스 장치 에뮬레이션 예제 (USB Device Mouse) 이미지첨부 있음 인기글 2021.05.04 싱크웍스 870
3 [F2837xD / CPU1] 피에조 부저(Piezo Buzzer) 소리 ADC 확인 예제 이미지첨부 있음 인기글 2021.05.04 싱크웍스 395
2 [F2837xD / CPU1] 피에조 부저(Piezo Buzzer)를 이용한 음계 출력 예제 이미지첨부 있음 인기글 2021.05.03 싱크웍스 308
1 [F2837xD / CPU1] 3채널 PWM-to-Analog 출력 예제 이미지첨부 있음 인기글 2021.05.03 싱크웍스 1739

비밀번호 인증

비밀번호를 입력해 주세요.

닫기
 
 

비밀번호 인증

글 작성시 설정한 비밀번호를 입력해 주세요.

닫기