Template:RepRapPro commissioning

From RepRap
Revision as of 11:36, 23 February 2013 by Adrianbowyer (talk | contribs) (Melzi adjustment)
Jump to: navigation, search


By the end of this stage, your machine will be ready for its first print.


  • An object with a measured height (we use a length of 6mm diameter silver steel - the shank of a drill bit works well too).

Step 1: Communication

Before you start trying to talk to your machine, you need Python and the dependencies.

Windows users please note that you install the 32-bit versions of all the Python software even if you have a 64-bit machine (that is to say, do exactly what it says on the following link). Windows and Mac users go here for instructions. Read down the page and only do the installation of Python and its dependencies (i.e. don't install the version of Pronterface/Printrun/Skeinforge nor the integrated pre-compiled binaries that it also talks about):


Installation of the needed software is easy under Ubuntu/Debian Linux:

 sudo apt-get install python-serial python-wxgtk2.8 python-pyglet python-tk

USB Driver

If you have a Melzi controller set the PWR-SEL jumper on your controller board to USB. This is the three pin jumper about 20mm left of the processor chip. Short the bottom two pins to power from USB (note this only powers the logic, not the steppers etc). Short the top two to power the board from the main power. You want the bottom two shorted for this step. When you are running normally, it should be the top two that are shorted.


Plug the controller into a USB port on your computer. Does the computer complain that it has no driver for the USB device? If so, unplug the USB, then install this driver or find yours in this page. Then, when you plug the controller in, it should register as a COM port on your computer.


Linux systems should recognize the controller straight away with no need for driver installation. The controller will automatically appear as something like /dev/ttyUSB0 when you plug it in. It is possible that you have to give acess rights to the USB Port e.g. for USB0: sudo chmod 666 /dev/ttyUSB0 (when there is the error message could not open port, permission denied). Or better, on Ubuntu distributions and possibly others, make sure you as a user are a member of group dialout.


Mac users should select a driver appropriate to their machine from: http://www.ftdichip.com/Drivers/VCP.htm.

As of December 2012, the current driver is named FTDIUSBSerialDriver_10_4_10_5_10_6_10_7. Although the name seems to indicate the matching versions of Mac OS X, it works fine in 10.8.2 as well. If your Mac runs Mountain Lion, go for this driver.

With the driver installed and the USB cable plugged in, the following message appears on the console:

kernel[0]: FTDIUSBSerialDriver: 0 4036001 start - ok

Connect to your printer through the device named /dev/cu.usbserial-XXXXXXXX. If you have more than one usbserial attached to your Mac, you'll need to remember which new device gets created when the cable is plugged in and remember its XXXXXXXX suffix. If there are no other usbserial devices, then when you run pronterface.py, you will see only one device in the Port list with a name starting with cu.usbserial -- connect to that one.

Start talking

The first thing to establish is that you can communicate with your machine. You will need to install and run the RepRappro Pronterface software, which you will find in our github repo here. The button to download a ZIP file is near the upper left (the little picture of a cloud with a down-arrow labelled ZIP).

If you have a Melzi controller, set its power selector jumper to use USB power (see "Melzi Adjustment" below). Leave the main power supply unplugged for the moment.

Connect your RepRap to a USB port on your computer, then run pronterface.py.

The very first time you run Pronterface, select the correct print profile by navigating to Settings->Slicing Settings. This will open a new window. Near the top is a button labelled Profile Selection. Select the relevant profile for the material with which you plan to print. For the PLA supplied with RepRap this is Huxley-PLA-05-03 or Mendel-PLA-05-03 depending on your RepRapPro machine (05 is the nozzle diameter - 0.5mm; 03 is the layer height - 0.3mm). Select "Save all" then close the window and return to the printer interface software.

For multi-colour/multi-material printing make sure that the "Monitor Printer" checkbox is unchecked.

Now select the active serial port in the upper left, choose 115200 for the baud rate (or 250000 for older firmware). Click Connect, wait a moment, and the software will confirm when the printer is online. (Whenever the controller firmware is rebooted, it will take about ten seconds to respond.)

Pronterface main.png

Press the GET POS button, and if the machine returns a position of X0.00 Y0.00 Z0.00 your serial communication is functioning correctly.

IMPORTANT. Next press "Get Temp" and check that both the hot end and the heated bed are reporting a temperature that is around room temperature (it may be a couple of degrees out - the thermistors are designed for accuracy at their operating temperature). If a temperature is too high then there is probably a short circuit in the corresponding thermistor circuit. If it is too low, then there may be an open circuit. Alternatively, your fimrware may have an incorrect setting, see next section. In either case, find the fault and fix it before you go on.

NOTE: If your pronterface window does not display the custom buttons (GET TEMP, GET POS, ... ), you most likely have another copy of .pronsolerc or .skeinforge in your home folder. Delete these files and reload the software. You should now see the extra buttons.

Confirm settings

The Melzi controller runs RepRapPro's version of Marlin firmware. This allows many machine specific settings to be adjusted from Pronterface, without having to upload new firmware. To check current settings, send an M503 command to the machine. The log window should show something like this:



echo:Steps per unit:

echo: M92 X91.429 Y91.429 Z4000.000 E945.000

echo:Maximum feedrates (mm/s):

echo: M203 X500.000 Y500.000 Z3.400 E45.000

echo:Maximum Acceleration (mm/s2):

echo: M201 X2500 Y2500 Z50 E2500

echo:Acceleration: S=acceleration, T=retract acceleration

echo: M204 S2000.000 T2000.000

echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s), Z=maximum Z jerk (mm/s), K=advance_k

echo: M205 S0.000 T0.000 B20000 X15.000 Z0.400 E25.000

echo: M206 X0.000 Y0.000 Z-0.250

echo: M208 X150.000 Y150.000 Z97.000

echo:PID settings:

echo: M301 P10.000 I2.200 D80.000 W70

echo:Thermistor settings: M304 Hh Bb Rr Tt, H0=Bed, H1..n=nozzle, b=thermistor beta value, r=series resistor, t=thermistor resistance as 25C

echo: M304 H0 B4200 R4800 T100000 M304 H1 B3960 R4700 T100000

FPU Enabled no

Each setting is displayed, along with a description. To change a settings, send the relevant command and parameter. For example, thermistor readings are interpreted on-the-fly, rather than with a lookup table, so the firmware needs to know the thermistor's beta value (from the datasheet), the value of the series resistor (which can be seen near the relvevant thermistor connector on the Melzi), and the thermistor's resistance at 25C. So, to set the nozzle thermistor parameters for a beta value of 3960, a series resistor of 4k7 Ohms, and a 100k Ohms resistance at 25C, send the following command:

M304 H1 B3960 R4700 T100000

Any settings updated from pronterface will take immediate effect, however they will not be saved to EEPROM (non-volatile memory) until you send an M500 command. Following this, the settings will persist following a power off.

Step 2: Axes

Motor movement


If limits are not set, the driver boards will most likely be destroyed.

Melzi adjustment

If you have Melzi controller electronics you should already have set its motor currents as described here for Mendel and here for Huxley.

Now that is done, move the central power selector jumper to short the two pins nearest the screw connectors. Also make sure the reset jumper (at the end of the board by the temperature sensor inputs) is not in place; just hang it on one pin for safe keeping.

Sanguinololu adjustment

The adjustment of the Pololu stepper drivers that go on the Sanguinololu board is described here on the Pololu site. See the section called Current Limiting. But ignore the bit on that page about the reference voltage being measured at a via - the easiest place to measure it is on the rotating metal part of the trimpot itself.

Adjust the trimpots to 0.4v by slowing turning clockwise while checking the voltage reading with a multimeter.

Then for both Melzi and Sanguinololu

Plug in your power supply. Watch for smoke in case something has gone horribly wrong! Also, make sure that the motors and - more importantly - the four motor driver chips - aren't getting hot. With the current limit correctly set, they should be slightly warm to the touch. Take care with the chips - they have internal temperature shutdowns that kick in around 80oC, a temperature that will burn your finger unless you just touch lightly and briefly.

Plug in the USB and run the Pronterface program. Click "Connect" and wait for your RepRap to appear online.

Now type:

G1 X5 F500

in the field below the log window and click Send. The X-motor should move to 5mm in the positive direction (X5) at 500mm/min (F500).

Now type:

G1 X0 F500

and send. The X-motor should move back to its starting location (X0). If you find that your machine will not move in the negative direction, your endstops are probably not wired correctly. Refer to the Huxley wiring page or the Mendel wiring page to check your wiring.

Repeat the above test for the other three axes. For each axis test, replace the X in the above command with the relevant axis letter (Y,Z,E), but for Z make the feedrate 200 mm/minute:

G1 Z5 F200

and for E type:


before sending:

G1 E5 F500

Warning: do not do this whilst you have filament in the extruder. The M302 command allows cold extrusion, enabling the extruder motor to move irrespective of the hot end temperature.

You may find that some axes judder, or whine but don't move. This means that their current is set a little too low.

Turn off the power, then rotate the appropriate potentiometer just a little to increase the current. Put the power back on and repeat the tests above.

Motors going backwards

RepRap works with right-handed Cartesian coordinates relative to the bed not the frame. That is to say that looking down on the bed from the front of the machine X runs from left to right, and Y runs from front to back (like a graph). Z runs up towards the top of the machine.

Remember that it is the movement of the printing head that counts: when Y increases, the bed will move towards you.

If you find that an axis is backwards, it is simple to reverse its motor: just power down and then reverse the order of its wires into the controller, so, for example, [black, green, blue, red] goes to [red, blue, green, black]. Don't forget to turn the power off before disconnecting and connecting wires.


The endstops are only checked during homing. To test them, send a homing command for the X, Y and Z axes in turn, for example

G28 X0

As soon as you press Send and the axis begins to move, activate the relevant limit switch to halt movement of the axis. If activating the switch does not halt your axis, check your wiring (Huxley here or Mendel here).


You are almost ready to home your machine. Before doing so, ensure the Z endstop is high enough on the Z smooth rod to trigger the switch without the head ploughing into your heatbed.

Press the HOME ALL button and your machine will find its reference position at X0 Y0 Z0.

(If the machine stops before reaching an endstop it may be because the endstop is being falsely triggered by interference from the stepper motor wires.)

Step 3: Alignment

Level the X axis

Use digital callipers to measure the height of the X rods above the Y rods (move the carriages out of the way if needs be). Turn the Z motors until the X axis is level.

Level the bed

If you have a Mendel, level the bed with the glass clipped in place with the four foldback clips.

If you have a Huxley, level the aluminium plate.

One of the major differences between the standard pronterface and the eMAKER version is the way the machine is manually controlled. You have five buttons which enable you to position the head above the four corners of the bed and over the centre. The Z axis can be moved in increments of 0.1mm, 1mm and 10mm. The E axis can be moved by the amount specified in the distance spin control. The speed of manual moves can be specified in the spin controls above the manual move buttons.

To level the bed, move the head up such that you have at least the height of your measured object between the head and the bed. Then position the head in the centre and bring it down gradually until it is almost touching the object. Moving the head to each corner, adjust the three M3x30mm cap head screws by which the heatbed is mounted in order to level the bed.

Start leveling with the nuts either side of the Y-axis bearing mounts a little lose, and gradually tighten them as you near your goal. You will find that you can still adjust things with the nuts slightly tight.

When you have finished the nuts on the M3 screws need to be completely tight against the bearing mounts so the bed won't move in operation.

Mendel Levelling Cheat

Unavoidably sometimes the Mendel glass is not quite flat; it is saddle-shaped with two diagonal corners one or two tenths of a millimeter low, and the two other diagonal corners high. Of course, it is geometrically/algebraically impossible to correct for this by adjusting three screws to define a first-degree (i.e. a linear) plane - a saddle is a second- (or higher-) degree surface.

But it is easy to fold a little aluminium foil to act as a shim under the glass in one corner to make the glass planar. Then you can use the three screws to get things spot on.


If you find yourself tempted to use the foil trick in more than one corner - don't. Just use it in one corner then take the time to use the screws as above to correct for every other out-of-level error.

Set your Z height

With the head at Z0, the tip of the nozzle should be within a paper thickness away from the surface of the bed. To achieve this, follow the sequence:

  • Send the following command: G1 Zz F200, where z=the height of your measured object.
  • Check that the head is within 0.3mm of your object.
  • For Huxley, adjust the height of the Z axis endstop, or for Mendel rotate the adjustment screw, and repeat until your height is set.

Step 4: Heaters

Tick the monitor check box to report the temperatures of your heatbed and nozzle. Ensure that the readings are similar to the ambient temperature of the room.


Command the heatbed to 45C (warm), tick the monitor checkbox and verify that the heatbed temperature reading rises and stabilises around 45C, and that the heatbed is actually warm.

Hot end

N.B. Some RepRapPro Huxley kits shipped with a Melzi controller between August 2012 and the first week of October 2012 have an error in the firmware. Please see this forum topic for a solution http://forums.reprap.org/read.php?214,123839,159857#msg-159857

Command the nozzle to 100C and watch the temperature rise, overshoot and eventually settle around 100C. Keep an eye on the nozzle during this test. If you see lots of smoke come out of the hot end, turn off the heater. Repeat the test with a target temperature of 200C. The nozzle should reach the target temperature in about 1 minute or less and settle within a couple of degrees of 200C.

The nozzle heater resistor has a lot more power than is necessary, so the the control parameters are set to limit the available power. For the nozzle to reach a target temperature quickly, with minimal overshoot and fast settling time, the integral windup must be tuned for the target temperature. By default, this is set to 80 by the firmware, but the start_PLA.gcode and start_ABS.gcode files should set the appropriate value for that material. This is achieved by the following line:

M301 Ww, where w = 0-255. A higher value means more power available to the nozzle heater.

So, if your nozzle does not reach the target temperature, gradually increase W until the desired performance is reached. W=120 is not uncommon for PLA, and W=180 for ABS.

Once you have tuned this value to your print material, enter it into the relevant start.gcode file. These files are in the directory:


beneath wherever you have installed pronterface.

Step 5: Extruder

Once you have verified the nozzle behaves as expected, you can carry out a test extrusion by hand. Remove the brass bowden start piece from the extruder block and feed some PLA into the tube until it reaches the nozzle (beware of the filament snagging on the short piece of PTFE tube inside the barrel). Command the nozzle to 205C, and once it has reached and settled there, push the filament through and watch it extrude. The extrusion should be maintained with a steady but not excessive force.

Pull out the filament and reassemble the bowden tube for a test of the extruder drive mechanism. This time, click on MOTORS OFF or send an M84 command, and rotate the gears whilst manually feeding some PLA filament in through the extruder drive mechanism. Repeat the extrusion test, this time by manually rotating the large gear slowly.

Finally, try extruding material by commanding the E axis. 200mm/min is a good speed for an 0.5mm nozzle; 80 mm/min is good for an 0.3mm nozzle.