Skip to the content
2 layers38 × 44.6 mmServomotor3, the printed circuit board in 3D

Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

Size
38 × 44.6 mm
Copper layers
2
Thickness
0.8 mm
Parts
69
Nets
49
Pads
273
Tracks, vias
569, 225
Pours
15
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
31 Aug 2021
Updated
29 Oct 2026

Overview

Servomotor3 is an open-source printed circuit board by tomrodinger, from the tomrodinger/servomotor repository on GitHub, published under the MIT licence. It is a 2-layer board of 38 × 44.6 mm with 69 parts on 49 nets, routed with 569 tracks and 225 vias.

It is built around the AH49HSC, GC6609 and LM321, with the SP3485EN-Y, TS3735PA 250GF 030 and KT-0603R among its other parts. Its parts include 28 capacitors, 20 resistors, 8 ICs, 7 connectors and 2 diodes. It belongs with the robots and motor control and interfaces and adapters boards and the STM32 boards of this library.

Main components

7

README

README.md

Gearotons M17 servomotor family: M17-60, M17-48, M17-40, M17-34

Gearotons M17 — an open-source servomotor you can talk to

The M17 is a NEMA-17 integrated servomotor: motor, closed-loop driver, motion controller and magnetic encoder in one unit. It daisy-chains over RS-485, ships with Python and Arduino libraries, and has a first-party MCP server so an AI assistant (Claude Desktop, Claude Code, Cursor, …) can drive real motors from plain English.

Hardware, firmware and software are all in this repository under the MIT license.

M17-34M17-40M17-48M17-60
Length33.5 mm40.1 mm48.7 mm59.7 mm
Holding torque0.28 N·m0.42 N·m0.55 N·m0.65 N·m
Weight210 g285 g360 g470 g

All sizes: 12–24 V, up to ~1.1 A, up to 560 RPM, closed-loop 32 kHz control, RS-485 at 230400 baud, 64-bit unique ID + one-byte alias per motor, standard NEMA-17 mount. Indoor use (IP20).

Buy one: gearotons.com (from $20; ships worldwide from Shenzhen). Documentation: 9o.at/M17_1.5 · Datasheet (PDF) · Python API · Arduino API

Quick start (Python)

bash
pip install servomotor
python
import time, servomotor

servomotor.open_serial_port()                      # prompts for the USB–RS-485 adapter the first time
m = servomotor.M3("X", time_unit="seconds", position_unit="shaft_rotations")
m.enable_mosfets()
m.trapezoid_move(1.0, 1.0)                         # one full turn, in one second
time.sleep(1.1)
m.disable_mosfets()
servomotor.close_serial_port()

That is python_programs/example_trapezoid_move.py. Units are yours to choose (degrees, rotations, radians, encoder counts; seconds or milliseconds) — the library converts. No STEP/DIR timing, no microstep configuration.

Quick start (Arduino / ESP32)

Install the Servomotor library by Gearotons from the Arduino Library Manager, or from Arduino_library/. Wire the board's UART to an RS-485 transceiver, then:

cpp
#include <Servomotor.h>

void setup() {
  Servomotor motor('X', Serial1);                  // alias 'X'; the port opens on first use
  motor.setPositionUnit(PositionUnit::SHAFT_ROTATIONS);
  motor.setTimeUnit(TimeUnit::SECONDS);
  motor.enableMosfets();
  motor.trapezoidMove(2.0f, 3.0f);                 // two rotations over three seconds
  delay(4000);
  Serial.println(motor.getPosition());             // where it actually is, from the encoder
}
void loop() {}

That is a trimmed Arduino_library/example_one_move.cpp (the full file adds the ESP32 RS-485 pin definitions).

Quick start (talk to it)

bash
uvx --from servomotor-mcp servomotor-mcp        # runs with a simulated motor if no hardware is attached

Add it to Claude Desktop or run claude mcp add gearotons-motor -- uvx --from servomotor-mcp servomotor-mcp, then ask: "Find my motors, then move the one on the bench to 90 degrees and tell me where it ended up." Details and the full tool list: Gearotons/servomotor-mcp.

Claude Code driving a real M17 over MCP: find the motor, turn it two rotations, back, read the encoder

▶ 50-second video: the real motor and this session side by side (recorded 2026-09-09 on a bench M17).

Wiring: computer, USB to RS-485 adapter, two daisy-chained M17 motors, 12–24 V supply

What is in this repository

FolderContents
firmware/Motor firmware (STM32G0), plus bootloader_STM32G030/ and bootloader_STM32G031/
PCB/Schematics, board layouts and 3D (STEP) models of the controller board
python_programs/The servomotor Python library source, examples, test and characterisation scripts
Arduino_library/The Arduino/ESP32 C++ library and examples
API_documentation/Generated Python and Arduino API references (Markdown and PDF)
servomotor_datasheets/Datasheet sources and PDFs (EN, DE, ES, FR, IT, PT), dimension drawings
production_test_system/, motor_tests/How we test motors before they ship
marketting_page/Source of the gearotons.com product page

The command set is data-driven: every firmware command is defined once in motor_commands.json and the Python library, the Arduino library and the MCP server are generated from it, so they always agree.

Firmware 0.16.0.0

This backward-compatible M17 release adds Get PID constants (command 48). It returns the configured raw P, I and D values without changing controller or motion state. With the updated Python bindings in this repository:

python
p, i, d = m.get_pid_constants()

The release image targets M17 hardware 1.5, software compatibility code 3. See the release notes for the wire contract, upgrade/rollback commands, client requirements and test evidence.

Where the M17 is not the right tool

Direct-drive torque tops out at 0.65 N·m (gear it or go up a frame size for more), it is IP20 and indoor-only, and it is not a STEP/DIR drop-in for an existing 3D-printer board — it wants a serial bus and a host that sends it moves. We would rather you know that before you buy.

Community and support

Questions and builds: GitHub Discussions · email info@gearotons.com. Issues and pull requests welcome — the whole stack is here to be read, modified and improved.

Built and assembled by Gearotons in Shenzhen. MIT license — see LICENSE.

Parts

69
QtyValueFootprintReferences
1310kResistor_SMD:R_0402_1005MetricR2, R4, R5, R6, R7, R13, R15, R17, R22, R23, R24, R25, R27
1010uFCapacitor_SMD:C_0603_1608MetricC7, C8, C10, C11, C12, C13, C14, C15, C16, C19
7100nFCapacitor_SMD:C_0402_1005MetricC3, C18, C28, C35, C36, C37, C41
4Conn_01x01_Socketservo_motor:Pad_3mm_TopOnlyJ3, J6, J7, J8
31nFCapacitor_SMD:C_0402_1005MetricC17, C20, C23
3AH49HSCPackage_TO_SOT_SMD:SOT-23U4, U6, U7
21.5kResistor_SMD:R_0402_1005MetricR8, R12
2150mResistor_SMD:R_2010_5025MetricR1, R3
21uFCapacitor_SMD:C_0402_1005MetricC9, C22
24.7uFCapacitor_SMD:C_0402_1005MetricC4, C5
2TS3735PA-250gfservo_motor:TS3735PA-250gfSW1, SW2
101x04 male P=1.27mmConnector_PinHeader_1.27mm:PinHeader_1x04_P1.27mm_VerticalJ1
101x05 male P=1.27mmConnector_PinHeader_1.27mm:PinHeader_1x05_P1.27mm_VerticalJ2
1100k 1% NTCResistor_SMD:R_0402_1005MetricTH1
1100pFCapacitor_SMD:C_0402_1005MetricC30
110nFCapacitor_SMD:C_0402_1005MetricC1
11KResistor_SMD:R_0402_1005MetricR26
1220nFCapacitor_SMD:C_0402_1005MetricC6
122nFCapacitor_SMD:C_0402_1005MetricC2
14.7kResistor_SMD:R_0402_1005MetricR29
1470RResistor_SMD:R_0402_1005MetricR11
1Conn_01x06_SocketConnector_PinSocket_2.00mm:PinSocket_1x06_P2.00mm_VerticalJ4
1GC6609Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.75x3.75mm_ThermalViasU1
1KT-0603RLED_SMD:LED_0603_1608MetricD1
1LM321Package_TO_SOT_SMD:SOT-23-5U3
1LOGOLOGOG***
1MHT192UGCTLED_SMD:LED_0603_1608MetricD2
1SP3485ENPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU10
1STM32G031G8UxPackage_DFN_QFN:QFN-28_4x4mm_P0.5mmU2
1XC6206PxxxMRPackage_TO_SOT_SMD:SOT-23-3U11

