From 3a428a43066c0e6b670b2dc0e50f8678d7abb108 Mon Sep 17 00:00:00 2001 From: Christopher Mattar <69043333+3DCoded@users.noreply.github.com> Date: Sat, 16 Nov 2024 07:25:39 -0500 Subject: [PATCH] Deployed e53e927 with MkDocs version: 1.6.1 --- 404.html | 4 +- compare/index.html | 4 +- configuration/fsensor/index.html | 4 +- configuration/index.html | 4 +- configuration/install/index.html | 4 +- configuration/macros/index.html | 4 +- configuration/steppers/index.html | 4 +- contributing/devsetup/index.html | 4 +- contributing/index.html | 4 +- contributing/supportcontrollers/index.html | 4 +- experimental/dualdrivetpu/index.html | 4 +- experimental/index.html | 4 +- experimental/rapidtip/index.html | 4 +- experimental/speedlimit/index.html | 4 +- flowchart/index.html | 4 +- guides/3dchameleon/index.html | 4 +- guides/bypass/index.html | 4 +- guides/endless/index.html | 4 +- guides/manualcutter/index.html | 4 +- guides/materials/index.html | 4 +- guides/notip/index.html | 4 +- guides/tipshaping/index.html | 4 +- happy-hare/index.html | 4 +- hidden/hidden-assembly/index.html | 4 +- index.html | 4 +- instructions/index.html | 4 +- print_page/index.html | 112 ++++++++++++++- search/search_index.json | 2 +- setup/assembly/index.html | 6 +- setup/bom/index.html | 6 +- setup/controllers/bttmmb/index.html | 4 +- setup/controllers/bttoctopusmain/index.html | 4 +- .../einsyrambo-skrminie3v2/index.html | 4 +- setup/controllers/geetech-a30t/index.html | 10 +- setup/controllers/index.html | 6 +- .../{melloyflyd7 => mellowflyd7}/index.html | 130 ++++++++++++++++-- setup/controllers/minirambo/index.html | 10 +- setup/controllers/skrminie3v2/index.html | 4 +- setup/controllers/skrpico/index.html | 4 +- setup/controllers/zm384main/index.html | 4 +- setup/firmware/index.html | 4 +- setup/firstprint/index.html | 4 +- setup/k1/index.html | 4 +- setup/klipperscreen/index.html | 4 +- setup/slicer/index.html | 4 +- sitemap.xml | 2 +- sitemap.xml.gz | Bin 578 -> 578 bytes troubleshooting/failedloadunload/index.html | 4 +- troubleshooting/falsealarm/index.html | 4 +- troubleshooting/index.html | 4 +- troubleshooting/skipping/index.html | 4 +- troubleshooting/underextrusion/index.html | 4 +- 52 files changed, 326 insertions(+), 126 deletions(-) rename setup/controllers/{melloyflyd7 => mellowflyd7}/index.html (94%) diff --git a/404.html b/404.html index c4deb6f..e7d1a37 100644 --- a/404.html +++ b/404.html @@ -653,11 +653,11 @@
If the RAMBo lights up, you wired it correctly!
-Finally, plug the RAMBo into your Klipper host with the cable that came with it.
Finally, plug the RAMBo into your Klipper host with the cable that came with it.
Max filament units: 6
+MCU Name: 3ms
Name | +Price | +Quantity | +Link | +Notes | +
---|---|---|---|---|
Mellow Fly D7 | ++ | 1 | ++ | + |
Duponts | +$9.99 | +1 | +Amazon | +These wires are only sufficient to run steppers, not heaters | +
12V PSU | +$7.39 | +1 | +Amazon | +This PSU is only sufficient to run steppers, not heaters | +
Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
+Filament Unit # | +Motor Port | +
---|---|
0 | +X | +
1 | +Y | +
2 | +Z | +
3 | +Z1 | +
4 | +Z2 | +
5 | +E0 | +
Now, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
+Plug the black wire into the negative terminal of the screw terminals
+Danger
+These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the board board, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
+Using the markings on the board, plug the red wire into the positive terminal on the board
+Verify all connections
+Warning
+If the wires are plugged into the wrong place, or swapped polarities, your board, Stepper motors, and/or PSU can be badly damaged.
+Plug the PSU screw terminals into the PSU wire
+If the board lights up, you wired it correctly!
+Finally, plug the board into your Klipper host with the cable that came with it.
Contributed by @ImChrono
Max filament units: 7
@@ -3312,7 +3412,7 @@The 3MS is short for MMMS, which stands for Modular Multi Material System
"},{"location":"#inspiration","title":"Inspiration","text":"Model: Sheep by Cipis
Model: Monolith Cryptic Calendar by Sevro
Model: Voron Cube (bundled with OrcaSlicer), painted by me in OrcaSlicer
Printed at 50% scale
Model: T-rex by Cipis
Model: Striped lizard with pupils by EngMike
"},{"location":"#photos","title":"Photos","text":"Photos Full Printer3MSY Splitter"},{"location":"#videos","title":"Videos","text":"West3D Video SeriesThank you to Allen Rowand from West3D for making this ongoing series on the 3MS.
"},{"location":"#why-3ms","title":"Why 3MS?","text":"Why use the 3MS when there are many other multi-material systems?
Here are a few reasons:
With that said, there are a few reasons why you might not want to/be able to use the 3MS:
To use the 3MS, your setup has to meet the following requirements:
Here is a example step by step of what goes on during a single 3MS toolchange from T0 to T1:
For more detail about the Tx command, see Flowchart.
Think of the 3MS as an extension to your current extruder's length. It allows for switching filaments without compromising any of the benefits of your printer's extruder.
The 3MS's motors work together with your printer's extruder. This way, there won't be any additional resistance from pulling the filament through a disabled extruder. Also, unloads and loads to/from the printer's extruder are fully synchronized with the 3MS. This allows for even faster toolchanges!
"},{"location":"#get-started","title":"Get Started","text":"To get started with the 3MS, see the Master Instructions.
Get Started
"},{"location":"#what-about-the-3dchameleon","title":"What about the 3DChameleon?","text":"I recently created a klipper plugin for the 3DChameleon after purchasing a unit. I'm sure my Chameleon could have worked if I had tuned it further, but after several months with only partial success, I gave up. I am still open to pull requests for 3dchameleon-klipper and will do my best to respond to issues there, but I won't be able to test it myself anymore.
If you are having reliability issues with the 3DChameleon, see 3DChameleon Conversion
"},{"location":"compare/","title":"Comparison of Multimaterial Systems","text":"Not sure if you want to use the 3MS? Check this comparison between several common multimaterial systems.
3MS Modular Multimaterial System for Klipper 3D Printers
Pros:
Simple Design
Reliability
Documentation
Modular Design
Active Community
Price (~$140)
Cons:
Compatibility (only Klipper)
Box Turtle MMU Automated Filament Changer
Pros:
Reliability
Active Community
Documentation
Cons:
Expandability (only four lanes)
Compatibility (only Klipper)
Price ($300)
ERCF v2 An expandable MMU for Klipper-based 3D-printers
Pros:
Reliability
Modular Design
Active Community
Documentation
Cons:
Compatibility (only Klipper)
Complexity
TradRack by Annex Engineering
Pros:
Reliability
Modular Design
Active Community
Documentation
Cons:
Compatibility (only Klipper)
Complexity
3DChameleon MK4 Automatic Color Changer
Pros:
Compatibility
No custom firmware
Price ($200)
Cons:
Reliability
Documentation
SMuFF Smart Multi Filament Feeder
Pros:
Reliability
Modular Design
Documentation
Cons:
Complexity
Prusa MMU3 Multi Material Upgrade
Pros:
Reliability
Support
Documentation
Cons:
Compatibility
Price ($300)
This flowchart assumes a fsensor_delay
of 2000ms.
graph TD\n A[T1] --> B[Toolchange T=1];\n B[Toolchange T=1] --> C{Same tool?};\n C --> |No| D{Previous filament loaded?};\n C --> |Yes| E{Do nothing};\n D --> |Yes| F[MMMS_UNLOAD];\n F --> G[DESYNC_TOOL TOOL=0];\n G --> H[G4 P2000];\n H --> I[CHECK_FSENSOR V=0];\n D --> |No| J[SYNC_TOOL TOOL=1];\n I --> J;\n J --> K[MMMS_LOAD];\n K --> L[G4 P2000];\n L --> M[CHECK_FSENSOR V=1];\n M --> N[Save new previous extruder]
"},{"location":"instructions/","title":"Instructions","text":""},{"location":"instructions/#master-instructions","title":"Master Instructions","text":"Due to the modularity of the 3MS, there are many ways to set it up. This guide attempts to encompass all supported ways of setting up the 3MS.
"},{"location":"instructions/#basic-steps","title":"Basic Steps","text":"The basic steps this guide will follow are:
Before starting the instructions, a basic understanding of how the 3MS works is recommended. There are two types of components in the 3MS:
Controller
This controls the 3MS stepper motors. This is usually an extra 3D printer mainboard purchased specifically for the 3MS. If your existing 3D printer mainboard has spare stepper ports, you can use them for the 3MS.
The available configurations are specific to either an external mainboard setup, or utilizing spare stepper ports on your existing mainboard. If you are utilizing spare stepper ports, the name of the config will include \"(main MCU)\"
Filament Units
These move the filament. These are standard MK8 extruders (used on Ender 3's). You can use different extruders for the filament units, as long as you can mount them securely and they can attach to a PTFE tube. MK8 extruders are used as the default due to their low cost.
The number of filaments you will be able to print with is equal to the number of filament units you have. For example, two filament units will let you print with two colors. It is important to note that one filament unit will NOT let you print in multimaterial.
"},{"location":"instructions/#05-choosing-a-controller","title":"0.5. Choosing a Controller","text":"Choose one of the controllers from Controllers before continuing.
"},{"location":"instructions/#1-getting-a-bom","title":"1. Getting a BOM","text":"Go to BOM to view the bill of materials for the number of filament units you want. Example BOM for two filament units and a SKR Mini E3 V2:
Name Price Quantity Link Notes SKR Mini E3 V2 $34.99 1 Amazon Duponts $9.99 1 Amazon These wires are only sufficient to run steppers, not heaters 12V PSU $7.39 1 Amazon This PSU is only sufficient to run steppers, not heaters NEMA17 Stepper Motor $9.99 2 Amazon You can use a pancake stepper if you want, but it will have less torque MK8 Metal Extruder $9.99 2 Amazon Capricorn PTFE Tubing $11.49 1 Amazon You likely won't need this for every unit, as this is usually too long for only one unit"},{"location":"instructions/#2-assembling-your-3ms","title":"2. Assembling your 3MS","text":"Follow Assembly to assemble your 3MS.
"},{"location":"instructions/#3-configuring-your-3ms","title":"3. Configuring your 3MS","text":"Follow Stepper Setup to setup and calibrate each of your filament units.
"},{"location":"instructions/#5-slicer-setup","title":"5. Slicer setup","text":"Follow Slicer Setup to setup your slicer for the 3MS.
"},{"location":"instructions/#6-first-print","title":"6. First print","text":"Follow First Print to create your first multimaterial print with the 3MS.
"},{"location":"instructions/#7-troubleshooting","title":"7. Troubleshooting","text":"Check Troubleshooting to find guides to troubleshoot your 3MS.
"},{"location":"instructions/#8-updating","title":"8. Updating","text":"To update the 3MS configuration, go to the Update Manager in Mainsail/Fluidd and refresh the updates.
Next, find the \"mmms\" entry in the list. If there is an \"Update\" button next to it, click it and begin updating.
After updating, in your terminal, run:
sh ~/3MS/install.sh\n
This will install the new 3MS configuration. Next, restart Klipper:
Info
It is important to restart the Klipper service, and not just run the RESTART
command.
Run this command in your terminal:
sudo service klipper restart\n
"},{"location":"instructions/#9-tuning-and-optimizations","title":"9. Tuning and Optimizations","text":"After your 3MS is installed, it's time to tune and optimize it.
The best starting place for this is in the Materials Reference.
"},{"location":"configuration/","title":"Configuration","text":"This guide covers the configuration structure and options of the 3MS.
"},{"location":"configuration/#maincfg","title":"main.cfg","text":"main.cfg
is located in 3ms/main.cfg
. It contains the following:
[save_variables]
configuration section. This section sets the location where variables about the previous tool will be saved. [include]
sections. These reference other configuration files covered in this guide. The included configurations are:settings.cfg
macros.cfg
controllers/xxx/steppers.cfg
settings.cfg
contains the settings the 3MS uses during toolchanges in macros.cfg
. Further information is here.
macros.cfg
contains the macros the 3MS uses during toolchanges. Further information is here.
steppers.cfg
contains the MCU configuration for the 3MS. It contains the following:
[extruder_stepper 3msx]
This contains the pin mappings for the motor assigned to 3MS tool x.[tmc2209 extruder_stepper 3msx]
This contains the pin mappings for the TMC2209 controlling the motor assigned to 3MS tool x.[mcu 3ms]
This contains the serial path to the 3MS MCU.This contains the KlipperScreen 3MS menu configuration. For more information, see KlipperScreen.
"},{"location":"configuration/fsensor/","title":"Filament Sensor","text":"Follow this guide to configure your filament sensor with the 3MS.
"},{"location":"configuration/fsensor/#location-of-sensor","title":"Location of Sensor","text":"The filament sensor should be right before the extruder, and after the Y splitter. Other locations, such as between the hotend and extruder, have not been tested.
Warning
The 3MS has only been tested with a filament_switch_sensor
, and not with a filament_motion_sensor
To configure your filament sensor with the 3MS, open 3ms/settings.cfg
and change the following (assuming your filament sensor is named \"runout_sensor\"):
fsensor_name: \"fsensor\"\n
3ms/settings.cfgfsensor_name: \"runout_sensor\"\n
"},{"location":"configuration/install/","title":"Installation","text":"Follow this guide to install the 3MS configuration and macros.
Info
All SSH commands are run on the Klipper Host (usually a Raspberry Pi) and are labeled like the following: SSH
echo Hello World\n
Notice the \"SSH\" at the top of the code block. All references to a mainboard usually refer to the 3MS board. If you are using a (main MCU)
configuration, references to a mainboard refer to your printer's existing mainboard.
First, clone the 3MS repository:
SSHcd ~\ngit clone https://github.com/3DCoded/3MS\ncd 3MS\n
Storage
If the git clone
command fails due to lack of storage on your system, run the following set of commands instead:
cd ~\ngit clone -b main --single-branch https://github.com/3DCoded/3MS\ncd 3MS\n
"},{"location":"configuration/install/#install-script","title":"Install Script","text":"K1 Series
If you are setting up the 3MS on a Creality K1 Series printer (K1, K1C, K1 Max), use the following install script instead:
SSHpython3 install.py --path /usr/data/printer_data/config/3ms\n
Run the install script:
SSHsh install.sh\n
"},{"location":"configuration/install/#printercfg","title":"printer.cfg","text":"In the Klipper web interface (e.g. Mainsail/Fluidd/OctoPrint), open printer.cfg
and add:
[include 3ms/main.cfg]\n
"},{"location":"configuration/install/#dynamicmacros","title":"DynamicMacros","text":"The 3MS configuration depends on DynamicMacros. If you haven't installed it already, follow the instructions here to do so.
Remove the following line from your 3ms/main.cfg
if it exists:
[include ./macros.cfg]\n
"},{"location":"configuration/install/#moonraker-update-manager","title":"Moonraker Update Manager","text":"To enable updates for the 3MS, add the following to your moonraker.conf
(in the same folder as your printer.cfg
):
# 3MS Update Manager\n[update_manager mmms]\ntype: git_repo\npath: ~/3MS\norigin: https://github.com/3DCoded/3MS.git\nprimary_branch: main\nis_system_service: False\ninstall_script: install.sh\n
Warning
When updating via Moonraker, the following files will be overwritten:
macros.cfg
KlipperScreen.conf
endless/macros.cfg
If you have any changes in these files, they will be lost when updating.
"},{"location":"configuration/install/#purge-line","title":"Purge Line","text":"If you use KAMP for purging, set your tip_distance
setting in KAMP_Settings.cfg
to your filament parking position (this is the distance between your filament sensor and your nozzle).
If you use any other method of purging, add this line to your Start G-Code / PRINT_START
macro right before your purge line, and after your MMMS_START
:
G1 E100 F900\n
Replace E100
with E
+parking position
In 3ms/main.cfg
, edit the [include ./controllers/xxx/steppers.cfg]
line, replacing xxx
with the config name of your controller:
btt_skr_mini_e3_v2
SKR Pico btt_skr_pico
Mellow Fly D7 mellow_fly_d7
BTT MMB btt_mmb
BTT Octopus (main MCU) btt_octopus_main
Zonestar ZM384 (main MCU) zonestar_zm384_main
Mini RAMBo mini_rambo
Geetech A30T gtm32_103_v1
"},{"location":"configuration/install/#configure-mcu-id","title":"Configure MCU ID","text":"Finally, to configure the MCU ID you saved from Firmware, run in your terminal:
SSHcd ~ && cat mcu.txt\n
Copy the path that is output. Now, in your 3ms/controllers/xxx/steppers.cfg
, in the [mcu 3ms]
section (towards the bottom), set the MCU ID.
Example:
BeforeAfter 3ms/controllers/xxx/steppers.cfg[mcu 3ms]\nserial: /dev/serial/by-id/<your-mcu-id>\n
3ms/controllers/xxx/steppers.cfg[mcu 3ms]\nserial: /dev/serial/by-id/usb-Klipper_stm32f103xe_33FFD1054746333809650557-if00\n
"},{"location":"configuration/macros/","title":"Macros","text":""},{"location":"configuration/macros/#3ms-settings","title":"3MS Settings","text":""},{"location":"configuration/macros/#mmms_settings","title":"MMMS_SETTINGS","text":"Stores the settings for the 3MS.
Default Settings
variable_load_distance: 210\nvariable_unload_distance: 200\nvariable_load_speed: 4500\nvairable_unload_speed: 4500\nvariable_fsensor_delay: 2000\nvariable_num_tools: 2\nvariable_step_size: 99\nvariable_retry_dist: 50\nvariable_retry_speed: 900\n
Example Usage
MMMS_SETTINGS\n
"},{"location":"configuration/macros/#set_3ms_settings","title":"SET_3MS_SETTINGS","text":"Sets the configuration for the 3MS. Allows temporary customization of load and unload distances and speeds
Example Usage
SET_3MS_SETTINGS LOAD_DISTANCE=210 UNLOAD_DISTANCE=200 LOAD_SPEED=3500 UNLOAD_SPEED=5500 FSENSOR_DELAY=2500\n
"},{"location":"configuration/macros/#get_3ms_settings","title":"GET_3MS_SETTINGS","text":"Displays the configuration for the 3MS.
Example Usage
GET_3MS_SETTINGS\n
"},{"location":"configuration/macros/#filament-handling","title":"Filament Handling","text":""},{"location":"configuration/macros/#mmms_unload","title":"MMMS_UNLOAD","text":"Unloads filament by a specified distance and speed. If no distance/speed is specified, it uses the default unload distance/speed from MMMS_SETTINGS
.
Example Usage
MMMS_UNLOAD DISTANCE=200 SPEED=5500\n
"},{"location":"configuration/macros/#mmms_load","title":"MMMS_LOAD","text":"Loads filament by a specified distance and speed. If no distance/speed is specified, it uses the default load distance/speed from MMMS_SETTINGS
.
Example Usage
MMMS_LOAD DISTANCE=210 SPEED=3500\n
"},{"location":"configuration/macros/#check_fsensor","title":"CHECK_FSENSOR","text":"Checks the filament sensor state. Pauses the print if the sensor state does not match the expected value.
Example Usage
CHECK_FSENSOR V=1\n
"},{"location":"configuration/macros/#tool-sync","title":"Tool Sync","text":""},{"location":"configuration/macros/#set_tool_sync","title":"SET_TOOL_SYNC","text":"Sets the sync state of a tool. Syncs or desyncs the specified tool to/from the extruder.
Example Usage
SET_TOOL_SYNC TOOL=0 SYNC=1\n
"},{"location":"configuration/macros/#sync_tool","title":"SYNC_TOOL","text":"Syncs the specified tool and desyncs all other tools to/from the extruder.
Example Usage
SYNC_TOOL TOOL=0\n
"},{"location":"configuration/macros/#desync_tool","title":"DESYNC_TOOL","text":"Desyncs the specified tool from the extruder.
Example Usage
DESYNC_TOOL TOOL=0\n
"},{"location":"configuration/macros/#clear_tool","title":"CLEAR_TOOL","text":"Clears the current tool selection by setting it to -1.
Example Usage
CLEAR_TOOL\n
"},{"location":"configuration/macros/#desync_all_tools","title":"DESYNC_ALL_TOOLS","text":"Desyncs all configured tools.
Example Usage
DESYNC_ALL_TOOLS\n
"},{"location":"configuration/macros/#print-start-and-end","title":"Print Start and End","text":""},{"location":"configuration/macros/#mmms_start","title":"MMMS_START","text":"Starts the print by checking the filament sensor. If filament is detected, the print is paused and the user is notified. Regardless of the filament sensor state, the initial tool is loaded.
Example Usage
MMMS_START INITIAL_TOOL=0\n
"},{"location":"configuration/macros/#mmms_end","title":"MMMS_END","text":"Ends the print by unloading the current tool. If filament is detected after unloading, the user is notified.
Example Usage
MMMS_END\n
"},{"location":"configuration/macros/#tool-change","title":"Tool Change","text":""},{"location":"configuration/macros/#t0","title":"T0","text":"Changes to tool 0.
Example Usage
T0\n
"},{"location":"configuration/macros/#t1","title":"T1","text":"Changes to tool 1.
Example Usage
T1\n
"},{"location":"configuration/macros/#tx","title":"Tx","text":"Changes to a specified tool. Replace x
with the tool number.
Example Usage
T2\nT3\n
"},{"location":"configuration/steppers/","title":"Steppers","text":""},{"location":"configuration/steppers/#stepper-motors","title":"Stepper Motors","text":"Follow this guide to calibrate each of the stepper motors. Each of these steps should be repeated for each of your filament units, replacing TOOL=0
with TOOL=1
, and so on. Also replacing 3ms0
with 3ms1
, and so on.
Info
If your stepper motor shakes erratically while running any of these commands, your wiring may be incorrect.
"},{"location":"configuration/steppers/#is-the-motor-spinning","title":"Is the motor spinning?","text":"Run this command:
SYNC_TOOL TOOL=0\nG1 E50 F4500\n
If the motor spins, skip to the next step. If not, check your wiring first. If your wiring is fine, go to 3ms/steppers.cfg
. Locate the section named [extruder_stepper 3ms0]
. In front of the enable_pin
, add, an !
. If there already is one, remove it. Example:
enable_pin: !3ms: PD7\n
3ms/steppers.cfgenable_pin: 3ms: PD7\n
"},{"location":"configuration/steppers/#is-the-motor-spinning-backwards","title":"Is the motor spinning backwards?","text":"Preload each of the filament units with a piece of scrap filament by pushing the lever to release the tension, inserting filament, then releasing the lever to restore tension. Next, run this command:
SYNC_TOOL TOOL=0\nG1 E50 F4500\n
Note which way the filament moves. If it moves forwards, away from the PTFE coupler, skip to the last step. If it moves backwards, you have two choices:
To invert the pin in the configuration, locate the configuration section for the filament unit spinning backwards, and invert the dir_pin
. See the previous section for how to invert the pin.
This section is a modified version of the Klipper Docs
Preload each of the filament units with a piece of scrap filament at least 200mm long by pushing the lever to release the tension, inserting filament, then releasing the lever to restore tension.
Use a ruler and a marker to place a mark 70mm from the inlet of the filament unit. Use calipers to measure the actual distance. Write it down, as it will be referred to as <initial_mark_distance>
.
Next, run this command:
SYNC_TOOL TOOL=0\nG1 E50 F1500\n
Use calipers to measure the new distance between the inlet of the filament unit and the mark. Write it down, as it will be referred to as <next_mark_distance>
.
Calculate <actual_extrude_distance> = <initial_mark_distance> - <next_mark_distance>
In the steppers.cfg
file (located in 3ms/controllers/xxx/steppers.cfg
), locate the configuration section for the current extruder. Example:
[extruder_stepper 3ms0]\nextruder: extruder\nstep_pin: 3ms: PB13\ndir_pin: !3ms: PB12\nenable_pin: !3ms: PB14\nmicrosteps: 16\nrotation_distance: 32.8450\n
Note the rotation_distance
(last line). In this case, it is 32.8450
.
Calculate the new rotation distance: new_rotation_distance = <rotation_distance> * <actual_extrude_distance> / 50
.
Round this result to three or four decimal places. Decrease it by 0.005 (this is so that if this result is slightly off, the 3MS filament unit will skip, instead of the printer's extruder stripping the filament during a print).
Set the new rotation_distance
in your config. Save it and restart Klipper.
Info
If you use the same stepper motor brand and model for each of your filament units, you likely only have to do this step for one stepper, then copy over the rotation_distance to all the others.
"},{"location":"contributing/","title":"Contributing","text":"If you want to contribute to the 3MS project, follow the instructions below.
"},{"location":"contributing/#development-setup","title":"Development Setup","text":"Follow Development Setup to setup your system for development with the 3MS.
"},{"location":"contributing/#controllers","title":"Controllers","text":"If your contribution adds support for another controller type, see Controller Support.
"},{"location":"contributing/#pull-request","title":"Pull Request","text":"Finally, submit a pull request. A developer will get back to you soon with feedback, before merging your pull request into the main project.
Thank you for your contribution to the 3MS project!
"},{"location":"contributing/devsetup/","title":"Development Setup","text":"Follow this guide to setup your system for development with the 3MS.
"},{"location":"contributing/devsetup/#configuration-changes","title":"Configuration Changes","text":"main
branch)docs
branch)pipenv install\npipenv shell\n
mkdocs serve\n
Follow this guide to add support for a new 3MS controller.
"},{"location":"contributing/supportcontrollers/#requirements","title":"Requirements","text":"To add support for a new 3MS controller, the following requirements must be met:
If you don't want to create the new controller configuration yourself, you can submit a Controller Request.
"},{"location":"contributing/supportcontrollers/#supporting-a-new-controller","title":"Supporting a new Controller","text":"If the controller meets the aforementioned requirements, you can proceed with adding support for it.
The following example will be for a SKR Mini E3 V2.0 controller.
"},{"location":"contributing/supportcontrollers/#removing-extra-config-sections","title":"Removing Extra Config Sections","text":"Remove all sections from the configuration except the following:
[stepper_x]
)[tmc2209 stepper_x]
)[extruder]
)[static_digital_output]
[board_pins]
If the configuration is a main MCU configuration, remove the [mcu]
section.
Add the following line to all [static_digital_output]
and [board_pins]
sections:
mcu: 3ms\n
If the configuration is NOT a main MCU, replace [mcu]
with [mcu 3ms]
.
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[stepper_x]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_x]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_y]\nstep_pin: PB10\ndir_pin: !PB2\nenable_pin: !PB11\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC1\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_y]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_z]\nstep_pin: PB0\ndir_pin: PC5\nenable_pin: !PB1\nmicrosteps: 16\nrotation_distance: 8\nendstop_pin: ^PC2\nposition_endstop: 0.0\nposition_max: 250\n\n[tmc2209 stepper_z]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD2\nmicrosteps: 16\nrotation_distance: 33.500\nnozzle_diameter: 0.400\nfilament_diameter: 1.750\nheater_pin: PC8\nsensor_type: EPCOS 100K B57560G104F\nsensor_pin: PA0\ncontrol: pid\npid_Kp: 21.527\npid_Ki: 1.063\npid_Kd: 108.982\nmin_temp: 0\nmax_temp: 250\n\n[tmc2209 extruder]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[heater_bed]\nheater_pin: PC9\nsensor_type: ATC Semitec 104GT-2\nsensor_pin: PC3\ncontrol: pid\npid_Kp: 54.027\npid_Ki: 0.770\npid_Kd: 948.182\nmin_temp: 0\nmax_temp: 130\n\n[heater_fan heatbreak_cooling_fan]\npin: PC7\n\n[fan]\npin: PC6\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[printer]\nkinematics: cartesian\nmax_velocity: 300\nmax_accel: 3000\nmax_z_velocity: 5\nmax_z_accel: 100\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n\n# See the sample-lcd.cfg file for definitions of common LCD displays.\n
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[stepper_x]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_x]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_y]\nstep_pin: PB10\ndir_pin: !PB2\nenable_pin: !PB11\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC1\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_y]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_z]\nstep_pin: PB0\ndir_pin: PC5\nenable_pin: !PB1\nmicrosteps: 16\nrotation_distance: 8\nendstop_pin: ^PC2\nposition_endstop: 0.0\nposition_max: 250\n\n[tmc2209 stepper_z]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD2\nmicrosteps: 16\nrotation_distance: 33.500\nnozzle_diameter: 0.400\nfilament_diameter: 1.750\nheater_pin: PC8\nsensor_type: EPCOS 100K B57560G104F\nsensor_pin: PA0\ncontrol: pid\npid_Kp: 21.527\npid_Ki: 1.063\npid_Kd: 108.982\nmin_temp: 0\nmax_temp: 250\n\n[tmc2209 extruder]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\nmcu: 3ms\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n
"},{"location":"contributing/supportcontrollers/#stepper-configuration","title":"Stepper Configuration","text":"Note
In the following examples, the Z stepper is not included. When creating a 3MS configuration, you can (and probably will) use the Z steppers.
Change any stepper sections to an extruder_stepper
named 3ms0
, 3ms1
, 3ms2
, etc. Example:
[stepper_x]\n...\n\n[stepper_y]\n...\n
[extruder_stepper 3ms0]\n...\n\n[extruder_stepper 3ms1]\n...\n
Change any extruder sections to an extruder_stepper
. Example:
[extruder]\n...\n\n[extruder1]\n...\n
[extruder_stepper 3ms2]\n...\n\n[extruder_stepper 3ms3]\n...\n
Remove the extruder-specific configurations from the former extruders. Example:
BeforeAfter[extruder_stepper 3ms2]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD1\nmicrosteps: 16\nrotation_distance: 33.500\nnozzle_diameter: 0.400\nfilament_diameter: 1.750\nheater_pin: PC8\nsensor_type: EPCOS 100K B57560G104F\nsensor_pin: PA0\ncontrol: pid\npid_Kp: 21.527\npid_Ki: 1.063\npid_Kd: 108.982\nmin_temp: 0\nmax_temp: 250\n
[extruder_stepper 3ms2]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD1\nmicrosteps: 16\nrotation_distance: 33.500\n
Update any TMC configuration sections to reflect the new extruder_steppers
. Example:
[tmc2209 stepper_x]\n...\n\n[tmc2209 stepper_y]\n...\n\n[tmc2209 extruder]\n...\n\n[tmc2209 extruder1]\n...\n
[tmc2209 extruder_stepper 3ms0]\n...\n\n[tmc2209 extruder_stepper 3ms1]\n...\n\n[tmc2209 extruder_stepper 3ms2]\n...\n\n[tmc2209 extruder_stepper 3ms3]\n...\n
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[stepper_x]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_x]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_y]\nstep_pin: PB10\ndir_pin: !PB2\nenable_pin: !PB11\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC1\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_y]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_z]\nstep_pin: PB0\ndir_pin: PC5\nenable_pin: !PB1\nmicrosteps: 16\nrotation_distance: 8\nendstop_pin: ^PC2\nposition_endstop: 0.0\nposition_max: 250\n\n[tmc2209 stepper_z]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD2\nmicrosteps: 16\nrotation_distance: 33.500\nnozzle_diameter: 0.400\nfilament_diameter: 1.750\nheater_pin: PC8\nsensor_type: EPCOS 100K B57560G104F\nsensor_pin: PA0\ncontrol: pid\npid_Kp: 21.527\npid_Ki: 1.063\npid_Kd: 108.982\nmin_temp: 0\nmax_temp: 250\n\n[tmc2209 extruder]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\nmcu: 3ms\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[extruder_stepper 3ms0]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 extruder_stepper 3ms0]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms1]\nstep_pin: PB10\ndir_pin: !PB2\nenable_pin: !PB11\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC1\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 extruder_stepper 3ms1]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms2]\nstep_pin: PB0\ndir_pin: PC5\nenable_pin: !PB1\nmicrosteps: 16\nrotation_distance: 8\nendstop_pin: ^PC2\nposition_endstop: 0.0\nposition_max: 250\n\n[tmc2209 extruder_stepper 3ms2]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms3]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD2\nmicrosteps: 16\nrotation_distance: 33.500\n\n[tmc2209 extruder_stepper 3ms3]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\nmcu: 3ms\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n
"},{"location":"contributing/supportcontrollers/#final-important-details","title":"Final Important Details","text":"Remove all homing/endstop-related parameters from the stepper configuration sections. Example:
BeforeAfter[extruder_stepper 3ms0]\n...\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n
[extruder_stepper 3ms0]\n...\n# Endstop/homing parameters removed\n
Add the following line to all extruder_stepper
sections:
extruder: extruder\n
Prefix all pin names IN ALL SECTIONS (not just motors) with 3ms:
. Any !
or ^
should go before the 3ms:
prefix. Example:
[extruder_stepper 3ms0]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\n
[extruder_stepper 3ms0]\nstep_pin: 3ms: PB13\ndir_pin: !3ms: PB12\nenable_pin: !3ms: PB14\nmicrosteps: 16\nrotation_distance: 40\n
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[extruder_stepper 3ms0]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 extruder_stepper 3ms0]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms1]\nstep_pin: PB10\ndir_pin: !PB2\nenable_pin: !PB11\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC1\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 extruder_stepper 3ms1]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms2]\nstep_pin: PB0\ndir_pin: PC5\nenable_pin: !PB1\nmicrosteps: 16\nrotation_distance: 8\nendstop_pin: ^PC2\nposition_endstop: 0.0\nposition_max: 250\n\n[tmc2209 extruder_stepper 3ms2]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms3]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD2\nmicrosteps: 16\nrotation_distance: 33.500\nnozzle_diameter: 0.400\nfilament_diameter: 1.750\n\n[tmc2209 extruder_stepper 3ms3]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\nmcu: 3ms\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[extruder_stepper 3ms0]\nextruder: extruder\nstep_pin: 3ms: PB13\ndir_pin: !3ms: PB12\nenable_pin: !3ms: PB14\nmicrosteps: 16\nrotation_distance: 40\n\n[tmc2209 extruder_stepper 3ms0]\nuart_pin: 3ms: PC11\ntx_pin: 3ms: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms1]\nextruder: extruder\nstep_pin: 3ms: PB10\ndir_pin: !3ms: PB2\nenable_pin: !3ms: PB11\nmicrosteps: 16\nrotation_distance: 40\n\n[tmc2209 extruder_stepper 3ms1]\nuart_pin: 3ms: PC11\ntx_pin: 3ms: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms2]\nextruder: extruder\nstep_pin: 3ms: PB0\ndir_pin: 3ms: PC5\nenable_pin: !3ms: PB1\nmicrosteps: 16\nrotation_distance: 8\n\n[tmc2209 extruder_stepper 3ms2]\nuart_pin: 3ms: PC11\ntx_pin: 3ms: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms3]\nextruder: extruder\nstep_pin: 3ms: PB3\ndir_pin: !3ms: PB4\nenable_pin: !3ms: PD2\nmicrosteps: 16\nrotation_distance: 33.500\n\n[tmc2209 extruder_stepper 3ms3]\nuart_pin: 3ms: PC11\ntx_pin: 3ms: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\nmcu: 3ms\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n
"},{"location":"experimental/","title":"Experimental","text":""},{"location":"experimental/dualdrivetpu/","title":"Dual Drive 3MS Extruders for TPU","text":"The 3MS's existing single-drive extruders are prone to tangling with TPU during toolchanges. Dual drive 3MS extruders may fix this issue and allow for multimaterial printing with TPU.
Info
This page, and the features mentioned on it, are in development
The extruder used in this modification can be found on Amazon here.
"},{"location":"experimental/dualdrivetpu/#benefits","title":"Benefits","text":"Current testing shows the following benefits:
Current testing with TPU (a check indicates it works):
Warning
The rapid tip shaping feature is currently experimental. This page is not complete yet.
Rapid tip shaping allows for faster tip shaping and easier tuning of tip shaping.
"},{"location":"experimental/rapidtip/#installation","title":"Installation","text":"Update your 3ms/main.cfg
:
[save_variables]\nfilename: ~/printer_data/config/3ms/variables.cfg\n\n[include ./settings.cfg]\n[include ./endless/settings.cfg]\n#[include ./cutter/settings.cfg]\n[include ./form_tip/settings.cfg]\n[include ./controllers/btt_skr_mini_e3_v2/steppers.cfg]\n\n[dynamicmacros 3ms]\nconfigs: 3ms/macros.cfg, 3ms/endless/macros.cfg, 3ms/form_tip/macros.cfg #, 3ms/cutter/macros.cfg\n
Note the addition of 3ms/form_tip/macros.cfg
in the [dynamicmacros]
config section.
The \"cooling tube\" refers to the length of PTFE found in your printer's hotend. This is usually in the heatsink of your hotend.
You want to measure (or Google) three things:
Update your 3ms/form_tip/settings.cfg
with these settings:
[gcode_macro FORM_TIP_SETTINGS]\n# Edit these settings for your printer\nvariable_cooling_tube_pos: 15 # <-- This is the distance from the bottom of the cooling tube to the tip of the nozzle\nvariable_cooling_tube_length: 11 # <-- This is the length of the cooling tube\nvariable_final_retract: 49 # <-- This is the distance from the top of the cooling tube to the extruder gears\n
The \"parking position\" refers to the location the toolhead will be at during a color swap (not on the wip tower). Ideally, this would be a purge bucket, but this can be anywhere not on the bed.
Update your settings:
3ms/form_tip/settings.cfgvariable_park_x: 125\nvariable_park_y: 205\nvariable_park_speed: 50 # mm/s\n
"},{"location":"experimental/rapidtip/#tip-tuning","title":"Tip Tuning","text":"A standard tip tuning routine would look like this:
Load T0 to the nozzle
SYNC_TOOL TOOL=0\nMMMS_LOAD\nLOAD_FILAMENT\n
Run tip shaping:
FORM_TIP\n
Check your filament tip
Load the filament back to the nozzle for further tuning:
LOAD_FILAMENT\n
Steps 2-4 are repeated until your filament tip comes out looking like one of these:
TODO Picture
You can alter step 2 to get better tips, changing any of the following settings:
PUSH_DISTANCE
This changes how much filament is pushed out initially. Generally, you don't need to change this.
PUSH_SPEED
This changes how fast the filament is pushed out initially. Increasing this generally creates a sharper filament tip. However, if this is too high, your printer's hotend may not be able to melt the filament quickly enough and result in your extruder skipping steps.
INITIAL_RETRACT_SPEED
This changes how fast the filament tip is retracted to the cooling tube. If this is too low, your filament tip may have a large string on the end. If this is too high, a small piece of filament may be left in your nozzle.
COOLING_SPEED
This changes how fast the filament tip is retracted through the cooling tube. If this is too high, your filament tip may come out still molten.
FINAL_SPEED
This changes how fast the filament tip is retracted from the top of the cooling tube to outside the extruder. Generally, you can increase this until your printer's extruder starts skipping.
When you get a good tip, change to T1, repeat, T2, etc:
MMMS_UNLOAD\nSYNC_TOOL TOOL=1\nMMMS_LOAD\nLOAD_FILAMENT\n
"},{"location":"experimental/rapidtip/#examples","title":"Examples","text":"TODO show pictures of filament tips when a specific settings is altered
"},{"location":"experimental/rapidtip/#slicer-setup","title":"Slicer Setup","text":"Follow these steps to setup your slicer for rapid tip shaping.
Disable filament ramming
Nagivate to Printer Settings
-> Multimaterial
and uncheck the Enable filament ramming
checkbox.
Filament Settings
Repeat the following steps for each of your filaments.
Navigate to Filament Settings
-> Multimaterial
, and disable all multimaterial settings.
Filament G-Code
Change your filament start G-code to the following, inserting your tuned values:
SET_TIP_SETTINGS PUSH_DISTANCE= PUSH_SPEED= INITIAL_RETRACT_SPEED= COOLING_SPEED= FINAL_SPEED=\n
Add this G-Code to your filament settings in Advanced
:
TPU filament has a tendency to buckle when extruded at high speeds. This feature attempts to slow down the 3MS extruders during toolchanges only when TPU is involved in the toolchange.
Info
This page, and the features mentioned on it, are in development
"},{"location":"experimental/speedlimit/#installation","title":"Installation","text":"To install the speed limiting feature, run in your terminal:
cd ~/3MS\ngit fetch\ngit checkout \ngit pull limited-speed\nsh install.sh\n
Restart Klipper.
"},{"location":"experimental/speedlimit/#configuration","title":"Configuration","text":"Update your 3ms/main.cfg
:
[save_variables]\nfilename: ~/printer_data/config/3ms/variables.cfg\n\n[include ./settings.cfg]\n[include ./controllers/btt_skr_mini_e3_v2/steppers.cfg]\n\n[dynamicmacros 3ms]\nconfigs: 3ms/macros.cfg, 3ms/speedlimit.cfg\n
"},{"location":"experimental/speedlimit/#usage","title":"Usage","text":"Info
This section is under construction
"},{"location":"guides/3dchameleon/","title":"3DChameleon to 3MS Conversion","text":"Follow this guide to convert a 3DChameleon to a 3MS.
"},{"location":"guides/3dchameleon/#bom","title":"BOM","text":"Name Price Quantity Link Notes SKR Mini E3 V2 $34.99 1 Amazon Duponts $9.99 1 Amazon These wires are only sufficient to run steppers, not heaters 12V PSU $7.39 1 Amazon This PSU is only sufficient to run steppers, not heaters MK8 Metal Extruder $9.99 2 Amazon Alternatively, you can use this Dual-drive MK8 based extruderThe final cost of this upgrade is around $70.
"},{"location":"guides/3dchameleon/#instructions","title":"Instructions","text":"Next, follow the Master Instructions except for the BOM section.
"},{"location":"guides/bypass/","title":"3MS Bypass","text":"Follow this guide to allow manually loading a spool to your printer, and bypassing the 3MS system.
"},{"location":"guides/bypass/#klipper-macros","title":"Klipper Macros","text":"Replace the MMMS_START
line in your PRINT_START
macro with:
{% if (params.BYPASS|default(0)|int) %}\n DESYNC_ALL_TOOLS\n{% else %}\n # You can also put your ENDLESS_START line here too\n MMMS_START INITIAL_TOOL={params.INITIAL_EXTRUDER}\n{% endif %}\n
Replace the MMMS_END
line in your PRINT_END
macro with:
{% if not (params.BYPASS|default(0)|int) %}\n MMMS_END\n{% endif %}\n
"},{"location":"guides/bypass/#slicer-gcode","title":"Slicer GCode","text":"Printer Settings
-> Machine G-code
. Machine start G-code
, pass the BYPASS=1
parameter to your PRINT_START
macro. Machine end G-code
, pass the BYPASS=1
parameter to your PRINT_END
macro.This feature is based off of Happy Hare firmware.
"},{"location":"guides/endless/#requirements","title":"Requirements","text":"To use endless spool, your printer must have one of the following:
A filament sensor before your printer's extruder
Recommended
OR
A filament sensor before each of the 3MS's extruders
Untested and deprecated
The endless spool feature (currently) also only works when printing single-color models.
"},{"location":"guides/endless/#install","title":"Install","text":"To install the endlss spool, update your 3ms/main.cfg
:
[save_variables]\nfilename: ~/printer_data/config/3ms/variables.cfg\n\n[include ./settings.cfg]\n[include ./endless/settings.cfg]\n[include ./controllers/btt_skr_mini_e3_v2/steppers.cfg]\n\n[dynamicmacros 3ms]\nconfigs: 3ms/macros.cfg, 3ms/endless/macros.cfg\n
"},{"location":"guides/endless/#usage","title":"Usage","text":"To setup endless spool, first choose which filaments can be used as backups for each other. Example with three tools:
In this case, since T0 and T1 are backups for each other, they can be considered in the same \"group\" and assigned a group number. In this case, 1
will be used. Since T2 doesn't have a backup, it will be its own group. In this case, 2
will be used.
If your printer has a filament sensor before each of the 3MS's filament units, set the single
setting to 0
. If your printer has only one filament sensor before its main extruder, set the single
setting to 1
.
Edit your 3ms/endless/settings.cfg
:
[gcode_macro ENDLESS_SETTINGS]\nsingle: 1 # <-- Set to 0 if you have a filament sensor before each of your 3MS extruders. Set to 1 if you have one filament sensor right before your printer's extruder.\nvariable_t0: 1\nvariable_t1: 1\n### --- Uncomment below for more than two tools --- ###\nvariable_t2: 2\n# variable_t3: -1\ngcode:\n RESPOND MSG=\"\"\n
"},{"location":"guides/endless/#filament-sensors","title":"Filament Sensors","text":"If you have multiple filament sensors, change your filament sensors' runout_gcode
to:
ENDLESS_RUNOUT T=0\n
For the filament sensor associated with T1, change the code from T=0
to T=1
, and so on.
If you have one filament sensor, change your filament sensor's runout_gcode
to:
ENDLESS_RUNOUT\n
"},{"location":"guides/endless/#custom-gcode","title":"Custom GCode","text":"To define custom filament runout functionality, you can define the FILAMENT_RUNOUT
macro. Example:
[gcode_macro FILAMENT_RUNOUT]\ngcode:\n RESPOND MSG=\"Filament runout T{params.T}!!!\"\n
"},{"location":"guides/endless/#gcodes","title":"GCodes","text":"To edit the Endless Spool state mid-print, run the SET_ENDLESS_SETTINGS
command. Examples:
; Set T0 and T1 as backups for each other, and T2 as standalone\nSET_ENDLESS_SETTINGS T0=1 T1=1 T2=2\n\n; Set T0 as standalone, and T1 and T2 as backups for each other\nSET_ENDLESS_SETTINGS T0=-1 T1=1 T2=1\n\n; Disable endless spool\nSET_ENDLESS_SETTINGS ENABLED=0\n\n; Enable endless spool\nSET_ENDLESS_SETTINGS ENABLED=1\n
To view the Endless Spool settings, run the GET_ENDLESS_SETTINGS
command.
In your slicer's print start GCode, add the following parameter to your PRINT_START
macro:
NUM_TOOLCHANGES=[total_toolchanges]\n
Next, in your PRINT_START
macro, add the following line before your MMMS_START
call:
ENDLESS_START NUM_TOOLCHANGES={params.NUM_TOOLCHANGES}\n
This will ensure that Endless Spool is only enabled for single-color prints.
"},{"location":"guides/manualcutter/","title":"Manual filament cutter","text":"This guide explains how to integrate a filament cutter with the 3MS system, allowing automatic cutting during the filament swap. This negates the need for tip shaping, makinng color swaps much faster and more reliable.
"},{"location":"guides/manualcutter/#table-of-contents","title":"Table of Contents","text":"To install the filament cutter, update your 3ms/main.cfg
:
[save_variables]\nfilename: ~/printer_data/config/3ms/variables.cfg\n\n[include ./settings.cfg]\n[include ./endless/settings.cfg]\n[include ./cutter/settings.cfg]\n[include ./controllers/btt_skr_mini_e3_v2/steppers.cfg]\n\n[dynamicmacros 3ms]\nconfigs: 3ms/macros.cfg, 3ms/endless/macros.cfg, 3ms/cutter/macros.cfg\n
"},{"location":"guides/manualcutter/#configuration","title":"Configuration","text":""},{"location":"guides/manualcutter/#cutter-settings","title":"Cutter Settings","text":"Edit your 3ms/cutter/settings.cfg
:
parking_x_position
280 mm X parking position (near compress pin) parking_y_position
-1 mm Y parking position (near compress pin) start_x_cutter_position
285 mm X start position for cutting end_x_cutter_position
310 mm X position when blade is pushed start_y_cutter_position
-1 mm Y start position for cutting end_y_cutter_position
-1 mm Y position when blade is pushed travel_speed
6000 mm/min Speed to move to cutting position pushing_speed
1600 mm/min Speed to push the blade retries
2 Number of repetions Note
If X or Y is set to -1
, it indicates that the toolhead moves along one axis to reach the parking position. The printer will adjust movement accordingly. If both axes are used, define both positions.
To change values temporarily, use the SET_CUTTER_SETTINGS
macro. this can be usefull during troubleshooting and testing
SET_CUTTER_SETTINGS PARKING_X=290 PUSHING_SPEED=1700\n
"},{"location":"guides/materials/","title":"Materials","text":"Follow this guide to determine if your filament will work with the 3MS.
"},{"location":"guides/materials/#materials-table","title":"Materials Table","text":"This table contains which filaments work in single mode and/or multimaterial mode with the 3MS.
Filament Single Mode Multimaterial Mode Notes PLA Yes Yes PLA+ Yes Yes Silk PLA Yes Yes Matte PLA Yes Yes PETG Yes Yes TPU Yes Untested"},{"location":"guides/materials/#pla","title":"PLA(+)","text":"PLA/PLA+/PLA Pro, etc. filaments are very easy to print in multimaterial with the 3MS. They also support the No Tip Shaping feature.
"},{"location":"guides/materials/#silkmatte-pla","title":"Silk/Matte PLA","text":"Silk/Matte PLA filaments are slightly more difficult to print with or without the 3MS. They generally require tip shaping to work with the 3MS in multimaterial mode.
"},{"location":"guides/materials/#petg","title":"PETG","text":"PETG filaments are easy to print in multimaterial with the 3MS. They will likely require tip shaping. Suggested settings options are provided below. Ideal settings for your setup will likely include a combination of the options.
Tip Shaping Option 1Option 2 Setting Name Setting Value Nozzle Temperature 250\u00baC Loading speed at the start 19mm/s Loading speed 14mm/s Unloading speed at start 200mm/s Unloading speed 90mm/s Delay after unloading 4s # Cooling moves 3 Speed of first cooling move 1mm/s Speed of last cooling move 20mm/s Ramming settings Source: Prusa Forums Setting Name Setting Value Nozzle Temperature 250\u00baC Loading speed at the start 15mm/s Loading speed 14mm/s Unloading speed at start 120mm/s Unloading speed 20mm/s Delay after unloading 0s # Cooling moves 1 Speed of first cooling move 1mm/s Speed of last cooling move 15mm/s Ramming settings Source: Prusa Forums"},{"location":"guides/materials/#tpu","title":"TPU","text":"TPU filaments are very difficult to print with or without the 3MS. If your printer can reliably print TPU, you can likely use it with the 3MS in single mode. To use it in multimaterial mode and/or improve reliability, see the experimental Dual Drive 3MS Extruders for TPU feature.
"},{"location":"guides/notip/","title":"Toolchanges Without Tip Shaping or Filament Cutter!","text":"Because the 3MS is synchronized to the printer's extruder, it can perform toolchanges without any tip shaping or filament cutter.
"},{"location":"guides/notip/#should-tip-shaping-be-used","title":"Should Tip Shaping be Used?","text":"See Materials for information on whether or not tip shaping should be used for your filaments.
"},{"location":"guides/notip/#slicer-setup","title":"Slicer Setup","text":"Setup your slicer for no tip shaping as follows.
"},{"location":"guides/notip/#disable-filament-ramming","title":"Disable Filament Ramming","text":"Disable filament ramming in Filament Settings
-> Multimaterial
-> Toolchange parameters with single extruder MM printers
:
"},{"location":"guides/notip/#unloadload-speed","title":"Unload/Load Speed","text":"
Next, change the Unloading speed at start
and Unloading speed
to 300 (faster is better here). Next, change the Loading speed at start
and Loading speed
to 300 and 100, respectively.
The main idea behind toolchanges without tip shaping relies on the filament being unloaded too fast to form a blob. Setting the Unloading speed
settings allows this. Next, loading the filament back can be generally optimized by increasing the Loading speed
settings.
If your filament has very long strings on the end of them after unloading without tip shaping (longer than 2cm), decrease your filament temperature.
If your filament tip has a nearly flat tip, increase your filament temperature.
The ideal filament tip has a pointy end and a small string (less than 5mm). When in doubt, it is recommended to aim for a slightly stringy tip over a flat tip.
"},{"location":"guides/tipshaping/","title":"Tip Shaping Guidelines","text":"Follow this guide to get faster and more reliable toolchanges with your 3MS.
"},{"location":"guides/tipshaping/#does-my-filament-need-tip-shaping","title":"Does My Filament Need Tip Shaping?","text":"If your filament is in this list, then it likely won't need tip shaping, and you can use the No Tip Shaping feature:
If you filament wasn't in that list, continue reading this page.
"},{"location":"guides/tipshaping/#blobby-tips","title":"Blobby Tips","text":"If your filament tip has a thicker tip after unloading, you can do two things:
If your filament tip has a stringy tip after unloading, you can do two things:
You may also be able to use the No Tip Shaping feature.
"},{"location":"guides/tipshaping/#hook-of-death","title":"Hook of Death","text":"If you filament tip can't unload out of your extruder and forms a hook shape, you may need to replace the PTFE tube between your printer's extruder and hotend. You may also want to follow the recommendations for Blobby tips.
"},{"location":"happy-hare/","title":"Happy Hare Firmware Setup","text":"Follow this guide to install Happy Hare firmware and set it up with your 3MS.
Info
This guide will go through the bare minimum setup required to set up a functional 3MS. It is highly recommended that you read the official Happy Hare documentation.
"},{"location":"happy-hare/#installation","title":"Installation","text":"First, follow the Happy Hare installation instructions available here. When prompted in the installation wizard, select 3MS
as the MMU type.
If you are using one of the natively supported controllers, Happy Hare will automatically set up the hardware configuration for you.
"},{"location":"happy-hare/#configuring-other-controllers","title":"Configuring Other Controllers","text":"If you are using another controller, you can use one of the 3MS controller configurations available here.
"},{"location":"happy-hare/#naming-scheme","title":"Naming Scheme","text":"Each configuration folder uses the following naming scheme:
MMU
: external mainboardMAIN
: your printer's existing mainboard0
for a new setup, or be one higher than your previous controller's last tool number if adding to an existing 3MS.btt_skr_pico
.MMU_0_3_btt_skr_pico
: External SKR Pico controlling four tools numbered 0
to 3
.
MMU_0_6_gtm32_103_v1
: External GTM32 103 V1 controlling seven tools numbered 0
to 6
.
MAIN_0_3_btt_octopus
: Internal BTT Octopus controlling four tools numbered 0
to 3
.
MMU_0_3_btt_skr_pico
).Locate Files: In the configuration folder, there are two files:
mmu.cfg
mmu_hardware.cfg
Copy the mmu.cfg
file into your mmu/base
configuration folder, replacing the existing file.
mmu_hardware.cfg
and copy its contents.In your mmu/base/mmu_hardware.cfg
file, replace the GEAR
section with the text you copied.
The GEAR
section starts with:
# FILAMENT DRIVE GEAR STEPPER(S) --------------------------------------------------------------------------------------\n# \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \n# \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\n# \u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\n# \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\n# \u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\n# \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d\n
and ends right before:
# SERVOS ---------------------------------------------------------------------------------------------------------------\n# \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n# \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\n# \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n# \u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255a\u2588\u2588\u2557 \u2588\u2588\u2554\u255d\u2588\u2588\u2551 \u2588\u2588\u2551\u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551\n# \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u255a\u2588\u2588\u2588\u2588\u2554\u255d \u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\n# \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n
Your 3MS is now configured with Happy Hare.
Info
To finish setting up the 3MS and your printer, you can follow Happy Hare's official documentation.
"},{"location":"hidden/hidden-assembly/","title":"Assembly","text":""},{"location":"hidden/hidden-assembly/#step-1-connecting-the-power-cables","title":"Step 1 Connecting the Power Cables","text":"Choose one of the wiring options below.
Option 1 (DCIN)Option 2 (POWER)Attach the positive cable from the PSU to the positive* port on the mainboard
Attach the negative cable from the PSU to the negative port on the mainboard
"},{"location":"hidden/hidden-assembly/#step-2-connecting-the-stepper-motors","title":"Step 2 Connecting the Stepper Motors","text":"Plug in the stepper for the first 3MS extruder (T0)
Plug in the stepper for the second 3MS extruder (T1)
If applicable, plug in the stepper for the third 3MS extruder (T2)
If applicable, plug in the stepper for the fourth 3MS extruder (T3)
"},{"location":"setup/assembly/","title":"Assembly","text":"Follow this guide to assemble your 3MS.
"},{"location":"setup/assembly/#printed-parts","title":"Printed Parts","text":"An optional board enclosure for the SKR Mini E3 is available here.
Additionally, an optional universal mount for the MK8 extruder using M3 bolts is available here. Note that this requires 2-4 M3 bolts and a place to screw the bolts into.
Finally, you will need to print enough of these Y splitters for the filament.
The Y-splitter available here is now recommended.
"},{"location":"setup/assembly/#mk8-assembly","title":"MK8 Assembly","text":"Next, assemble the MK8 extruders onto the NEMA17 motors using the provided instructions that came with them. If you use the mount provided above, make sure it is in between the MK8 and NEMA17.
"},{"location":"setup/assembly/#wiring","title":"Wiring","text":"Note for Certain Printers
If your printer has Klipper running internally (not on an external computer), the controller (if not a main MCU config) is plugged into a USB port on the printer itself.
Follow one of the following guides based on your controller:
First, choose the number of filament units you want. Each filament unit lets you print with an additional filament. Two filament units are the minimum. You can add or remove filament units after building, but the BOM and configuration will vary based on how many filament units you want.
"},{"location":"setup/bom/#controller-boms","title":"Controller BOMs","text":"Choose the BOM for your chosen controller from the list below:
For each filament unit, purchase this BOM:
Name Quantity Price Link Notes NEMA17 Stepper Motor 1 $9.99 Amazon You can use a pancake stepper if you want, but it will have less torque MK8 Metal Extruder 1 $9.99 Amazon Alternatively, you can use this Dual-drive MK8 based extruder Capricorn PTFE Tubing 1 $11.49 Amazon You likely won't need this for every unit, as this is usually too long for only one unit"},{"location":"setup/firmware/","title":"Firmware","text":"Follow this guide to install Klipper firmware onto your 3MS MCU. This guide is a modified version of the Klipper Documentation.
Info
The following controller(s) can skip this guide:
Make sure your 3MS MCU is plugged into your Klipper Host. Run in your terminal:
cd ~/klipper\nmake menuconfig\n
In the menuconfig, configure it to your MCU. Instructions are included at the top of 3ms/controllers/xxx/steppers.cfg
.
Geetech A30T
If you're using a Geetech A30T controller, follow the flashing instructions here.
Run in your terminal:
make clean\nmake\n
The klipper.bin
file, located in ~/klipper/out/klipper.bin
needs to be copied to a MicroSD card and renamed to firmware.bin
(case-sensitive).
Next, unplug the 3MS board from the PSU and your Klipper Host and insert the SD Card. Next, plug in the PSU, THEN the Klipper Host to the 3MS board. The firmware is now flashed.
"},{"location":"setup/firmware/#get-mcu-id","title":"Get MCU ID","text":"In the terminal, run:
ls /dev/serial/by-id/\n
Example output:
usb-Klipper_stm32f103xe_33FFD1054746333809650557-if00\nusb-Prusa_Research__prusa3d.com__Original_Prusa_i3_MK3_xxx-if00\n
In this case, the first line is the 3MS, and the second line is the 3D printer. Now that you know the id of the 3MS MCU, copy it and save it to a file:
cd ~ && echo \"<your-mcu-id>\" >> mcu.txt \n
"},{"location":"setup/firstprint/","title":"First Print","text":"Follow this guide to begin your first multimaterial print. There are two main ways to prepare a model for multimaterial painting.
"},{"location":"setup/firstprint/#method-1-multimaterial-painting","title":"Method 1: Multimaterial Painting","text":"This method allows you to turn any model, even if it's not designed for multimaterial printing, into a multimaterial print. First, import your model into the slicer. In this case, a 3DBenchy will be used.
Cmd+I OR Ctrl+I
Next, select the model and click multimaterial painting at the top.
N
Once you're in this menu, you can choose any tool, tool size, and filament. Now, just drag over the model to apply the selected tool to the model. In this case, the hull of the 3DBenchy will be set to filament two using the fill tool.
Finally, hit slice and your model is ready to print!
Cmd+R OR Ctrl+R
"},{"location":"setup/firstprint/#method-2-multimaterial-model","title":"Method 2: Multimaterial Model","text":"This method allows you to turn parts of a model to different materials. For this tutorial, this T-rex by Cipis will be used. First, import your model into the slicer. If prompted while opening to treat the model as multiple parts, select \"Yes\".
Cmd+I OR Ctrl+I
Next, go to object settings and change the different parts of the model to different colors.
Finally, hit slice and your model is ready to print!
Cmd+R OR Ctrl+R
"},{"location":"setup/firstprint/#wipe-tower-position","title":"Wipe Tower Position","text":"In the examples, you may have noticed that the wipe tower is far from the model. The travel time between the model and wipe tower adds up, and moving the tower closer can help reduce print time.
In the \"Prepare\" view, click and drag the wipe tower as close to the object as you can without colliding.
If you have a camera on your 3D printer, you may want to put the wipe tower \"behind\" the part from your camera's perspective.
"},{"location":"setup/k1/","title":"Creality K1 Series","text":"Info
This guide applies to the following printers:
Warning
This guide is still under construction
Creality K1 Series 3D printers use a custom version of Klipper, which can cause unexpected problems. Setting up the 3MS (or any Klipper addon) requires extra steps for K1 series printers.
Thank you to @pvilbig for their patience with me here while I was figuring out how to adapt the 3MS to K1 series printers.
"},{"location":"setup/k1/#configuration-installation","title":"Configuration Installation","text":"To install the 3MS configuration, SSH into your printer and run the following commands:
cd ~/\ngit clone -b main --single-branch https://github.com/3DCoded/3MS\ncd 3MS\npython3 install.py --path /usr/data/printer_data/config/3ms\n
Edit 3ms/main.cfg
:
[save_variables]\nfilename: /usr/data/variables.cfg\n
"},{"location":"setup/k1/#dynamicmacros","title":"DynamicMacros","text":"To install DynamicMacros, SSH into your printer and run the following commands:
cd ~/\ngit clone -b main --single-branch https://github.com/3DCoded/DynamicMacros\ncd DynamicMacros\nsh install-k1.sh\n
"},{"location":"setup/k1/#klipperscreen","title":"KlipperScreen","text":"To setup KlipperScreen with the 3MS, run the following commands in SSH:
git clone https://github.com/3DCoded/KlipperScreen-3MS KlipperScreen\ncd ~/KlipperScreen\n./KlipperScreen/scripts/KlipperScreen-install.sh\n
"},{"location":"setup/klipperscreen/","title":"KlipperScreen","text":"Info
This feature is still in an alpha state.
The 3MS has a custom fork of KlipperScreen you can use to control your 3MS.
"},{"location":"setup/klipperscreen/#install","title":"Install","text":"To install the 3MS KlipperScreen, first install KlipperScreen following instructions here. Then, run in your terminal:
cd ~\nmv KlipperScreen KlipperScreen.old\ngit clone https://github.com/3DCoded/KlipperScreen-3MS KlipperScreen\ncd ~/KlipperScreen\n./scripts/KlipperScreen-install.sh\n
Restart KlipperScreen.
"},{"location":"setup/slicer/","title":"Slicer Setup","text":"Follow this guide to setup the 3MS with your slicer. OrcaSlicer will be used in this guide, but these same settings (with different names) can be applied to PrusaSlicer and SuperSlicer.
"},{"location":"setup/slicer/#number-of-filament-units","title":"Number of Filament Units","text":"Set the number of filaments in your slicer to the number of filament units in your 3MS.
In OrcaSlicer, press the filament plus button until there are as many filaments displayed as you have filament units.
"},{"location":"setup/slicer/#klipper-startend-g-code","title":"Klipper Start/End G-Code","text":"In your Klipper PRINT_START
macro, add the following right before your purge line:
MMMS_START INITIAL_TOOL={params.INITIAL_EXTRUDER}\n
In your PRINT_END
macro, add the following before the cooldown command is called:
MMMS_END\n
"},{"location":"setup/slicer/#slicer-start-g-code","title":"Slicer Start G-Code","text":"In your slicer's Start G-Code, add the following parameter to your PRINT_START
:
INITIAL_EXTRUDER=[initial_extruder]\n
"},{"location":"setup/slicer/#multimaterial-parameters","title":"Multimaterial Parameters","text":"The last required step of setting up your slicer for the 3MS is setting the multimaterial parameters.
Navigate to Printer Settings
-> Multimaterial
. Check off the Single Extruder Multi Material
checkbox.
The first two Single extruder multi-material parameters
are hotend-specific.
The cooling tube refers to the length of PTFE tube in your hotend. For most hotends, this is usually in the heat sink.
Its position is measured as the distance from the bottom of the cooling tube to the tip of the nozzle.
Set those two parameters in your slicer.
"},{"location":"setup/slicer/#parking-position","title":"Parking Position","text":"The third parameter is extruder/printhead-specific.
The Filament parking position
refers to the position where the filament is just above the extruder gears. During color swaps, the filament is unloaded to this position before the 3MS takes over. At the end of the toolchange, the next filament is in this same position.
Its position is measured as its distance to the tip of the nozzle.
"},{"location":"setup/slicer/#extra-loading-distance","title":"Extra loading distance","text":"This parameter refers to the extra distance the filament is loaded after a color swap is complete. This is usually a negative number.
When a color swap is performed, the nozzle stays in the same place while the 3MS switches colors. This section will refer to this position as the \"Swap position\".
If you notice blobs forming around the swap positions, decrease the Extra loading distance
(set it to a negative number further from zero).
If you notice gaps around the swap positions, increase the Extra loading distance
(set it to a negative number closer to zero).
Example settings are shown below for a Prusa MK3S+ with a Mosquito hotend.
Info
This is the last required part of slicer setup.
"},{"location":"setup/slicer/#optional-klipper_estimator","title":"Optional: klipper_estimator","text":"If you use klipper_estimator and want the toolchange represented in the time estimate, time your toolchange, then change your Change filament G-Code:
"},{"location":"setup/controllers/","title":"Controllers","text":"Follow this guide to determine which controller to use in your 3MS.
"},{"location":"setup/controllers/#options","title":"Options","text":"The 3MS works on multiple different controllers.
Info
If your printer's mainboard has spare stepper ports, you can use them to control 3MS steppers. You can open an issue on Github (there's a template) to get a configuration made for your specific setup. Any controllers listed with \"(main MCU)\" use those spare stepper plugs.
Choose one of the following supported controllers (a checked box indicates it is fully tested, and an empty box indicates testers wanted):
BTT MMB (4 colors)
Recommended
Einsy RAMBo (main MCU) with SKR Mini E3 V2.0 (3ms MCU)
Expert modification
Geetech A30T
Max filament units: 4
MCU Name: 3ms
Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 M1 1 M2 2 M3 3 M4Now, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug the black wire into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the MMB board, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Following this image, locate the HVIN and GND inputs (top left)
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your MMB, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the MMB lights up, you wired it correctly!
Finally, plug the MMB into your Klipper host with the cable that came with it.
"},{"location":"setup/controllers/bttoctopusmain/","title":"BTT Octopus (main MCU)","text":"Warning
This configuration may not work with the BTT Octopus Pro.
Max filament units: 4
MCU Name: main
This configuration is a main MCU
configuration, meaning that your printer should already be running off a BTT Octopus and you don't need to purchase one.
Per filament unit:
1x TMC2209 ($7 each)
"},{"location":"setup/controllers/bttoctopusmain/#wiring","title":"Wiring","text":"Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 MOTOR7 1 MOTOR6 2 MOTOR5 3 MOTOR4"},{"location":"setup/controllers/einsyrambo-skrminie3v2/","title":"Einsy RAMBo (main MCU) with SKR Mini E3 V2","text":"Danger
This guide is an expert guide only
Info
This modification is designed for the Prusa MK3/S/S+, and depends on this Klipper configuration.
"},{"location":"setup/controllers/einsyrambo-skrminie3v2/#why","title":"Why?","text":"When printing fast, the TMC2130's on the Einsy RAMBo can get quite loud. The TMC2209's on the SKR Mini are much quieter and support denser microstepping.
"},{"location":"setup/controllers/einsyrambo-skrminie3v2/#bom","title":"BOM","text":"Name Price Quantity Link Notes PSU -> Einsy Cable $7.99 1 PartsBuilt3D Stepperonline NEMA17 $9.99 each Amazon 2 Replaces current XY motors"},{"location":"setup/controllers/einsyrambo-skrminie3v2/#wiring","title":"Wiring","text":"First, unplug the 3MS steppers from the SKR Mini, and the XY steppers from the Einsy RAMBo. The motors will need to be switched due to different connector types between boards.
This table outlines the major wiring of this modification.
Einsy RAMBo SKR Mini E3 V2 Motor PSU+ POWER+ PSU- POWER- XM 3ms0 YM 3ms1 XM X YM Y"},{"location":"setup/controllers/einsyrambo-skrminie3v2/#configuration","title":"Configuration","text":"In your printer.cfg
, comment out these lines:
#[include klipper-prusa-mk3s/mk3s/steppers.cfg]\n#[include klipper-prusa-mk3s/mk3s/tmc2130.cfg]\n
Next, copy the contents of 3ms/controllers/einsy_rambo_with_skr_mini/xy-motors.cfg
and ze-motors.cfg
to klipper-prusa-mk3s/skr/xy.cfg
, and klipper-prusa-mk3s/mk3s/ze.cfg
, respectively.
Add the following new lines:
printer.cfg[include klipper-prusa-mk3s/skr/xy.cfg]\n[include klipper-prusa-mk3s/mk3s/ze.cfg]\n
Restart Klipper.
"},{"location":"setup/controllers/geetech-a30t/","title":"Geetech A30T","text":"Contributed by @ImChrono
Max filament units: 7
MCU Name: 3ms
To flash Klipper firmware to the A30T, run the following command and see the following screenshot:
cd ~/klipper\nmake menuconfig\n
Next, connect the BOOT0 jumper on the A30T and run:
stm32flash -i ',,,,,' -v -w out/klipper.bin -g 0 /dev/serial/by-id/<your-mcu-id-here>\n
"},{"location":"setup/controllers/geetech-a30t/#wiring","title":"Wiring","text":"Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 X 1 Y 2 Z0 3 Z1 4 E1 5 E2 6 E3Now, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug two black wires into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the motherboard, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Route the four wires inside closest to your chosen input
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your motherboard, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the motherboard lights up, you wired it correctly!
Finally, plug the motherboard into your Klipper host with the cable that came with it.
"},{"location":"setup/controllers/melloyflyd7/","title":"Mellow Fly D7","text":"Max filament units: 6
MCU Name: 3ms
Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 X 1 Y 2 Z 3 Z1 4 Z2 5 E0Now, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug the black wire into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the board board, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Using the markings on the board, plug the red wire into the positive terminal on the board
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your board, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the board lights up, you wired it correctly!
Finally, plug the board into your Klipper host with the cable that came with it.
"},{"location":"setup/controllers/minirambo/","title":"Mini RAMBo","text":"Max filament units: 4
MCU Name: 3ms
Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 XM 1 YM 2 ZAM or ZBM 3 E0MNow, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug the black wire into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the RAMBo board, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Route the two wires inside closest to your chosen input
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your RAMBo, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the RAMBo lights up, you wired it correctly!
Finally, plug the RAMBo into your Klipper host with the cable that came with it.
"},{"location":"setup/controllers/skrminie3v2/","title":"BTT SKR Mini E3 V2","text":"Max filament units: 4
MCU Name: 3ms
Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 XM 1 YM 2 ZAM or ZBM 3 E0MNow, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug the black wire into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the SKR board, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Following this image, choose either the DCIN or POWER input
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your SKR, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the SKR lights up, you wired it correctly!
Finally, plug the SKR into your Klipper host with the blue cable that came with it.
"},{"location":"setup/controllers/skrpico/","title":"BTT SKR Pico","text":"Max filament units: 4
MCU Name: 3ms
Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 X 1 Y 2 Z1 or Z2 3 ENow, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug the black wire into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the SKR board, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Following this image, locate the POWER input
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your SKR, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the SKR lights up, you wired it correctly!
Finally, plug the SKR into your Klipper host with the blue cable that came with it.
"},{"location":"setup/controllers/zm384main/","title":"Zonestar ZM384 (main MCU)","text":"Max filament units: 3
MCU Name: main
This configuration is a main MCU
configuration, meaning that your printer should already be running off a ZM384 and you don't need to purchase one.
In your 3ms/macros.cfg
, edit the following section:
# Set the sync of provided TOOL to SYNC with extruder\n### --- Comment if using the 3MS instead of your printer's extruder --- ###\n[gcode_macro SET_TOOL_SYNC]\ngcode:\n {% set tool = params.TOOL|int %}\n {% set sync = params.SYNC|int %}\n {% set motion_queue = \"extruder\" if sync == 1 else \"\" %}\n SYNC_EXTRUDER_MOTION EXTRUDER=3ms{ tool } MOTION_QUEUE={ motion_queue }\n### --- Comment if using the 3MS instead of your printer's extruder --- ###\n# [gcode_macro SET_TOOL_SYNC]\n# gcode:\n# {% set tool = params.TOOL|int %}\n# {% set sync = params.SYNC|int %}\n# {% set ext_name = \"3ms\"+(tool|str) %}\n# {% if tool == 0 %}\n# {% set ext_name = \"extruder\" %}\n# {% endif %}\n# {% set motion_queue = \"extruder\" if sync == 1 else \"\" %}\n# SYNC_EXTRUDER_MOTION EXTRUDER={ext_name} MOTION_QUEUE={ motion_queue }\n
macros.cfg# Set the sync of provided TOOL to SYNC with extruder\n### --- Comment if using the 3MS instead of your printer's extruder --- ###\n# [gcode_macro SET_TOOL_SYNC]\n# gcode:\n# {% set tool = params.TOOL|int %}\n# {% set sync = params.SYNC|int %}\n# {% set motion_queue = \"extruder\" if sync == 1 else \"\" %}\n# SYNC_EXTRUDER_MOTION EXTRUDER=3ms{ tool } MOTION_QUEUE={ motion_queue }\n### --- Comment if using the 3MS instead of your printer's extruder --- ###\n[gcode_macro SET_TOOL_SYNC]\ngcode:\n {% set tool = params.TOOL|int %}\n {% set sync = params.SYNC|int %}\n {% set ext_name = \"3ms\"+(tool|str) %}\n {% if tool == 0 %}\n {% set ext_name = \"extruder\" %}\n {% endif %}\n {% set motion_queue = \"extruder\" if sync == 1 else \"\" %}\n SYNC_EXTRUDER_MOTION EXTRUDER={ext_name} MOTION_QUEUE={ motion_queue }\n
"},{"location":"setup/controllers/zm384main/#wiring","title":"Wiring","text":"Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 E0 1 E1 2 E2 3 E3"},{"location":"troubleshooting/","title":"Troubleshooting","text":"If you are having trouble getting your 3MS to work properly, check if the problem you're facing is in this list:
If it is not in this list, please open an issue on Github.
"},{"location":"troubleshooting/failedloadunload/","title":"Failed Load/Unload","text":"If your printer is paused and displaying Please load
or Please unload
, follow this troubleshooting guide to diagnose the problem and fix it.
First, see False Alarm to ensure your filament sensor is properly configured and is being properly read by the 3MS macros.
"},{"location":"troubleshooting/failedloadunload/#failed-unload","title":"Failed Unload","text":"When your printer displays a Please unload
message, pay attention to the Tx
number it shows. For example, if it displays the message Please unload T0
, it failed to unload the filament at T0. Follow these steps to recover the toolchange:
Manually pull the filament out of the printer's extruder.
If it is stuck, try one of the following:
Also, see Skipping
Next, manually pull the filament all the way to where the filament is usually parked between toolchanges (before the Y-splitter).
T0 -> T1
indicating which filament is next (in this case T1). It should be loaded to the entry of the printer's extruder gears.Next, diagnose the problem based on these possible scenarios:
Filament never unloaded out of printer's extruder
This is a sign of poor tip shaping. The quick fix for this is to increase print temperatures. Also, see Skipping.
Filament unloaded out of printer's extruder, but stopped before filament sensor
This is a sign of your filament sensor causing excess friction on the filament, or your 3MS extruder tension too loose. For the 3MS tension too lose, simply rotate the tensioning screw on the 3MS extruder clockwise a couple rotations.
When your printer displays a Please load
message, pay attention to the Tx
number it shows. For example, if it displays the message Please load T1
, it failed to load the filament at T1. Follow these steps to recover the toolchange:
Manually push the filament all the way to the inlet of your printer's extruder.
If your filament isn't able to load, the previous tool may not have completely unloaded. See Failed Unload for more information.
Resume your print.
Next, diagnose the problem based on these possible scenarios:
Previous filament didn't unload enough
Increase your unload_distance
in MMMS_SETTINGS
(3ms/settings.py
). You can test different values by using SET_MMMS_SETTINGS
at runtime. Example:
SET_MMMS_SETTINGS UNLOAD_DISTANCE=210\n
Filament didn't load enough
Increase your load_distance
in MMMS_SETTINGS
(3ms/settings.py
). You can test different values by using SET_MMMS_SETTINGS
at runtime. Example:
SET_MMMS_SETTINGS LOAD_DISTANCE=220\n
If during toolchanges, a failed toolchange false alarm occurs (print pauses even though toolchange was successful), follow this troubleshooting guide to fix it.
"},{"location":"troubleshooting/falsealarm/#fsensor_delay","title":"fsensor_delay","text":"The main culprit for this issue is likely your fsensor_delay
in 3ms/settings.cfg
is too short. Short values will cause more false alarms, and long values will cause less. Generally, the default 2000ms is good for most setups, but if you are having false alarms, you will have to increase it. To set it, use the SET_MMMS_SETTINGS
command:
SET_MMMS_SETTINGS FSENSOR_DELAY=3000\n
To save it permanently:
BeforeAfter 3ms/settings.cfgfsensor_delay: 2000\n
3ms/settings.cfgfsensor_delay: 3000\n
"},{"location":"troubleshooting/skipping/","title":"Motor Skipping","text":"If any of your extruder motors are skipping while using the 3MS, follow this troubleshooting guide to diagnose the issue and fix it.
"},{"location":"troubleshooting/skipping/#printers-extruder","title":"Printer's Extruder","text":"First, check if your printer's extruder is properly extruding. To check this, detach the PTFE tube from the inlet of your extruder, and manually load filament, using Klipper's controls for loading filament. If your printer's extruder is having trouble extruding plastic, you may have one of the following:
You can also slightly decrease the 3MS's rotation_distance
.
If the printer's extruder is working properly, and you're still having skipping, check the filament tips. If the tip has a long string on it, or has a thick blob at the end, your filament tips may be to blame. If you have stringy tips, decrease your nozzle temperature while printing. If you have blobby tips, increase your nozzle temperature while printing. Alternatively, you can purchase PTFE tubes with a larger ID to allow for less precise tips.
You can also slightly increase the 3MS's rotation_distance
.
If your prints start to have gaps in the walls, you are likely experiencing underextrusion. Follow this troubleshooting guide to diagnose the issue and fix it.
"},{"location":"troubleshooting/underextrusion/#extruderhotend-issues","title":"Extruder/Hotend Issues","text":"First, try the solutions in this article in case there are any issues with your printer's extruder/hotend.
"},{"location":"troubleshooting/underextrusion/#3ms-rotation_distance","title":"3MS rotation_distance","text":"If your extruder and hotend are working fine, the next likely cause of underextrusion is your 3MS rotation_distance is too high. There are two likely causes and solutions, based on where in the print the underextrusion occurs:
Whole print - 3MS motors working backwards from the extruder or not working at all
Follow the wiring section of Assembly.
Follow the first two steps of Stepper Setup.
Partially through print - 3MS motors not turning enough
Follow the last step of Stepper Setup.
The 3MS is short for MMMS, which stands for Modular Multi Material System
"},{"location":"#inspiration","title":"Inspiration","text":"Model: Sheep by Cipis
Model: Monolith Cryptic Calendar by Sevro
Model: Voron Cube (bundled with OrcaSlicer), painted by me in OrcaSlicer
Printed at 50% scale
Model: T-rex by Cipis
Model: Striped lizard with pupils by EngMike
"},{"location":"#photos","title":"Photos","text":"Photos Full Printer3MSY Splitter"},{"location":"#videos","title":"Videos","text":"West3D Video SeriesThank you to Allen Rowand from West3D for making this ongoing series on the 3MS.
"},{"location":"#why-3ms","title":"Why 3MS?","text":"Why use the 3MS when there are many other multi-material systems?
Here are a few reasons:
With that said, there are a few reasons why you might not want to/be able to use the 3MS:
To use the 3MS, your setup has to meet the following requirements:
Here is a example step by step of what goes on during a single 3MS toolchange from T0 to T1:
For more detail about the Tx command, see Flowchart.
Think of the 3MS as an extension to your current extruder's length. It allows for switching filaments without compromising any of the benefits of your printer's extruder.
The 3MS's motors work together with your printer's extruder. This way, there won't be any additional resistance from pulling the filament through a disabled extruder. Also, unloads and loads to/from the printer's extruder are fully synchronized with the 3MS. This allows for even faster toolchanges!
"},{"location":"#get-started","title":"Get Started","text":"To get started with the 3MS, see the Master Instructions.
Get Started
"},{"location":"#what-about-the-3dchameleon","title":"What about the 3DChameleon?","text":"I recently created a klipper plugin for the 3DChameleon after purchasing a unit. I'm sure my Chameleon could have worked if I had tuned it further, but after several months with only partial success, I gave up. I am still open to pull requests for 3dchameleon-klipper and will do my best to respond to issues there, but I won't be able to test it myself anymore.
If you are having reliability issues with the 3DChameleon, see 3DChameleon Conversion
"},{"location":"compare/","title":"Comparison of Multimaterial Systems","text":"Not sure if you want to use the 3MS? Check this comparison between several common multimaterial systems.
3MS Modular Multimaterial System for Klipper 3D Printers
Pros:
Simple Design
Reliability
Documentation
Modular Design
Active Community
Price (~$140)
Cons:
Compatibility (only Klipper)
Box Turtle MMU Automated Filament Changer
Pros:
Reliability
Active Community
Documentation
Cons:
Expandability (only four lanes)
Compatibility (only Klipper)
Price ($300)
ERCF v2 An expandable MMU for Klipper-based 3D-printers
Pros:
Reliability
Modular Design
Active Community
Documentation
Cons:
Compatibility (only Klipper)
Complexity
TradRack by Annex Engineering
Pros:
Reliability
Modular Design
Active Community
Documentation
Cons:
Compatibility (only Klipper)
Complexity
3DChameleon MK4 Automatic Color Changer
Pros:
Compatibility
No custom firmware
Price ($200)
Cons:
Reliability
Documentation
SMuFF Smart Multi Filament Feeder
Pros:
Reliability
Modular Design
Documentation
Cons:
Complexity
Prusa MMU3 Multi Material Upgrade
Pros:
Reliability
Support
Documentation
Cons:
Compatibility
Price ($300)
This flowchart assumes a fsensor_delay
of 2000ms.
graph TD\n A[T1] --> B[Toolchange T=1];\n B[Toolchange T=1] --> C{Same tool?};\n C --> |No| D{Previous filament loaded?};\n C --> |Yes| E{Do nothing};\n D --> |Yes| F[MMMS_UNLOAD];\n F --> G[DESYNC_TOOL TOOL=0];\n G --> H[G4 P2000];\n H --> I[CHECK_FSENSOR V=0];\n D --> |No| J[SYNC_TOOL TOOL=1];\n I --> J;\n J --> K[MMMS_LOAD];\n K --> L[G4 P2000];\n L --> M[CHECK_FSENSOR V=1];\n M --> N[Save new previous extruder]
"},{"location":"instructions/","title":"Instructions","text":""},{"location":"instructions/#master-instructions","title":"Master Instructions","text":"Due to the modularity of the 3MS, there are many ways to set it up. This guide attempts to encompass all supported ways of setting up the 3MS.
"},{"location":"instructions/#basic-steps","title":"Basic Steps","text":"The basic steps this guide will follow are:
Before starting the instructions, a basic understanding of how the 3MS works is recommended. There are two types of components in the 3MS:
Controller
This controls the 3MS stepper motors. This is usually an extra 3D printer mainboard purchased specifically for the 3MS. If your existing 3D printer mainboard has spare stepper ports, you can use them for the 3MS.
The available configurations are specific to either an external mainboard setup, or utilizing spare stepper ports on your existing mainboard. If you are utilizing spare stepper ports, the name of the config will include \"(main MCU)\"
Filament Units
These move the filament. These are standard MK8 extruders (used on Ender 3's). You can use different extruders for the filament units, as long as you can mount them securely and they can attach to a PTFE tube. MK8 extruders are used as the default due to their low cost.
The number of filaments you will be able to print with is equal to the number of filament units you have. For example, two filament units will let you print with two colors. It is important to note that one filament unit will NOT let you print in multimaterial.
"},{"location":"instructions/#05-choosing-a-controller","title":"0.5. Choosing a Controller","text":"Choose one of the controllers from Controllers before continuing.
"},{"location":"instructions/#1-getting-a-bom","title":"1. Getting a BOM","text":"Go to BOM to view the bill of materials for the number of filament units you want. Example BOM for two filament units and a SKR Mini E3 V2:
Name Price Quantity Link Notes SKR Mini E3 V2 $34.99 1 Amazon Duponts $9.99 1 Amazon These wires are only sufficient to run steppers, not heaters 12V PSU $7.39 1 Amazon This PSU is only sufficient to run steppers, not heaters NEMA17 Stepper Motor $9.99 2 Amazon You can use a pancake stepper if you want, but it will have less torque MK8 Metal Extruder $9.99 2 Amazon Capricorn PTFE Tubing $11.49 1 Amazon You likely won't need this for every unit, as this is usually too long for only one unit"},{"location":"instructions/#2-assembling-your-3ms","title":"2. Assembling your 3MS","text":"Follow Assembly to assemble your 3MS.
"},{"location":"instructions/#3-configuring-your-3ms","title":"3. Configuring your 3MS","text":"Follow Stepper Setup to setup and calibrate each of your filament units.
"},{"location":"instructions/#5-slicer-setup","title":"5. Slicer setup","text":"Follow Slicer Setup to setup your slicer for the 3MS.
"},{"location":"instructions/#6-first-print","title":"6. First print","text":"Follow First Print to create your first multimaterial print with the 3MS.
"},{"location":"instructions/#7-troubleshooting","title":"7. Troubleshooting","text":"Check Troubleshooting to find guides to troubleshoot your 3MS.
"},{"location":"instructions/#8-updating","title":"8. Updating","text":"To update the 3MS configuration, go to the Update Manager in Mainsail/Fluidd and refresh the updates.
Next, find the \"mmms\" entry in the list. If there is an \"Update\" button next to it, click it and begin updating.
After updating, in your terminal, run:
sh ~/3MS/install.sh\n
This will install the new 3MS configuration. Next, restart Klipper:
Info
It is important to restart the Klipper service, and not just run the RESTART
command.
Run this command in your terminal:
sudo service klipper restart\n
"},{"location":"instructions/#9-tuning-and-optimizations","title":"9. Tuning and Optimizations","text":"After your 3MS is installed, it's time to tune and optimize it.
The best starting place for this is in the Materials Reference.
"},{"location":"configuration/","title":"Configuration","text":"This guide covers the configuration structure and options of the 3MS.
"},{"location":"configuration/#maincfg","title":"main.cfg","text":"main.cfg
is located in 3ms/main.cfg
. It contains the following:
[save_variables]
configuration section. This section sets the location where variables about the previous tool will be saved. [include]
sections. These reference other configuration files covered in this guide. The included configurations are:settings.cfg
macros.cfg
controllers/xxx/steppers.cfg
settings.cfg
contains the settings the 3MS uses during toolchanges in macros.cfg
. Further information is here.
macros.cfg
contains the macros the 3MS uses during toolchanges. Further information is here.
steppers.cfg
contains the MCU configuration for the 3MS. It contains the following:
[extruder_stepper 3msx]
This contains the pin mappings for the motor assigned to 3MS tool x.[tmc2209 extruder_stepper 3msx]
This contains the pin mappings for the TMC2209 controlling the motor assigned to 3MS tool x.[mcu 3ms]
This contains the serial path to the 3MS MCU.This contains the KlipperScreen 3MS menu configuration. For more information, see KlipperScreen.
"},{"location":"configuration/fsensor/","title":"Filament Sensor","text":"Follow this guide to configure your filament sensor with the 3MS.
"},{"location":"configuration/fsensor/#location-of-sensor","title":"Location of Sensor","text":"The filament sensor should be right before the extruder, and after the Y splitter. Other locations, such as between the hotend and extruder, have not been tested.
Warning
The 3MS has only been tested with a filament_switch_sensor
, and not with a filament_motion_sensor
To configure your filament sensor with the 3MS, open 3ms/settings.cfg
and change the following (assuming your filament sensor is named \"runout_sensor\"):
fsensor_name: \"fsensor\"\n
3ms/settings.cfgfsensor_name: \"runout_sensor\"\n
"},{"location":"configuration/install/","title":"Installation","text":"Follow this guide to install the 3MS configuration and macros.
Info
All SSH commands are run on the Klipper Host (usually a Raspberry Pi) and are labeled like the following: SSH
echo Hello World\n
Notice the \"SSH\" at the top of the code block. All references to a mainboard usually refer to the 3MS board. If you are using a (main MCU)
configuration, references to a mainboard refer to your printer's existing mainboard.
First, clone the 3MS repository:
SSHcd ~\ngit clone https://github.com/3DCoded/3MS\ncd 3MS\n
Storage
If the git clone
command fails due to lack of storage on your system, run the following set of commands instead:
cd ~\ngit clone -b main --single-branch https://github.com/3DCoded/3MS\ncd 3MS\n
"},{"location":"configuration/install/#install-script","title":"Install Script","text":"K1 Series
If you are setting up the 3MS on a Creality K1 Series printer (K1, K1C, K1 Max), use the following install script instead:
SSHpython3 install.py --path /usr/data/printer_data/config/3ms\n
Run the install script:
SSHsh install.sh\n
"},{"location":"configuration/install/#printercfg","title":"printer.cfg","text":"In the Klipper web interface (e.g. Mainsail/Fluidd/OctoPrint), open printer.cfg
and add:
[include 3ms/main.cfg]\n
"},{"location":"configuration/install/#dynamicmacros","title":"DynamicMacros","text":"The 3MS configuration depends on DynamicMacros. If you haven't installed it already, follow the instructions here to do so.
Remove the following line from your 3ms/main.cfg
if it exists:
[include ./macros.cfg]\n
"},{"location":"configuration/install/#moonraker-update-manager","title":"Moonraker Update Manager","text":"To enable updates for the 3MS, add the following to your moonraker.conf
(in the same folder as your printer.cfg
):
# 3MS Update Manager\n[update_manager mmms]\ntype: git_repo\npath: ~/3MS\norigin: https://github.com/3DCoded/3MS.git\nprimary_branch: main\nis_system_service: False\ninstall_script: install.sh\n
Warning
When updating via Moonraker, the following files will be overwritten:
macros.cfg
KlipperScreen.conf
endless/macros.cfg
If you have any changes in these files, they will be lost when updating.
"},{"location":"configuration/install/#purge-line","title":"Purge Line","text":"If you use KAMP for purging, set your tip_distance
setting in KAMP_Settings.cfg
to your filament parking position (this is the distance between your filament sensor and your nozzle).
If you use any other method of purging, add this line to your Start G-Code / PRINT_START
macro right before your purge line, and after your MMMS_START
:
G1 E100 F900\n
Replace E100
with E
+parking position
In 3ms/main.cfg
, edit the [include ./controllers/xxx/steppers.cfg]
line, replacing xxx
with the config name of your controller:
btt_skr_mini_e3_v2
SKR Pico btt_skr_pico
Mellow Fly D7 mellow_fly_d7
BTT MMB btt_mmb
BTT Octopus (main MCU) btt_octopus_main
Zonestar ZM384 (main MCU) zonestar_zm384_main
Mini RAMBo mini_rambo
Geetech A30T gtm32_103_v1
"},{"location":"configuration/install/#configure-mcu-id","title":"Configure MCU ID","text":"Finally, to configure the MCU ID you saved from Firmware, run in your terminal:
SSHcd ~ && cat mcu.txt\n
Copy the path that is output. Now, in your 3ms/controllers/xxx/steppers.cfg
, in the [mcu 3ms]
section (towards the bottom), set the MCU ID.
Example:
BeforeAfter 3ms/controllers/xxx/steppers.cfg[mcu 3ms]\nserial: /dev/serial/by-id/<your-mcu-id>\n
3ms/controllers/xxx/steppers.cfg[mcu 3ms]\nserial: /dev/serial/by-id/usb-Klipper_stm32f103xe_33FFD1054746333809650557-if00\n
"},{"location":"configuration/macros/","title":"Macros","text":""},{"location":"configuration/macros/#3ms-settings","title":"3MS Settings","text":""},{"location":"configuration/macros/#mmms_settings","title":"MMMS_SETTINGS","text":"Stores the settings for the 3MS.
Default Settings
variable_load_distance: 210\nvariable_unload_distance: 200\nvariable_load_speed: 4500\nvairable_unload_speed: 4500\nvariable_fsensor_delay: 2000\nvariable_num_tools: 2\nvariable_step_size: 99\nvariable_retry_dist: 50\nvariable_retry_speed: 900\n
Example Usage
MMMS_SETTINGS\n
"},{"location":"configuration/macros/#set_3ms_settings","title":"SET_3MS_SETTINGS","text":"Sets the configuration for the 3MS. Allows temporary customization of load and unload distances and speeds
Example Usage
SET_3MS_SETTINGS LOAD_DISTANCE=210 UNLOAD_DISTANCE=200 LOAD_SPEED=3500 UNLOAD_SPEED=5500 FSENSOR_DELAY=2500\n
"},{"location":"configuration/macros/#get_3ms_settings","title":"GET_3MS_SETTINGS","text":"Displays the configuration for the 3MS.
Example Usage
GET_3MS_SETTINGS\n
"},{"location":"configuration/macros/#filament-handling","title":"Filament Handling","text":""},{"location":"configuration/macros/#mmms_unload","title":"MMMS_UNLOAD","text":"Unloads filament by a specified distance and speed. If no distance/speed is specified, it uses the default unload distance/speed from MMMS_SETTINGS
.
Example Usage
MMMS_UNLOAD DISTANCE=200 SPEED=5500\n
"},{"location":"configuration/macros/#mmms_load","title":"MMMS_LOAD","text":"Loads filament by a specified distance and speed. If no distance/speed is specified, it uses the default load distance/speed from MMMS_SETTINGS
.
Example Usage
MMMS_LOAD DISTANCE=210 SPEED=3500\n
"},{"location":"configuration/macros/#check_fsensor","title":"CHECK_FSENSOR","text":"Checks the filament sensor state. Pauses the print if the sensor state does not match the expected value.
Example Usage
CHECK_FSENSOR V=1\n
"},{"location":"configuration/macros/#tool-sync","title":"Tool Sync","text":""},{"location":"configuration/macros/#set_tool_sync","title":"SET_TOOL_SYNC","text":"Sets the sync state of a tool. Syncs or desyncs the specified tool to/from the extruder.
Example Usage
SET_TOOL_SYNC TOOL=0 SYNC=1\n
"},{"location":"configuration/macros/#sync_tool","title":"SYNC_TOOL","text":"Syncs the specified tool and desyncs all other tools to/from the extruder.
Example Usage
SYNC_TOOL TOOL=0\n
"},{"location":"configuration/macros/#desync_tool","title":"DESYNC_TOOL","text":"Desyncs the specified tool from the extruder.
Example Usage
DESYNC_TOOL TOOL=0\n
"},{"location":"configuration/macros/#clear_tool","title":"CLEAR_TOOL","text":"Clears the current tool selection by setting it to -1.
Example Usage
CLEAR_TOOL\n
"},{"location":"configuration/macros/#desync_all_tools","title":"DESYNC_ALL_TOOLS","text":"Desyncs all configured tools.
Example Usage
DESYNC_ALL_TOOLS\n
"},{"location":"configuration/macros/#print-start-and-end","title":"Print Start and End","text":""},{"location":"configuration/macros/#mmms_start","title":"MMMS_START","text":"Starts the print by checking the filament sensor. If filament is detected, the print is paused and the user is notified. Regardless of the filament sensor state, the initial tool is loaded.
Example Usage
MMMS_START INITIAL_TOOL=0\n
"},{"location":"configuration/macros/#mmms_end","title":"MMMS_END","text":"Ends the print by unloading the current tool. If filament is detected after unloading, the user is notified.
Example Usage
MMMS_END\n
"},{"location":"configuration/macros/#tool-change","title":"Tool Change","text":""},{"location":"configuration/macros/#t0","title":"T0","text":"Changes to tool 0.
Example Usage
T0\n
"},{"location":"configuration/macros/#t1","title":"T1","text":"Changes to tool 1.
Example Usage
T1\n
"},{"location":"configuration/macros/#tx","title":"Tx","text":"Changes to a specified tool. Replace x
with the tool number.
Example Usage
T2\nT3\n
"},{"location":"configuration/steppers/","title":"Steppers","text":""},{"location":"configuration/steppers/#stepper-motors","title":"Stepper Motors","text":"Follow this guide to calibrate each of the stepper motors. Each of these steps should be repeated for each of your filament units, replacing TOOL=0
with TOOL=1
, and so on. Also replacing 3ms0
with 3ms1
, and so on.
Info
If your stepper motor shakes erratically while running any of these commands, your wiring may be incorrect.
"},{"location":"configuration/steppers/#is-the-motor-spinning","title":"Is the motor spinning?","text":"Run this command:
SYNC_TOOL TOOL=0\nG1 E50 F4500\n
If the motor spins, skip to the next step. If not, check your wiring first. If your wiring is fine, go to 3ms/steppers.cfg
. Locate the section named [extruder_stepper 3ms0]
. In front of the enable_pin
, add, an !
. If there already is one, remove it. Example:
enable_pin: !3ms: PD7\n
3ms/steppers.cfgenable_pin: 3ms: PD7\n
"},{"location":"configuration/steppers/#is-the-motor-spinning-backwards","title":"Is the motor spinning backwards?","text":"Preload each of the filament units with a piece of scrap filament by pushing the lever to release the tension, inserting filament, then releasing the lever to restore tension. Next, run this command:
SYNC_TOOL TOOL=0\nG1 E50 F4500\n
Note which way the filament moves. If it moves forwards, away from the PTFE coupler, skip to the last step. If it moves backwards, you have two choices:
To invert the pin in the configuration, locate the configuration section for the filament unit spinning backwards, and invert the dir_pin
. See the previous section for how to invert the pin.
This section is a modified version of the Klipper Docs
Preload each of the filament units with a piece of scrap filament at least 200mm long by pushing the lever to release the tension, inserting filament, then releasing the lever to restore tension.
Use a ruler and a marker to place a mark 70mm from the inlet of the filament unit. Use calipers to measure the actual distance. Write it down, as it will be referred to as <initial_mark_distance>
.
Next, run this command:
SYNC_TOOL TOOL=0\nG1 E50 F1500\n
Use calipers to measure the new distance between the inlet of the filament unit and the mark. Write it down, as it will be referred to as <next_mark_distance>
.
Calculate <actual_extrude_distance> = <initial_mark_distance> - <next_mark_distance>
In the steppers.cfg
file (located in 3ms/controllers/xxx/steppers.cfg
), locate the configuration section for the current extruder. Example:
[extruder_stepper 3ms0]\nextruder: extruder\nstep_pin: 3ms: PB13\ndir_pin: !3ms: PB12\nenable_pin: !3ms: PB14\nmicrosteps: 16\nrotation_distance: 32.8450\n
Note the rotation_distance
(last line). In this case, it is 32.8450
.
Calculate the new rotation distance: new_rotation_distance = <rotation_distance> * <actual_extrude_distance> / 50
.
Round this result to three or four decimal places. Decrease it by 0.005 (this is so that if this result is slightly off, the 3MS filament unit will skip, instead of the printer's extruder stripping the filament during a print).
Set the new rotation_distance
in your config. Save it and restart Klipper.
Info
If you use the same stepper motor brand and model for each of your filament units, you likely only have to do this step for one stepper, then copy over the rotation_distance to all the others.
"},{"location":"contributing/","title":"Contributing","text":"If you want to contribute to the 3MS project, follow the instructions below.
"},{"location":"contributing/#development-setup","title":"Development Setup","text":"Follow Development Setup to setup your system for development with the 3MS.
"},{"location":"contributing/#controllers","title":"Controllers","text":"If your contribution adds support for another controller type, see Controller Support.
"},{"location":"contributing/#pull-request","title":"Pull Request","text":"Finally, submit a pull request. A developer will get back to you soon with feedback, before merging your pull request into the main project.
Thank you for your contribution to the 3MS project!
"},{"location":"contributing/devsetup/","title":"Development Setup","text":"Follow this guide to setup your system for development with the 3MS.
"},{"location":"contributing/devsetup/#configuration-changes","title":"Configuration Changes","text":"main
branch)docs
branch)pipenv install\npipenv shell\n
mkdocs serve\n
Follow this guide to add support for a new 3MS controller.
"},{"location":"contributing/supportcontrollers/#requirements","title":"Requirements","text":"To add support for a new 3MS controller, the following requirements must be met:
If you don't want to create the new controller configuration yourself, you can submit a Controller Request.
"},{"location":"contributing/supportcontrollers/#supporting-a-new-controller","title":"Supporting a new Controller","text":"If the controller meets the aforementioned requirements, you can proceed with adding support for it.
The following example will be for a SKR Mini E3 V2.0 controller.
"},{"location":"contributing/supportcontrollers/#removing-extra-config-sections","title":"Removing Extra Config Sections","text":"Remove all sections from the configuration except the following:
[stepper_x]
)[tmc2209 stepper_x]
)[extruder]
)[static_digital_output]
[board_pins]
If the configuration is a main MCU configuration, remove the [mcu]
section.
Add the following line to all [static_digital_output]
and [board_pins]
sections:
mcu: 3ms\n
If the configuration is NOT a main MCU, replace [mcu]
with [mcu 3ms]
.
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[stepper_x]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_x]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_y]\nstep_pin: PB10\ndir_pin: !PB2\nenable_pin: !PB11\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC1\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_y]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_z]\nstep_pin: PB0\ndir_pin: PC5\nenable_pin: !PB1\nmicrosteps: 16\nrotation_distance: 8\nendstop_pin: ^PC2\nposition_endstop: 0.0\nposition_max: 250\n\n[tmc2209 stepper_z]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD2\nmicrosteps: 16\nrotation_distance: 33.500\nnozzle_diameter: 0.400\nfilament_diameter: 1.750\nheater_pin: PC8\nsensor_type: EPCOS 100K B57560G104F\nsensor_pin: PA0\ncontrol: pid\npid_Kp: 21.527\npid_Ki: 1.063\npid_Kd: 108.982\nmin_temp: 0\nmax_temp: 250\n\n[tmc2209 extruder]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[heater_bed]\nheater_pin: PC9\nsensor_type: ATC Semitec 104GT-2\nsensor_pin: PC3\ncontrol: pid\npid_Kp: 54.027\npid_Ki: 0.770\npid_Kd: 948.182\nmin_temp: 0\nmax_temp: 130\n\n[heater_fan heatbreak_cooling_fan]\npin: PC7\n\n[fan]\npin: PC6\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[printer]\nkinematics: cartesian\nmax_velocity: 300\nmax_accel: 3000\nmax_z_velocity: 5\nmax_z_accel: 100\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n\n# See the sample-lcd.cfg file for definitions of common LCD displays.\n
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[stepper_x]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_x]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_y]\nstep_pin: PB10\ndir_pin: !PB2\nenable_pin: !PB11\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC1\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_y]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_z]\nstep_pin: PB0\ndir_pin: PC5\nenable_pin: !PB1\nmicrosteps: 16\nrotation_distance: 8\nendstop_pin: ^PC2\nposition_endstop: 0.0\nposition_max: 250\n\n[tmc2209 stepper_z]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD2\nmicrosteps: 16\nrotation_distance: 33.500\nnozzle_diameter: 0.400\nfilament_diameter: 1.750\nheater_pin: PC8\nsensor_type: EPCOS 100K B57560G104F\nsensor_pin: PA0\ncontrol: pid\npid_Kp: 21.527\npid_Ki: 1.063\npid_Kd: 108.982\nmin_temp: 0\nmax_temp: 250\n\n[tmc2209 extruder]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\nmcu: 3ms\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n
"},{"location":"contributing/supportcontrollers/#stepper-configuration","title":"Stepper Configuration","text":"Note
In the following examples, the Z stepper is not included. When creating a 3MS configuration, you can (and probably will) use the Z steppers.
Change any stepper sections to an extruder_stepper
named 3ms0
, 3ms1
, 3ms2
, etc. Example:
[stepper_x]\n...\n\n[stepper_y]\n...\n
[extruder_stepper 3ms0]\n...\n\n[extruder_stepper 3ms1]\n...\n
Change any extruder sections to an extruder_stepper
. Example:
[extruder]\n...\n\n[extruder1]\n...\n
[extruder_stepper 3ms2]\n...\n\n[extruder_stepper 3ms3]\n...\n
Remove the extruder-specific configurations from the former extruders. Example:
BeforeAfter[extruder_stepper 3ms2]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD1\nmicrosteps: 16\nrotation_distance: 33.500\nnozzle_diameter: 0.400\nfilament_diameter: 1.750\nheater_pin: PC8\nsensor_type: EPCOS 100K B57560G104F\nsensor_pin: PA0\ncontrol: pid\npid_Kp: 21.527\npid_Ki: 1.063\npid_Kd: 108.982\nmin_temp: 0\nmax_temp: 250\n
[extruder_stepper 3ms2]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD1\nmicrosteps: 16\nrotation_distance: 33.500\n
Update any TMC configuration sections to reflect the new extruder_steppers
. Example:
[tmc2209 stepper_x]\n...\n\n[tmc2209 stepper_y]\n...\n\n[tmc2209 extruder]\n...\n\n[tmc2209 extruder1]\n...\n
[tmc2209 extruder_stepper 3ms0]\n...\n\n[tmc2209 extruder_stepper 3ms1]\n...\n\n[tmc2209 extruder_stepper 3ms2]\n...\n\n[tmc2209 extruder_stepper 3ms3]\n...\n
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[stepper_x]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_x]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_y]\nstep_pin: PB10\ndir_pin: !PB2\nenable_pin: !PB11\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC1\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 stepper_y]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[stepper_z]\nstep_pin: PB0\ndir_pin: PC5\nenable_pin: !PB1\nmicrosteps: 16\nrotation_distance: 8\nendstop_pin: ^PC2\nposition_endstop: 0.0\nposition_max: 250\n\n[tmc2209 stepper_z]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD2\nmicrosteps: 16\nrotation_distance: 33.500\nnozzle_diameter: 0.400\nfilament_diameter: 1.750\nheater_pin: PC8\nsensor_type: EPCOS 100K B57560G104F\nsensor_pin: PA0\ncontrol: pid\npid_Kp: 21.527\npid_Ki: 1.063\npid_Kd: 108.982\nmin_temp: 0\nmax_temp: 250\n\n[tmc2209 extruder]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\nmcu: 3ms\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[extruder_stepper 3ms0]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 extruder_stepper 3ms0]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms1]\nstep_pin: PB10\ndir_pin: !PB2\nenable_pin: !PB11\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC1\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 extruder_stepper 3ms1]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms2]\nstep_pin: PB0\ndir_pin: PC5\nenable_pin: !PB1\nmicrosteps: 16\nrotation_distance: 8\nendstop_pin: ^PC2\nposition_endstop: 0.0\nposition_max: 250\n\n[tmc2209 extruder_stepper 3ms2]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms3]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD2\nmicrosteps: 16\nrotation_distance: 33.500\n\n[tmc2209 extruder_stepper 3ms3]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\nmcu: 3ms\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n
"},{"location":"contributing/supportcontrollers/#final-important-details","title":"Final Important Details","text":"Remove all homing/endstop-related parameters from the stepper configuration sections. Example:
BeforeAfter[extruder_stepper 3ms0]\n...\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n
[extruder_stepper 3ms0]\n...\n# Endstop/homing parameters removed\n
Add the following line to all extruder_stepper
sections:
extruder: extruder\n
Prefix all pin names IN ALL SECTIONS (not just motors) with 3ms:
. Any !
or ^
should go before the 3ms:
prefix. Example:
[extruder_stepper 3ms0]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\n
[extruder_stepper 3ms0]\nstep_pin: 3ms: PB13\ndir_pin: !3ms: PB12\nenable_pin: !3ms: PB14\nmicrosteps: 16\nrotation_distance: 40\n
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[extruder_stepper 3ms0]\nstep_pin: PB13\ndir_pin: !PB12\nenable_pin: !PB14\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC0\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 extruder_stepper 3ms0]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms1]\nstep_pin: PB10\ndir_pin: !PB2\nenable_pin: !PB11\nmicrosteps: 16\nrotation_distance: 40\nendstop_pin: ^PC1\nposition_endstop: 0\nposition_max: 235\nhoming_speed: 50\n\n[tmc2209 extruder_stepper 3ms1]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms2]\nstep_pin: PB0\ndir_pin: PC5\nenable_pin: !PB1\nmicrosteps: 16\nrotation_distance: 8\nendstop_pin: ^PC2\nposition_endstop: 0.0\nposition_max: 250\n\n[tmc2209 extruder_stepper 3ms2]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms3]\nstep_pin: PB3\ndir_pin: !PB4\nenable_pin: !PD2\nmicrosteps: 16\nrotation_distance: 33.500\nnozzle_diameter: 0.400\nfilament_diameter: 1.750\n\n[tmc2209 extruder_stepper 3ms3]\nuart_pin: PC11\ntx_pin: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\nmcu: 3ms\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n
# This file contains common pin mappings for the BIGTREETECH SKR mini\n# E3 v2.0. To use this config, the firmware should be compiled for the\n# STM32F103 with a \"28KiB bootloader\" and USB communication. Also,\n# select \"Enable extra low-level configuration options\" and configure\n# \"GPIO pins to set at micro-controller startup\" to \"!PA14\".\n\n# The \"make flash\" command does not work on the SKR mini E3. Instead,\n# after running \"make\", copy the generated \"out/klipper.bin\" file to a\n# file named \"firmware.bin\" on an SD card and then restart the SKR\n# mini E3 with that SD card.\n\n# See docs/Config_Reference.md for a description of parameters.\n\n[extruder_stepper 3ms0]\nextruder: extruder\nstep_pin: 3ms: PB13\ndir_pin: !3ms: PB12\nenable_pin: !3ms: PB14\nmicrosteps: 16\nrotation_distance: 40\n\n[tmc2209 extruder_stepper 3ms0]\nuart_pin: 3ms: PC11\ntx_pin: 3ms: PC10\nuart_address: 0\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms1]\nextruder: extruder\nstep_pin: 3ms: PB10\ndir_pin: !3ms: PB2\nenable_pin: !3ms: PB11\nmicrosteps: 16\nrotation_distance: 40\n\n[tmc2209 extruder_stepper 3ms1]\nuart_pin: 3ms: PC11\ntx_pin: 3ms: PC10\nuart_address: 2\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms2]\nextruder: extruder\nstep_pin: 3ms: PB0\ndir_pin: 3ms: PC5\nenable_pin: !3ms: PB1\nmicrosteps: 16\nrotation_distance: 8\n\n[tmc2209 extruder_stepper 3ms2]\nuart_pin: 3ms: PC11\ntx_pin: 3ms: PC10\nuart_address: 1\nrun_current: 0.580\nstealthchop_threshold: 999999\n\n[extruder_stepper 3ms3]\nextruder: extruder\nstep_pin: 3ms: PB3\ndir_pin: !3ms: PB4\nenable_pin: !3ms: PD2\nmicrosteps: 16\nrotation_distance: 33.500\n\n[tmc2209 extruder_stepper 3ms3]\nuart_pin: 3ms: PC11\ntx_pin: 3ms: PC10\nuart_address: 3\nrun_current: 0.650\nstealthchop_threshold: 999999\n\n[mcu]\nserial: /dev/serial/by-id/usb-Klipper_Klipper_firmware_12345-if00\n\n[static_digital_output usb_pullup_enable]\npins: !PA14\n\n[board_pins]\nmcu: 3ms\naliases:\n # EXP1 header\n EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,\n EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>\n
"},{"location":"experimental/","title":"Experimental","text":""},{"location":"experimental/dualdrivetpu/","title":"Dual Drive 3MS Extruders for TPU","text":"The 3MS's existing single-drive extruders are prone to tangling with TPU during toolchanges. Dual drive 3MS extruders may fix this issue and allow for multimaterial printing with TPU.
Info
This page, and the features mentioned on it, are in development
The extruder used in this modification can be found on Amazon here.
"},{"location":"experimental/dualdrivetpu/#benefits","title":"Benefits","text":"Current testing shows the following benefits:
Current testing with TPU (a check indicates it works):
Warning
The rapid tip shaping feature is currently experimental. This page is not complete yet.
Rapid tip shaping allows for faster tip shaping and easier tuning of tip shaping.
"},{"location":"experimental/rapidtip/#installation","title":"Installation","text":"Update your 3ms/main.cfg
:
[save_variables]\nfilename: ~/printer_data/config/3ms/variables.cfg\n\n[include ./settings.cfg]\n[include ./endless/settings.cfg]\n#[include ./cutter/settings.cfg]\n[include ./form_tip/settings.cfg]\n[include ./controllers/btt_skr_mini_e3_v2/steppers.cfg]\n\n[dynamicmacros 3ms]\nconfigs: 3ms/macros.cfg, 3ms/endless/macros.cfg, 3ms/form_tip/macros.cfg #, 3ms/cutter/macros.cfg\n
Note the addition of 3ms/form_tip/macros.cfg
in the [dynamicmacros]
config section.
The \"cooling tube\" refers to the length of PTFE found in your printer's hotend. This is usually in the heatsink of your hotend.
You want to measure (or Google) three things:
Update your 3ms/form_tip/settings.cfg
with these settings:
[gcode_macro FORM_TIP_SETTINGS]\n# Edit these settings for your printer\nvariable_cooling_tube_pos: 15 # <-- This is the distance from the bottom of the cooling tube to the tip of the nozzle\nvariable_cooling_tube_length: 11 # <-- This is the length of the cooling tube\nvariable_final_retract: 49 # <-- This is the distance from the top of the cooling tube to the extruder gears\n
The \"parking position\" refers to the location the toolhead will be at during a color swap (not on the wip tower). Ideally, this would be a purge bucket, but this can be anywhere not on the bed.
Update your settings:
3ms/form_tip/settings.cfgvariable_park_x: 125\nvariable_park_y: 205\nvariable_park_speed: 50 # mm/s\n
"},{"location":"experimental/rapidtip/#tip-tuning","title":"Tip Tuning","text":"A standard tip tuning routine would look like this:
Load T0 to the nozzle
SYNC_TOOL TOOL=0\nMMMS_LOAD\nLOAD_FILAMENT\n
Run tip shaping:
FORM_TIP\n
Check your filament tip
Load the filament back to the nozzle for further tuning:
LOAD_FILAMENT\n
Steps 2-4 are repeated until your filament tip comes out looking like one of these:
TODO Picture
You can alter step 2 to get better tips, changing any of the following settings:
PUSH_DISTANCE
This changes how much filament is pushed out initially. Generally, you don't need to change this.
PUSH_SPEED
This changes how fast the filament is pushed out initially. Increasing this generally creates a sharper filament tip. However, if this is too high, your printer's hotend may not be able to melt the filament quickly enough and result in your extruder skipping steps.
INITIAL_RETRACT_SPEED
This changes how fast the filament tip is retracted to the cooling tube. If this is too low, your filament tip may have a large string on the end. If this is too high, a small piece of filament may be left in your nozzle.
COOLING_SPEED
This changes how fast the filament tip is retracted through the cooling tube. If this is too high, your filament tip may come out still molten.
FINAL_SPEED
This changes how fast the filament tip is retracted from the top of the cooling tube to outside the extruder. Generally, you can increase this until your printer's extruder starts skipping.
When you get a good tip, change to T1, repeat, T2, etc:
MMMS_UNLOAD\nSYNC_TOOL TOOL=1\nMMMS_LOAD\nLOAD_FILAMENT\n
"},{"location":"experimental/rapidtip/#examples","title":"Examples","text":"TODO show pictures of filament tips when a specific settings is altered
"},{"location":"experimental/rapidtip/#slicer-setup","title":"Slicer Setup","text":"Follow these steps to setup your slicer for rapid tip shaping.
Disable filament ramming
Nagivate to Printer Settings
-> Multimaterial
and uncheck the Enable filament ramming
checkbox.
Filament Settings
Repeat the following steps for each of your filaments.
Navigate to Filament Settings
-> Multimaterial
, and disable all multimaterial settings.
Filament G-Code
Change your filament start G-code to the following, inserting your tuned values:
SET_TIP_SETTINGS PUSH_DISTANCE= PUSH_SPEED= INITIAL_RETRACT_SPEED= COOLING_SPEED= FINAL_SPEED=\n
Add this G-Code to your filament settings in Advanced
:
TPU filament has a tendency to buckle when extruded at high speeds. This feature attempts to slow down the 3MS extruders during toolchanges only when TPU is involved in the toolchange.
Info
This page, and the features mentioned on it, are in development
"},{"location":"experimental/speedlimit/#installation","title":"Installation","text":"To install the speed limiting feature, run in your terminal:
cd ~/3MS\ngit fetch\ngit checkout \ngit pull limited-speed\nsh install.sh\n
Restart Klipper.
"},{"location":"experimental/speedlimit/#configuration","title":"Configuration","text":"Update your 3ms/main.cfg
:
[save_variables]\nfilename: ~/printer_data/config/3ms/variables.cfg\n\n[include ./settings.cfg]\n[include ./controllers/btt_skr_mini_e3_v2/steppers.cfg]\n\n[dynamicmacros 3ms]\nconfigs: 3ms/macros.cfg, 3ms/speedlimit.cfg\n
"},{"location":"experimental/speedlimit/#usage","title":"Usage","text":"Info
This section is under construction
"},{"location":"guides/3dchameleon/","title":"3DChameleon to 3MS Conversion","text":"Follow this guide to convert a 3DChameleon to a 3MS.
"},{"location":"guides/3dchameleon/#bom","title":"BOM","text":"Name Price Quantity Link Notes SKR Mini E3 V2 $34.99 1 Amazon Duponts $9.99 1 Amazon These wires are only sufficient to run steppers, not heaters 12V PSU $7.39 1 Amazon This PSU is only sufficient to run steppers, not heaters MK8 Metal Extruder $9.99 2 Amazon Alternatively, you can use this Dual-drive MK8 based extruderThe final cost of this upgrade is around $70.
"},{"location":"guides/3dchameleon/#instructions","title":"Instructions","text":"Next, follow the Master Instructions except for the BOM section.
"},{"location":"guides/bypass/","title":"3MS Bypass","text":"Follow this guide to allow manually loading a spool to your printer, and bypassing the 3MS system.
"},{"location":"guides/bypass/#klipper-macros","title":"Klipper Macros","text":"Replace the MMMS_START
line in your PRINT_START
macro with:
{% if (params.BYPASS|default(0)|int) %}\n DESYNC_ALL_TOOLS\n{% else %}\n # You can also put your ENDLESS_START line here too\n MMMS_START INITIAL_TOOL={params.INITIAL_EXTRUDER}\n{% endif %}\n
Replace the MMMS_END
line in your PRINT_END
macro with:
{% if not (params.BYPASS|default(0)|int) %}\n MMMS_END\n{% endif %}\n
"},{"location":"guides/bypass/#slicer-gcode","title":"Slicer GCode","text":"Printer Settings
-> Machine G-code
. Machine start G-code
, pass the BYPASS=1
parameter to your PRINT_START
macro. Machine end G-code
, pass the BYPASS=1
parameter to your PRINT_END
macro.This feature is based off of Happy Hare firmware.
"},{"location":"guides/endless/#requirements","title":"Requirements","text":"To use endless spool, your printer must have one of the following:
A filament sensor before your printer's extruder
Recommended
OR
A filament sensor before each of the 3MS's extruders
Untested and deprecated
The endless spool feature (currently) also only works when printing single-color models.
"},{"location":"guides/endless/#install","title":"Install","text":"To install the endlss spool, update your 3ms/main.cfg
:
[save_variables]\nfilename: ~/printer_data/config/3ms/variables.cfg\n\n[include ./settings.cfg]\n[include ./endless/settings.cfg]\n[include ./controllers/btt_skr_mini_e3_v2/steppers.cfg]\n\n[dynamicmacros 3ms]\nconfigs: 3ms/macros.cfg, 3ms/endless/macros.cfg\n
"},{"location":"guides/endless/#usage","title":"Usage","text":"To setup endless spool, first choose which filaments can be used as backups for each other. Example with three tools:
In this case, since T0 and T1 are backups for each other, they can be considered in the same \"group\" and assigned a group number. In this case, 1
will be used. Since T2 doesn't have a backup, it will be its own group. In this case, 2
will be used.
If your printer has a filament sensor before each of the 3MS's filament units, set the single
setting to 0
. If your printer has only one filament sensor before its main extruder, set the single
setting to 1
.
Edit your 3ms/endless/settings.cfg
:
[gcode_macro ENDLESS_SETTINGS]\nsingle: 1 # <-- Set to 0 if you have a filament sensor before each of your 3MS extruders. Set to 1 if you have one filament sensor right before your printer's extruder.\nvariable_t0: 1\nvariable_t1: 1\n### --- Uncomment below for more than two tools --- ###\nvariable_t2: 2\n# variable_t3: -1\ngcode:\n RESPOND MSG=\"\"\n
"},{"location":"guides/endless/#filament-sensors","title":"Filament Sensors","text":"If you have multiple filament sensors, change your filament sensors' runout_gcode
to:
ENDLESS_RUNOUT T=0\n
For the filament sensor associated with T1, change the code from T=0
to T=1
, and so on.
If you have one filament sensor, change your filament sensor's runout_gcode
to:
ENDLESS_RUNOUT\n
"},{"location":"guides/endless/#custom-gcode","title":"Custom GCode","text":"To define custom filament runout functionality, you can define the FILAMENT_RUNOUT
macro. Example:
[gcode_macro FILAMENT_RUNOUT]\ngcode:\n RESPOND MSG=\"Filament runout T{params.T}!!!\"\n
"},{"location":"guides/endless/#gcodes","title":"GCodes","text":"To edit the Endless Spool state mid-print, run the SET_ENDLESS_SETTINGS
command. Examples:
; Set T0 and T1 as backups for each other, and T2 as standalone\nSET_ENDLESS_SETTINGS T0=1 T1=1 T2=2\n\n; Set T0 as standalone, and T1 and T2 as backups for each other\nSET_ENDLESS_SETTINGS T0=-1 T1=1 T2=1\n\n; Disable endless spool\nSET_ENDLESS_SETTINGS ENABLED=0\n\n; Enable endless spool\nSET_ENDLESS_SETTINGS ENABLED=1\n
To view the Endless Spool settings, run the GET_ENDLESS_SETTINGS
command.
In your slicer's print start GCode, add the following parameter to your PRINT_START
macro:
NUM_TOOLCHANGES=[total_toolchanges]\n
Next, in your PRINT_START
macro, add the following line before your MMMS_START
call:
ENDLESS_START NUM_TOOLCHANGES={params.NUM_TOOLCHANGES}\n
This will ensure that Endless Spool is only enabled for single-color prints.
"},{"location":"guides/manualcutter/","title":"Manual filament cutter","text":"This guide explains how to integrate a filament cutter with the 3MS system, allowing automatic cutting during the filament swap. This negates the need for tip shaping, makinng color swaps much faster and more reliable.
"},{"location":"guides/manualcutter/#table-of-contents","title":"Table of Contents","text":"To install the filament cutter, update your 3ms/main.cfg
:
[save_variables]\nfilename: ~/printer_data/config/3ms/variables.cfg\n\n[include ./settings.cfg]\n[include ./endless/settings.cfg]\n[include ./cutter/settings.cfg]\n[include ./controllers/btt_skr_mini_e3_v2/steppers.cfg]\n\n[dynamicmacros 3ms]\nconfigs: 3ms/macros.cfg, 3ms/endless/macros.cfg, 3ms/cutter/macros.cfg\n
"},{"location":"guides/manualcutter/#configuration","title":"Configuration","text":""},{"location":"guides/manualcutter/#cutter-settings","title":"Cutter Settings","text":"Edit your 3ms/cutter/settings.cfg
:
parking_x_position
280 mm X parking position (near compress pin) parking_y_position
-1 mm Y parking position (near compress pin) start_x_cutter_position
285 mm X start position for cutting end_x_cutter_position
310 mm X position when blade is pushed start_y_cutter_position
-1 mm Y start position for cutting end_y_cutter_position
-1 mm Y position when blade is pushed travel_speed
6000 mm/min Speed to move to cutting position pushing_speed
1600 mm/min Speed to push the blade retries
2 Number of repetions Note
If X or Y is set to -1
, it indicates that the toolhead moves along one axis to reach the parking position. The printer will adjust movement accordingly. If both axes are used, define both positions.
To change values temporarily, use the SET_CUTTER_SETTINGS
macro. this can be usefull during troubleshooting and testing
SET_CUTTER_SETTINGS PARKING_X=290 PUSHING_SPEED=1700\n
"},{"location":"guides/materials/","title":"Materials","text":"Follow this guide to determine if your filament will work with the 3MS.
"},{"location":"guides/materials/#materials-table","title":"Materials Table","text":"This table contains which filaments work in single mode and/or multimaterial mode with the 3MS.
Filament Single Mode Multimaterial Mode Notes PLA Yes Yes PLA+ Yes Yes Silk PLA Yes Yes Matte PLA Yes Yes PETG Yes Yes TPU Yes Untested"},{"location":"guides/materials/#pla","title":"PLA(+)","text":"PLA/PLA+/PLA Pro, etc. filaments are very easy to print in multimaterial with the 3MS. They also support the No Tip Shaping feature.
"},{"location":"guides/materials/#silkmatte-pla","title":"Silk/Matte PLA","text":"Silk/Matte PLA filaments are slightly more difficult to print with or without the 3MS. They generally require tip shaping to work with the 3MS in multimaterial mode.
"},{"location":"guides/materials/#petg","title":"PETG","text":"PETG filaments are easy to print in multimaterial with the 3MS. They will likely require tip shaping. Suggested settings options are provided below. Ideal settings for your setup will likely include a combination of the options.
Tip Shaping Option 1Option 2 Setting Name Setting Value Nozzle Temperature 250\u00baC Loading speed at the start 19mm/s Loading speed 14mm/s Unloading speed at start 200mm/s Unloading speed 90mm/s Delay after unloading 4s # Cooling moves 3 Speed of first cooling move 1mm/s Speed of last cooling move 20mm/s Ramming settings Source: Prusa Forums Setting Name Setting Value Nozzle Temperature 250\u00baC Loading speed at the start 15mm/s Loading speed 14mm/s Unloading speed at start 120mm/s Unloading speed 20mm/s Delay after unloading 0s # Cooling moves 1 Speed of first cooling move 1mm/s Speed of last cooling move 15mm/s Ramming settings Source: Prusa Forums"},{"location":"guides/materials/#tpu","title":"TPU","text":"TPU filaments are very difficult to print with or without the 3MS. If your printer can reliably print TPU, you can likely use it with the 3MS in single mode. To use it in multimaterial mode and/or improve reliability, see the experimental Dual Drive 3MS Extruders for TPU feature.
"},{"location":"guides/notip/","title":"Toolchanges Without Tip Shaping or Filament Cutter!","text":"Because the 3MS is synchronized to the printer's extruder, it can perform toolchanges without any tip shaping or filament cutter.
"},{"location":"guides/notip/#should-tip-shaping-be-used","title":"Should Tip Shaping be Used?","text":"See Materials for information on whether or not tip shaping should be used for your filaments.
"},{"location":"guides/notip/#slicer-setup","title":"Slicer Setup","text":"Setup your slicer for no tip shaping as follows.
"},{"location":"guides/notip/#disable-filament-ramming","title":"Disable Filament Ramming","text":"Disable filament ramming in Filament Settings
-> Multimaterial
-> Toolchange parameters with single extruder MM printers
:
"},{"location":"guides/notip/#unloadload-speed","title":"Unload/Load Speed","text":"
Next, change the Unloading speed at start
and Unloading speed
to 300 (faster is better here). Next, change the Loading speed at start
and Loading speed
to 300 and 100, respectively.
The main idea behind toolchanges without tip shaping relies on the filament being unloaded too fast to form a blob. Setting the Unloading speed
settings allows this. Next, loading the filament back can be generally optimized by increasing the Loading speed
settings.
If your filament has very long strings on the end of them after unloading without tip shaping (longer than 2cm), decrease your filament temperature.
If your filament tip has a nearly flat tip, increase your filament temperature.
The ideal filament tip has a pointy end and a small string (less than 5mm). When in doubt, it is recommended to aim for a slightly stringy tip over a flat tip.
"},{"location":"guides/tipshaping/","title":"Tip Shaping Guidelines","text":"Follow this guide to get faster and more reliable toolchanges with your 3MS.
"},{"location":"guides/tipshaping/#does-my-filament-need-tip-shaping","title":"Does My Filament Need Tip Shaping?","text":"If your filament is in this list, then it likely won't need tip shaping, and you can use the No Tip Shaping feature:
If you filament wasn't in that list, continue reading this page.
"},{"location":"guides/tipshaping/#blobby-tips","title":"Blobby Tips","text":"If your filament tip has a thicker tip after unloading, you can do two things:
If your filament tip has a stringy tip after unloading, you can do two things:
You may also be able to use the No Tip Shaping feature.
"},{"location":"guides/tipshaping/#hook-of-death","title":"Hook of Death","text":"If you filament tip can't unload out of your extruder and forms a hook shape, you may need to replace the PTFE tube between your printer's extruder and hotend. You may also want to follow the recommendations for Blobby tips.
"},{"location":"happy-hare/","title":"Happy Hare Firmware Setup","text":"Follow this guide to install Happy Hare firmware and set it up with your 3MS.
Info
This guide will go through the bare minimum setup required to set up a functional 3MS. It is highly recommended that you read the official Happy Hare documentation.
"},{"location":"happy-hare/#installation","title":"Installation","text":"First, follow the Happy Hare installation instructions available here. When prompted in the installation wizard, select 3MS
as the MMU type.
If you are using one of the natively supported controllers, Happy Hare will automatically set up the hardware configuration for you.
"},{"location":"happy-hare/#configuring-other-controllers","title":"Configuring Other Controllers","text":"If you are using another controller, you can use one of the 3MS controller configurations available here.
"},{"location":"happy-hare/#naming-scheme","title":"Naming Scheme","text":"Each configuration folder uses the following naming scheme:
MMU
: external mainboardMAIN
: your printer's existing mainboard0
for a new setup, or be one higher than your previous controller's last tool number if adding to an existing 3MS.btt_skr_pico
.MMU_0_3_btt_skr_pico
: External SKR Pico controlling four tools numbered 0
to 3
.
MMU_0_6_gtm32_103_v1
: External GTM32 103 V1 controlling seven tools numbered 0
to 6
.
MAIN_0_3_btt_octopus
: Internal BTT Octopus controlling four tools numbered 0
to 3
.
MMU_0_3_btt_skr_pico
).Locate Files: In the configuration folder, there are two files:
mmu.cfg
mmu_hardware.cfg
Copy the mmu.cfg
file into your mmu/base
configuration folder, replacing the existing file.
mmu_hardware.cfg
and copy its contents.In your mmu/base/mmu_hardware.cfg
file, replace the GEAR
section with the text you copied.
The GEAR
section starts with:
# FILAMENT DRIVE GEAR STEPPER(S) --------------------------------------------------------------------------------------\n# \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \n# \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\n# \u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\n# \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\n# \u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\n# \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d\n
and ends right before:
# SERVOS ---------------------------------------------------------------------------------------------------------------\n# \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n# \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\n# \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n# \u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255a\u2588\u2588\u2557 \u2588\u2588\u2554\u255d\u2588\u2588\u2551 \u2588\u2588\u2551\u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551\n# \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u255a\u2588\u2588\u2588\u2588\u2554\u255d \u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\n# \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n
Your 3MS is now configured with Happy Hare.
Info
To finish setting up the 3MS and your printer, you can follow Happy Hare's official documentation.
"},{"location":"hidden/hidden-assembly/","title":"Assembly","text":""},{"location":"hidden/hidden-assembly/#step-1-connecting-the-power-cables","title":"Step 1 Connecting the Power Cables","text":"Choose one of the wiring options below.
Option 1 (DCIN)Option 2 (POWER)Attach the positive cable from the PSU to the positive* port on the mainboard
Attach the negative cable from the PSU to the negative port on the mainboard
"},{"location":"hidden/hidden-assembly/#step-2-connecting-the-stepper-motors","title":"Step 2 Connecting the Stepper Motors","text":"Plug in the stepper for the first 3MS extruder (T0)
Plug in the stepper for the second 3MS extruder (T1)
If applicable, plug in the stepper for the third 3MS extruder (T2)
If applicable, plug in the stepper for the fourth 3MS extruder (T3)
"},{"location":"setup/assembly/","title":"Assembly","text":"Follow this guide to assemble your 3MS.
"},{"location":"setup/assembly/#printed-parts","title":"Printed Parts","text":"An optional board enclosure for the SKR Mini E3 is available here.
Additionally, an optional universal mount for the MK8 extruder using M3 bolts is available here. Note that this requires 2-4 M3 bolts and a place to screw the bolts into.
Finally, you will need to print enough of these Y splitters for the filament.
The Y-splitter available here is now recommended.
"},{"location":"setup/assembly/#mk8-assembly","title":"MK8 Assembly","text":"Next, assemble the MK8 extruders onto the NEMA17 motors using the provided instructions that came with them. If you use the mount provided above, make sure it is in between the MK8 and NEMA17.
"},{"location":"setup/assembly/#wiring","title":"Wiring","text":"Note for Certain Printers
If your printer has Klipper running internally (not on an external computer), the controller (if not a main MCU config) is plugged into a USB port on the printer itself.
Follow one of the following guides based on your controller:
First, choose the number of filament units you want. Each filament unit lets you print with an additional filament. Two filament units are the minimum. You can add or remove filament units after building, but the BOM and configuration will vary based on how many filament units you want.
"},{"location":"setup/bom/#controller-boms","title":"Controller BOMs","text":"Choose the BOM for your chosen controller from the list below:
For each filament unit, purchase this BOM:
Name Quantity Price Link Notes NEMA17 Stepper Motor 1 $9.99 Amazon You can use a pancake stepper if you want, but it will have less torque MK8 Metal Extruder 1 $9.99 Amazon Alternatively, you can use this Dual-drive MK8 based extruder Capricorn PTFE Tubing 1 $11.49 Amazon You likely won't need this for every unit, as this is usually too long for only one unit"},{"location":"setup/firmware/","title":"Firmware","text":"Follow this guide to install Klipper firmware onto your 3MS MCU. This guide is a modified version of the Klipper Documentation.
Info
The following controller(s) can skip this guide:
Make sure your 3MS MCU is plugged into your Klipper Host. Run in your terminal:
cd ~/klipper\nmake menuconfig\n
In the menuconfig, configure it to your MCU. Instructions are included at the top of 3ms/controllers/xxx/steppers.cfg
.
Geetech A30T
If you're using a Geetech A30T controller, follow the flashing instructions here.
Run in your terminal:
make clean\nmake\n
The klipper.bin
file, located in ~/klipper/out/klipper.bin
needs to be copied to a MicroSD card and renamed to firmware.bin
(case-sensitive).
Next, unplug the 3MS board from the PSU and your Klipper Host and insert the SD Card. Next, plug in the PSU, THEN the Klipper Host to the 3MS board. The firmware is now flashed.
"},{"location":"setup/firmware/#get-mcu-id","title":"Get MCU ID","text":"In the terminal, run:
ls /dev/serial/by-id/\n
Example output:
usb-Klipper_stm32f103xe_33FFD1054746333809650557-if00\nusb-Prusa_Research__prusa3d.com__Original_Prusa_i3_MK3_xxx-if00\n
In this case, the first line is the 3MS, and the second line is the 3D printer. Now that you know the id of the 3MS MCU, copy it and save it to a file:
cd ~ && echo \"<your-mcu-id>\" >> mcu.txt \n
"},{"location":"setup/firstprint/","title":"First Print","text":"Follow this guide to begin your first multimaterial print. There are two main ways to prepare a model for multimaterial painting.
"},{"location":"setup/firstprint/#method-1-multimaterial-painting","title":"Method 1: Multimaterial Painting","text":"This method allows you to turn any model, even if it's not designed for multimaterial printing, into a multimaterial print. First, import your model into the slicer. In this case, a 3DBenchy will be used.
Cmd+I OR Ctrl+I
Next, select the model and click multimaterial painting at the top.
N
Once you're in this menu, you can choose any tool, tool size, and filament. Now, just drag over the model to apply the selected tool to the model. In this case, the hull of the 3DBenchy will be set to filament two using the fill tool.
Finally, hit slice and your model is ready to print!
Cmd+R OR Ctrl+R
"},{"location":"setup/firstprint/#method-2-multimaterial-model","title":"Method 2: Multimaterial Model","text":"This method allows you to turn parts of a model to different materials. For this tutorial, this T-rex by Cipis will be used. First, import your model into the slicer. If prompted while opening to treat the model as multiple parts, select \"Yes\".
Cmd+I OR Ctrl+I
Next, go to object settings and change the different parts of the model to different colors.
Finally, hit slice and your model is ready to print!
Cmd+R OR Ctrl+R
"},{"location":"setup/firstprint/#wipe-tower-position","title":"Wipe Tower Position","text":"In the examples, you may have noticed that the wipe tower is far from the model. The travel time between the model and wipe tower adds up, and moving the tower closer can help reduce print time.
In the \"Prepare\" view, click and drag the wipe tower as close to the object as you can without colliding.
If you have a camera on your 3D printer, you may want to put the wipe tower \"behind\" the part from your camera's perspective.
"},{"location":"setup/k1/","title":"Creality K1 Series","text":"Info
This guide applies to the following printers:
Warning
This guide is still under construction
Creality K1 Series 3D printers use a custom version of Klipper, which can cause unexpected problems. Setting up the 3MS (or any Klipper addon) requires extra steps for K1 series printers.
Thank you to @pvilbig for their patience with me here while I was figuring out how to adapt the 3MS to K1 series printers.
"},{"location":"setup/k1/#configuration-installation","title":"Configuration Installation","text":"To install the 3MS configuration, SSH into your printer and run the following commands:
cd ~/\ngit clone -b main --single-branch https://github.com/3DCoded/3MS\ncd 3MS\npython3 install.py --path /usr/data/printer_data/config/3ms\n
Edit 3ms/main.cfg
:
[save_variables]\nfilename: /usr/data/variables.cfg\n
"},{"location":"setup/k1/#dynamicmacros","title":"DynamicMacros","text":"To install DynamicMacros, SSH into your printer and run the following commands:
cd ~/\ngit clone -b main --single-branch https://github.com/3DCoded/DynamicMacros\ncd DynamicMacros\nsh install-k1.sh\n
"},{"location":"setup/k1/#klipperscreen","title":"KlipperScreen","text":"To setup KlipperScreen with the 3MS, run the following commands in SSH:
git clone https://github.com/3DCoded/KlipperScreen-3MS KlipperScreen\ncd ~/KlipperScreen\n./KlipperScreen/scripts/KlipperScreen-install.sh\n
"},{"location":"setup/klipperscreen/","title":"KlipperScreen","text":"Info
This feature is still in an alpha state.
The 3MS has a custom fork of KlipperScreen you can use to control your 3MS.
"},{"location":"setup/klipperscreen/#install","title":"Install","text":"To install the 3MS KlipperScreen, first install KlipperScreen following instructions here. Then, run in your terminal:
cd ~\nmv KlipperScreen KlipperScreen.old\ngit clone https://github.com/3DCoded/KlipperScreen-3MS KlipperScreen\ncd ~/KlipperScreen\n./scripts/KlipperScreen-install.sh\n
Restart KlipperScreen.
"},{"location":"setup/slicer/","title":"Slicer Setup","text":"Follow this guide to setup the 3MS with your slicer. OrcaSlicer will be used in this guide, but these same settings (with different names) can be applied to PrusaSlicer and SuperSlicer.
"},{"location":"setup/slicer/#number-of-filament-units","title":"Number of Filament Units","text":"Set the number of filaments in your slicer to the number of filament units in your 3MS.
In OrcaSlicer, press the filament plus button until there are as many filaments displayed as you have filament units.
"},{"location":"setup/slicer/#klipper-startend-g-code","title":"Klipper Start/End G-Code","text":"In your Klipper PRINT_START
macro, add the following right before your purge line:
MMMS_START INITIAL_TOOL={params.INITIAL_EXTRUDER}\n
In your PRINT_END
macro, add the following before the cooldown command is called:
MMMS_END\n
"},{"location":"setup/slicer/#slicer-start-g-code","title":"Slicer Start G-Code","text":"In your slicer's Start G-Code, add the following parameter to your PRINT_START
:
INITIAL_EXTRUDER=[initial_extruder]\n
"},{"location":"setup/slicer/#multimaterial-parameters","title":"Multimaterial Parameters","text":"The last required step of setting up your slicer for the 3MS is setting the multimaterial parameters.
Navigate to Printer Settings
-> Multimaterial
. Check off the Single Extruder Multi Material
checkbox.
The first two Single extruder multi-material parameters
are hotend-specific.
The cooling tube refers to the length of PTFE tube in your hotend. For most hotends, this is usually in the heat sink.
Its position is measured as the distance from the bottom of the cooling tube to the tip of the nozzle.
Set those two parameters in your slicer.
"},{"location":"setup/slicer/#parking-position","title":"Parking Position","text":"The third parameter is extruder/printhead-specific.
The Filament parking position
refers to the position where the filament is just above the extruder gears. During color swaps, the filament is unloaded to this position before the 3MS takes over. At the end of the toolchange, the next filament is in this same position.
Its position is measured as its distance to the tip of the nozzle.
"},{"location":"setup/slicer/#extra-loading-distance","title":"Extra loading distance","text":"This parameter refers to the extra distance the filament is loaded after a color swap is complete. This is usually a negative number.
When a color swap is performed, the nozzle stays in the same place while the 3MS switches colors. This section will refer to this position as the \"Swap position\".
If you notice blobs forming around the swap positions, decrease the Extra loading distance
(set it to a negative number further from zero).
If you notice gaps around the swap positions, increase the Extra loading distance
(set it to a negative number closer to zero).
Example settings are shown below for a Prusa MK3S+ with a Mosquito hotend.
Info
This is the last required part of slicer setup.
"},{"location":"setup/slicer/#optional-klipper_estimator","title":"Optional: klipper_estimator","text":"If you use klipper_estimator and want the toolchange represented in the time estimate, time your toolchange, then change your Change filament G-Code:
"},{"location":"setup/controllers/","title":"Controllers","text":"Follow this guide to determine which controller to use in your 3MS.
"},{"location":"setup/controllers/#options","title":"Options","text":"The 3MS works on multiple different controllers.
Info
If your printer's mainboard has spare stepper ports, you can use them to control 3MS steppers. You can open an issue on Github (there's a template) to get a configuration made for your specific setup. Any controllers listed with \"(main MCU)\" use those spare stepper plugs.
Choose one of the following supported controllers (a checked box indicates it is fully tested, and an empty box indicates testers wanted):
BTT MMB (4 colors)
Recommended
Einsy RAMBo (main MCU) with SKR Mini E3 V2.0 (3ms MCU)
Expert modification
Geetech A30T
Max filament units: 4
MCU Name: 3ms
Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 M1 1 M2 2 M3 3 M4Now, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug the black wire into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the MMB board, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Following this image, locate the HVIN and GND inputs (top left)
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your MMB, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the MMB lights up, you wired it correctly!
Finally, plug the MMB into your Klipper host with the cable that came with it.
"},{"location":"setup/controllers/bttoctopusmain/","title":"BTT Octopus (main MCU)","text":"Warning
This configuration may not work with the BTT Octopus Pro.
Max filament units: 4
MCU Name: main
This configuration is a main MCU
configuration, meaning that your printer should already be running off a BTT Octopus and you don't need to purchase one.
Per filament unit:
1x TMC2209 ($7 each)
"},{"location":"setup/controllers/bttoctopusmain/#wiring","title":"Wiring","text":"Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 MOTOR7 1 MOTOR6 2 MOTOR5 3 MOTOR4"},{"location":"setup/controllers/einsyrambo-skrminie3v2/","title":"Einsy RAMBo (main MCU) with SKR Mini E3 V2","text":"Danger
This guide is an expert guide only
Info
This modification is designed for the Prusa MK3/S/S+, and depends on this Klipper configuration.
"},{"location":"setup/controllers/einsyrambo-skrminie3v2/#why","title":"Why?","text":"When printing fast, the TMC2130's on the Einsy RAMBo can get quite loud. The TMC2209's on the SKR Mini are much quieter and support denser microstepping.
"},{"location":"setup/controllers/einsyrambo-skrminie3v2/#bom","title":"BOM","text":"Name Price Quantity Link Notes PSU -> Einsy Cable $7.99 1 PartsBuilt3D Stepperonline NEMA17 $9.99 each Amazon 2 Replaces current XY motors"},{"location":"setup/controllers/einsyrambo-skrminie3v2/#wiring","title":"Wiring","text":"First, unplug the 3MS steppers from the SKR Mini, and the XY steppers from the Einsy RAMBo. The motors will need to be switched due to different connector types between boards.
This table outlines the major wiring of this modification.
Einsy RAMBo SKR Mini E3 V2 Motor PSU+ POWER+ PSU- POWER- XM 3ms0 YM 3ms1 XM X YM Y"},{"location":"setup/controllers/einsyrambo-skrminie3v2/#configuration","title":"Configuration","text":"In your printer.cfg
, comment out these lines:
#[include klipper-prusa-mk3s/mk3s/steppers.cfg]\n#[include klipper-prusa-mk3s/mk3s/tmc2130.cfg]\n
Next, copy the contents of 3ms/controllers/einsy_rambo_with_skr_mini/xy-motors.cfg
and ze-motors.cfg
to klipper-prusa-mk3s/skr/xy.cfg
, and klipper-prusa-mk3s/mk3s/ze.cfg
, respectively.
Add the following new lines:
printer.cfg[include klipper-prusa-mk3s/skr/xy.cfg]\n[include klipper-prusa-mk3s/mk3s/ze.cfg]\n
Restart Klipper.
"},{"location":"setup/controllers/geetech-a30t/","title":"Geetech A30T","text":"Contributed by @ImChrono
Max filament units: 7
MCU Name: 3ms
To flash Klipper firmware to the A30T, run the following command and see the following screenshot:
cd ~/klipper\nmake menuconfig\n
Next, connect the BOOT0 jumper on the A30T and run:
stm32flash -i ',,,,,' -v -w out/klipper.bin -g 0 /dev/serial/by-id/<your-mcu-id-here>\n
"},{"location":"setup/controllers/geetech-a30t/#wiring","title":"Wiring","text":"Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 X 1 Y 2 Z0 3 Z1 4 E1 5 E2 6 E3Now, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug two black wires into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the motherboard, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Route the four wires inside closest to your chosen input
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your motherboard, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the motherboard lights up, you wired it correctly!
Finally, plug the motherboard into your Klipper host with the cable that came with it.
"},{"location":"setup/controllers/mellowflyd7/","title":"Mellow Fly D7","text":"Max filament units: 6
MCU Name: 3ms
Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 X 1 Y 2 Z 3 Z1 4 Z2 5 E0Now, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug the black wire into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the board board, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Using the markings on the board, plug the red wire into the positive terminal on the board
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your board, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the board lights up, you wired it correctly!
Finally, plug the board into your Klipper host with the cable that came with it.
"},{"location":"setup/controllers/minirambo/","title":"Mini RAMBo","text":"Max filament units: 4
MCU Name: 3ms
Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 XM 1 YM 2 ZAM or ZBM 3 E0MNow, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug the black wire into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the RAMBo board, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Route the two wires inside closest to your chosen input
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your RAMBo, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the RAMBo lights up, you wired it correctly!
Finally, plug the RAMBo into your Klipper host with the cable that came with it.
"},{"location":"setup/controllers/skrminie3v2/","title":"BTT SKR Mini E3 V2","text":"Max filament units: 4
MCU Name: 3ms
Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 XM 1 YM 2 ZAM or ZBM 3 E0MNow, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug the black wire into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the SKR board, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Following this image, choose either the DCIN or POWER input
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your SKR, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the SKR lights up, you wired it correctly!
Finally, plug the SKR into your Klipper host with the blue cable that came with it.
"},{"location":"setup/controllers/skrpico/","title":"BTT SKR Pico","text":"Max filament units: 4
MCU Name: 3ms
Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 X 1 Y 2 Z1 or Z2 3 ENow, grab your 12V PSU and two M-M duponts, one red and one black (M-M means that there is metal coming out of both ends of the cable). Plug the PSU into the wall, but don't plug the screw terminals into the PSU (the screw terminals have green)
Plug the black wire into the negative terminal of the screw terminals
Danger
These dupont cables are too thin to run much more than the stepper motors. If you run a heater or other power-intensive device off of the SKR board, the duponts and/or PSU can melt/catch fire. To reduce the risk of this, you can double up on the duponts or get thicker wires.
Following this image, locate the POWER input
Verify all connections
Warning
If the wires are plugged into the wrong place, or swapped polarities, your SKR, Stepper motors, and/or PSU can be badly damaged.
Plug the PSU screw terminals into the PSU wire
If the SKR lights up, you wired it correctly!
Finally, plug the SKR into your Klipper host with the blue cable that came with it.
"},{"location":"setup/controllers/zm384main/","title":"Zonestar ZM384 (main MCU)","text":"Max filament units: 3
MCU Name: main
This configuration is a main MCU
configuration, meaning that your printer should already be running off a ZM384 and you don't need to purchase one.
In your 3ms/macros.cfg
, edit the following section:
# Set the sync of provided TOOL to SYNC with extruder\n### --- Comment if using the 3MS instead of your printer's extruder --- ###\n[gcode_macro SET_TOOL_SYNC]\ngcode:\n {% set tool = params.TOOL|int %}\n {% set sync = params.SYNC|int %}\n {% set motion_queue = \"extruder\" if sync == 1 else \"\" %}\n SYNC_EXTRUDER_MOTION EXTRUDER=3ms{ tool } MOTION_QUEUE={ motion_queue }\n### --- Comment if using the 3MS instead of your printer's extruder --- ###\n# [gcode_macro SET_TOOL_SYNC]\n# gcode:\n# {% set tool = params.TOOL|int %}\n# {% set sync = params.SYNC|int %}\n# {% set ext_name = \"3ms\"+(tool|str) %}\n# {% if tool == 0 %}\n# {% set ext_name = \"extruder\" %}\n# {% endif %}\n# {% set motion_queue = \"extruder\" if sync == 1 else \"\" %}\n# SYNC_EXTRUDER_MOTION EXTRUDER={ext_name} MOTION_QUEUE={ motion_queue }\n
macros.cfg# Set the sync of provided TOOL to SYNC with extruder\n### --- Comment if using the 3MS instead of your printer's extruder --- ###\n# [gcode_macro SET_TOOL_SYNC]\n# gcode:\n# {% set tool = params.TOOL|int %}\n# {% set sync = params.SYNC|int %}\n# {% set motion_queue = \"extruder\" if sync == 1 else \"\" %}\n# SYNC_EXTRUDER_MOTION EXTRUDER=3ms{ tool } MOTION_QUEUE={ motion_queue }\n### --- Comment if using the 3MS instead of your printer's extruder --- ###\n[gcode_macro SET_TOOL_SYNC]\ngcode:\n {% set tool = params.TOOL|int %}\n {% set sync = params.SYNC|int %}\n {% set ext_name = \"3ms\"+(tool|str) %}\n {% if tool == 0 %}\n {% set ext_name = \"extruder\" %}\n {% endif %}\n {% set motion_queue = \"extruder\" if sync == 1 else \"\" %}\n SYNC_EXTRUDER_MOTION EXTRUDER={ext_name} MOTION_QUEUE={ motion_queue }\n
"},{"location":"setup/controllers/zm384main/#wiring","title":"Wiring","text":"Route the wires from the NEMA17's to the controller board. Follow this table to determine which port to plug the motors into:
Filament Unit # Motor Port 0 E0 1 E1 2 E2 3 E3"},{"location":"troubleshooting/","title":"Troubleshooting","text":"If you are having trouble getting your 3MS to work properly, check if the problem you're facing is in this list:
If it is not in this list, please open an issue on Github.
"},{"location":"troubleshooting/failedloadunload/","title":"Failed Load/Unload","text":"If your printer is paused and displaying Please load
or Please unload
, follow this troubleshooting guide to diagnose the problem and fix it.
First, see False Alarm to ensure your filament sensor is properly configured and is being properly read by the 3MS macros.
"},{"location":"troubleshooting/failedloadunload/#failed-unload","title":"Failed Unload","text":"When your printer displays a Please unload
message, pay attention to the Tx
number it shows. For example, if it displays the message Please unload T0
, it failed to unload the filament at T0. Follow these steps to recover the toolchange:
Manually pull the filament out of the printer's extruder.
If it is stuck, try one of the following:
Also, see Skipping
Next, manually pull the filament all the way to where the filament is usually parked between toolchanges (before the Y-splitter).
T0 -> T1
indicating which filament is next (in this case T1). It should be loaded to the entry of the printer's extruder gears.Next, diagnose the problem based on these possible scenarios:
Filament never unloaded out of printer's extruder
This is a sign of poor tip shaping. The quick fix for this is to increase print temperatures. Also, see Skipping.
Filament unloaded out of printer's extruder, but stopped before filament sensor
This is a sign of your filament sensor causing excess friction on the filament, or your 3MS extruder tension too loose. For the 3MS tension too lose, simply rotate the tensioning screw on the 3MS extruder clockwise a couple rotations.
When your printer displays a Please load
message, pay attention to the Tx
number it shows. For example, if it displays the message Please load T1
, it failed to load the filament at T1. Follow these steps to recover the toolchange:
Manually push the filament all the way to the inlet of your printer's extruder.
If your filament isn't able to load, the previous tool may not have completely unloaded. See Failed Unload for more information.
Resume your print.
Next, diagnose the problem based on these possible scenarios:
Previous filament didn't unload enough
Increase your unload_distance
in MMMS_SETTINGS
(3ms/settings.py
). You can test different values by using SET_MMMS_SETTINGS
at runtime. Example:
SET_MMMS_SETTINGS UNLOAD_DISTANCE=210\n
Filament didn't load enough
Increase your load_distance
in MMMS_SETTINGS
(3ms/settings.py
). You can test different values by using SET_MMMS_SETTINGS
at runtime. Example:
SET_MMMS_SETTINGS LOAD_DISTANCE=220\n
If during toolchanges, a failed toolchange false alarm occurs (print pauses even though toolchange was successful), follow this troubleshooting guide to fix it.
"},{"location":"troubleshooting/falsealarm/#fsensor_delay","title":"fsensor_delay","text":"The main culprit for this issue is likely your fsensor_delay
in 3ms/settings.cfg
is too short. Short values will cause more false alarms, and long values will cause less. Generally, the default 2000ms is good for most setups, but if you are having false alarms, you will have to increase it. To set it, use the SET_MMMS_SETTINGS
command:
SET_MMMS_SETTINGS FSENSOR_DELAY=3000\n
To save it permanently:
BeforeAfter 3ms/settings.cfgfsensor_delay: 2000\n
3ms/settings.cfgfsensor_delay: 3000\n
"},{"location":"troubleshooting/skipping/","title":"Motor Skipping","text":"If any of your extruder motors are skipping while using the 3MS, follow this troubleshooting guide to diagnose the issue and fix it.
"},{"location":"troubleshooting/skipping/#printers-extruder","title":"Printer's Extruder","text":"First, check if your printer's extruder is properly extruding. To check this, detach the PTFE tube from the inlet of your extruder, and manually load filament, using Klipper's controls for loading filament. If your printer's extruder is having trouble extruding plastic, you may have one of the following:
You can also slightly decrease the 3MS's rotation_distance
.
If the printer's extruder is working properly, and you're still having skipping, check the filament tips. If the tip has a long string on it, or has a thick blob at the end, your filament tips may be to blame. If you have stringy tips, decrease your nozzle temperature while printing. If you have blobby tips, increase your nozzle temperature while printing. Alternatively, you can purchase PTFE tubes with a larger ID to allow for less precise tips.
You can also slightly increase the 3MS's rotation_distance
.
If your prints start to have gaps in the walls, you are likely experiencing underextrusion. Follow this troubleshooting guide to diagnose the issue and fix it.
"},{"location":"troubleshooting/underextrusion/#extruderhotend-issues","title":"Extruder/Hotend Issues","text":"First, try the solutions in this article in case there are any issues with your printer's extruder/hotend.
"},{"location":"troubleshooting/underextrusion/#3ms-rotation_distance","title":"3MS rotation_distance","text":"If your extruder and hotend are working fine, the next likely cause of underextrusion is your 3MS rotation_distance is too high. There are two likely causes and solutions, based on where in the print the underextrusion occurs:
Whole print - 3MS motors working backwards from the extruder or not working at all
Follow the wiring section of Assembly.
Follow the first two steps of Stepper Setup.
Partially through print - 3MS motors not turning enough
Follow the last step of Stepper Setup.