KO EN HI
← sy-baek.shop
Conversion Project 펌웨어 완료 진행중

KP3S PCB Drill

KingRoon 3D프린터 → PCB 드릴링 전용기 전환

KingRoon KP3S 3D프린터 프레임과 모터를 100% 재활용해 PCB 전용 드릴링머신으로 전환한 프로젝트. 별도 K1C 3D프린터 보유로 KP3S가 유휴 상태 → 최소 비용으로 PCB CNC 전환. MKS Robin Nano V1 + Marlin CNC 모드 + 555 DC 스핀들 + USB CNCjs 제어.

₩0
기존 부품 재활용
~8,000RPM
555 DC 스핀들
SWD
RP2040 debugprobe

하드웨어 스펙

KP3S의 기존 기구부를 그대로 활용. 보드와 스핀들만 CNC용으로 재구성.

메인보드 MKS Robin Nano V1.x
MCU STM32F103VE (512KB flash)
스텝 드라이버 TMC2225 (온보드, TMC2209_STANDALONE 호환)
모터 NEMA17 × 3 (X/Y/Z)
X / Y 리니어 MGN12 리니어레일 + GT2 벨트
Z 리니어 V-slot 휠 + T8 리드스크류
LCD MKS TFT 3.2" (ST7789V, 320×240)
LCD 인터페이스 FSMC 병렬 버스
USB CH340 → UART3 (시리얼 통신)
스핀들 555 DC모터 Ø36mm, 12V, ~8000RPM
스핀들 축 Ø3.25mm → 콜릿 3.175mm
스핀들 제어핀 HE0 MOSFET (PC3) ON/OFF
✅ SWD 펌웨어 플래싱 해결J11 6핀 SWD 헤더 정상 연결 확인 (3.3V / GND / SWDIO-PA13 / SWCLK-PA14 / RESET). RP2040-Zero + debugprobe 펌웨어로 CMSIS-DAP SWD 프로그래머 구현 → SD카드 없이 USB에서 직접 플래시 가능. 상세 절차 →
SD카드 FAT32 필수MKS 부트로더는 FAT32만 인식. 256GB exFAT 카드 사용 시 FAT32 파티션을 별도 생성해야 함. 파일명은 반드시 Robin_nano.bin (Robin_nano35.bin ❌).

부품 구성 — 재활용 vs 신규

KP3S 기존 부품을 최대한 재활용. 추가 비용은 3D프린트 필라멘트와 소모품뿐.

분류 부품 출처 비용 비고
기구부 KP3S 프레임 일체 재활용 ₩0 알루미늄 프로파일 + 플레이트
리니어 MGN12 레일 × 2 (X/Y) 재활용 ₩0 GT2 벨트 포함
리니어 V-slot + T8 리드스크류 (Z) 재활용 ₩0 Z축 이송계
모터 NEMA17 × 3 재활용 ₩0 X/Y/Z 스테핑모터
전자부 MKS Robin Nano V1 재활용 ₩0 Marlin CNC 모드로 리플래시
전자부 MKS TFT 3.2" LCD 재활용 ₩0 TFT_COLOR_UI 표시
전원 KP3S 12V PSU 재활용 ₩0 보드 + 스핀들 공급
스핀들 555 DC모터 (Ø36mm, 12V) 신규 ~₩5,000 ~8000RPM, HE0 MOSFET 제어
마운트 555 모터 마운트 (PLA) 3D프린트 ~₩500 K1C로 출력
워크홀딩 PCB 클램프 지그 (PLA) 3D프린트 ~₩500 PCB 고정 지그
워크홀딩 슬라이드 클램프 × 8 (PLA) 3D프린트 ~₩300 희생판 고정
드릴 비트 카바이드 PCB 비트 세트 신규 ~₩15,000 Ø0.8 / 1.0 / 1.2 / 1.5mm
익스트루더 핫엔드 / 노즐 / 히터 제거 3D프린팅 기능 완전 폐기
추가 비용 합계 ~₩21,300 KP3S 본체 가격 제외
KP3S 재활용 부품
신규 구매 / 3D프린트
제거 부품

펌웨어 설정 — Marlin CNC 모드

Marlin 2.x를 MKS Robin Nano V1 + CNC 모드로 빌드. 3D 프린팅 기능 완전 제거.

Configuration.h 핵심 설정

// 보드 타겟 MOTHERBOARD = BOARD_MKS_ROBIN_NANO MACHINE_NAME = "KP3S PCB Drill" // 드라이버 (TMC2225 온보드) X/Y/Z_DRIVER_TYPE = TMC2209_STANDALONE // 익스트루더 1로 설정 (TFT_COLOR_UI 필수) EXTRUDERS = 1 TEMP_SENSOR_0 = 0 // 히터 없음 TEMP_SENSOR_BED = 0 // 히팅베드 없음 // 시리얼 (CH340 → UART3) SERIAL_PORT = 3 // LCD MKS_ROBIN_TFT28 TFT_COLOR_UI TFT_MIRROR_X

Configuration_adv.h 스핀들 설정

// 스핀들 활성화 SPINDLE_FEATURE // 활성 // HE0 MOSFET 핀 (PC3) SPINDLE_LASER_ENA_PIN = PC3 // PWM 미사용 (ON/OFF 전용) // #define SPINDLE_LASER_PWM // 스핀들 가동 지연 SPINDLE_LASER_POWERUP_DELAY = 1000 SPINDLE_LASER_POWERDOWN_DELAY = 1000 // G-code 명령 // M3 → 스핀들 ON // M5 → 스핀들 OFF
EXTRUDERS=1이 필요한 이유TFT_COLOR_UI는 EXTRUDERS≥1이어야 컴파일됨. EXTRUDERS=0으로 하면 AXIS_RELATIVE_MODES 배열 원소 수 불일치로 빌드 실패. TEMP_SENSOR_0=0으로 설정해 실제 히터 없이 동작.

빌드된 펌웨어 파일

파일명크기상태설명
Robin_nano.bin 198KB ✅ 현재 적용 TFT_COLOR_UI + TFT_MIRROR_X — 2026-05-01 플래시 완료
Robin_nano_cnc_ui.bin 190KB 이전 버전 초기 CNC UI 시도
Robin_nano35.bin 119KB ❌ 인식불가 잘못된 파일명 — KP3S 부트로더 미인식

스핀들 제어 — 555 DC 모터

KP3S 익스트루더 히터 MOSFET(HE0)을 스핀들 ON/OFF 제어로 재활용.

HE0 MOSFET 재활용
원래 핫엔드 히터 제어용 MOSFET(PC3 핀)을 스핀들 전원 스위치로 재사용. Marlin의 SPINDLE_LASER_ENA_PIN을 PC3로 지정.
🔄
ON/OFF 전용
555 DC모터는 PWM 속도 제어 없이 12V 풀전압 ON/OFF로만 동작. PCB 드릴링은 항상 최대 RPM을 사용하므로 PWM 불필요.
📟
G-code 명령
M3 — 스핀들 ON (1초 가동 딜레이)
M5 — 스핀들 OFF
FlatCAM이 드릴 G-code에 자동 삽입.

555 DC모터 스펙

외경 Ø36mm × 57mm
전압 12V DC
무부하 RPM ~8,000 RPM
축 직경 Ø3.25mm
콜릿 사이즈 3.175mm (1/8")
제어 방식 HE0 MOSFET ON/OFF

USB 제어 — CNCjs

펌웨어 플래시 후에는 SD카드 불필요. USB 시리얼로 실시간 G-code 전송 및 조그 제어.

✅ SD카드 없이 동작 가능펌웨어가 이미 KP3S에 올라가 있으므로 USB(CH340) 연결만으로 CNCjs에서 직접 G-code 전송, 조그 이동, 스핀들 ON/OFF 모두 가능.
CNCjs 시작 방법
# 터미널에서 실행 cncjs # 브라우저에서 접속 http://localhost:8000 # 연결 설정 포트: /dev/tty.usbserial-* Baud: 115200 컨트롤러: Marlin
주요 G-code 명령
// 홈 설정 G92 X0 Y0 Z0 // 이동 G0 X10 Y10 // 빠른 이동 G1 Z-1.5 F100 // 드릴 진입 // 스핀들 M3 // ON M5 // OFF // 드릴 사이클 G81 X5 Y5 Z-1.6 R1 F80

G-code 파이프라인

KiCad 설계 파일부터 실제 드릴링까지 전체 흐름.

KiCad (회로설계) │ ▼ File → Export → Drill (.drl, Excellon 포맷) │ ▼ FlatCAM │ ├─ .drl 파일 임포트 │ ├─ 드릴 직경별 그룹화 │ ├─ TSP 경로 최적화 (이동거리 최소화) │ └─ G81/G83 드릴 사이클 G-code 생성 → .nc 출력 │ ▼ CNCjs (localhost:8000, USB) │ ├─ .nc 파일 로드 │ ├─ XY 원점 설정 (PCB 기준점 맞춤) │ ├─ Z 원점 설정 (PCB 표면 = Z0) │ └─ M3 → G-code 실행 → M5 │ ▼ KP3S PCB Drill ├─ 555모터 ON ├─ XY 이동 → 홀 위치 ├─ Z 하강 → 관통 드릴링 ├─ Z 상승 → 다음 홀로 이동 └─ 완료

SWD 펌웨어 플래싱 — RP2040-Zero debugprobe

SD카드 없이 USB만으로 펌웨어 완전 제어. RP2040-Zero + debugprobe + OpenOCD. 핵심 발견: Marlin 링커스크립트 고정 베이스 0x08007000 — 36바이트 ARM Thumb 트램폴린으로 CPU 리셋 벡터 간극 해결.

문제 → 해결

기존 문제
펌웨어 수정할 때마다:
① PlatformIO 빌드 → Robin_nano.bin 생성
② SD카드에 파일 복사
③ 보드에 SD카드 삽입
④ 전원 투입 → 플래시
⑤ SD카드 제거

매번 SD카드를 빼고 꽂는 반복 작업. 보드 위치가 좁아 접근성 불량.
SWD 해결
RP2040-Zero + debugprobe 펌웨어:
① PlatformIO 빌드 → Robin_nano.bin 생성
② OpenOCD 명령 한 줄 실행
③ 끝. SD카드 불필요.

J11 SWD 헤더 상시 연결 → 커맨드 한 줄로 플래시 완료.

J11 SWD 헤더 (보드 실물 확인 완료)

// MKS Robin Nano V1.3 — J11 6핀 SWD 헤더 (이미 핀헤더 실장됨) // 위치: 보드 우측 상단 코너 ┌─────────────────┐ │ J11 6-Pin SWD │ ├────┬────────────┤ │ 1 │ 3.3V │ │ 2 │ SWDIO (PA13, Pin 72) │ │ 3 │ SWCLK (PA14, Pin 76) │ │ 4 │ RESET │ │ 5 │ GND │ │ 6 │ (NC) │ └────┴────────────┘ ★ 핀헤더 이미 납땜되어 있음 — 추가 작업 없이 점퍼선 연결만 하면 됨

RP2040-Zero → debugprobe 변환 과정

Step 1 — UF2 펌웨어 설치
debugprobe.uf2 플래시
BOOT 버튼 누른 채 USB 연결 → RPI-RP2 드라이브 마운트 → debugprobe_on_pico.uf2 파일 드래그 앤 드롭. 자동 재부팅 후 CMSIS-DAP 디바이스로 인식됨.
Step 2 — 배선 (3선)
RP2040-Zero ↔ J11 SWD 헤더 연결
RP2040-ZeroJ11 SWD 헤더
GP2SWDIO (PA13)
GP3SWCLK (PA14)
GNDGND
3.3V 연결 불필요 — Robin Nano 보드 자체 전원 사용. RP2040은 USB에서 전원 공급.
Step 3 — 핵심 발견 (2026-05-12)
Robin_nano.bin은 SWD 불가 — raw binary 추출 필수

Robin_nano.bin은 MKS 전용 암호화 바이너리 (SD카드 부트로더용). SWD에서 직접 플래시하면 부팅 불가. PlatformIO 빌드 후 ELF에서 raw binary를 추출해야 한다.

# PlatformIO 빌드 완료 후 raw binary 추출 arm-none-eabi-objcopy -O binary \ .pio/build/mks_robin_nano_v1v2/firmware.elf \ firmware_marlin_raw.bin # 확인: SP=0x2000FFD8, RV=0x080090F5, 베이스=0x08007000 (455 포인터)
Step 4 — 핵심 발견 (2026-05-12)
링커스크립트 — 앱 베이스는 0x08007000 고정

mks_robin_nano.ld 링커스크립트가 rom ORIGIN = 0x08007000으로 고정되어 있다. 즉, 앱의 모든 절대 주소 포인터가 0x08007xxx 영역을 가리킨다. 그런데 STM32는 리셋 시 CPU가 0x08000000에서 SP/PC를 읽는다. MKS 부트로더 없이 SWD 단독 플래시 시 0x08000000이 0xFF(소거 상태)이면 SP=0xFFFFFFFF → 즉시 double fault.

# mks_robin_nano.ld — 링커스크립트 핵심 MEMORY { ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40 rom (rx) : ORIGIN = 0x08007000, LENGTH = 512K - 28K - 4K } # → 앱의 g_pfnVectors(벡터 테이블) = 0x08007000 고정 # → CPU 리셋 벡터(0x08000000)에 트램폴린이 없으면 double fault
Step 5 — 핵심 해결 (2026-05-12)
36바이트 ARM Thumb 트램폴린 — 보드 복구 완료

0x08000000에 36바이트 트램폴린을 배치한다. CPU가 리셋 시 0x08000000에서 부팅 → 트램폴린이 SCB_VTOR을 0x08007000으로 설정 → 앱의 SP/PC를 로드 → BX로 앱 진입. 이 트램폴린이 없으면 보드가 부팅 불가.

# trampoline_0x08000000.bin (36바이트) 구조 # 0x08000000: SP_temp = 0x20001000 (임시 스택) # 0x08000004: Reset = 0x08000009 (Thumb bit 셋) # 0x08000008: LDR r0,[pc,#16] → r0 = SCB_VTOR (0xE000ED08) # 0x0800000A: LDR r1,[pc,#20] → r1 = app_base (0x08007000) # 0x0800000C: STR r1,[r0] → SCB_VTOR = 0x08007000 # 0x0800000E: LDR r0,[r1,#0] → r0 = app SP # 0x08000010: MOV SP,r0 → SP = 앱 스택 포인터 # 0x08000012: LDR r0,[r1,#4] → r0 = app Reset Vector # 0x08000014: BX r0 → 앱 진입 # 0x08000016: NOP → 패딩 # 0x0800001C: 0xE000ED08 → SCB_VTOR 리터럴 # 0x08000020: 0x08007000 → app_base 리터럴
Step 6 — 완성된 플래시 워크플로우
완전한 SWD 플래시 순서 (SD카드 완전 불필요)
# ① PlatformIO 빌드 후 raw binary 추출 arm-none-eabi-objcopy -O binary \ .pio/build/mks_robin_nano_v1v2/firmware.elf firmware_marlin_raw.bin # ② 전체 소거 (새 보드 or 복구 시) openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg \ -c "init; halt; stm32f1x mass_erase 0; exit" # ③ 트램폴린 → 0x08000000에 플래시 (36바이트, ★ 필수) openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg \ -c "program trampoline_0x08000000.bin 0x08000000 verify reset exit" # ④ Marlin 앱 → 0x08007000에 플래시 openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg \ -c "program firmware_marlin_raw.bin 0x08007000 verify reset exit" # 결과: LCD에 "KP3S PCB Drill" 화면 표시 — 확인 완료 (2026-05-12)
주소 범위내용크기
0x08000000 ~ 0x08000023ARM Thumb 트램폴린 (★ 필수)36 bytes
0x08000024 ~ 0x08006FFF미사용 (소거 상태)~28KB
0x08007000 ~ 끝Marlin firmware_marlin_raw.bin~200KB
⚠️ mass_erase 후 반드시 트램폴린 재플래시 필요 — 소거 시 0x08000000도 지워짐.
OpenOCD 설치: brew install openocd (macOS) — RP2040 debugprobe는 CMSIS-DAP 표준 프로토콜이므로 별도 드라이버 불필요. trampoline 파일 위치: ~/Desktop/kp3s-cnc/trampoline_0x08000000.bin

비용

₩0
추가 비용 — RP2040-Zero 보유 활용

• RP2040-Zero: 보유중 (다른 프로젝트 전용)

• 점퍼선 3개: 보유

• 대안: ST-Link V2 클론 (~₩3,000) — 동일 결과

• SD카드 완전 불필요 — USB만으로 펌웨어 전체 관리

3D 프린트 파트

K1C로 PLA 출력. OpenSCAD 파라메트릭 설계.

파일 크기 용도 소재
555_motor_mount.stl 280KB 555 DC모터 Z축 캐리지 마운트 PLA
pcb_clamp_jig.stl 130KB PCB 기판 위치 고정 지그 PLA
slide_clamp.stl 21KB 희생판 슬라이드 클램프 (단품) PLA
slide_clamp_x8.stl 130KB 슬라이드 클램프 × 8 (배치 출력) PLA
pcb_vise.scad PCB 바이스 (베이스 + 가동조 + 핸들) — Ø8mm 볼스크류 500mm PLA

PCB 바이스 — 볼스크류 가변 클램핑

100×100×30mm 베이스에 상단 10mm 위치에 PCB 슬롯(2mm 홈 전후면). Ø8mm 볼스크류(500mm, 보유)로 가변 조임. KP3S 알루미늄 베드에 Ø4mm 나사로 직접 고정. 3파트 분할 출력.

📐
베이스 (Base)
100×100×30mm. PCB 슬롯(상단 10mm, 2mm 깊이 × 90mm 길이), Ø8.3mm 볼스크류 관통홀(Z=15mm), 4코너 Ø4mm 마운팅홀(베드 고정용), 가동조 이동 공간 포켓.
🔧
가동조 (Jaw)
20×90×28mm. Ø8.3mm 볼스크류 관통홀 + M8 육각너트 포켓(13mm across flats). 볼스크류 회전 → 조 이동 → PCB 양측 고정.
🎛️
핸들 (Knob)
Ø30×15mm 원형 노브. 4개 핑거 그립 홀(Ø8mm), Ø8.3mm 중심 관통, M3 세트스크류 홀(볼스크류 잠금). 허브 12×5mm 돌출.
// pcb_vise.scad — 핵심 파라미터 base_w = 100; // X 폭 base_d = 100; // Y 깊이 base_h = 30; // Z 높이 slot_from_top = 10; // PCB 슬롯 위치 (상단에서) slot_depth = 2; // 홈 깊이 (전후면) screw_dia = 8; // Ø8mm 볼스크류 mount_dia = 4; // Ø4mm 베드 고정홀
Z=0 원점 설정: 콜릿-릴리즈 방식 — 콜릿을 살짝 풀어 드릴비트가 중력으로 PCB 표면에 안착 → 다시 조임 → Z=0 설정. Ø0.8mm 초미세 비트는 접촉식 원점잡기 시 100% 휘어짐 — 반드시 콜릿-릴리즈 방식 사용.
OpenSCAD 소스: ~/Desktop/kp3s-cnc/*.scad STL: ~/Desktop/kp3s-cnc/*.stl

트러블슈팅 기록

전환 과정에서 겪은 문제와 해결 방법.

해결
펌웨어 파일명 오류 — Robin_nano35.bin
KP3S 부트로더는 Robin_nano.bin만 인식. Robin_nano35.bin으로 저장 시 플래시 무시. → 파일명 변경으로 해결.
해결
256GB SD카드 exFAT — 부트로더 인식 불가
MKS 부트로더가 FAT32만 지원. 256GB 카드는 기본 exFAT 포맷. → 디스크 유틸리티에서 FAT32 파티션 별도 생성 후 해결.
해결
EXTRUDERS=0 빌드 실패
TFT_COLOR_UI가 EXTRUDERS≥1 요구. AXIS_RELATIVE_MODES 배열 크기 불일치로 컴파일 에러. → EXTRUDERS=1 + TEMP_SENSOR_0=0으로 해결.
부분 해결
LCD 방향 — ST7789V vs MKS_ROBIN_TFT28 충돌
MKS_ROBIN_TFT28 기본 방향(EXCHANGE_XY|INVERT_Y)이 KP3S의 ST7789V 패널과 맞지 않음. TFT_ROTATE_90/180/270, TFT_MIRROR_Y 등 다수 시도 후 화면 깨짐 또는 반전 현상 지속.
최종 결정: TFT_MIRROR_X 상태 유지 + 물리적으로 LCD를 회전 장착.
해결 (2026-05-09)
USB 펌웨어 플래시 → RP2040-Zero SWD로 해결
STM32 시스템 부트로더가 USART1에만 응답 → CH340 USB로는 플래시 불가였으나, J11 SWD 헤더(6핀, 이미 실장됨)를 발견. RP2040-Zero에 debugprobe 펌웨어 설치 → CMSIS-DAP SWD 프로그래머로 활용. OpenOCD 한 줄 커맨드로 SD카드 없이 직접 플래시. 상세 →

심층 리서치 — 펌웨어 & 플래싱 분석

8개 병렬 리서치로 도출한 MKS Robin Nano V1 플래싱 방법, grblHAL 호환성, 커스텀 업그레이드 경로 분석 (2026-05-09)

① USB 펌웨어 플래시 — STM32F103 한계 분석

방법가능 여부비고
USB 직결 DFU 불가 STM32F103 시스템 부트로더는 UART 전용. USB DFU 미내장. (F4/H7과 다름)
BOOT0=1 + UART 부트로더 가능 BOOT0 핀 HIGH → USART1(PA9/PA10) → stm32flash 또는 STM32CubeProgrammer
ST-Link SWD 가능 ST-Link V2 클론 (~₩3,000) → J11 SWD 헤더 직결. 별도 구매 필요.
RP2040-Zero debugprobe SWD ✅ 채택 보유 RP2040-Zero + debugprobe UF2 → CMSIS-DAP → J11 SWD. 추가비용 ₩0. 상세 →
SD카드 부트로더 폴백 방법 Robin_nano.bin → FAT32 SD → 전원 투입. SWD 실패 시 복구용.
해결: STM32F103은 USB DFU 미지원, CH340은 UART3(G-code 통신용)이라 USB 플래싱 불가. 그러나 J11 SWD 6핀 헤더가 이미 실장되어 있음을 확인RP2040-Zero + debugprobe 펌웨어 = CMSIS-DAP SWD 프로그래머 (추가비용 ₩0). OpenOCD 한 줄 커맨드로 0x08007000 영역에 직접 플래시. SD카드 완전 불필요.

② grblHAL STM32 포팅 현황

MCUgrblHAL 지원비고
STM32F103VE (Robin Nano) 제한적 / 동결 2025-05 메모리 부족으로 128KB 지원 동결. 256KB F103VE는 기술상 가능하나 플러그인 제한.
STM32F411 BlackPill 완전 지원 (권장) 512KB flash / FPU 내장 / grblHAL 공식 지원. ~₩5,000. F103 핀 배열과 유사해 배선 재활용 가능.
BTT SKR Mini E3 완전 지원 STM32F103 기반 3D프린터 보드 중 grblHAL 공식 지원 보드. ~₩25,000.

③ LCD 세로모드 해결 경로

원인: TFT_COLOR_UI는 MKS 커스텀 포크 — 표준 Marlin에 없음. 공식 TFT_ROTATE와 동작 방식이 달라 270도 깨짐 발생.

재시도 방법: TFT_MIRROR_X 제거 후 숫자 값 방식으로 시도:

// Configuration.h
#define TFT_ROTATE 1   // 90도 세로 (커넥터 좌)
// 또는
#define TFT_ROTATE 3   // 270도 세로 (커넥터 우)

ST7789V는 MADCTL 레지스터로 4방향 모두 지원. TFT_ROTATE_90 (문자열) 방식과 달리 숫자값은 MKS 포크에서도 동작 사례 있음.

④ 스핀들 PWM 속도제어 활성화

현재는 ON/OFF만 가능 (HE0/PC3). PWM 속도제어 활성화 방법:

// Configuration_adv.h
#define SPINDLE_FEATURE
#define SPINDLE_LASER_USE_PWM           // ON/OFF → PWM 전환
#define SPINDLE_LASER_ENA_PIN    PC3    // 현재 HE0
#define SPINDLE_LASER_PWM_PIN    PB0    // FAN1 핀 재활용 (FAN1 비활성화 전제)
#define SPINDLE_LASER_FREQUENCY  2500   // Hz
#define SPINDLE_RPM_RANGE        { 5000, 10000 }

555 모터는 PWM 주파수 2500Hz에서 안정. IRF520 MOSFET 프리휠 다이오드 병렬 추가 권장.

⑤ 업그레이드 경로 비교

경로추가비용난이도CNC 완성도특이사항
A. 현재 보드 유지 (Marlin 개선) ₩0 60% TFT_ROTATE 재시도 + PWM 활성화. TFT_COLOR_UI 한계 존재.
B. Arduino Nano + CNC Shield v4 ₩8,000 90% GRBL 1.1 표준 스택. PCB 드릴링 업계 표준. NEMA17 재사용. LCD 없음.
C. STM32F411 BlackPill + grblHAL ~₩15,000 100% Robin Nano 모터 드라이버 재활용. USB CDC 직결. 진정한 커스텀 CNC 보드.

⑥ 실물 보드 핀맵 — J11 SWD 6핀 확인 완료 ✅

J11 SWD 6핀 헤더 ✅ 확인완료

위치: 보드 우측 상단 — 핀헤더 이미 실장됨 (추가 납땜 불필요)

핀 순서: 3.3V / SWDIO(PA13) / SWCLK(PA14) / RESET / GND / NC

RP2040-Zero debugprobe → GP2(SWDIO) + GP3(SWCLK) + GND 3선 연결 → OpenOCD 플래시.

BOOT0 솔더 패드

위치: STM32F103VE 칩 근처 JP 솔더 패드 (핀 헤더 없음, 솔더 브리지 방식)

동작: 패드 브리지 → BOOT0=HIGH → 시스템 부트로더 진입 → USART1(PA9/PA10)만 응답

UART 방식은 USB-TTL 어댑터 + PA9/PA10 직결 필요 (CH340 경로 아님)

OFF/ON USB-PWR 슬라이더

위치: 보드 하단 USB-B 소켓 바로 옆 슬라이더 스위치

기능: USB에서 보드 전원 공급 여부 선택 (ST-Link 사용 시 OFF 권장)

ST-Link + 12V 동시 연결 시 반드시 USB-PWR=OFF. 전원 충돌 방지.

향후 계획

현재 진행중인 작업과 향후 업그레이드 계획.

🔌
RP2040-Zero debugprobe SWD 플래싱
debugprobe UF2 설치 → J11 SWD 3선 연결 → OpenOCD 직접 플래시. SD카드 불필요. 펌웨어 수정 사이클 대폭 단축.
✅ 설계 완료 — 2026-05-13 실행 예정
🗜️
PCB 바이스 3D프린트 + 조립
pcb_vise.scad 검증 → K1C 출력 (3파트) → Ø8mm 볼스크류 조립 → 알루미늄 베드 Ø4mm 고정. 콜릿-릴리즈 방식 Z=0 원점잡기.
✅ 설계 완료 — 2026-05-13 출력 예정
🔧
실제 PCB 드릴링 테스트
test-drill.nc G-code 파일로 시험 가공. CNCjs USB 연결 → 콜릿-릴리즈 Z=0 → 드릴링 정밀도 검증.
다음 단계 — SWD + 바이스 완료 후
📺
커스텀 CNC LCD UI
TFT 화면에 X(빨강) / Y(초록) / Z(파랑) 컬러 조그 버튼 구현. Marlin draw_status_screen() 수정.
계획중
🔄
Arduino Nano + CNC Shield 전환
MKS Robin Nano → Arduino Nano + CNC Shield v4 + A4988 × 3 교체. GRBL 1.1 + Candle로 단순화. NEMA17 모터 재사용.
검토중 — 보드 미보유

PCB 드릴링 머신 비교

항목 KP3S PCB Drill 이 프로젝트 PCB Nano Drill PCB-D300
컨트롤러 MKS Robin Nano V1 Arduino Nano + CNC Shield MKS DLC32 (ESP32)
드라이버 TMC2225 (온보드) A4988 × 3 TMC2209 × 3
스핀들 555 DC 12V ~8000RPM Ø30mm DC 12V 8000RPM 200W ER11 30,000RPM
총비용 ~₩21,300 (추가비용만) ~₩148,000 ₩629,000
제어 USB CNCjs USB Candle / bCNC WiFi 웹UI
LCD TFT 3.2" (컬러) 없음 터치스크린