More from tomrodinger/servomotor

6
  • 2 layers98.9 × 91.4 mmCoin Cell Tester, the printed circuit board in 3D

    Coin Cell Tester

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    204 parts17MIT
  • 2 layers46.7 × 87.5 mmServo motor, the printed circuit board in 3D

    Servo motor

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    112 parts17MIT
  • 2 layers39 × 56.4 mmServo motor, the printed circuit board in 3D

    Servo motor

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    104 parts17MIT
  • 2 layers37.8 × 44.4 mmServomotor3, the printed circuit board in 3D

    Servomotor3

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    79 parts17MIT
  • 2 layers38 × 44.6 mmM3-V5, the printed circuit board in 3D

    M3-V5

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    71 parts17MIT
  • 2 layers38 × 56.5 mmServomotorStepper V2I1, the printed circuit board in 3D

    ServomotorStepper V2I1

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    70 parts17MIT

Similar boards

  • 2 layers204 × 174.9 mmWonkle, the printed circuit board in 3D

    Wonkle

    wonkleio/wonkle

    We build together.

    519 parts125CERN-OHL-S-2.0
  • 4 layers59.2 × 66 mmEthernet bob, the printed circuit board in 3D

    Ethernet bob

    rene-dev/stmbl

    AC Servo Driver for STM32F4

    562 parts990GPL-3.0
  • 4 layers120 × 100 mmBsc, the printed circuit board in 3D

    Bsc

    shining-man/bsc_hw

    Hardware battery safety controller (BSC)

    286 parts31MIT
  • 2 layers70 × 65 mmFluepdot, the printed circuit board in 3D

    Fluepdot

    Fluepke/Fluepdot

    Project for controlling Annax flipdot panels used by the Berliner Verkehrsbetriebe

    116 parts17AGPL-3.0
  • 4 layers270 × 34 mmIo board, the printed circuit board in 3D

    Io board

    ReflexCreations/io-board

    This repository contains source documents and manufacturing files for the RE:Flex Dance Pad's I/O Board. It was created using KiCAD 5.1.4.

    95 parts8MIT
  • 2 layers65 × 35 mmJuksautin, the printed circuit board in 3D

    Juksautin

    zouppen/pumpunjuksautin

    Tricking NTC thermistor on a heat pump

    27 parts7GPL-3.0
  • 2 layers22 × 54.5 mmPrpd hardware, the printed circuit board in 3D

    Prpd hardware

    BenediktSeidl/prpd

    Read data from NEDAP PowerRouter via HTTP or RS485

    16 parts6GPL-3.0

Questions

How big is the Servomotor3 PCB?

It measures 38 × 44.6 mm and has 2 copper layers, 0.8 mm thick.

What parts does the Servomotor3 use?

69 parts, built around the AH49HSC, GC6609, LM321 and SP3485EN-Y. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Servomotor3 KiCad files?

From the tomrodinger/servomotor repository on GitHub, at the commit this page was made from: the board is PCB/Servomotor3/V9/V9.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Servomotor3 design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).