-
Notifications
You must be signed in to change notification settings - Fork 2k
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
Snapmaker 2.0 Printing Defects - Z Feed Rate too high - Skipping Z steps #13420
Comments
3rd party profiles are usually provided/maintained by the community. The last Snapmaker bundle was provided by @macdylan. @macdylan do you have any comments regarding this issue (1st layer height/speed etc.)? There is indeed a bug regarding some Z travel commands, we will look into that. That being said, max. Z travel speed is supposed to be primarily limited by the firmware. I would expect appropriate limits in official Snapmaker FW. I am not familiar with Snapmaker's FW, but if it's based on Marlin, you may try to add M203 Z10 command or set machine limits to "emit to g-code". |
I poked around in the code a bit. The subroutine below appears to be relevant.
It appears that
For the Snapmaker 2.0, in the ini file PrusaSlicer/resources/profiles/Snapmaker.ini Line 220 in 5dc04b4
travel_speed = 120mm/s Manually setting z travel speed = 10mm/s For a layer height of 0.2mm, time_z = 0.2mm/10mm/s = 0.02s Snapmaker notes on G1: https://snapmaker.github.io/Documentation/gcode/G000-G001 I note at this point that Snapmaker Luban emits separate G1 lines for XY vs Z movements, with the appropriate F command for each movement type. It does not attempt to fuse the movement into one command (with a composite fed rate) as PrusaSlicer does. I will need to think more about how the calculation of factor could be corrected. std::string GCodeWriter::get_travel_to_xyz_gcode(const Vec3d &from, const Vec3d &to, const std::string_view comment) const {
GCodeG1Formatter w;
w.emit_xyz(to);
double speed_z = this->config.travel_speed_z.value;
if (speed_z == 0.)
speed_z = this->config.travel_speed.value;
const double distance_xy{(to.head<2>() - from.head<2>()).norm()};
const double distnace_z{std::abs(to.z() - from.z())};
const double time_z = distnace_z / speed_z;
const double time_xy = distance_xy / this->config.travel_speed.value;
const double factor = time_z > 0 ? time_xy / time_z : 1;
if (factor < 1) {
w.emit_f((this->config.travel_speed.value * factor + (1 - factor) * speed_z) * 60.0);
} else {
w.emit_f(this->config.travel_speed.value * 60.0);
}
w.emit_comment(this->config.gcode_comments, comment);
return w.string();
} |
I have prototyped a solution using GNU Octave. When I run this example in GNU Octave, it produces the following output: >> Test_Z_Speed
Computing TestAtSpeeds(120.000000,0.000000).
Completed TestAtSpeeds(120.000000,0.000000).
Computing TestAtSpeeds(120.000000,10.000000).
Completed TestAtSpeeds(120.000000,10.000000).
Computing TestAtSpeeds(120.000000,50.000000).
Completed TestAtSpeeds(120.000000,50.000000).
Computing TestAtSpeeds(50.000000,100.000000).
Completed TestAtSpeeds(50.000000,100.000000).
Computing TestAtSpeeds(100.000000,100.000000).
Completed TestAtSpeeds(100.000000,100.000000).
>> I believe this code fixes the issue with the faulty computation of the |
I modified PrusaSlicer to implement the speed limitation scheme described above, but it did not fix the problem. My Snapmaker machine still skips Z steps and produces prints that are too short. |
… Z step skipping issue)
…or Snapmaker 2.0
Commit 85332f6 allows me to print properly on my Snapmaker 2.0. |
This has been observed to fix the skipping z steps problem on Snapmaker 2.0. This is only a PROOF OF CONCEPT fix.
Fixed in 2.9.0-alpha1. Closing. |
Description of the bug
I have experienced several issues using PrusaSlicer 2.8.0 with Snapmaker 2.0 A350T.
This benchy is only 35mm high (should be 48mm high).
I did a lot of testing with this one.
The Snapmaker 2.0 uses linear actuators with different screw pitches per axis:
https://shop.snapmaker.com/products/linear-module-with-tmc2209-a350t-f350
The consequence of this is that the Z axis has a lower feed rate limit than the X and Y axes.
Feed Rate Limits (reference: Snapmaker's Luban slicer v4.13.0):
PrusaSlicer generates G-Code with Z feed rate of F7200 (120mm/s). It appears that this is causing the Z axis to skip steps.
PrusaSlicer appears to have the following parameters affecting the z speed:
I found that setting 10mm/s for the Z travel speed had no effect. PrusaSlicer continues to generate G code with F7200 on Z movements.
The only way that I could reduce the Z speed was to reduce the Travel speed.
I performed some manual Z movement tests with increasing speeds such as:
G1 Z50 F1000
G1 Z150 F2000
I found that the speed (and stepper tone) did not seem to increase after about F3400 (56.7mm/s) (but I only tested in units of 100).
It appears that faster speeds are coming to the Snapmaker 2.0 with the vibration compensation firmware currently in beta testing https://forum.snapmaker.com/t/vibration-compensation-firmware-open-beta-for-2-0-series-a-at-f-models/35729. I mention this because they claim a speed increase, depending on which linear modules (20mm or 8mm lead) are installed, from 100mm/s (no VC) to 120mm/s (with VC). I don't think this applies to Z axis.
Project file & How to reproduce
20240921_3DBenchy_One_Colour_Z_Speed_10mm_s.zip
I sliced and exported the G-Code.
To save time I have been checking the G-Code using sed:
sed --quiet -e "s/^G1 .* Z(-?[.0-9]+).* F(-?[.0-9]+)/\2/p" file.gcode | sort -u
This prints the Z feed speeds used in the G-Code file.
I get:
F200
F7200
The F200 comes from the initial movements to approach the bed.
F7200 is used while printing, including for Z-hop movements.
Checklist of files included above
Version of PrusaSlicer
2.8.1
Operating system
Ubuntu 22.04
Printer model
Snapmaker 2.0 A350T with upgraded linear modules TMC2209
The text was updated successfully, but these errors were encountered: