Gearotons
🛒 0
Gearotons Logo

M17 Series Servomotors

Affordable and Simple All-in-One Motion Control

From Education to Innovation

M17 Series Overview

Introduction

The M17 Series Servomotors are all-in-one motion control solutions that integrate a motor, motor driver, motion controller, and encoder in a single compact package. These servomotors feature a RS-485 communication interface, enabling multiple units to be daisy-chained together and controlled from a single connection point. Available in three models - M17-60, M17-48, and M17-40 - the series offers flexible options to match specific torque requirements while maintaining consistent control characteristics.

Each M17 Series Servomotor comes with sophisticated control features including multiple operation modes, self-calibration capabilities, and built-in status monitoring through LED indicators. The motors can be easily controlled from any platform including Mac, PC, Raspberry Pi, or Arduino (requiring only a low-cost RS485 adapter), making them ideal for both educational and industrial applications.

The series supports precise position control with trapezoid movement profiles, closed-loop control mode, and comprehensive error handling. With standardized NEMA 17 mounting dimensions, wide voltage range (12-24V), and robust communication protocol, M17 Series Servomotors provide a reliable and flexible solution for applications requiring precise motion control, from robotics and CNC machines to automated testing equipment and scientific instruments.

M17 Servomotor

Key Features

M17 Servomotor Kit
  • High level of integration combines a motor, motor driver, motion control system, and encoder
  • Control any number of motors from one simple controller over a RS-485 commincation interface
  • Control with high level commands such as "Emable mosfets" and "Trapezoid move" (avoid timing critical DIR/STEP control)
  • Compact form factor nearly the same size as a NEMA 17 stepper motor with the same specifications (no protrusions)
  • Standardized NEMA 17 mounting dimensions
  • Wide voltage range (12-24V) for flexible power options
  • High-precision closed loop control with build in encoder and PID control loop that runs at 32 kHz
  • Much more power efficient in closed loop control vs. conventional stepper
  • Integrated over-current, over-voltage, and over-temperature protection
  • Maximum speed can reach 560 RPM
  • Torque-to-weight ratio is the same as an equivalent stepper motor
  • Compatible with a wide variety of interfaces and hardware, such as Raspberry Pi, Arduino, ESP32, Mac, and PC
  • We strive to provide excellent documentation and tutorials to get you up and running fast
  • We provide AI friendly documentation in case you want your favorite AI to do all the work for you
  • Suitable for robotics, CNC, automation, scientific instruments, testing jigs, 3D printers, and everything else
  • Available in different sizes so you can find the right torque and price for your application

Connection Diagram

Connection Diagram

Unit System

The M17 Series Servomotors have certain internal units so that they can perform the calculations associated with motion efficiently (using integer math). It is the responsibility of the controlling software to support multiple units of measurement for various quantities. Our Python and Arduino libraries handle unit conversions automatically, allowing you to work with your preferred units. Below are the supported units for each quantity:

QuantityAvailable Units
Timetimesteps, seconds, milliseconds, minutes
Positionshaft rotations, degrees, radians, encoder counts
Velocityrotations per second, rpm, degrees per second, radians per second, counts per second, counts per timestep
Accelerationrotations per second squared, rpm per second, degrees per second squared, radians per second squared, counts per second squared, counts per timestep squared
Currentinternal current units, milliamps, amps
Voltagemillivolts, volts
Temperaturecelsius, fahrenheit, kelvin

Getting Started Guide

To help you get started with your M17 Series Servomotor, we provide a comprehensive online guide that covers everything from initial setup to advanced protocol implementations. This guide includes:

  • Step-by-step setup instructions
  • Detailed communication protocol documentation
  • Programming examples and code snippets
  • Description of error codes
  • Troubleshooting tips and best practices

Indicator LEDs and Buttons

Motor Back with LEDs and Buttons

The servomotor has two status LEDs (Green and Red). The green LED flashes slowly to show a heart beat and quickly to indicate that the bootloader is running rather than the application. The red LED will light up briefly to show communication on the bus and will indicate fatal error codes by flashing a certain number of times.

The servomotor has two buttons labelled "Reset" and "Test". The Reset button will reset the internal microcontroller and all state will go back to default values. The Test button will cause the motor to spin. Press briefly to let it spin one way and press for more than 0.3 seconds and release to let it spin the other way. Hold down for at least 2 seconds and release to cause the motor to go to closed loop mode. Hold down for more than 15 seconds and release to let the motor perform a calibration on itself. Note that it will spin during calibration and must be able to spin freely for calibration to be successful, so remove any loads before doing this operation.

Communication Protocol

RS-485 Adapter and Wire

The M17 series uses RS-485 communication with a simple command-based protocol. Multiple motors can be daisy-chained on a single bus, each with a unique ID.

Command Reference Summary

For the up to date source of truth for all available commands, you can look at this document.

You can also run this command:

pip3 install servomotor   # run this just once to install the library and programs
servomotor_command.py -c

This will print out the information contained in the motor_commands.json file in a nicer way and give some usage information for sending commands to the motor from the command line.

The commands are grouped by functionality including Basic Control, Motion Control, Configuration, Status & Monitoring, and Device Management.

Technical Specifications

Mechanical Specifications

ParameterM17-60M17-48M17-40
Dimensions (LxW)42.2x42.2 mm42.2x42.2 mm42.2x42.2 mm
Height59.8 mm48.6 mm41.6 mm
Shaft Length20.4 mm20.4 mm18.5 mm
Shaft Diameter5 mm5 mm5 mm
Weight470g360g285g
Protection ClassIP20IP20IP20
M17-60 Dimensions

