Advertisement
DonnerPlays

Klipper Speed test

Feb 17th, 2022 (edited)
1,625
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.14 KB | None | 0 0
  1. [gcode_macro FEED_RATE_TEST]
  2. #Params:
  3. #ACCEL_STEPS (text, comma separated integers): acceleration values to test, passed as a string like ACCEL_STEPS="5000, 10000, 20000"
  4. #TEST_STEPS (text, comma separated texts): tests to run, passed as a string like TEST_STEPS="x_test,y_test,rect_test,diag_test"
  5. #- Options:
  6. # - x_test = Moves x axis
  7. # - y_test = Moves y axis
  8. # - rect_test = Moves in a rectangle
  9. # - diag_test = Moves x & y diagonally
  10. # - circle_test = Moves in a circle twice
  11. #DISTANCE_STEPS (text, comma separated floats): distance values to test, passed as a string like DISTANCE_STEPS="30, 22, 45.221"
  12. #SPEED_STEPS (text, comma separated floats): speed (mm/s) values to test, passed as a string like SPEED_STEPS="100, 120, 120.22"
  13. gcode:
  14. {% if printer.configfile.config.respond is not defined %}
  15. {action_raise_error("This gcode_macro requires the [respond] section in your printer.cfg")}
  16. {% endif %}
  17.  
  18. # Ugly code to convert a string into an array in jinja
  19. # TEST_STEPS conversion
  20. {% set ns_test_steps = namespace(collector="", arr=[]) %}
  21. {% for char in params.TEST_STEPS|default("x_test,y_test,rect_test,diag_test")|string %}
  22. {% if char == "," or loop.last %}
  23. {% if loop.last %}
  24. {% set ns_test_steps.collector = ns_test_steps.collector ~ char %}
  25. {% endif %}
  26.  
  27. {% set ns_test_steps.arr = ns_test_steps.arr + [ns_test_steps.collector|string] %}
  28. {% set ns_test_steps.collector = "" %}
  29. {% else %}
  30. {% set ns_test_steps.collector = ns_test_steps.collector ~ char %}
  31. {% endif %}
  32. {% endfor %}
  33.  
  34. # SPEED_STEPS conversion
  35. {% set ns_speed_steps = namespace(collector="", arr=[]) %}
  36. {% for char in params.SPEED_STEPS|default("80.0")|string %}
  37. {% if char == "," or loop.last %}
  38. {% if loop.last %}
  39. {% set ns_speed_steps.collector = ns_speed_steps.collector ~ char %}
  40. {% endif %}
  41.  
  42. {% set ns_speed_steps.arr = ns_speed_steps.arr + [ns_speed_steps.collector|float] %}
  43. {% set ns_speed_steps.collector = "" %}
  44. {% else %}
  45. {% set ns_speed_steps.collector = ns_speed_steps.collector ~ char %}
  46. {% endif %}
  47. {% endfor %}
  48.  
  49. # DISTANCE_STEPS conversion
  50. {% set ns_distance_steps = namespace(collector="", arr=[]) %}
  51. {% for char in params.DISTANCE_STEPS|default("40.0")|string %}
  52. {% if char == "," or loop.last %}
  53. {% if loop.last %}
  54. {% set ns_distance_steps.collector = ns_distance_steps.collector ~ char %}
  55. {% endif %}
  56.  
  57. {% set ns_distance_steps.arr = ns_distance_steps.arr + [ns_distance_steps.collector|float] %}
  58. {% set ns_distance_steps.collector = "" %}
  59. {% else %}
  60. {% set ns_distance_steps.collector = ns_distance_steps.collector ~ char %}
  61. {% endif %}
  62. {% endfor %}
  63.  
  64. # ACCEL_STEPS conversion
  65. {% set ns_accel_steps = namespace(collector="", arr=[]) %}
  66. {% for char in params.ACCEL_STEPS|default(printer.toolhead.max_accel|string)|string %}
  67. {% if char == "," or loop.last %}
  68. {% if loop.last %}
  69. {% set ns_accel_steps.collector = ns_accel_steps.collector ~ char %}
  70. {% endif %}
  71.  
  72. {% set ns_accel_steps.arr = ns_accel_steps.arr + [ns_accel_steps.collector|int] %}
  73. {% set ns_accel_steps.collector = "" %}
  74.  
  75. {% else %}
  76. {% set ns_accel_steps.collector = ns_accel_steps.collector ~ char %}
  77. {% endif %}
  78. {% endfor %}
  79.  
  80. # Variable assignment
  81. {% set center_x_position = printer.toolhead.axis_maximum.x / 2 %}
  82. {% set center_y_position = printer.toolhead.axis_maximum.y / 2 %}
  83.  
  84. # Conversion steps variable assignment
  85. {% set accel_steps = ns_accel_steps.arr %}
  86. {% set test_steps = ns_test_steps.arr %}
  87. {% set distance_steps = ns_distance_steps.arr %}
  88. {% set speed_steps = ns_speed_steps.arr %}
  89.  
  90. SAVE_GCODE_STATE NAME=speed_testing_macro
  91. {% set testRunCounter = namespace(value=0) %}
  92. RESPOND PREFIX="Speed-Test - " MSG="Starting Speed testing with"
  93. RESPOND PREFIX="- " MSG="distance_steps={distance_steps}"
  94. RESPOND PREFIX="- " MSG="speed_steps={speed_steps}"
  95. RESPOND PREFIX="- " MSG="accel_steps={accel_steps}"
  96. RESPOND PREFIX="- " MSG="test_steps={test_steps}"
  97. RESPOND PREFIX="" MSG="--------------------"
  98.  
  99. # Homing
  100. {% if printer.toolhead.homed_axes != "xyz" %}
  101. G28
  102. {% endif %}
  103.  
  104. G90
  105. G1 X{center_x_position} Y{center_y_position} Z25 F4000
  106.  
  107. {% for distance_step in distance_steps %}
  108. {% for speed_step in speed_steps %}
  109. {% set speed_feedrate_step = speed_step * 60 %}
  110. {% for accel_step in accel_steps %}
  111. {% set testRunCounter.value = testRunCounter.value + 1 %}
  112. M204 S{accel_step}
  113. RESPOND PREFIX="Speed-Test - " MSG="Test-Run {testRunCounter.value} => distance: {distance_step} speed: {speed_step} acceleration: {accel_step}"
  114.  
  115. {% for test_step in test_steps %}
  116. _{test_step|upper} FEEDRATE={speed_feedrate_step} DISTANCE={distance_step}
  117. {% endfor %}
  118. {% endfor %}
  119. {% endfor %}
  120. {% endfor %}
  121. RESTORE_GCODE_STATE NAME=speed_testing_macro
  122.  
  123. [gcode_macro _X_TEST]
  124. description: Moves the head left/right
  125. gcode:
  126. {% set speed_feedrate = params.FEEDRATE|default(4800)|float %}
  127. {% set distance = params.DISTANCE|default(100)|float %}
  128. G91
  129. G1 x{distance} F{speed_feedrate}
  130. G1 x-{distance * 2} F{speed_feedrate}
  131. G1 x{distance} F{speed_feedrate}
  132. G90
  133.  
  134. [gcode_macro _Y_TEST]
  135. description: Moves the head forward/backward
  136. gcode:
  137. {% set speed_feedrate = params.FEEDRATE|default(4800)|float %}
  138. {% set distance = params.DISTANCE|default(100)|float %}
  139. G91
  140. G1 y{distance} F{speed_feedrate}
  141. G1 y-{distance * 2} F{speed_feedrate}
  142. G1 y{distance} F{speed_feedrate}
  143. G90
  144.  
  145. [gcode_macro _RECT_TEST]
  146. description: Moves the head in a rectangle
  147. gcode:
  148. {% set speed_feedrate = params.FEEDRATE|default(4800)|float %}
  149. {% set distance = params.DISTANCE|default(100)|float %}
  150. G91
  151. G1 x-{distance} F{speed_feedrate}
  152. G1 y-{distance} F{speed_feedrate}
  153. G1 x{distance * 2} F{speed_feedrate}
  154. G1 y{distance * 2} F{speed_feedrate}
  155. G1 x-{distance * 2} F{speed_feedrate}
  156. G1 y-{distance} F{speed_feedrate}
  157. G1 x{distance} F{speed_feedrate}
  158. G90
  159.  
  160. [gcode_macro _DIAG_TEST]
  161. description: Moves the head diagonally. First spinning the stepper_x, then the stepper_y. (CoreXY)
  162. gcode:
  163. {% set speed_feedrate = params.FEEDRATE|default(4800)|float %}
  164. {% set distance = params.DISTANCE|default(100)|float %}
  165. G91
  166. G1 x{distance} y{distance} F{speed_feedrate}
  167. G1 x-{distance * 2} y-{distance * 2} F{speed_feedrate}
  168. G1 x{distance} y{distance} F{speed_feedrate}
  169. G1 x{distance} y-{distance} F{speed_feedrate}
  170. G1 x-{distance * 2} y{distance * 2} F{speed_feedrate}
  171. G1 x{distance} y-{distance} F{speed_feedrate}
  172. G90
  173.  
  174. [gcode_macro _CIRCLE_TEST]
  175. description: Moves the head in a circle twice.
  176. gcode:
  177. {% set speed_feedrate = params.FEEDRATE|default(4800)|float %}
  178. {% set distance = params.DISTANCE|default(100)|float %}
  179. {% if printer.configfile.config.gcode_arcs is not defined %}
  180. {action_raise_error("The circle test requires the [gcode_arcs] section in your printer.cfg")}
  181. {% endif %}
  182. {% for count in range(2) %}
  183. G2 I{distance} J{distance} F{speed_feedrate}
  184. {% endfor %}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement