Skip to content

Commit 08b838a

Browse files
authored
Merge pull request #3746 from grandixximo/master
S-curve jerk control fixes as requested in #3744
2 parents a6832d6 + eb155b1 commit 08b838a

19 files changed

Lines changed: 258 additions & 83 deletions

File tree

configs/sim/axis/axis_9axis_scurve.ini

Lines changed: 83 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@
77
# acceleration profiles that can reduce machine vibration and
88
# improve surface finish.
99
#
10-
# IMPORTANT: S-curve planning is OPTIONAL and DISABLED by default.
10+
# IMPORTANT: S-curve planning is OPTIONAL.
1111
# Traditional trapezoidal acceleration is used when:
1212
# - PLANNER_TYPE = 0, OR
13-
# - MAX_LINEAR_JERK = 0 (or not specified)
13+
# - MAX_LINEAR_JERK = 0
14+
#
15+
# NOTE: If MAX_LINEAR_JERK is not specified, it defaults to 1e9 (1 billion),
16+
# which effectively disables jerk limiting while still using S-curve calculations.
17+
# This produces motion similar to trapezoidal but not identical.
1418
#
1519
# ========================================================
1620
[EMC]
@@ -64,6 +68,8 @@ PLANNER_TYPE = 1
6468
# Units: machine-units/second^3 (e.g., mm/s^3 or inch/s^3)
6569
#
6670
# Setting this to 0 disables S-curve planning regardless of PLANNER_TYPE
71+
# If not specified, defaults to 1e9 (effectively no jerk limiting)
72+
# Maximum allowed value is 1e9 (values above are automatically clamped)
6773
#
6874
# Recommended starting values (adjust based on your machine):
6975
# - Light/rigid machines: 1000-10000
@@ -75,16 +81,7 @@ PLANNER_TYPE = 1
7581
#
7682
# NOTE: This parameter can be changed at RUNTIME via HAL pin:
7783
# ini.traj_max_jerk (allows tuning on-the-fly)
78-
MAX_LINEAR_JERK = 1000.0
79-
80-
# DEFAULT_LINEAR_JERK: Default jerk for programmed feed moves
81-
# Units: machine-units/second^3
82-
# Should be <= MAX_LINEAR_JERK
83-
# Default: 0.0
84-
#
85-
# NOTE: This parameter can be changed at RUNTIME via HAL pin:
86-
# ini.traj_default_jerk
87-
DEFAULT_LINEAR_JERK = 500.0
84+
MAX_LINEAR_JERK = 10000.0
8885

8986
# --------------------------------------------------------
9087
# Standard TRAJ parameters (still required with S-curve)
@@ -141,91 +138,147 @@ HOME_SEQUENCE = 0
141138
#
142139
# This should match or be higher than the trajectory jerk
143140
# to avoid limiting coordinated motion.
144-
MAX_JERK = 1000.0
141+
MAX_JERK = 10000.0
145142

146143
#MIN_LIMIT = -200.0 #disabled to give more space for testing g-codes
147144
#MAX_LIMIT = 200.0 #disabled to give more space for testing g-codes
148145

146+
# ========================================================
147+
# HOMING CONFIGURATION FOR S-CURVE
148+
# ========================================================
149+
# WARNING: When using S-curve motion (PLANNER_TYPE=1), you MUST set
150+
# HOME_SEARCH_VEL and HOME_LATCH_VEL significantly SLOWER than you
151+
# would with trapezoidal motion planning.
152+
#
153+
# S-curve motion requires MORE DISTANCE to decelerate due to the
154+
# jerk-limited acceleration profile. If homing velocities are too
155+
# high, the axis may overshoot and hit hard limits or sensor limits.
156+
#
157+
# RECOMMENDED: Start with 50% or less of the velocities you would
158+
# use with trapezoidal planning, then increase cautiously.
159+
#
160+
# Example homing configuration (adjust for your machine):
161+
#HOME_SEARCH_VEL = 5.0 # Velocity for initial limit switch search
162+
#HOME_LATCH_VEL = 1.0 # Velocity for precise homing (slower)
163+
#HOME_OFFSET = 0.0 # Distance from switch to home position
164+
#HOME_USE_INDEX = NO # Use encoder index pulse for homing
165+
#HOME_IGNORE_LIMITS = NO # Ignore limit switches during homing move
166+
# ========================================================
167+
149168
[JOINT_1]
150169
TYPE = LINEAR
151170
HOME = 0.0
152171
MAX_VELOCITY = 300.0
153172
MAX_ACCELERATION = 1000.0
154-
MAX_JERK = 1000.0
173+
MAX_JERK = 10000.0
155174
#MIN_LIMIT = -200.0 #disabled to give more space for testing g-codes
156175
#MAX_LIMIT = 200.0 #disabled to give more space for testing g-codes
157176
HOME_SEQUENCE = 0
158177

