Stepper Music Player

Jan 2021 - May 2021


The inspiration for this project came from the humming sounds my Ender 3D printer made during its operation. I wondered, could you make music with these stepper motors?

At the same time, I was taking a university course in Digital Systems.

Core Features

The system plays MIDI files using two stepper motors whose speed varies according the note being played. The speed changes the motor's resonant frequency, producing different tones.

Multiple Tracks - Two separate MIDI tracks can be played simultaneously

Song Selection - Can use switches to toggle between multiple songs to be played. Selected song is shown on a 7-segment display.

Song Replay - The current song can be replayed with a button, or automatically when the song ends

Playtime Display - Song time shown on a 7-segment display, shown in minutes and seconds

Digilent FPGA Board

NEMA-17 motors mounted on cardboard for acoustic purposes

How it Works

Block Diagram for FPGA

The core hardware includes:

Digilent FPGA Board - This is the FPGA board that is configured for the digital design, including a fully-pipelined MIPS-based processor, stepper motor driver circuits (a state machine), clock dividers, and song memory.

NEMA-17 Stepper Motor - Typical off-the-shelf NEMA-17 stepper motors (4 wire).

Digilent PMOD Motor Driver PCB - Connects to the PMOD GPIO pins from the FPGA board, and has connectors to for external power supply to supply additional power to motor peripherals.

Stepper Motor Driver State Machine

Assembly Code

We wrote custom assembly code that runs on the MIPS processor, designed/written in Verilog and implemented in the FPGA. We used branching instructions to “slow down” incrementing of line numbers to the correct speed for song.

Sample Assembly Code


Coming soon!