ToyREP User Manual

From RepRap
Jump to: navigation, search

ToyREP Documentation

This page is under construction! Sorry for inconvenience.


On following page you will find step-by-step walkthrough for the calibration of the printer and hints for safe usage of this machine.


Following steps require basic knowledge of Arduino firmware, like editing and uploading. If you are not familiar with this, study this topic first.


I am sorry for any mistakes that may appear in any documentations for the printer and would like to ask you kindly to give me a notice of any problem you will find on thorgal(at)atlas(dot)cz. Despite my genuine regret I cannot be held responsible for any loses or injuries caused by calibration or operation of the ToyREP 3D printer.


Collect your favourite printer software. I am using Pronterface with Slic3r. Also download firmware for 3D printers compatible with Arduino Mega and RAMPS. My favourite is Marlin. Also download Arduino software. The manual will be prepared for this programs and firmware. Also have your ToyREP 3D printer assembled and levelled.


Following part is a bit of calibration and testing. Read it first, than set basic values to firmware and load it to Arduino. Than return to the points where it is required, measure, recalculate and load again and again until all the steps are completed. For Marlin firmware change the lines as follows (For other firmwares this may be a bit different).


For Arduino Mega 2560 with Ramps 1.4 - one extruder and no heatbed, I am using MOTHERBOARD 33 as the PWM fan may be useful. But you can use different electronics so set it accordingly.

#define MOTHERBOARD 33 // (Power outputs: Extruder, Fan, Bed)  
#define EXTRUDERS 1  


Unless you want to use redundant heat sensor there will be only one thermistor on position T0 for extruder.

#define TEMP_SENSOR_0 1  
#define TEMP_SENSOR_1 0  
#define TEMP_SENSOR_2 0  
#define TEMP_SENSOR_BED 0  

Some versions of Marlin can show actual power consumption of hotend. Measure the voltage of your PSU under load an put it into equation instead of both 12.0V. 40W Heat cartridge have resistance 3.6 Ohm. Again, you can measure ours precisely with multimeter. Don't forget that multimeter have internal resistance that you have to measure separately an deduce from measured value.

#define EXTRUDER_WATTS (12.0*12.0/3.6) //  P=I^2/R  

If your firmware supports PID for thermal control than for Chinese extruders with ceramics heat cartridges you can use following numbers. Latter you can use code M303 S200 in Pronterface to find your numbers and place them there instead.

#define PIDTEMP  
#define BANG_MAX 255  
#define PID_MAX 255  
#ifdef PIDTEMP  
  #define PID_FUNCTIONAL_RANGE 100   
  #define  DEFAULT_Kp 16.51  
  #define  DEFAULT_Ki 0.87  
  #define  DEFAULT_Kd 78.47  
#endif // PIDTEMP  


When setting up the printer keep in mind that you have endstops in X max, Y max and Z min.



You should disable steppers when the axis is not moving to prevent overheating.

#define DISABLE_X true  
#define DISABLE_Y true  
#define DISABLE_Z true  
#define DISABLE_E true  

Stepper in Y axis have inverted direction compared to X, Z and E motors.

#define INVERT_X_DIR true   
#define INVERT_Y_DIR false   
#define INVERT_Z_DIR true   
#define INVERT_E0_DIR true  

Also the homing direction is positive in X and Y axis and negative in Z.

#define X_HOME_DIR 1  
#define Y_HOME_DIR 1  
#define Z_HOME_DIR -1

Print area

The build volume is 100x100x100mm. To begin with set the printer as follows, but keep in mind this will not align hot end and print area yet:

#define X_MAX_POS 100  
#define X_MIN_POS 0  
#define Y_MAX_POS 100  
#define Y_MIN_POS 0  
#define Z_MAX_POS 100   
#define Z_MIN_POS 0   
#define MANUAL_X_HOME_POS 100  
#define MANUAL_Y_HOME_POS 100  
#define MANUAL_Z_HOME_POS 0  

After the movement is calibrated you will have to return back to this and measure real coordinates of hot end and print area. You will probably have X, Y homing position somewhere around coordinates 108,101mm:

#define X_MAX_POS 108  
#define X_MIN_POS 8  
#define Y_MAX_POS 101  
#define Y_MIN_POS 1  
#define Z_MAX_POS 100  
#define Z_MIN_POS 0  

Homing position is outside the printing area so:

#define MANUAL_X_HOME_POS 108  
#define MANUAL_Y_HOME_POS 101  
#define MANUAL_Z_HOME_POS 0  

Speeds and units

Now speeds, steps per unit and acceleration needs a bit of math and testing. Motors have 32 steps per turn, the gear is not exactly 1:64, but for the first run and tests it will be OK. I recommend using 1/16 micro stepping. 20 teeth T2.5 pulleys have ca 50mm circumference. M5 have pitch 0.8mm (M8 have 1.25mm). The gear on extruder is 1:4 and hobbed bolt have usually 6.0mm dia. Each 28BYJ-48 motor should be able to do 15RPM for sure. So:

In X and Y it should be capable of = 15x50 = 750 mm/min In Z = 15x0.8 = 12 mm/min

#define HOMING_FEEDRATE   {750, 750, 12, 0}  

Use these numbers in Pronterface until you will find quicker ones when steps per unit is calibrated precisely.

In X and Y set default steps per unit = (32x64x16)/50 = 655.36 microsteps/mm In Z = (32x64x16)/0,8 = 40960 microsteps/mm In E = (32x64x16x4)/(6x3,1415) =6953.59 microsteps/mm

#define DEFAULT_AXIS_STEPS_PER_UNIT   {655.36, 655.36, 40960, 6953.59}  

Later on, you will move the motor in each axis, measure the distance with calliper and adjust the numbers. For eg. if you move the X carriage 100mm in Pronterface, but you measure 99.7mm, or mark 100mm on filament, extrude 100mm and end up with 1mm leftover then: X = 655.36/99.7x100 = 657.33 E = 6953.59/(100-1)x100 = 7024.20

Do it for X and Y axis separately. You will probably end up with two slightly different numbers. Although pitch on threaded rods is quite precise, there will be the difference due to motor gearbox, so you have to measure Z axis too. You will end up with something like:

#define DEFAULT_AXIS_STEPS_PER_UNIT   {657.33, 657.10, 40757.73, 7024.20}  

Initially set the maximal movement speed to numbers bellow. It is way to much, but will give you a headroom for some experiments. The values represent movement speeds in mm/s.

#define DEFAULT_MAX_FEEDRATE   {50, 50, 1, 5}  

When default axis steps per unit is calibrated you can test the maximal speeds In Pronterface. Slightly rise the mm/min value and move the motor for 100mm in X, Y or 10mm in Z. Repeat this up to the point when the motor do not have enough torque to move. Then return 10% back from the last working value to be sure and use it from now on. There is only one value for X and Y axis, so pick the lower one.

You will end up with something like 2200mm/min in X, 2000mm/min in Y, 21mm/min in Z and 250mm/min on extruder. Divide these numbers with 60 seconds and put them to firmware to prevent future failure.

#define DEFAULT_MAX_FEEDRATE   {30, 30, 0.35, 4.17}


Acceleration is way different from common NEMA17 motors. I did not find any easy way how to measure or calculate the values. I only have a simple equation. If you are going to move in axis X 100mm, with top speed 30mm/s, it should finish in 100/30= 3.33 seconds. If the maximal acceleration of the printer would be (100x30)/(100/30) = 900, the printer would not almost use it and that is wrong. This machine can do safely 750mm/min in X axis = 12.5mm/s so 100x12.5/(100/12.5) = 156.25. That may be to low, so you will have to elaborate a bit and find your numbers within these limits. For Z and E the numbers are coming out really low with this method, so you will and up doing it try-and-error anyway.

#define DEFAULT_MAX_ACCELERATION   {300, 300, 1, 17}  

It is good idea to force the acceleration whenever the printer is moving, but too slow. The values bellow should be enough.

#define DEFAULT_XYJERK   5.0  
#define DEFAULT_ZJERK   0.01  
#define DEFAULT_EJERK   0.1  

That is mostly it. Keep in mind, that your printer may have different limits, so it is really better to set it for your machine.