Skip to Content
EV Motor Reliability์šด์˜์ž ๋งค๋‰ด์–ผ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์„œ๋ฒ„

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์„œ๋ฒ„

Python FastAPI ๊ธฐ๋ฐ˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์„œ๋ฒ„์˜ ๊ตฌ์กฐ, ํ•˜๋“œ์›จ์–ด ํ†ต์‹  ์„ค์ •, ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ๊ตฌ์กฐ

ev-motor-reliability/ โ”œโ”€โ”€ simulation/ โ”‚ โ”œโ”€โ”€ domain/ # ์ˆœ์ˆ˜ ์ˆ˜ํ•™/๋ฌผ๋ฆฌ ๋กœ์ง (numpy, scipy) โ”‚ โ””โ”€โ”€ runner.py # ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹คํ–‰ ์ง„์ž…์  โ”œโ”€โ”€ analysis/ โ”‚ โ””โ”€โ”€ domain/ # Weibull ๋ถ„์„, ์‹ ๋ขฐ์„ฑ ๊ณ„์‚ฐ โ”œโ”€โ”€ automation/ โ”‚ โ”œโ”€โ”€ infrastructure/ # ์‹œ๋ฆฌ์–ผ, JTAG, ํŒŒ์ผ I/O โ”‚ โ””โ”€โ”€ pipeline.py # ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ โ”œโ”€โ”€ firmware/ โ”‚ โ””โ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ algorithm/ # PID, FOC ์•Œ๊ณ ๋ฆฌ์ฆ˜ (C) โ”‚ โ””โ”€โ”€ hal/ # PWM, ADC, UART ๋“œ๋ผ์ด๋ฒ„ (C) โ”œโ”€โ”€ config.yaml # ์žฅ๋น„ ์—ฐ๊ฒฐ ์„ค์ • (.gitignore) โ””โ”€โ”€ requirements.txt

๊ณ„์ธต ๊ตฌ์กฐ

๊ณ„์ธต๋””๋ ‰ํ† ๋ฆฌ์—ญํ• ์˜์กด์„ฑ
Domainsimulation/domain/, analysis/domain/์ˆœ์ˆ˜ ๊ณ„์‚ฐ ๋กœ์งnumpy, scipy, reliability
Applicationsimulation/runner.py, automation/pipeline.py์›Œํฌํ”Œ๋กœ์šฐ ์กฐํ•ฉDomain ๊ณ„์ธต
Infrastructureautomation/infrastructure/์™ธ๋ถ€ ์‹œ์Šคํ…œ ํ†ต์‹ pyserial, subprocess

Domain ๊ณ„์ธต์€ ์™ธ๋ถ€ ์˜์กด์„ฑ์ด ์—†๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋“œ์›จ์–ด ํ†ต์‹  ๋“ฑ ์ธํ”„๋ผ ๋กœ์ง์€ Infrastructure ๊ณ„์ธต์— ๊ฒฉ๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์‹œ๋ฆฌ์–ผ ํ†ต์‹  ์„ค์ •

SMC300 ๋ชจํ„ฐ์ œ์–ด ํŒจํ‚ค์ง€์™€ UART๋กœ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. pyserial์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์„ค์ •์€ config.yaml์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

config.yaml ์‹œ๋ฆฌ์–ผ ์„น์…˜

serial: port: /dev/ttyUSB0 # Windows: COM3 baudrate: 115200 bytesize: 8 parity: none stopbits: 1 timeout: 3 # ์ฝ๊ธฐ ํƒ€์ž„์•„์›ƒ (์ดˆ) write_timeout: 3 # ์“ฐ๊ธฐ ํƒ€์ž„์•„์›ƒ (์ดˆ)

ํ†ต์‹  ํ”„๋กœํ† ์ฝœ

DSP(TMS320F2838x)์™€ ํ˜ธ์ŠคํŠธ PC ๊ฐ„ UART ํ”„๋กœํ† ์ฝœ:

ํ•„๋“œํฌ๊ธฐ์„ค๋ช…
STX1 byte์‹œ์ž‘ ๋ฐ”์ดํŠธ (0x02)
CMD1 byte๋ช…๋ น ์ฝ”๋“œ
LEN2 bytesํŽ˜์ด๋กœ๋“œ ๊ธธ์ด (Little Endian)
PAYLOADN bytes๋ฐ์ดํ„ฐ
CRC2 bytesCRC-16/MODBUS
ETX1 byte์ข…๋ฃŒ ๋ฐ”์ดํŠธ (0x03)

์ฃผ์š” ๋ช…๋ น ์ฝ”๋“œ

CMD๋ฐฉํ–ฅ์„ค๋ช…
0x10PC โ†’ DSP์‹œํ—˜ ์‹œ์ž‘
0x11PC โ†’ DSP์‹œํ—˜ ์ค‘์ง€
0x20PC โ†’ DSPํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ • (์†๋„, ํ† ํฌ ๋ช…๋ น)
0x30DSP โ†’ PC์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก (์ฃผ๊ธฐ์ )
0x40DSP โ†’ PC์•Œ๋žŒ/๊ณ ์žฅ ์ฝ”๋“œ
0xF0์–‘๋ฐฉํ–ฅํ•ธ๋“œ์…ฐ์ดํฌ (์—ฐ๊ฒฐ ํ™•์ธ)

์—ฐ๊ฒฐ ํ™•์ธ

