CNC Feed Drive

The goal of this senior project was to design a linear actuator, similar to a CNC feed drive to be used as an educational tool in the Cal Poly Controls Lab and for graduate-level research.

Our Team

Ryan Funchess

Controls Master

I am graduating fourth year mechanical engineering student with a concentration in Mechatronics. I am strongly interested in electromechanical design, stress analysis, and system modeling. After graduating, I am working as a mechanical engineer at Lawrence Livermore National Laboratory (LLNL) at their National Ignition Facility (NIF). Around San Luis Obispo, I enjoy hiking, going to the beach, and playing cards on a sunny day.


Nick de Simone


I am currently a fourth-year Mechanical Engineering student with a concentration in Mechatronics. I come from Long Beach, CA – which I have heard some refer to as “The Greatest City Ever Created” – and hope to return there for a career. As it stands, I am interested in automation and am working with Daring Engineering on a number of product development projects. I have really enjoyed working with this senior project team over the course of the year and am excited to hear of their undoubtedly remarkable career journeys.

Juan Marco Majano


I am a senior mechanical engineering student, concentrating in manufacturing.  I am interested in renewable energy technology, product design, computer hardware, and the automotive industry. In my pastime I enjoy playing, watching, and discussing the game of basketball. I am currently participating in a co-op at Applied Materials working in advanced energy storage team in the Office of the Chief Technology Officer organization. I love San Luis Obispo and I hope to retire here. 

Caleb O'Gorman


I decided to concentrate in mechatronics as I have always been interested in making the world more automated. Following graduation, I will spend the summer traveling and then start my career as a project engineer in San Diego. My favorite part of engineering is working with people to see a project from start to finish. On my leisure hours I enjoy surfing, playing sports, lifting weights, and eating well made sandwiches.


This project would not have been possible without the guidance of our incredibly dedicated coach, Professor Peter Schuster, or our generous sponsor, Simon Xing. We give our sincerest gratitude to them and the rest of the Cal Poly engineering department for such an invaluable learning experience.

We would also like to thank the Cal Poly machine shops and the shop techs for the world class facilities which have remained open to us, even in the face of extenuating circumstances.

Our Project's Videos

This video contains an overview of our project and summarizes the design process.

This video showcases our final prototype. Come see the feed drive in action!

Our Project's Digital Poster

Mission Statement

Develop an operational single axis CNC Feed Drive similar actuator for use in a future Cal Poly Controls Lab and for graduate-level system modeling.

Design Constraints

  • 30 cm travel length
  • 50 micron accuracy
  • 5 kg payload
  • System mass < 50lb
  • $800 budget
  • Accepts digital inputs

Drivetrain Analysis

CAD of drivetrain
Rail and linear bearing

We opted to use a motor and ballscrew combination for the following reasons:

  • It is industry standard and thus will provide a relevant learning experience
  • Ballscrews maintain very high levels of precision 
  • Ballscrews are strong, durable, and can transmit large loads
  • Low maintenance compared to belt drive or rack and pinion

Other considerations of the drivetrain design:

  • Flexible shaft coupling, which allows for some axial deviation between motor shaft and ballscrew
  • Thrust bearing, which is a fixed support that allows for ballscrew rotation and can absorb axial loads
  • Driving design constraint was the ballscrew’s natural frequency, resulting in a thick ballscrew of 25cm diameter
  • Rails with linear bearings provide vertical support to the load with low friction

Frame Design

PLA design

For our frame we initially wanted to go with PLA for its customizability, low price, and ease of prototyping.

FEA performed on the PLA frame

Subsequent FEA analysis showed that the PLA strength was sufficient but the large length and volume of the frame gave rise to 3-D printing complications.

ALUMINum design

We decided to pivot our frame design and selected to manufacture each face out of sheet metal aluminum and assemble them with non-permanent threaded fasteners.

CAD model for the final assembly

This CAD model allowed for accurate placement of components and dimensions of the faces to be finalized in order to begin manufacturing

This project is sponsored by Dr. Xing of the Cal Poly Mechanical Engineering Department


Following Professor Xing’s recommendation, we decided to develop a graphical user interface using MATLAB App Designer. This GUI will allow students in the Controls Laboratory to interact with the Feed Drive and experiment with different controller gains while running the system in closed loop, and characterize the system experimentally while running the system in open loop.

The final version of the MATLAB GUI

User Inputs

Controller: User can input controller gains for a PID controller that will be written over the serial port and implemented on the backend.

Step Input Control: User can input a series of three positions separated by a comma that the table will attempt to reach at steady state.

Open Loop/Duty Cycle: If the closed loop checkbox is unchecked, the system will run in open loop. If run in open loop, the user must also specify a duty cycle at which to run the motor.

Data collection

The data collection tab contains a plot of table position and table velocity as a function of time. The plots update in real time so that the user can watch the table move along with its digital position and velocity reading. After the data collection is complete, the positions, times, and velocities are exported to the MATLAB workspace where they can be saved and further analyzed later. This allows students to better characterize system gains, time constants, and analyze the effects of the PID controller that they will design.


Manufacturing occurred primarily in the Cal Poly machine shops with some light assembly performed at the teammates’ houses. Nick and Juan were able to obtain their yellow tags and thus spearheaded the machining processes.

Software Implementation

The Nucleo development board by STM, which controls the system
A soldered limit switch which is used to zero the table and prevent crashes

We decided to write our hardware drivers and task files in Python since we have prior experience in embedded Python software from the mechatronics courses. The entire backend code package consists of 4 class modules and a

Final Prototype

Weight – 47 lbs
Maximum Speed – 7.5 cm/s
Travel Length – 25 cm

Custom Components

  • Base Plate 
  • Datum Face
  • Motor Face
  • Ball Bearing Face
  • Legs
  • Wooden Base
  • Linear Rails
  • Metal Brackets
  • Plate Masses
  • Soldered Roller Switches

Stock Components

  • Motor w/ Encoder 
  • Ballnut
  • Ballnut Bracket
  • Thrust Bearing
  • Ball Bearing
  • 12 V Power Supply
  • Nucleo MCU
  • Motor Driver
  • Flexible Shaft Coupling
  • Fasteners

The prototype and all of it’s software was delivered to Professor Xing on June 3rd, 2021. Hopefully we will see it in the Controls Laboratory soon!

Design Verification

User Interface Test: For this test we recruited three new subjects to test the MATLAB GUI. None of the testers had prior experience designing controllers but were each given a brief explanation on how to operate the app. We found the average time for the users to complete a run was 29s

Travel Speed Test: For this test we ran the system in closed loop to an arbitrary three points and then, by observation, determined the maximum speed from the velocity vs time plot. The maximum speed was determined to be 7.5 cm/s.


We have several recommendations that we believe will improve the system’s performance if implemented in future iterations:

  • Source a more powerful motor that could provide a greater torque and a greater speed.
  • Purchase higher quality bearings to decrease static and kinetic friction in the drivetrain.
  • Replace mechanical limit switches with a similar device that has a greater degree of stiffness so as to reduce overshoot error in the zeroing function.
  • Manufacture frame with a CNC mill to decrease tolerances and further prevent binding possibilities.
  • Better organize wiring and other electrical components to improve aesthetics and system longevity.

Have a Question About this Senior Project?

Send an email to to be connected with the project team. Please include the title of the senior project you’re inquiring about in the subject line.

Interested in Sponsoring a Mechanical Engineering Senior Project?

Visit our Sponsorship Page to learn more!

Check Out More Projects!

Visit our ME Senior Projects Page to view the latest Mechanical Engineering senior projects from the class of 2021!


Share on facebook
Share on twitter
Share on linkedin