Implementing TAI on a Desktop 3D Printer using an Arduino Mega 2560
This project was completed as the individual project assignment for the ME 584 Advanced Mechatronics for Manufacturing course at the University of Michigan.
Introduction
Desktop 3D Printers (3DPs) are becoming more popular because of their low cost; however, their low price point also contributes to their flaws. Desktop 3DPs are unable to utilize complex control algorithms due to low processing power of the cheap microcontrollers that they use. Furthermore, motion for desktop 3DPs is actuated by stepper motors which have no feedback capabilities because they do not have sensors. Adding sensors would increase the price of these printers and therefore take away from their low cost benefit. Thus, a control solution would be an ideal solution since it would not add to the cost of manufacturing desktop 3DPs.
Objective
The objective of this project was to provide a low cost software and hardware implementation for a desktop 3D printer that would significantly improve its speed, accuracy, or other key performance metric using knowledge gained through the ME 584 Advanced Mechatronics for Manufacturing course. The tasks of this project addressed all three of the major key course topics covered in ME 584. Specifically, this project was designed to cover electromechanical system design, command generation for motion delivery systems, and controller design and analysis.
Tasks
The tasks that I accomplished for this project were as follows:
Assemble a HICTOP Prusa i3 3D printer.
Print the gcode file for a square block (provided by the professor) using the 3D printer’s standard firmware (Marlin) at 60 mm/s feedrate, 3 m/s2 acceleration rate, and 20 mm/s jerk speed.
Write and implement Matlab code to read and interpret the provided Gcode file, interpolate it (linearly) and generate its motion command trajectory (online or offline) using a trapezoidal velocity profile at 1 kHz sampling frequency, 60 mm/s feedrate, 3 m/s2 acceleration limit, and 20 mm/s jerk speed.
Use the generated motion command trajectory to determine stepper motor step and direction signals.
Drive the printer’s stepper motors via stepper drivers using the determined step and direction signals to print the square block.
Demonstrate similar print speed and accuracy as Marlin for the square block.
Implement an improved motion command generation (trajectory generation after interpolation).