# ์‹œ๋ฆฌ์–ผ ํฌํŠธ ํ™•์ธ (Linux/WSL) ls /dev/ttyUSB* # ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ python -m automation.infrastructure.serial_test --port /dev/ttyUSB0

JTAG ์—ฐ๊ฒฐ

SDS200i JTAG ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ํ†ตํ•ด DSP ํŽŒ์›จ์–ด๋ฅผ ํ”Œ๋ž˜์‹œํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•ฉ๋‹ˆ๋‹ค.

config.yaml JTAG ์„น์…˜

jtag: emulator: SDS200i connection: usb # USB ์—ฐ๊ฒฐ target: TMS320F28388D ccs_path: /opt/ti/ccs # Code Composer Studio ์„ค์น˜ ๊ฒฝ๋กœ uniflash_path: /opt/ti/uniflash

์ž๋™ ํ”Œ๋ž˜์‹œ (UniFlash CLI)

automation/infrastructure/ ๋ชจ๋“ˆ์ด UniFlash CLI๋ฅผ ๋ž˜ํ•‘ํ•˜์—ฌ ์ž๋™ ํ”Œ๋ž˜์‹œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

# ํŽŒ์›จ์–ด ๋นŒ๋“œ ํ›„ ์ž๋™ ํ”Œ๋ž˜์‹œ python -m automation.pipeline --mode flash --firmware firmware/build/motor_control.out

๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค์Œ UniFlash CLI ๋ช…๋ น์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค:

dslite.sh --config=config.ccxml --flash --verify firmware/build/motor_control.out

CCS ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ

์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์—์„œ CCS ํ—ค๋“œ๋ฆฌ์Šค ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

python -m automation.pipeline --mode build --project firmware/

์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ

automation/pipeline.py๋Š” ์‹œํ—˜์˜ ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„

ํŽŒ์›จ์–ด ๋นŒ๋“œ โ†’ ํ”Œ๋ž˜์‹œ โ†’ ์‹œ๋ฆฌ์–ผ ์—ฐ๊ฒฐ โ†’ ์‹œํ—˜ ์‹คํ–‰ โ†’ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ โ†’ ๋ถ„์„ โ†’ ๋ณด๊ณ ์„œ
๋‹จ๊ณ„๋ชจ๋“œ์„ค๋ช…
build--mode buildCCS ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ
flash--mode flashDSP์— ํŽŒ์›จ์–ด ํ”Œ๋ž˜์‹œ
acquire--mode acquire์‹œ๋ฆฌ์–ผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
analyze--mode analyzeWeibull ๋ถ„์„ ์‹คํ–‰
report--mode reportHTML ๋ณด๊ณ ์„œ ์ƒ์„ฑ
full--mode full์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์ˆœ์ฐจ ์‹คํ–‰

์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰

# ์ „์ฒด ์ž๋™ํ™” (๋นŒ๋“œ โ†’ ํ”Œ๋ž˜์‹œ โ†’ ์ˆ˜์ง‘ โ†’ ๋ถ„์„ โ†’ ๋ณด๊ณ ์„œ) python -m automation.pipeline --mode full --config config.yaml # ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ + ๋ถ„์„๋งŒ python -m automation.pipeline --mode acquire,analyze --config config.yaml # ํŠน์ • ๋‹จ๊ณ„๋ถ€ํ„ฐ ์žฌ๊ฐœ python -m automation.pipeline --mode analyze,report --input data/raw/20260308_test.csv

ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ •

pipeline: data_dir: data/raw/ # ์ˆ˜์ง‘ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ฒฝ๋กœ results_dir: results/ # ๋ถ„์„ ๊ฒฐ๊ณผ ์ €์žฅ ๊ฒฝ๋กœ acquisition: duration: 3600 # ์ˆ˜์ง‘ ์‹œ๊ฐ„ (์ดˆ) sample_rate: 1000 # ์ƒ˜ํ”Œ๋ง ์ฃผํŒŒ์ˆ˜ (Hz) analysis: method: mle # ์ถ”์ •๋ฒ• (mle, rr) confidence: 0.90 # ์‹ ๋ขฐ ์ˆ˜์ค€ report: template: templates/default.html format: html # html, pdf

config.yaml ์ „์ฒด ๊ตฌ์กฐ

config.yaml์€ .gitignore์— ํฌํ•จ๋˜์–ด ๋ฒ„์ „ ๊ด€๋ฆฌ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ์žฅ๋น„ IP, ํฌํŠธ ๋“ฑ ํ™˜๊ฒฝ๋ณ„ ์„ค์ •์„ ๋‹ด์Šต๋‹ˆ๋‹ค.

# config.yaml ์ „์ฒด ์˜ˆ์‹œ serial: port: /dev/ttyUSB0 baudrate: 115200 bytesize: 8 parity: none stopbits: 1 timeout: 3 write_timeout: 3 jtag: emulator: SDS200i connection: usb target: TMS320F28388D ccs_path: /opt/ti/ccs uniflash_path: /opt/ti/uniflash pipeline: data_dir: data/raw/ results_dir: results/ acquisition: duration: 3600 sample_rate: 1000 analysis: method: mle confidence: 0.90 report: template: templates/default.html format: html logging: level: INFO # DEBUG, INFO, WARNING, ERROR file: logs/pipeline.log max_size: 10485760 # 10 MB backup_count: 5

config.example.yaml์ด ์ €์žฅ์†Œ์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค:

cp config.example.yaml config.yaml