178+
# WARNING: S-curve homing requires SLOWER velocities than trapezoidal!
179+
# See JOINT_0 for detailed homing configuration examples.
180+
#HOME_SEARCH_VEL = 5.0
181+
#HOME_LATCH_VEL = 1.0
182+
159183
[JOINT_2]
160184
TYPE = LINEAR
161185
HOME = 0.0
162186
MAX_VELOCITY = 200.0
163187
MAX_ACCELERATION = 800.0
164-
MAX_JERK = 800.0
188+
MAX_JERK = 10000.0
165189
#MIN_LIMIT = -100.0 #disabled to give more space for testing g-codes
166190
#MAX_LIMIT = 100.0 #disabled to give more space for testing g-codes
167191
HOME_SEQUENCE = 0
168192

193+
# WARNING: S-curve homing requires SLOWER velocities than trapezoidal!
194+
# See JOINT_0 for detailed homing configuration examples.
195+
#HOME_SEARCH_VEL = 4.0
196+
#HOME_LATCH_VEL = 0.8
197+
169198
[JOINT_3]
170199
TYPE = ANGULAR
171200
HOME = 0.0
172201
MAX_VELOCITY = 180.0
173202
MAX_ACCELERATION = 600.0
174-
MAX_JERK = 600.0
203+
MAX_JERK = 10000.0
175204
#MIN_LIMIT = -360.0
176205
#MAX_LIMIT = 360.0
177206
HOME_SEQUENCE = 0
178207

208+
# WARNING: S-curve homing requires SLOWER velocities than trapezoidal!
209+
#HOME_SEARCH_VEL = 3.0
210+
#HOME_LATCH_VEL = 0.6
211+
179212
[JOINT_4]
180213
TYPE = ANGULAR
181214
HOME = 0.0
182215
MAX_VELOCITY = 180.0
183216
MAX_ACCELERATION = 600.0
184-
MAX_JERK = 600.0
217+
MAX_JERK = 10000.0
185218
#MIN_LIMIT = -360.0
186219
#MAX_LIMIT = 360.0
187220
HOME_SEQUENCE = 0
188221

222+
# WARNING: S-curve homing requires SLOWER velocities than trapezoidal!
223+
#HOME_SEARCH_VEL = 3.0
224+
#HOME_LATCH_VEL = 0.6
225+
189226
[JOINT_5]
190227
TYPE = ANGULAR
191228
HOME = 0.0
192229
MAX_VELOCITY = 180.0
193230
MAX_ACCELERATION = 600.0
194-
MAX_JERK = 600.0
231+
MAX_JERK = 10000.0
195232
#MIN_LIMIT = -360.0
196233
#MAX_LIMIT = 360.0
197234
HOME_SEQUENCE = 0
198235

236+
# WARNING: S-curve homing requires SLOWER velocities than trapezoidal!
237+
#HOME_SEARCH_VEL = 3.0
238+
#HOME_LATCH_VEL = 0.6
239+
199240
[JOINT_6]
200241
TYPE = LINEAR
201242
HOME = 0.0
202243
MAX_VELOCITY = 300.0
203244
MAX_ACCELERATION = 1000.0
204-
MAX_JERK = 1000.0
245+
MAX_JERK = 10000.0
205246
#MIN_LIMIT = -200.0
206247
#MAX_LIMIT = 200.0
207248
HOME_SEQUENCE = 0
208249

250+
# WARNING: S-curve homing requires SLOWER velocities than trapezoidal!
251+
#HOME_SEARCH_VEL = 5.0
252+
#HOME_LATCH_VEL = 1.0
253+
209254
[JOINT_7]
210255
TYPE = LINEAR
211256
HOME = 0.0
212257
MAX_VELOCITY = 300.0
213258
MAX_ACCELERATION = 1000.0
214-
MAX_JERK = 1000.0
259+
MAX_JERK = 10000.0
215260
#MIN_LIMIT = -200.0
216261
#MAX_LIMIT = 200.0
217262
HOME_SEQUENCE = 0
218263

264+
# WARNING: S-curve homing requires SLOWER velocities than trapezoidal!
265+
#HOME_SEARCH_VEL = 5.0
266+
#HOME_LATCH_VEL = 1.0
267+
219268
[JOINT_8]
220269
TYPE = LINEAR
221270
HOME = 0.0
222271
MAX_VELOCITY = 200.0
223272
MAX_ACCELERATION = 800.0
224-
MAX_JERK = 800.0
273+
MAX_JERK = 10000.0
225274
#MIN_LIMIT = -100.0
226275
#MAX_LIMIT = 100.0
227276
HOME_SEQUENCE = 0
228277

278+
# WARNING: S-curve homing requires SLOWER velocities than trapezoidal!
279+
#HOME_SEARCH_VEL = 4.0
280+
#HOME_LATCH_VEL = 0.8
281+
229282
# ========================================================
230283
# AXIS CONFIGURATION
231284
# ========================================================
@@ -239,63 +292,63 @@ MAX_ACCELERATION = 1000.0
239292
# MAX_JERK: Maximum jerk for coordinated motion on this axis
240293
# Units: machine-units/second^3
241294
# Default: 0.0 (disabled)
242-
MAX_JERK = 1000.0
295+
MAX_JERK = 10000.0
243296

244297
[AXIS_Y]
245298
#MIN_LIMIT = -200.0 #disabled to give more space for testing g-codes
246299
#MAX_LIMIT = 200.0 #disabled to give more space for testing g-codes
247300
MAX_VELOCITY = 300.0
248301
MAX_ACCELERATION = 1000.0
249-
MAX_JERK = 1000.0
302+
MAX_JERK = 10000.0
250303

251304
[AXIS_Z]
252305
#MIN_LIMIT = -100.0 #disabled to give more space for testing g-codes
253306
#MAX_LIMIT = 100.0 #disabled to give more space for testing g-codes
254307
MAX_VELOCITY = 200.0
255308
MAX_ACCELERATION = 800.0
256-
MAX_JERK = 800.0
309+
MAX_JERK = 10000.0
257310

258311
[AXIS_A]
259312
#MIN_LIMIT = -360.0
260313
#MAX_LIMIT = 360.0
261314
MAX_VELOCITY = 180.0
262315
MAX_ACCELERATION = 600.0
263-
MAX_JERK = 600.0
316+
MAX_JERK = 10000.0
264317

265318
[AXIS_B]
266319
#MIN_LIMIT = -360.0
267320
#MAX_LIMIT = 360.0
268321
MAX_VELOCITY = 180.0
269322
MAX_ACCELERATION = 600.0
270-
MAX_JERK = 600.0
323+
MAX_JERK = 10000.0
271324

272325
[AXIS_C]
273326
#MIN_LIMIT = -360.0
274327
#MAX_LIMIT = 360.0
275328
MAX_VELOCITY = 180.0
276329
MAX_ACCELERATION = 600.0
277-
MAX_JERK = 600.0
330+
MAX_JERK = 10000.0
278331

279332
[AXIS_U]
280333
#MIN_LIMIT = -200.0
281334
#MAX_LIMIT = 200.0
282335
MAX_VELOCITY = 300.0
283336
MAX_ACCELERATION = 1000.0
284-
MAX_JERK = 1000.0
337+
MAX_JERK = 10000.0
285338

286339
[AXIS_V]
287340
#MIN_LIMIT = -200.0
288341
#MAX_LIMIT = 200.0
289342
MAX_VELOCITY = 300.0
290343
MAX_ACCELERATION = 1000.0
291-
MAX_JERK = 1000.0
344+
MAX_JERK = 10000.0
292345

293346
[AXIS_W]
294347
#MIN_LIMIT = -100.0
295348
#MAX_LIMIT = 100.0
296349
MAX_VELOCITY = 200.0
297350
MAX_ACCELERATION = 800.0
298-
MAX_JERK = 800.0
351+
MAX_JERK = 10000.0
299352

300353
# ========================================================
301354
# TUNING GUIDELINES

0 commit comments

Comments
 (0)