Sprinter firmware for the Ultimaker

From Ultimaker Wiki
Jump to: navigation, search

Contents

Sprinter Firmware

Important
FOR HISTORICAL PURPOSES ONLY

New machines have Marlin firmware, which is the successor of Sprinter. Do not install Sprinter on your brand new Ultimaker.   


In order to provide higher speeds and quality on the Ultimaker, there is an effort to optimize communication (See Communication speed improvements) (PC and printer) and, provide firmware with acceleration support. Note: this is work in progress, there may be issues with this firmware! Use at your own risk

Some areas for improvement:

  • Temperature not stable (+/-2 degC variations)
  • Hickups in movements when "FANCY_LCD" is enabled (seems better now).

Performance measurements are performed using the SENDG program, and this looks good!

Liberty sprinter1.jpg More images


To use it, you need to know how to download things from a GIT repository and compile it yourself. There might be hex-files available soon, but right now, that would be too early. Bernhards's GIT repository: Sprinter firmware

See video:

Benchmarks

I did some benchmarks, to see how acceleration and sprinter behave. The used test files are here: File:Testfiles.zip. These files contain movements of 100mm in a single segment ans as 400x0.25mm segments. This is ideal for measuring communication and firmware performance. All test were done with sprinter, however with different gcode source:

  • One case uses Printrun/Pronterface by Kliment
  • One case uses the first ultimaker replicatorg24, however at 115kbaud.
  • Two cases use SD card printing.

For the two SD cases, different accelerations were used.

  • The slow corresponds to the current default setting of sprinter, with an acceleration of 7000mm/sec^2, corresponding to an acceleration time of 14ms and a distance of 0.7mm to 100mm/sec. So, 0.25mm moves will never reach full speed.
  • The fast acceleration was 700000 mm/sec^2=acc. time of 0.14ms and a distance of 0.007mm. So basically, there is hardly any acceleration.

This can also be set in software, using M201 X700000 Y700000 Z7000000.


 
Print time  [sec] as a function of  feedrate [mm/sec]  in various configurations
feedr	Sd slow	Sd 	Pront	repg24 (115kbps)
~~~~    ~~~~~~~ ~~   ~~~~  ~~~~~~~~~~~~~~
10	83	80	84	84
25	35	35	37.3	52
50	21	20	24.6	49
100	16.9	12	20	38
200	15	8.2	18.5	35

The testfile moved 100m in y, and 4 times the 0.25 chain, and 3 times back with full speed. Thats 800mm in total, requiring an ideal time of 800 / feedrate seconds. The actual time it took minus the ideal time is the overhead of the communication/acceleration:

feedr	Sd slow	Sd 	Pront	repg24 115kb   [sec]
10	3	0	4	4
25	3	3	5.3	20
50	5	4	8.6	33
100	8.9	4	12	30
200	11.00	4.20	14.50	31.00

The average latency needed for a single move is hence sec/(400*4 moves):

  • ulti-repg24: 14.7ms
  • pronterface: 5.5ms
  • sd: 2ms

If we calculate the efficiency factor (as defined in the SendG page) Using factor = time / 800*f We get the following results:

feedr	Sd slow	Sd 	Pront	repg24 115kb   [number]
10	1.04	1.00	1.05	1.05
25	1.09	1.09	1.17	1.63
50	1.31	1.25	1.54	3.06
100	2.11	1.50	2.50	4.75
200	3.75	2.05	4.63	8.75

Note: for speeds up to 100 mm/sec, sendg is as fast as the SD card This plotted in nice graphs yields: Sprinter benchmark.png Sprinter benchmark latency.png

Sprinter with Skeinforge 40 and later

If you're using skeinforge 40, 41 or 42, you should get a new copy of the Dimension module from this thread. This version fixes a couple issues that can cause small pauses in your prints. DO NOT DO THIS if you're using skeinforge 43 or later - those already contains these fixes:

  • Download the dimension.py file from the thread or here.
  • Navigate to the craft_plugins folder within your skeinforge directory: skeinforge_application/skeinforge_plugins/craft_plugins.
  • Rename the dimension.py in there to dimension_backup.py (or something similar, in case you want to go back to the original version).
  • Copy and paste the downloaded dimension.py into this folder.
  • You're done. Start skeinforge.

How to setup skeinforge:

Brief instructions, copy & pasted (and slightly edited) from the Ultimaker Google Group:

You'll need to tell the firmware how many steps it takes to move the filament drive 1mm. This can be done simply by adding one line to your start gcode but the line to add depends on which bolt you have installed.

The original bolt looks like this:

Old bolt

The new bolt looks like this:

New bolt


If you have the old bolt installed, use:

M92 E926.5

If you have the new bolt installed, use:

M92 E865.888

This line should go at the top of your start.gcode.

If you (or anybody) wants to try it, you should MAKE SURE to also change the text extrusion in the start.gcode. I'm now using this...

G1 F50 E15
G1 F50 E14

..which produces a decent test extrusion. This tells it to extrude 15mm worth of filament **stock** then back it up 1mm. My old test extusion did E4000, which was good pre-SF40. With 40+, that tells it to extrude 4 METERS of filament stock, which a bit too much...


If you're using the sprinter firmware and want to use SF41 (or 40) :

  • edit your start.gcode per above. If you don't have a start.gcode you're fond of, you can use this start.gcode (and this end.gcode) (..and make sure to edit the first line, pre above, depending on which bolt you have)
  • carefully and as accurately as possible measure your filament stock diameter and enter it in Dimension\Filament Diameter. THIS IS IMPORTANT and you should have at least 2 places to the right of the decimal. Do this again any time you change filament stock or even just once a week since filament can vary a bit
  • if you're using PLA, set Dimension\Filament Packing Density to 1.0. If you're using ABS, set it to 0.85.
  • set Speed\Feed Rate to the speed you want to print at. The stock 'quality' Ultimaker profile uses 50, which is a good place to start
  • set Speed\Flow Rate to the same value as the Feed Rate - just totally forget about what you think the flow rate should be and always set it to the same value as the feed rate
  • set Speed\Travel Feed Rate to 300 [which should work fine with a properly assembled Ultimaker]
  • set Carve\Layer Thickness to whatever layer height you want. Anything between .1 and .4 should work fine
  • set Carve\Perimeter Width Over Thickness to whatever value you want. There can be a loooong discussion here about what works best for various scenarios. If you're not sure what to put here, divide 0.4 by the layer thickness value above and use that
  • set Fill\Infill Width Over Thickness like perimeter w/t above

That's it. You're done. No dialing in. No calibration cubes. No test prints - just make up some numbers, slice and print.


--------

Also, if you're trying this and new to standalone-skeinforge:

Disable these modules:

  • Chamber
  • Clip
  • Fillet
  • Home
  • Hop
  • Jitter (IMO anyway)
  • Lash
  • Limit
  • Oozebane
  • Scale
  • Splodge
  • Stretch
  • Tower
  • Unpause
  • Widen
  • Wipe


Set these values:

  • Comb\Activate Comb
  • Export\Gcode Small
  • Fill\Thread Sequence Choice to "Loops > Perimeter > Infill"
  • Cool\Cool Type to "Slow Down" and Minimum Layer Time to 10
  • Dimension\Activate Dimension
  • Dimension\Absolute Extrusion Distance
  • Multiply\Number of Rows and Number of Columns to 1
  • all the values in Temperature to the same number - I print at 230 for slower prints and 240 for fast ones, though others print as low as 190 or so. Start high until you get decent prints then work your way down you find a value that works well for you

IMO, these values should also be set:

  • Speed\Perimeter Feed Rate over Operating Feed Rate to 0.5
  • Speed\Perimeter Flow Rate over Operating Flow Rate to 0.5
  • Raft\Object First Layer Feed Rate Infill Multiplier to 0.4
  • Raft\Object First Layer Feed Rate Perimeter Multiplier to 0.4
  • Raft\Object First Layer Flow Rate Infill Miltiplier to 0.55
  • Raft\Object First Layer Flow Rate Perimeter Multiplier to 0.55

If you don't want a raft, do NOT disable the Raft module - just set Base Layers and Interface Layers to 0 instead.

The start.gcode lives in ~\.skeinforge\alterations. On Windows boxes, copy & paste this into a web browser: %USERPROFILE%\.skeinforge\alterations

How to Install and Use Skeinforge 41

At the moment it's not possible to use skeinforge 41 within the Ultimaker RepG. In order to use it you need to install it standalone. Which means that you use it as an independent program besides RepG instead of having all in one. First you generate GCODE in skeinforge, export a *.gcode file and then open this file with RepG to finally print it.

Installation:

Starting skeinforge 41:

  • Start the skeinforge.py Python script. It's located in the /skeinforge_application/ folder. Depending on your operating system the graphical interface appears instantly or you have to click (activate) the "skeinforge.py" windows that popped up and then press "Run" -> "Run module" from the menu (or press F5 alternatively).
  • Now proceed with performing the changes to the configuration as described in the section above.
Personal tools
Ultimaking Ltd.