-
Notifications
You must be signed in to change notification settings - Fork 738
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rostock printer ignores acceleration and jerk between travel moves #99
Comments
Having currently no Rostock this really requires your help. Are you using 0.82.2? There I fixed an error when reaching high speeds. But I don't think it is the root of your problem as it has nothing to do with direction changes. Looking forward to the video, which perhaps explains more. |
I will upload the video in the next 40 minutes or so... |
I have to check that when I'm home. Could you also copy a gcode sequence matching your problem, so I can calculate what may happen there and perhaps why the jerk is not taken into account. |
Here is a link to the gcode: https://www.dropbox.com/s/7og8iviypgw8tnj/test_gcodes.gcode A picture of one of the layers: http://www.ld-host.de/uploads/images/588a242cf9153c30f41414d466156fe2.jpg Maybe the Extruder Jerk does limit speeds when switching from travel to print? Video with 100mm/s http://www.youtube.com/watch?v=iVEleEpT_Ms&feature=youtu.be Video with 300mm/s, printer looses steps in the end http://www.youtube.com/watch?v=119RIg6QhDQ&feature=youtu.be If you find something you could post the necessary changes here and I will try them out. |
This is exactly the same issue as I have. I made a simple code with triangles getting narrower and it happens on the last ones but is dependant on queuing. I expect some path planning is involved in avoiding it on the early blocks. |
@kyrreaa So you are also using a delta printer? Have just run the code on my non delta printer and it worked as expected. Unfortunately my delta printer is still not build and will get finished somewhere in the summer regarding the amount of programming I currently do. I think the problem is buried in the delta only code, which was not written by me. I will have an eye on this issue when I refactor the delta code. Perhaps I see how it is possible to make the code ignore speed changes. |
Thanks for looking into it, if I had more time I would try to figure the problem out. One thing you could look at: The problems only show when you have pure XY movement without extruder or Z movement. |
Yes. I've built a cross between the original rostock and the Kossel with my
|
One thing that I notice when I start experimenting with accelleration is that my M201/M202 commands are utterly ignored and that I can't set new values to store in eeprom... |
I saw this problem as well but never tracked it down. Sorry Roland. When I get a moment I will look at it again. Sent from Samsung Mobilekyrreaa notifications@github.com wrote:One thing that I notice when I start experimenting with accelleration is that my M201/M202 commands are utterly ignored and that I can't set new values to store in eeprom... — |
Hmm, looking at the code I start to wonder. The velocity, isn't it always a posetive number? Direction is stored elsewhere? |
In motion.cpp, the code calculating dx and dy for jerk would be wrong assuming speed is posetive as direction is stored in ->dir. |
I will test this tomorrow! where exactly did you change the calculation in motion.cpp? |
With the M201/202 it is likely wrong. There is a routine update_ramps i think (I'm at work now) that converts one format into an other and these commands set only one of 2 versions used. I think there is also an error in delta code that you need to have steps per mm in eeprom identical to the one in configuration.h. I have to check and solve that, too, I'm quite sure that speedXYZ contains a sign when computed for the cartesian printer, thus the jerk computation was correct. Possibly the signs are not set in the according delta code. I will check that after work. Would at least explain why it only happens with delta printer and why your fix works, also it would then stopp cartesian printer from working. But knowing what to look at makes a solution much easier. So thanks for your effords and I answer again when I verified the problem/solution at home. |
@luke321 if you look in motion.cpp for "jerk" you will see the dx and dy calculations. |
Just a short comment after reading the sources. Your solutions works because you are undoing an other error. When I said speed is signed I was right. The problem comes from split_delta_move. Here the axis_diff is computed: and in the cartesian computation axis_diff is always positive. So here axis_diff has a sign and for speed computation that sign is changed again. The right solution is to use axis_diff[i] = fabs(difference[i] * inv_axis_steps_per_unit[i]); but I'm still trying to understand the rest of the code, to see if sign of axis_diff matters for the delta code. PS: The code is from version 0.90 so it differs a bit from the current stable version. I will adapt the stable version as soon as I'm through with proof reading. |
Ok, there was still another place where axis_diff was computed, but is only used for distance computation, which is sign independend. So I hope the fix works. I've updated the github sources, which also fix the M201/202 problem. @kyrreaa You are the king of the day for the hint in the right way! Please report back if the jerk problem is now solved. |
I will test soon. I will be meddling a bit more with it as there is/was something odd about OPS but it may have been ralated. |
OPS seems broken and gets completely rewritten for the next version, so do not spend too much time. Adding the AD8495 should be no problem. There are plenty of types left:-) just give me the code and I put it into the main branch. |
Quick note for you on that rewrite... |
Just ran the new code and after updating with my hw changes it works very well! Have a beer on me! |
Working perfectly now! |
The fix is working great here too Roland. Luke321, noticed the smoother, quieter rapids? Sooo nice! |
Fixed #99: updated ARDUINO_AVRDUDE_PROGRAM 's PATH_SUFFIXES
When using the avoid crossing perimeters feature I always get lost steps when using my standard travel speed of 300 mm/s with an acceleration of 1000 mm/s^2.
To avoid this I have to reduce my travel speed to 100mm/s
Sometimes slic3r generates gcode that moves the nozzle in one corner of the print and than instantly back in the same direction.
Instead of slowing down the printer tries to make an instant direction change from 300mm/s to -300 mm/s ignoring my xyjerk of 20 mm/s and my acceleration and loosing steps.
Lowering acceleration only helps because the printer won't reach the full 300 mm/s, lowering Jerk does nothing and reduces print quality.
I think the printer should move in the same way when switching from a travel move to a print move, slowing down then accelerate up again.
I will upload a video where you can see and hear this behaviour very clearly.
The text was updated successfully, but these errors were encountered: