---
title: "ESP32_LinuxCNC_MotionController_RealTime"
url: "https://maker.wiznet.io/lawrence/projects/esp32-linuxcnc-motioncontroller-realtime/"
markdown_url: "https://maker.wiznet.io/lawrence/projects/esp32-linuxcnc-motioncontroller-realtime/md"
type: "UCC: User Created Content"
author: "lawrence"
author_url: "https://maker.wiznet.io/lawrence/"
original_url: "https://github.com/wezhunter/ESP32_LinuxCNC_MotionController_RealTime?tab=readme-ov-file"
published: "2025-11-26"
language: "en"
likes: 0
views: 1190
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# ESP32_LinuxCNC_MotionController_RealTime

> ESP32_LinuxCNC_MotionController_RealTime

Original source: https://github.com/wezhunter/ESP32_LinuxCNC_MotionController_RealTime?tab=readme-ov-file

## Article

## LinuxCNC란?

LinuxCNC는 리눅스 실시간 커널 위에서 동작하는 **오픈소스 CNC(Computer Numerical Control) 플랫폼**입니다. 최대 9축까지의 공작 기계·로봇·플라즈마/레이저 커터 등을 G-code로 구동하며, 모듈식 HAL(Hardware Abstraction Layer)을 통해 각종 외장 모션 카드와 쉽게 결합할 수 있는 것이 특징입니다. 최신 안정 버전은 2.9.7(2025-10)이며 Debian/Ubuntu 실시간 이미지로 간단히 설치할 수 있습니다

### 1. 프로젝트 한눈에 보기 – **ESP32 + W5500 LinuxCNC Real-Time Motion Controller**

> *저비용 ESP32 보드에 W5500 SPI Ethernet만 더해 6축 200 kHz(총 400 kHz) 스텝을 실시간으로 출력하는 ‘외장형 LinuxCNC 모션 카드’*입니다

### 2. 핵심 기술 스택 & 아키텍처

| **항목** | **기존 분석 (요약)** | **보강된 상세 내용** |
| --- | --- | --- |
| **스텝 생성 성능** | 6축 200 kHz(총 400 kHz) 스텝 실시간 출력 | **최대 200 kHz/축** (6축 동시 구동 확인). 이 속도는 **ESP32 RMT(Remote Control Peripheral)** 하드웨어를 통해 구현되며, 모든 가속 프로파일에서 부드럽고 정확하게 동작하도록 최적화되었습니다. |
| **제어 모드** | 위치·속도 핀 노출 | **저속에서는 위치(Position) 모드**, **고속에서는 속도(Velocity) 모드**로 전환하여 작동합니다. 이 동적인 제어 방식은 LinuxCNC의 궤적 계획(G-code Planner)과 ESP32의 실시간 스텝 생성을 결합하여 고속에서도 부드러운 모션을 보장합니다. |
| **펌웨어 안정성** | ESP-IDF + FreeRTOS | **24시간 안정성 및 내구성 테스트**가 완료되어 산업용 환경에서 요구되는 신뢰성을 확보했습니다. 특히 **방향 전환(Direction Pin)** 시 지연 시간을 최적화하여 고속에서도 정확한 스위칭이 가능합니다. |

### 3. 호스트 PC 툴체인(Toolchain)의 상세 역할 분석 💻

이 프로젝트에서 호스트 PC(LinuxCNC를 실행하는 컴퓨터)의 역할은 **시간 임계성(Time-Criticality)이 낮은 고수준(High-level) 제어**를 담당하고, **시간 임계성이 높은 저수준(Low-level) 제어**는 ESP32로 완전히 분리하는 것입니다.

| **툴 (Tool)** | **주 역할 (Main Role)** | **ESP32와의 관계 및 분업 역할** |
| --- | --- | --- |
| **LinuxCNC 2.9 (uspace)** | **궤적 계획 & 상위 제어** | 사용자가 입력한 G-code를 분석하여 각 축이 이동해야 할 **위치(Position)와 속도(Velocity)**를 **실시간이 아닌 주기적**으로 계산합니다. 이 명령(Motion Command)을 UDP를 통해 ESP32로 전송합니다. |
| `**esp32udp.comp**`** HAL 드라이버** | **통신 인터페이스 (HAL Hook)** | LinuxCNC의 **HAL (Hardware Abstraction Layer)** 내부에서 동작하는 모듈입니다. LinuxCNC가 계산한 모션 데이터를 UDP 패킷으로 변환하고, ESP32가 보낸 I/O 상태 및 위치 피드백을 수신하여 HAL 핀에 연결하는 **게이트웨이** 역할을 합니다. |
| `**halcompile**` | **드라이버 빌드** | `esp32udp.comp` 소스 파일을 LinuxCNC 환경에서 사용 가능한 실행 가능한 HAL 컴포넌트(드라이버)로 컴파일하는 데 사용됩니다. |
| **VS Code + PlatformIO** | **펌웨어 개발/배포** | ESP32 펌웨어(FreeRTOS 기반의 모션 제어 로직)를 작성, 빌드하고 ESP32 보드에 플래싱(업로드)하는 개발 환경입니다. PC는 펌웨어 개발 및 관리만 담당합니다. |
| **Wokwi 시뮬레이터** | **테스트 및 디버깅** | 실제 하드웨어 없이 PC 환경에서 가상의 ESP32와 LinuxCNC 간의 UDP 통신 및 GDB 디버깅을 수행하여 개발 속도와 버그 수정 효율을 높입니다. |

**핵심 분업:PC (LinuxCNC):** G-code 해석, 복잡한 보간(Interpolation) 계산, 사용자 GUI 제공, PID 제어기(선택 사항) 운영.

**ESP32 (Motion Controller):** PC로부터 받은 위치/속도 명령을 기준으로 **RMT 하드웨어를 사용하여 초정밀 시간 간격으로 스텝 펄스를 생성**하고, I/O 상태를 실시간으로 처리.

### 4. ESP32/W5500: 200 kHz 초저지연 스텝 생성의 기술적 의미 🚀

#### 1) 200 kHz 스텝 주파수의 의미 (속도 및 정밀도)

**200 kHz** (200,000 pulses/second)는 축당 매우 높은 스텝 주파수입니다. 이 수치가 갖는 실제 의미는 **고속 동작**과 **높은 분해능**을 동시에 만족시키는 능력에 있습니다.

#### 2) 고속 동작 구현 (High Speed)

200 kHz 스텝 주파수의 핵심 가치: '고속'과 '초정밀'의 양립

ESP32 모션 컨트롤러가 축당 최대 200 kHz (200,000 펄스/초)의 스텝 주파수를 제공한다는 것은, **저가형 장비의 한계를 뛰어넘어 산업용 수준의 모션 품질**을 구현한다는 의미입니다.

이는 CNC나 로봇의 성능을 결정하는 두 가지 핵심 요소인 속도(Speed)와 정밀도(Resolution)를 동시에 높일 수 있게 합니다.

#### 3) 고분해능 유지 (High Resolution)

일반적으로 고속을 원하면 모터의 분해능(Microstepping)을 낮춰야 합니다. 이는 마치 고속 주행 시 핸들을 덜 정교하게 조작하는 것과 같습니다. 하지만 200 kHz는 이 타협점을 허뭅니다

| **특징** | **설명** | **가치 부각** |
| --- | --- | --- |
| **높은 분해능 유지** | 200 kHz라는 넉넉한 펄스 속도 덕분에, 모터 드라이버는 **1/32, 1/64**와 같은 **높은 마이크로스텝** 설정을 유지할 수 있습니다. | "속도를 줄이지 않아도 정교한 제어가 가능"해집니다. |
| **모션의 부드러움** | 마이크로스텝 수가 높을수록 모터가 더 작은 단위로 움직여서 진동과 소음이 줄어듭니다. | 고속 이동 중에도 **가공 표면이 울거나 떨리지 않아**, CNC의 **최종 제품 품질과 정밀도가 향상**됩니다. |

### 5. W5500 (이더넷)의 역할 및 초저지연 통신 장점

W5500은 ESP32를 단순한 MCU에서 **결정론적(Deterministic) 실시간 모션 컨트롤러**로 변모시키는 핵심적인 역할을 합니다.

**200 kHz 스텝 펄스는 W5500이 직접 생성하는 것은 아니지만, W5500이 없다면 200 kHz의 성능과 실시간 안정성을 달성하는 것은 불가능합니다.**

200 kHz 동작이 가능한 것은 **ESP32 자체의 RMT(Remote Control Peripheral)라는 전용 하드웨어 덕분**입니다. 하지만 이 하드웨어 성능을 산업용 CNC 환경에서 **실제 최대치로 안정적으로 활용**할 수 있도록 보장하는 것이 바로 **W5500의 결정적인 역할**입니다.

| **W5500의 기술적 장점** | **초저지연 및 실시간 제어에 미치는 영향** |
| --- | --- |
| **하드웨어 TCP/IP 오프로드** | **ESP32 CPU 부하를 최소화**합니다. W5500 자체 하드웨어가 복잡한 네트워크 스택 처리를 전담하여, ESP32의 코어(Core 0)는 오직 **RMT를 통한 스텝 생성**에만 집중할 수 있게 되어 **지터(Jitter)가 개선**됩니다. |
| **결정론적 유선 통신** | Wi-Fi와 달리 EMI에 강하고 통신 지연 시간이 예측 가능합니다. 측정된 **지터가 20 µs 미만**으로, 산업용 필드버스에 준하는 신뢰성을 제공하여 고속에서도 모션 타이밍의 오차가 거의 없습니다. |
| **인터럽트 기반 저지연 수신** | UDP 패킷 수신 시 **W5500의 인터럽트 핀**을 통해 ESP32에 즉시 알림으로써, CPU가 주기적으로 폴링(Polling)하는 방식에 비해 **네트워크 지연 시간을 극적으로 단축**합니다. 이는 LinuxCNC 명령에 대한 즉각적인 반영을 가능하게 합니다. |
| **SPI 인터페이스** | RMII PHY 칩이 없는 저가형 ESP32 보드에도 점퍼 6선 연결만으로 이더넷 기능을 추가할 수 있어, **하드웨어 구성의 유연성**과 **전체 BOM(Bill of Materials) 비용 절감**에 결정적인 역할을 합니다. |

### 6. 산업 적용 분야

200 kHz 고주파 스텝과 이더넷 기반의 초저지연 특성으로 인해 이 프로젝트는 다음과 같은 분야에서 가치가 높습니다.

| **분야** | **기대 효과 (기술적 상세 추가)** |
| --- | --- |
| **고속 CNC 가공** | **초경량 소재(예: 알루미늄, 발포체)의 고속 라우팅** 및 **레이저/플라즈마 커팅**에서 빠른 공이송 속도와 정교한 코너링을 통해 전체 **가공 사이클 타임을 단축**합니다. |
| **전문 3D 프린팅** | **고속 CoreXY 및 델타 방식**의 3D 프린터에서 요구되는 **고주파 스텝**을 안정적으로 제공합니다. 특히 **멀티-재료(Multi-material) AM 장비**의 정밀 제어에 유리합니다. |
| **자동화 및 SMT (Pick & Place)** | **200 kHz의 고주파 스텝**을 활용하여 **픽앤플레이스 로봇**의 **축 구동 속도**를 높이고, **저지연** 통신으로 정지(Stop) 및 시작(Start) 동작의 **정확도**를 보장하여 **분당 부품 배치 속도(CPH)**를 극대화합니다. |
| **레거시 장비 고도화** | 수십 년 된 **STEP/DIR 인터페이스**를 가진 공작 기계에 이더넷 통신과 LinuxCNC의 현대적인 제어 기능을 결합하여, **고가의 산업용 컨트롤러 없이** 장비 성능과 수명을 연장합니다. |
|  |  |

---

Source: https://maker.wiznet.io/lawrence/projects/esp32-linuxcnc-motioncontroller-realtime/
