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:

  1. Assemble a HICTOP Prusa i3 3D printer.

  2. 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.

  3. 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.

  4. Use the generated motion command trajectory to determine stepper motor step and direction signals.

  5. Drive the printer’s stepper motors via stepper drivers using the determined step and direction signals to print the square block.

  6. Demonstrate similar print speed and accuracy as Marlin for the square block.

  7. Implement an improved motion command generation (trajectory generation after interpolation).

This figure shows the final overall setup for this project. From right to left: The 3D printer is connected to the electronic circuit via the stepper motor wires. The stepper motors for each axis are being driven by DRV8825 stepper motor drivers. Ea…

This figure shows the final overall setup for this project. From right to left: The 3D printer is connected to the electronic circuit via the stepper motor wires. The stepper motors for each axis are being driven by DRV8825 stepper motor drivers. Each driver receives direction and step commands from the Arduino which the Arduino receives from the .csv file on the SD card. The entire setup is powered by two power supplies. The variable power supply powers the Arduino, whereas the 24V power supply powers the stepper drivers as well as the the remaining electronic components on the 3D printer (bed and nozzle temperature, extruder fans, and LCD screen). Finally, my laptop is used to upload code onto the Arduino as well as to generate trajectory commands using Matlab to be stored on a .csv file on an SD card.

Previous
Previous

C Programming Projects from ROB 502

Next
Next

Mechatronics Systems Design