Page 1 of 2

Heating extruder only on printing moves

Posted: Wed Apr 25, 2018 10:00 am
by Asadinator
For a specific application, I would like to power the extruder heater only during printing and power off for travel moves.

For example:
M104 S0
G1 F...
G1 .........
M104 S200
G1 ......... F.... E....

I tried search and replace but it is difficult.
Is it possible to do this with custom g code? I have not found it possible so far.

Cheers

Re: Heating extruder only on printing moves

Posted: Wed Apr 25, 2018 1:21 pm
by ednisley
Asadinator wrote:For a specific application
Because the hot end's thermal time constant is on the order of tens of seconds, its temperature won't change much while the nozzle moves from the end of one extrusion to the start of the next. Because the extrusion properties of molten plastic change dramatically with temperature, nobody's ever regarded intermittently cooling the hot end to be a Good Thing.

AFAICT, what you want to do lies far enough beyond "normal" 3D printing that you're on your own.

However, you could use a digital output pin as a switch to control the power through a relay / external MOSFET, then post-process the G-Code to wrap "off" and "on" commands (perhaps M42) around each non-printing motion. Using a separate bit avoids having to save-and-restore the temperature while switching the hot end, which should simplify the post-processor.

I'd start with sed, but identifying non-printing moves may require more smarts than a regex can supply.

Re: Heating extruder only on printing moves

Posted: Wed Apr 25, 2018 2:47 pm
by Asadinator
Thanks Ed

What I am doing is not a FDM process, so instantaneous response is achievable for intended purposes.
Instead of an extruder, I’m powering an ultrasound transducer via other circuitry. Just need to turn on or off with printing moves, which I was hoping the power could be supplied from Rambo, but switching mode PSU has given problems as per other thread.

Re: Heating extruder only on printing moves

Posted: Wed Apr 25, 2018 5:33 pm
by insta
You might be able to use Marlin's "DISABLE_E" configuration option, which will disable the stepper driver immediately when it's not being used.

You can then swap the E0_ENABLE and HEATER_0_PIN numbers in pins_RAMBO.h. Make sure your TEMP_SENSOR_0 is 999, and TEMP_SENSOR_BED set to 998, and DUMMY_THERMISTOR_999_VALUE set to 180C.

This should make the heater pop on immediately when trying to move the extruder, which would be any G1 command using an "E" value.

Re: Heating extruder only on printing moves

Posted: Wed Apr 25, 2018 10:30 pm
by Asadinator
insta wrote:You might be able to use Marlin's "DISABLE_E" configuration option, which will disable the stepper driver immediately when it's not being used.

You can then swap the E0_ENABLE and HEATER_0_PIN numbers in pins_RAMBO.h. Make sure your TEMP_SENSOR_0 is 999, and TEMP_SENSOR_BED set to 998, and DUMMY_THERMISTOR_999_VALUE set to 180C.

This should make the heater pop on immediately when trying to move the extruder, which would be any G1 command using an "E" value.
Thanks! I’ll try what you suggested.

Re: Heating extruder only on printing moves

Posted: Wed Apr 25, 2018 10:52 pm
by Asadinator
insta wrote:You might be able to use Marlin's "DISABLE_E" configuration option, which will disable the stepper driver immediately when it's not being used.

You can then swap the E0_ENABLE and HEATER_0_PIN numbers in pins_RAMBO.h. Make sure your TEMP_SENSOR_0 is 999, and TEMP_SENSOR_BED set to 998, and DUMMY_THERMISTOR_999_VALUE set to 180C.

This should make the heater pop on immediately when trying to move the extruder, which would be any G1 command using an "E" value.
And how long does E0_ENABLE remain on for? For just that G1 line or until any G1 line without E?

Re: Heating extruder only on printing moves

Posted: Thu Apr 26, 2018 12:01 am
by insta
Asadinator wrote:
insta wrote:You might be able to use Marlin's "DISABLE_E" configuration option, which will disable the stepper driver immediately when it's not being used.

You can then swap the E0_ENABLE and HEATER_0_PIN numbers in pins_RAMBO.h. Make sure your TEMP_SENSOR_0 is 999, and TEMP_SENSOR_BED set to 998, and DUMMY_THERMISTOR_999_VALUE set to 180C.

This should make the heater pop on immediately when trying to move the extruder, which would be any G1 command using an "E" value.
And how long does E0_ENABLE remain on for? For just that G1 line or until any G1 line without E?
I got you that far ;)

Re: Heating extruder only on printing moves

Posted: Thu Apr 26, 2018 2:08 am
by ednisley
Asadinator wrote:What I am doing is not a FDM process
At the risk of asking too much, then why are you basing whatever you're doing on hardware and a toolchain specifically designed for FDM-style 3D printing?

If you're scanning the transducer at a fixed height in a pattern on the XY plane, perhaps G-Code generated specifically for your purpose would be simpler and better than hacked G-Code intended for a 3D printer.

Re: Heating extruder only on printing moves

Posted: Thu Apr 26, 2018 3:47 am
by Asadinator
ednisley wrote:
Asadinator wrote:What I am doing is not a FDM process
At the risk of asking too much, then why are you basing whatever you're doing on hardware and a toolchain specifically designed for FDM-style 3D printing?

If you're scanning the transducer at a fixed height in a pattern on the XY plane, perhaps G-Code generated specifically for your purpose would be simpler and better than hacked G-Code intended for a 3D printer.
I’m not skilled enough to start from scratch :D

Re: Heating extruder only on printing moves

Posted: Thu Apr 26, 2018 11:27 pm
by ednisley
Asadinator wrote:I’m not skilled enough to start from scratch :D
No shame there, because nobody starts out knowing this stuff ...

A cheap Chinese CNC machine kit (considerable assembly required) from Amazon (cheaper elsewhere, your choice):

https://www.amazon.com/Control-Engravin ... B07169D9JQ

You get about the same work area as the M2, a platform intended to hold down parts, a junk spindle you won't need, a crappy stepper controller with backlevel GRBL, and bag of "engraving bits", all for just over $200. Toss the crap you won't need in a drawer, assemble the rest, and verify that it more-or-less works.

Control the ultrasonic head with a solid-state relay attached to the spindle enable output, so you get easy G-Code control over the thing. If it has a PWM intensity input, the spindle speed control will do that for you, too.

Reflash the controller with current GRBL to get a solid G-Code parser & motion controller:

https://github.com/gnea/grbl

Now you have a low-end CNC machine with enough accuracy & speed for your purposes. The newer versions of GRBL include a "laser mode" that may be useful with an ultrasonic head.

If you're moving the head in geometric patterns or tracing shapes, then you can probably generate the G-Code algorithmically. Fetch the G-Code Meta Compiler:

http://www.vagrearg.org/content/gcmc

Generate G-Code with a semi-high-level language and move on.

It'll take some learning, but doesn't require working around the limitations of Marlin, a 3D printer tool chain, and a hacked M2. The problems you solve will be directly related to doing what you want done, not battering software into doing something it's not designed to handle and figuring whether it's your design or battered code falling off the rails.

Bonus: this keeps the M2 operational so you can make the parts to bolt the ultrasonic head on the CNC spindle mount.
funnily at 75W as you mentioned
Well, 24 V times the 2-3 A you mentioned rounds off to 75 W, soooo ... [grin]