Creality Sonic Pad Filament Change (M600)

It’s safe to say I do a lot of filament changes with the stuff I print and when I got the Creality Sonic Pad, it didn’t even cross my mind that it would have issues with it. but after my first attempt at filament change resulted in the pad just ignoring my m600 command I started looking into how to get round this deal breaker.

I found a few solutions and found a few problems with most of them, my current solution is a custom filament change macro, which was called M600 so it worked seamlessly with how I used cura previously, however as M600 was added to a latest of the Sonic Pad’s firmware to avoid conflicts I had to rename my custom macro.

How I do filament changes

The following macro is added into the printer.cfg and works on my Ender S1, Ender 3 V2 and Ender 3 V2 Neo Machines .

[gcode_macro SONIC_FILAMENT_CHANGE]
gcode:
  CLEAR_PAUSE
  {% set X = params.X|default(50)|float %}
  {% set Y = params.Y|default(0)|float %}
  {% set Z = params.Z|default(10)|float %}
  RESPOND MSG='Filament Change Started'
  SAVE_GCODE_STATE NAME=SFC_state
  PAUSE
  G91
  G1 E-.8 F2700
  G1 Z{Z}
  G90
  G1 X{X} Y{Y} F3000
  G91
  G1 E-50 F1000
  RESTORE_GCODE_STATE NAME=SFC_state

Then in cura you add a Filament Change script as normal, for me, ticking Use Firmware Configuration works best.

This adds M600 into your gcode before starting the layer of your choice, the next step is to change that M600 to use our custom macro instead, which can be done using the Search and Replace script, make sure it’s after the Filament Change Script.

and that’s it, before the layer chosen the printer pause, bring the hotend to the front of the machine and retract a little, allowing you to remove and replace the filament, and hit resume on the Sonic Pad, the print will then continue to print in your new colour.

My only complaint is you have to manually purge the filament by holding the extruder handle and push the filament into the hotend till the filament coming out of the hot end is the right colour, then clean the purged material, which to be fair is not that big of a deal.

Why not just use Sonic Pad’s M600 now they added it?

I spent a lot of time testing he built in M600 command, generally with small calibration shapes and it worked (with the caveat of the extruder being noisy when it was retracting), however whenever I wanted to use it on a real model I would get errors such as

{"code":"key244": "msg":"Extrude only move too long (-3033.773mm vs 2000.000mm)

I’ll be honest I think I know what the problem is with this and how to fix it, however my custom macro works and I don’t have time to mess about debugging the built in M600 when I have a perfectly good solution that’s proven working to me.

Theoretical solution to built in M600 Key244: Extrude only move too long

The built in M600 retracts some filament using relative extrusion mode, cura by default uses absolute extrusion mode, so when it comes to retract for example 10mm of filament it asks the extruder to go to -10mm but because the extruder is in absolute mode it interprets that as retract all the filament it’s already extruded in the print so far plus the 10mm. This explains why the extruder makes a loud noise during testing as it’s retracting a large distance, and the error as it’s trying to retract more than the maximum allowed on longer prints. So theoretically to fix this all you have to do is head to Special Modes in your Cura profile and tick Relative Extrusion then use the filament change post processing plugin as always. I must stress I’ve not tested this, and I don’t know if the solution will introduce other issues, but if it works for you, let me know.


1 Comment

  1. This worked incredibly! Thank you so much for all your efforts!

Leave a Reply

Your email address will not be published. Required fields are marked *