Skip to content

Multi heating zone for Modded pellet printers#9346

Open
GiacomoGuaresi wants to merge 19 commits into
OrcaSlicer:mainfrom
gingeradditive:multi-heating-zone
Open

Multi heating zone for Modded pellet printers#9346
GiacomoGuaresi wants to merge 19 commits into
OrcaSlicer:mainfrom
gingeradditive:multi-heating-zone

Conversation

@GiacomoGuaresi

@GiacomoGuaresi GiacomoGuaresi commented Apr 14, 2025

Copy link
Copy Markdown
Contributor

Description

This PR implements logic to handle a multi-zone nozzle heating configuration and adds support for rotation-based extrusion volume configuration for modded_printer_pellet printer models.

These features improve temperature control accuracy and extrusion calibration, especially when using Klipper firmware and OrcaSlicer with the "rotation distance" feature.

Changes introduced:

  • Multi Heating Zone feature: when enabled, users can independently set the temperature for each zone, instead of setting a single temperature for the nozzle, this entry will enable in the printer configurations the extruder zone number and in the materials the various set temperatures for each present zone, these will be divided into first_layer and other_layer.

  • Updated G-code command (M104): the M104 command now supports a new Z{zone_number} parameter, which allows targeted zone heating. This feature is compatible with multi-extruder printers.

  • The previous behavior of the M104 command remains unchanged when the multi-zone heating option is disabled.

  • Multi Heating Zone feature: When enabled, users can independently set the temperature for each heating zone instead of assigning a single temperature to the nozzle.

    • Printer configuration includes the number of extruder zones up to a maximum of 10 zones.
    • Material profiles include individual temperatures per zone, divided into first_layer and other_layer.
    • G-code generation is updated to reflect zone-specific heating.
  • Updated G-code command (M104): The M104 command now supports a new Z{zone_number} parameter to set the temperature of a specific nozzle zone. This is compatible with multi-extruder printers. The original behavior remains when multi-zone is disabled.

  • Extruder Rotation Volume support: Added support for defining extrusion based on the extruded volume per motor rotation (rotation_volume), aligning with Klipper’s volumetric extrusion model.

    • Material configurations can now include extruder_rotation_volume.
    • Avoids inaccuracies introduced by the virtual filament diameter method.
  • Mixing Stepper Rotation Volume: Support for dedicated feeding motors (mixing steppers) with configurable mixing_stepper_rotation_volume in material settings. Requires enabling the option and naming the mixing stepper motor in the printer configuration.

    • Currently Klipper-only.

Impact:

This update improves:

  • Temperature control precision across multiple nozzle zones.
  • Extrusion consistency and calibration via a direct volume-based extrusion method.
    It enables high-performance configurations for large-format pellet printers and improves the reliability of material profiles.

Breaking changes:

There are no breaking changes.
All features are optional and maintain backward compatibility:
- If multi-zone heating is disabled, M104 behaves as usual.
- If extruder_rotation_volume is not set, the classic pellet flow coefficient method remains in use.

Limitations and features to improve:

  • Hard coded limit of 10 temperature zones: Current support allows a maximum of 10 nozzle zones. This will be made dynamic in a future update.
  • Equal number of temperature zones for each extruder: All extruders must currently have the same number of heating zones.
  • Klipper-only support for rotation_volume features: Extruder rotation volume and mixing stepper logic are only supported when using Klipper firmware.

Screenshots/Records/Graphs

image
image
image
image

Testing

The following tests were conducted to verify the changes:

  1. Generated a G-code file with correctly modified M104 commands using Z{zone_number} syntax.
  2. Verified that disabling the multi-zone heating option retains the previous behavior without any regression.
  3. Tested extrusion via rotation volume using simulated 1 mm² virtual filament with Klipper.
  4. Checked Klipper runtime compatibility and parameter update functionality.
  5. Validated correct calculation of total extrusion using both rotation_volume and mixing_stepper_rotation_volume.

@GiacomoGuaresi GiacomoGuaresi marked this pull request as ready for review April 15, 2025 12:29
@GiacomoGuaresi GiacomoGuaresi force-pushed the multi-heating-zone branch 2 times, most recently from e8f960f to 79d9c85 Compare June 5, 2025 08:27

@ianalexis ianalexis left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wiki improvements.

Comment thread doc/Pellet-modded-printer.md
Comment thread doc/Pellet-modded-printer.md Outdated
Comment thread doc/Pellet-modded-printer.md Outdated
Comment thread doc/Pellet-modded-printer.md Outdated
Comment thread doc/Pellet-modded-printer.md Outdated
@GiacomoGuaresi GiacomoGuaresi requested a review from ianalexis June 19, 2025 17:46
@ianalexis

Copy link
Copy Markdown
Collaborator

Why calling this "modded" and not directly pellet printers? If they dont do it now maybe in the future pellet printer become a "standard" thing? Or this is just for really modded ones and "standard" do this different?

@GiacomoGuaresi

Copy link
Copy Markdown
Contributor Author

I totally agree with you. I think it was originally called "modded" because it referred to open-source hardware and software designed for filament printers that were being adapted to work with pellet setups. However, we at GingerAdditive are actively contributing to various projects to help make pellet printing more of a standard. That said, I also believe the name should be updated to reflect this evolution. 😄

@ianalexis

Copy link
Copy Markdown
Collaborator

Yeah, set it to pellet printer.

Comment thread doc/Home.md Outdated

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not urgent but just to maintain than naming, Remove the modded from here to, and the pointing links in home and tab.cpp
I approve this now so if this is merged without that change I will do it in the next wiki update so don't worry.

ianalexis
ianalexis previously approved these changes Jun 20, 2025
@GiacomoGuaresi GiacomoGuaresi force-pushed the multi-heating-zone branch 4 times, most recently from c33aad9 to 2763fe2 Compare June 24, 2025 12:18
@ianalexis ianalexis mentioned this pull request Jun 24, 2025
41 tasks
@ianalexis ianalexis mentioned this pull request Jun 25, 2025
Comment thread src/libslic3r/PrintConfig.cpp Outdated
Comment thread src/libslic3r/PrintConfig.cpp Outdated
Comment thread src/libslic3r/PrintConfig.cpp Outdated
Comment thread src/libslic3r/PrintConfig.cpp Outdated
Comment thread src/libslic3r/PrintConfig.cpp Outdated
Comment thread src/libslic3r/PrintConfig.cpp Outdated
Comment thread src/libslic3r/PrintConfig.cpp Outdated
@GiacomoGuaresi GiacomoGuaresi requested a review from afmenez June 29, 2025 14:58
@Ataraxia-Mechanica

Ataraxia-Mechanica commented Jul 7, 2025

Copy link
Copy Markdown

Can you make this also available to non-pellet printers? My custom printer has two heating zones, would be convenient to use it inside Orca instead of using macros controlling both at the same time.

@GiacomoGuaresi

Copy link
Copy Markdown
Contributor Author

@Ataraxia-Mechanica Certainly, but I need to know what flavor of klipper it is or what printers it is so I can enter it into the gcode the correct way

@ianalexis ianalexis mentioned this pull request Jul 8, 2025
10 tasks
@Ataraxia-Mechanica

Copy link
Copy Markdown

@Ataraxia-Mechanica Certainly, but I need to know what flavor of klipper it is or what printers it is so I can enter it into the gcode the correct way

just M104 Z1/Z2/... and M109 Z1/Z2/... would work, klipper can override macros and they can be reconfigured to target different heat zones.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants