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

    Pressure advance Tuning like Klipper

    Scheduled Pinned Locked Moved
    Tuning and tweaking
    11
    15
    1.7k
    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.
    • zaptaundefined
      zapta @Veti
      last edited by

      @Veti said in Pressure advance Tuning like Klipper:

      M572 D0 S{layer_z*0.005}

      Is there a way to have an expression that will set it up in 'bands' rather than gradual on every layer? May be easier to determine the best value.

      OwenDundefined 1 Reply Last reply Reply Quote 0
      • OwenDundefined
        OwenD @zapta
        last edited by OwenD

        @zapta said in Pressure advance Tuning like Klipper:

        @Veti said in Pressure advance Tuning like Klipper:

        M572 D0 S{layer_z*0.005}

        Is there a way to have an expression that will set it up in 'bands' rather than gradual on every layer? May be easier to determine the best value.

        You could use something

        If mod(layer_z,5)==0
             M572 D0 S{layer_z*0.005}
        

        This would only increment every 5 layers.
        Note this is untested and Prusa slicer can get funny about if statements in its gcode sections as it trys to evaluate them itself using its own rules
        You may have to wrap the whole expression in curly brackets or something

        EDIT: actually I think I recall prusa slicer won't allow indenting in the layer gcode so this may not work

        EDIT
        A quick search revealed something like this should work in prusa slicer... again untested

        {if layer_z % 5 == 0}M572 D0 S{layer_z*0.005}{endif}
        
        zaptaundefined 1 Reply Last reply Reply Quote 0
        • zaptaundefined
          zapta @OwenD
          last edited by zapta

          @OwenD said in Pressure advance Tuning like Klipper:

          {if layer_z % 5 == 0}M572 D0 S{layer_z*0.005}{endif}

          Mathematically this seems right. You may want to multiply 0,005 by 5 to have the same range (5 layers per band). Bands make it easier to identify the best value.

          May be worth replacing the gcode in https://duet3d.dozuki.com/Wiki/Pressure_advance with a simplified one along these lines.

          1 Reply Last reply Reply Quote 0
          • OwenDundefined
            OwenD
            last edited by

            actually mod() won't work as layer_z is a floating point number.
            It would work with layer_num but that makes determining the value used at a specific height different to the example.

            1 Reply Last reply Reply Quote 0
            • oliofundefined
              oliof
              last edited by

              In RRF, metacommand function mod works with floats, so use if mod(floor(move.axes.2.machinePosition), 5.0) maybe? Untested.

              <>RatRig V-Minion Fly Super5Pro RRF<> V-Core 3.1 IDEX k*****r <> RatRig V-Minion SKR 2 Marlin<>

              1 Reply Last reply Reply Quote 0
              • Vetiundefined
                Veti
                last edited by

                if you actually print with the gradual change, its a lot easier to determine where the optimal line is as its a gradual change. and using the calipers gives you an easy way to calculate the right value.

                1 Reply Last reply Reply Quote 0
                • 3dMLundefined
                  3dML
                  last edited by 3dML

                  @Veti
                  Create a macro and call it at layer change. Much easier to update the macro instead of slicing the file for every change.
                  You can call macros from the macro folder using the full file location similar to

                  M98 P"0:/macros/Calibrate Things"
                  

                  Put something similar to this in the macro. Again this particular code is untested.

                  If mod(layer_z,5)==0
                       M572 D0 S{layer_z*0.005}
                       echo {move.axes[2].userPosition} ; change 2 in axes[2] to the z axis for your machine
                       echo {layer_z*0.005}
                  

                  This will report the the z height and the PA value every time it changes.

                  1 Reply Last reply Reply Quote 1
                  • littlehobbyshopundefined
                    littlehobbyshop
                    last edited by littlehobbyshop

                    Adding to what @3dML said...

                    This macro has been tested and works nicely, change tool no./layer height/increment value to suit. It also covers the case where you want to start from a value other than 0, simply change the first M572 parameter.

                    ;Increase pressure advance by 0.005 every 5 layers
                    if job.layer == 0
                    	M572 D0 S0 ; starting value
                    	echo "Layer " ^ job.layer ^ " started"
                    	echo "Pressure advance reset to " ^ {move.extruders[0].pressureAdvance + 0.000}
                    elif mod(job.layer, 5) == 0 ; no. of layers
                    	M572 D0 S{move.extruders[0].pressureAdvance + 0.005} ; increment
                    	echo "Layer " ^ job.layer ^ " started"
                    	echo "Pressure advance = " ^ {move.extruders[0].pressureAdvance + 0.000}
                    

                    Interestingly the "+ 0.000" is required to force the console to print 3 decimal places, otherwise it rounds down to 2.

                    BLV MGN Cube w/Hemera, K8200, Sunlu S8

                    dc42undefined 1 Reply Last reply Reply Quote 2
                    • SIamundefined
                      SIam
                      last edited by SIam

                      small update for the macro the first layer is not == 0 rather == null

                      it seems that the prusaslicer execute the macro first on the 1 layer so the pa value will never resets to 0

                      ;Increase pressure advance by 0.005 every 5 layers
                      
                      if job.layer == 1
                      
                      	M572 D0 S0 ; starting value
                      
                      	echo "Layer " ^ job.layer ^ " started"
                      
                      	echo "Pressure advance reset to " ^ {move.extruders[0].pressureAdvance + 0.000}
                      
                      elif mod(job.layer, 5) == 0 ; no. of layers
                      
                      	M572 D0 S{move.extruders[0].pressureAdvance + 0.020} ; increment
                      
                      	echo "Layer " ^ job.layer ^ " started"
                      
                      	echo "Pressure advance = " ^ {move.extruders[0].pressureAdvance + 0.000}
                      

                      Hypercube-Evolution-Hybrid, Piezo Orion, Orbiter
                      Duet WiFi 1.02 or later + DueX5
                      RepRapFirmware for Duet 2 WiFi/Ethernet 3.4.0beta4 (2021-09-27 11:30:36)
                      Duet WiFi Server: 1.26
                      Duet Web Control 3.4.0beta4 (2021-09-27)

                      1 Reply Last reply Reply Quote 1
                      • dc42undefined
                        dc42 administrators @littlehobbyshop
                        last edited by

                        @littlehobbyshop said in Pressure advance Tuning like Klipper:

                        Interestingly the "+ 0.000" is required to force the console to print 3 decimal places, otherwise it rounds down to 2.

                        That's because each object model value has its own default number of decimal places, which for pressure advance is 2. If you can show that a difference of less than 0.01 in pressure advance has a measurable effect, I will increase that to 3.

                        Duet WiFi hardware designer and firmware engineer
                        Please do not ask me for Duet support via PM or email, use the forum
                        http://www.escher3d.com, https://miscsolutions.wordpress.com

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post
                        Unless otherwise noted, all forum content is licensed under CC-BY-SA