Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    Temperature control for Heating Bed

    Scheduled Pinned Locked Moved
    Tuning and tweaking
    6
    29
    1.1k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Phaedruxundefined
      Phaedrux Moderator
      last edited by

      Why not just set the bed temp for second layer onward to a lower temp in your slicer?

      1200watts is only used when it's in full on heat up mode. Once it's reached the set temp the controller only turns the heater on to maintain, which is very little if it's as insulated as you say. So not much of a gain really.

      Z-Bot CoreXY Build | Thingiverse Profile

      bernardomattiucciundefined 1 Reply Last reply Reply Quote 0
      • bernardomattiucciundefined
        bernardomattiucci @jens55
        last edited by

        @jens55
        Sorry

        I have been upgrading the X-axis of my printer (designed and built by me) for a few days now and am doing some testing. The piece in the picture is one of the (upgraded) Z-axis mounts (4 independent motors). I am only printing PLA at the moment because it is easier for me for slicer settings (ideamaker).
        FOR SURE the glass has been under several stresses--and I will have to change it.
        In the next few days I will remove it and use the mat in the photo--applied directly to the aluminum.

        Hopefully it will allow me to make the other 3 pieces I need!

        (I use https://www.deepl.com/translator )

        1 Reply Last reply Reply Quote 0
        • bernardomattiucciundefined
          bernardomattiucci @Phaedrux
          last edited by

          @Phaedrux

          I have already set various levels of bed heating. It starts with 50°.... at the 5th level it goes down to 40°... then at the 15th level I set it to 30°C... and this temperature is kept constant, especially in summer, even when, from the 25th level on, the bed heater is turned off.

          But I would have preferred to set a more direct and simple control...with the temperature being kept always between 40 and 50°C, for example!

          deckingmanundefined 1 Reply Last reply Reply Quote 0
          • Phaedruxundefined
            Phaedrux Moderator
            last edited by

            Well you certainly could use conditional gcode and the daemon.g file to monitor the temp after a certain layer and have the heater stay off until the temp drops to a certain level.

            Seems the same behaviour as setting the second layer temp to that lower temp, but you could make it more gradual programmatically if you wanted.

            Z-Bot CoreXY Build | Thingiverse Profile

            1 Reply Last reply Reply Quote 0
            • deckingmanundefined
              deckingman @bernardomattiucci
              last edited by

              @bernardomattiucci I agree that you won't save any noticeable energy consumption, but it could be done using conditional gcode. One way would be to have a "flag" variable which has two states "up" and "down". You'd need to constantly monitor the bed temperature using deamon.g or some such. Start by setting the "flag" variable to "up" and the bed set temperature to 50. Then when the bed temperature reaches 50, you reverse the flag and set the bed temperature set point to 40. When it reaches 40, set the flag to up and the bed temperature to 50. You'd need to set the heater fault tolerance to be more than 10 degrees. That's a clunky way of doing it but it might work.

              Ian
              https://somei3deas.wordpress.com/
              https://www.youtube.com/@deckingman

              1 Reply Last reply Reply Quote 0
              • bernardomattiucciundefined
                bernardomattiucci
                last edited by

                I missed the presence of the daemon.g file.

                i will now study the topic

                1 Reply Last reply Reply Quote 0
                • bernardomattiucciundefined
                  bernardomattiucci
                  last edited by bernardomattiucci

                  if {state.status} = "processing"
                  	if {heat.heaters[1].active} > 0
                  		var bedtemp = {heat.heaters[0].current}
                  		if {job.layer} < 20
                  			if var.bedtemp < 40
                  				M140 S50
                  			if var.bedtemp > 50
                  				M140 S40
                  		else
                  			M140 S0
                  

                  Could it work like this?

                  deckingmanundefined 1 Reply Last reply Reply Quote 0
                  • deckingmanundefined
                    deckingman @bernardomattiucci
                    last edited by

                    @bernardomattiucci said in Temperature control for Heating Bed:

                    if {state.status} = "processing"
                    	if {heat.heaters[1].active} > 0
                    		var bedtemp = {heat.heaters[0].current}
                    		if {job.layer} < 20
                    			if var.bedtemp < 40
                    				M140 S50
                    			if var.bedtemp > 50
                    				M140 S40
                    		else
                    			M140 S0
                    

                    Could it work like this?

                    Not really. For any temperature between 40 and 50, the bed will be turned off. If it drops below 40, the set point will be set to 50. But then in the next iteration, if the bed is at (say) 41 then the set point will change to zero so it will never reach 50.

                    Ian
                    https://somei3deas.wordpress.com/
                    https://www.youtube.com/@deckingman

                    bernardomattiucciundefined 1 Reply Last reply Reply Quote 0
                    • bernardomattiucciundefined
                      bernardomattiucci @deckingman
                      last edited by

                      @deckingman
                      my bed normally reaches 50.1 or 50.2 °C when the temperature is set to 50°C.
                      There are very specific conditions in the code...
                      IF the temperature drops below 40°, M140 S50 is set.
                      IF the temperature rises above 50°, M140 S40 is set.

                      So if the temperature is between 40.1 and 49.9°C, theoretically nothing should happen.

                      It seems to work for me.
                      I'm testing it...but I'm already well past layer 20, so the bed is now off (constant temperature of 33°C until I open the doors).

                      Mostly I'm interested in whether or not the IF sequence makes the code too heavy...

                      deckingmanundefined 1 Reply Last reply Reply Quote 0
                      • deckingmanundefined
                        deckingman @bernardomattiucci
                        last edited by

                        @bernardomattiucci ........but you've got else M140 S0. If temp is below 40, then M140 S50. It temp is above 50, then M140 S40. So if temp is between 40 and 50, then neither of those conditions will be met so the "else" will apply (M140 S0). Which means that the bed will be turned off at any temperature above 40, and on at temperature below 40 effectively controlling it at 40. If that's what you want to do then simply use M140 S40 and be done with it.

                        Ian
                        https://somei3deas.wordpress.com/
                        https://www.youtube.com/@deckingman

                        jay_s_ukundefined bernardomattiucciundefined 2 Replies Last reply Reply Quote 0
                        • jay_s_ukundefined
                          jay_s_uk @deckingman
                          last edited by

                          @deckingman the else is part of the job layer check, not the temperature check so it will only be turned off when the job is equal to or above 20 layers

                          Owns various duet boards and is the main wiki maintainer for the Teamgloomy LPC/STM32 port of RRF. Assume I'm running whatever the latest beta/stable build is

                          1 Reply Last reply Reply Quote 1
                          • bernardomattiucciundefined
                            bernardomattiucci @deckingman
                            last edited by bernardomattiucci

                            @deckingman As @jay_s_uk said, That M140 S0 is related to layer control and is activated from layer 20 and up. This is because, after 3 hours of printing, the bed temperature is stable at 30°C and is more than enough to maintain the part. So there is no need, at the moment, to have the bed heater on (in winter we will see...).

                            deckingmanundefined 1 Reply Last reply Reply Quote 0
                            • deckingmanundefined
                              deckingman @bernardomattiucci
                              last edited by

                              @bernardomattiucci said in Temperature control for Heating Bed:

                              @deckingman As @jay_s_uk said, That M140 S0 is related to layer control and is activated from layer 20 and up. This is because, after 3 hours of printing, the bed temperature is stable at 30°C and is more than enough to maintain the part. So there is no need, at the moment, to have the bed heater on (in winter we will see...).

                              Ahh - apologies for missing that "else" being related to the layer value. So, yes, I'd have thought your proposal should work.

                              Ian
                              https://somei3deas.wordpress.com/
                              https://www.youtube.com/@deckingman

                              1 Reply Last reply Reply Quote 0
                              • bernardomattiucciundefined
                                bernardomattiucci
                                last edited by bernardomattiucci

                                I modified the code slightly to keep the heater on at the set temperature of 50° for the first 5 layers.

                                if {state.status} = "processing"
                                	if {heat.heaters[1].active} > 0
                                		if {job.layer} > 5
                                			if {job.layer} < 20
                                				if {heat.heaters[0].current} < 40
                                					M140 S50
                                				if {heat.heaters[0].current} > 50
                                					M140 S40
                                			else
                                				M140 S0
                                		else
                                			M140 S50
                                

                                the problem is that, at the beginning of printing, I get the following error:

                                Error: in file macro line 3 column 27: meta command: cannot convert operands to same type

                                The error occurs when I manually activate the heaters (hotend and bed) and then run the press

                                1 Reply Last reply Reply Quote 0
                                • bernardomattiucciundefined
                                  bernardomattiucci
                                  last edited by

                                  I fixed the errors in the code.

                                  if job.build != null
                                  	if job.layer != null && job.layer <= 5
                                  		M140 S50
                                  	elif job.layer != null && job.layer > 5
                                  		if job.layer < 20
                                  			if heat.heaters[0].current < 40
                                  				M140 S50
                                  			if heat.heaters[0].current > 50
                                  				M140 S40
                                  		else
                                  			M140 S0
                                  
                                  1 Reply Last reply Reply Quote 1
                                  • bernardomattiucciundefined
                                    bernardomattiucci
                                    last edited by

                                    I would like to make a change to the code, but I don't know how to do it.

                                    if job.layer < 20
                                    

                                    I would like to consider 20% and not layer number 20.
                                    How should I modify the code?

                                    jay_s_ukundefined 1 Reply Last reply Reply Quote 0
                                    • jay_s_ukundefined
                                      jay_s_uk @bernardomattiucci
                                      last edited by

                                      @bernardomattiucci you would have to calculate what 20% of job.file.numLayers is

                                      Owns various duet boards and is the main wiki maintainer for the Teamgloomy LPC/STM32 port of RRF. Assume I'm running whatever the latest beta/stable build is

                                      1 Reply Last reply Reply Quote 1
                                      • bernardomattiucciundefined
                                        bernardomattiucci
                                        last edited by

                                        if job.build != null
                                        	if job.layer != null && job.layer <= 5
                                        		M140 S50
                                        	elif job.layer != null && job.layer > 5
                                        		if ((job.file.numLayers*20)/100) < 20
                                        			if heat.heaters[0].current < 40
                                        				M140 S50
                                        			if heat.heaters[0].current > 50
                                        				M140 S40
                                        		else
                                        			M140 S0
                                        

                                        seems to be working

                                        1 Reply Last reply Reply Quote 1
                                        • bernardomattiucciundefined
                                          bernardomattiucci
                                          last edited by bernardomattiucci

                                          More update

                                          if job.build != null
                                          	if job.layer != null && job.layer < 5
                                          		M140 S50
                                          	if job.layer != null && job.layer >= 5 && job.layer < (job.file.numLayers*20)/100
                                          		if heat.heaters[0].current < 40
                                          			M140 S50
                                          		if heat.heaters[0].current > 50
                                          			M140 S40
                                          	if job.layer != null && job.layer > (job.file.numLayers*20)/100
                                          		M140 S0
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post
                                          Unless otherwise noted, all forum content is licensed under CC-BY-SA