M17-60

M17-48 Dimensions

M17-48

M17-40 Dimensions

M17-40

Electrical Specifications

ParameterM17-60M17-48M17-40
Operating Voltage12-24V12-24V12-24V
Rated Torque0.65 N.m0.55 N.m0.42 N.m
Maximum Speed560 RPM560 RPM560 RPM
Maximum Current1.1A1.1A1.1A
Rated Power38W32W25W

Operating Conditions

ParameterSpecification
Operating Temperature0°C to +80°C
Storage Temperature-20°C to +60°C
Humidity Range20% to 80% RH (non-condensing)
Installation EnvironmentIndoor use only

Library Support

Python Library

Easy-to-use Python library for controlling M17 servomotors:

#!/usr/bin/env python3
"""
Minimal trapezoid move: rotate 1 turn in 1 second.
Edit ALIAS below if needed. Uses rotations and seconds.
"""
import time, servomotor
from servomotor import communication

# Hard-coded settings for a minimal demo
ALIAS = 'X'                             # Device alias, change if needed
SERIAL_PORT = "/dev/tty.usbserial-110"  # Serial device path; change if needed (e.g., "COM3" on
                                        #  Windows)
DISPLACEMENT_ROTATIONS = 1.0            # 1 rotation
DURATION_SECONDS = 1.0                  # 1 second
DELAY_MARGIN = 0.10                     # +10% wait margin because the motor's clock is not
                                        #  perfectly accurate

communication.serial_port = SERIAL_PORT # if you comment this out then the program
                                        #  should prompt you for the serial port or it will use
                                        #  the last used port from a file
servomotor.open_serial_port()

m = servomotor.M3(ALIAS, time_unit="seconds", position_unit="shaft_rotations", verbose=0)
m.enable_mosfets()
m.trapezoid_move(DISPLACEMENT_ROTATIONS, DURATION_SECONDS)
time.sleep(DURATION_SECONDS * (1.0 + DELAY_MARGIN))
m.disable_mosfets()

servomotor.close_serial_port()

Arduino Library

Arduino library for easy integration with Arduino boards:

// Minimal Arduino example: Trapezoid move using built‑in unit conversions
// Goal: spin the motor exactly 1 rotation in 1 second, then stop.
// Sequence:
//  enable MOSFETs -> trapezoidMove(1.0 rotations, 1.0 seconds) -> wait 1.1s -> disable MOSFETs.
//
// Notes:
// - This uses the library's unit conversion (no raw counts/timesteps).
// - Configure Serial1 pins for your board (ESP32 example pins below).
// - Motor is created AFTER Serial1.begin(...) so hardware UART pins are set first.

#include <Servomotor.h>

#define ALIAS 'X'                   // Device alias
#define BAUD 230400                 // RS485 UART baud rate
#define DISPLACEMENT_ROTATIONS 1.0f // 1 rotation
#define DURATION_SECONDS 1.0f       // 1 second
#define TOLERANCE_PERCENT 10        // +10% wait margin because the motor's clock is not
                                    //  perfectly accurate
#define WAIT_MS ((unsigned long)(DURATION_SECONDS * 1000.0f * (100 + TOLERANCE_PERCENT) / 100))

// Example RS485 pins for ESP32 DevKit (change as needed for your board)
#if defined(ESP32)
#define RS485_TXD 4              // TX pin to RS485 transceiver
#define RS485_RXD 5              // RX pin from RS485 transceiver
#endif

void setup() {
  Serial.begin(115200); // Console serial for debugging

  // Create the motor; serial port opens on first instantiation.
#if defined(ESP32)
  Servomotor motor(ALIAS, Serial1, RS485_RXD, RS485_TXD);
#else
  Servomotor motor(ALIAS, Serial1);
#endif

  // Use units: rotations for position, seconds for time
  motor.setPositionUnit(PositionUnit::SHAFT_ROTATIONS);
  motor.setTimeUnit(TimeUnit::SECONDS);

  motor.enableMosfets();
  motor.trapezoidMove(DISPLACEMENT_ROTATIONS, DURATION_SECONDS);
  delay(WAIT_MS);
  motor.disableMosfets();
}

void loop() {
}

Applications

The M17 Series servomotors are perfect for a wide range of applications, from educational projects to industrial automation.

Robotics Application

Robotics

Build precise robotic arms, mobile robots, and educational robotics platforms with easy-to-control servomotors.

Automation Application

Automation

Perfect for automated systems, CNC machines, 3D printers, and industrial control applications.

Company Profile

We are an innovative startup committed to making precision motion control accessible to everyone: to makers, educators, and engineers alike. Founded in Shenzhen in 2022 by a Canadian entrepreneur, we focus on developing integrated servo motor systems that combine cost-effectiveness, high integration, ease of use, and high performance.

Our first product is the M17 series servo motor, which integrates a motor, driver, controller, and encoder into a compact NEMA 17–compatible package. It features RS-485 communication, which allows any number of motors to be controlled from a platform such as Raspberry Pi, Arduino, ESP32, Mac, or PC. Designed for applications ranging from educational robotics to industrial automation, our solutions enable innovation without adding the complexity or cost of traditional systems. Join us to explore the future of motion control!

Test Rack

Our testing facility ensures every motor meets quality standards

Open Source

We believe in making the world better through technology. All software, firmware, and PCB design files are available here:

Open Source HardwareOpen Source Initiative
Gearotons

Version 1.0 - December 2024

For more information and technical support, please contact our sales team.