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

Very High Pressure Advance Direct Drive

Scheduled Pinned Locked Moved
Tuning and tweaking
4
15
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.
  • undefined
    guerty25
    last edited by guerty25 4 Mar 2020, 00:13 3 Apr 2020, 00:13

    Hi all,

    I recently upgraded my Monoprice Ultimate a couple months ago with a DuetWifi. I love it so far. I recently have come across pressure advance and nonlinear extrusion. I followed the forum threads to calibrate both, starting with nonlinear extrusion. Nonlinear extrusion calibration came out as:

    d2311a1d-eb82-4a5b-8d4b-09533f38e89f-image.png

    I then calibrated my pressure advance using the pressure_advance2.py script. It came up with my K value being somewhere around 0.275, which seems extremely high for a direct drive. There is some distance between the extruder drive and the hotend (~80mm), but I couldn't imagine that counting for such a significant difference between my calibration value and the value listed in the Pressure Advance wiki. I have printed a new gantry block for my printer to replace the old heavy steel one to reduce weight. When I saw my K value so high I reprinted a new block to make sure that wasn't the cause. I can't seem to figure out why that value would be so high. Any help is greatly appreciated!

    1 Reply Last reply Reply Quote 0
    • undefined
      Phaedrux Moderator
      last edited by 3 Apr 2020, 00:28

      Double check your PA values using the cube test print described in the wiki: https://duet3d.dozuki.com/Wiki/Pressure_advance#Section_Methods_of_finding_the_right_amount_of_pressure_advance

      The script seems to produce values that are very high. For long bowden setups they may be more appropriate, but for direct drive setups I don't think they are as applicable. So definitely use separate means of testing to verify.

      I would also use caution with nonlinear extrusion. It tends to only be applicable when printing at very high speeds and at the limits of the melt rate.

      It would be a good idea to identify your volumetric flow rate limit first and then stick within it. At that point nonlinear extrusion may not be required at all.

      https://duet3d.dozuki.com/Guide/Ender+3+Pro+and+Duet+Maestro+Guide+Part+4:+Calibration/40#s165

      Z-Bot CoreXY Build | Thingiverse Profile

      1 Reply Last reply Reply Quote 1
      • undefined
        guerty25
        last edited by 4 Apr 2020, 16:36

        Thanks for your help! I use Cura for slicing and I couldn't seem to figure out how to get it to put the seam in a good spot. It always seemed to end up in the corner. I took the script I had been using for pressure advance and made it something closer to what is listed in the wiki you linked. I would like to share it and make sure that it is actually accomplishing what I intend. What is the best way to upload the Python script?

        1 Reply Last reply Reply Quote 0
        • undefined
          Phaedrux Moderator
          last edited by 4 Apr 2020, 19:05

          Apparently the newer versions of official cura are always forcing to a corner.

          You'd need to use either PrusaSlier which can force to the rear, or use this custom version of Cura that has a few extra features and options.

          https://www.dropbox.com/sh/s43vqzmi4d2bqe2/AAADdYdSu9iwcKa0Knqgurm4a?dl=0&lst=

          I highly recommend it anyway.

          Either copy and paste the python script text into a codo block or add a .txt extension to the file name to be able to upload it.

          Z-Bot CoreXY Build | Thingiverse Profile

          undefined 1 Reply Last reply 26 Oct 2020, 21:51 Reply Quote 0
          • undefined
            zapta
            last edited by zapta 4 Apr 2020, 20:30 4 Apr 2020, 20:29

            @Phaedrux said in Very High Pressure Advance Direct Drive:

            Apparently the newer versions of official cura are always forcing to a corner.

            Is it possible to trick it? E.g. by adding to the cube model a tiny bump at the rear?

            undefined 1 Reply Last reply 4 Apr 2020, 20:41 Reply Quote 0
            • undefined
              Phaedrux Moderator @zapta
              last edited by 4 Apr 2020, 20:41

              @zapta That may force the seam there but it may also mess up the way pressure advance is going to behave.

              Z-Bot CoreXY Build | Thingiverse Profile

              undefined 1 Reply Last reply 4 Apr 2020, 21:34 Reply Quote 0
              • undefined
                zapta @Phaedrux
                last edited by zapta 4 Apr 2020, 21:37 4 Apr 2020, 21:34

                @Phaedrux, I was thinking a tiny 'corner' at the rear, like in the model below. Chances are it will be the same from PA perspective.

                Anybody with Cura can test if Cura can be set to have the layer change at the fold line in the middle of the face?

                // Openscad script for 40mm PA test cube with a 'corner' at the rear.
                bump = 0.2;
                linear_extrude(40)
                  polygon(points = [[-20, -20],  [20, -20], [20, 20], 
                                    [0, 20+bump], [-20, 20],[-20, -20]]);
                

                pa5.stl

                Edit: here is an stl with a larger 2mm bump pa5-2.stl

                1 Reply Last reply Reply Quote 0
                • undefined
                  guerty25
                  last edited by 6 Apr 2020, 02:00

                  Here is the modified script:

                  
                  #!/usr/local/bin/python
                  
                  # extrusion parameters (mm)
                  extrusion_width   = 0.48 # typical: nozzleDiameter * 1.2 (f.e. a 0.4mm nozzle should be set to 0.48mm extrusion width in slicers)
                  layer_height      = 0.2 # max: 50% of your extrusion_width
                  filament_diameter = 1.75 # manufacturers typically sell 1.73-1.74mm filament diameter (always lower than 1.75 to prevent cloggs) tested with many brands
                  
                  # print speeds (mm/s)
                  travel_speed      = 300
                  first_layer_speed = 10
                  speed             = 60
                  cooling_fan_speed = 128 # from 0 to 255
                  
                  # calibration object dimensions (mm)
                  layers        = 80
                  object_width  = 100
                  
                  # pressure advance gradient (s)
                  layer_multiple        = 3
                  pressure_advance_step = 0.01
                  
                  # center of print bed (mm)
                  # needed to position this print in the middle of your print bed
                  # If you are not sure about this: Take a look into your slicer. Normally you will see the origin (center) visualized as xyz-axis
                  # f.e. I have a 285x220mm bed, my printers origin is at X0, Y0 (front left corner), so the offset value you would need for X are 285/2.0 = 142.5
                  offset_x = 100
                  offset_y = 100
                  
                  layer0_z = layer_height
                  
                  # put your typical start.gcode here, if you use a custom start gcode via your slicing software
                  # Python tipp: to type in a continuous command over multiple lines you can use a backslash '\'
                  # general tipp: to output a 'new line' after your gcode command use '\n' which is the representation of the new line byte sequence
                  # in short: use '\n\' after each line of your regular start.gcode command
                  try:
                      print('; START.gcode\n\
                  G90\n\
                  M82\n\
                  M106 S0\n\
                  M140 S60\n\
                  M190 S60\n\
                  M104 S240 T0\n\
                  M109 S240 T0\n\
                  G28 ; home all axes\n\
                  T0 ; set active extruder to 0\n\
                  M913 Y50 ; lower Y stepper torque to 50% ;if stall detection fails for protection of mechanics\n\
                  G1 X300 Y5 F1600;\n\
                  M913 Y100 ; raise Y stepper torque back to 100%\n\
                  G1 Z0.15 F400;\n\
                  G91 ; relative\n\
                  ; wipe nozzle on beds edge \n\
                  G1 X-20 E10 F800;\n\
                  G1 X-15 Y10 E13 F1600;\n\
                  G1 X-35 E15;\n\
                  G92 E0; zero extruded length\n\
                  G90 ; absolute\n\
                  ; process _R_Multimaterial-1\n\
                  ; layer 1, Z = 0.220\n\
                  T0\n\
                  G92 E0.0000 ; reset extruded length \n\
                  ')
                  except:
                      print(' !!! your start.gcode is faulty, check correct format')
                      exit()
                  
                  print('\nM83 ; relative extrusion for this python script\n')
                  
                  
                  from math import sqrt
                  
                  curr_x = offset_x
                  curr_y = offset_y
                  curr_z = layer0_z
                  
                  def extrusion_volume_to_length(volume):
                      return volume / (filament_diameter * filament_diameter * 3.14159 * 0.25)
                  
                  def extrusion_for_length(length):
                      return extrusion_volume_to_length(length * extrusion_width * layer_height)
                  
                  def up():
                      global curr_z
                      curr_z += layer_height
                      print("G1 Z%.3f" % curr_z)
                  
                  def line(x,y,speed):
                      length = sqrt(x**2 + y**2)
                      global curr_x, curr_y
                      curr_x += x
                      curr_y += y
                      if speed > 0:
                          print("G1 X%.3f Y%.3f E%.4f F%.0f" % (curr_x, curr_y, extrusion_for_length(length), speed * 60))
                      else:
                          print("G1 X%.3f Y%.3f F%.0f" % (curr_x, curr_y, travel_speed * 60))
                  
                  def goto(x,y):
                      global curr_x, curr_y
                      curr_x = x + offset_x
                      curr_y = y + offset_y
                      print("G1 X%.3f Y%.3f" %(curr_x, curr_y))
                  
                  # unused - maybe convert to a full bottom layer
                  def first_layer():
                      print_square(first_layer_speed)
                      goto(-object_width/2, )
                      
                  
                  def print_square(square_speed):    
                      # start front center of cube
                      goto(0, - (object_width/2))
                      # line to front left corner
                      line(-object_width/2, 0, square_speed)
                      # line to back left corner
                      line(0, object_width, square_speed)
                      # line to back right corner
                      line(object_width, 0, square_speed)
                      # line to front right corner
                      line(0, -object_width, square_speed)
                      # line to start corner - extrusion width
                      line(-object_width/2 + extrusion_width, 0, square_speed)
                  
                  def main():
                  
                      pressure_advance = 0    
                      print("; layer %d, pressure advance: %.3f" %(0, pressure_advance))            
                      print("M572 D0 S%.3f" % pressure_advance)
                      # prime nozzle    
                      print("G1 X%.3f Y%.3f Z%.3f E1.0 F%.0f" % (curr_x, curr_y, curr_z, travel_speed * 60))
                      print_square(first_layer_speed)
                      up()
                  
                      for l in range(layers - 1):
                          
                          if l != 0 and l % layer_multiple == 0 :
                              pressure_advance += pressure_advance_step     
                              print("; layer %d, pressure advance: %.3f" %(l, pressure_advance))        
                              print("M291 P\"Current K: %.3f\"" % pressure_advance)              
                              print("M572 D0 S%.3f" % pressure_advance)
                          
                          print_square(speed)
                          up()
                  
                      print('; END.gcode\n\
                      G91 ; relative\n\
                      G1 Z10 F450 ; bed clearance\n\
                      G90 ; absolute\n\
                      M106 S0 ; turn off part cooling fan\n\
                      M104 S0 ; turn off extruder\n\
                      M140 S0 ; turn off bed\n\
                      M84 ; disable motors\n')
                  
                  if __name__ == '__main__':
                      main()
                  
                  

                  The main thing I'm worried about is the end of the square. I print up to the start of the square minus the extrusion width and then raise the head the layer height. This has resulted in a bump in my print but that might be because of not enough PA.

                  1 Reply Last reply Reply Quote 1
                  • undefined
                    Phaedrux Moderator
                    last edited by 6 Apr 2020, 02:44

                    Can you post photos?

                    Z-Bot CoreXY Build | Thingiverse Profile

                    1 Reply Last reply Reply Quote 0
                    • undefined
                      guerty25
                      last edited by 6 Apr 2020, 03:26

                      Here is the result. I'm hoping it is the script that is off. I get good prints that do not look like this. As I was trying to get this picture ready I kept getting that gap on the first few layers so I modified the script to print from center to the start here thinking that the nozzle wasn't primed enough. You can see my first layer is laid down well, but subsequent layers look terrible at the start. I'm not sure what is up with that. Maybe this script is the wrong path to take.

                      pa_cube.jpg

                      undefined 1 Reply Last reply 6 Apr 2020, 04:50 Reply Quote 0
                      • undefined
                        Phaedrux Moderator @guerty25
                        last edited by 6 Apr 2020, 04:50

                        @guerty25 said in Very High Pressure Advance Direct Drive:

                        Maybe this script is the wrong path to take.

                        I would definitely try one of the more traditional tests as well.

                        Z-Bot CoreXY Build | Thingiverse Profile

                        1 Reply Last reply Reply Quote 0
                        • undefined
                          guerty25
                          last edited by 10 Apr 2020, 19:57

                          I ended up trying the Marlin calculator found in this section because I couldn't figure out how to get a cube with the seam in the front. I ended up getting a K value of 0.13 which still seems high but much better than 0.28. Thanks for everyone's help.

                          1 Reply Last reply Reply Quote 0
                          • undefined
                            lael @Phaedrux
                            last edited by 26 Oct 2020, 21:51

                            @Phaedrux I'm just learning about tuning in RepRap firmware and found this post. What is special about this version of Cura?

                            undefined 1 Reply Last reply 26 Oct 2020, 21:55 Reply Quote 0
                            • undefined
                              Phaedrux Moderator @lael
                              last edited by 26 Oct 2020, 21:55

                              @lael There are many changes. Best to read the read me.

                              https://github.com/smartavionics/Cura/releases

                              Z-Bot CoreXY Build | Thingiverse Profile

                              undefined 1 Reply Last reply 26 Oct 2020, 22:00 Reply Quote 0
                              • undefined
                                lael @Phaedrux
                                last edited by 26 Oct 2020, 22:00

                                @Phaedrux Thanks!

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