'randomise' option to combat VFAs in cartesian printers



  • I look into most threads here that raise the raise the issue of 'vertical lines on my prints', and this post references this prusaprinters thread on fixing 'VFA's. The fundamental problem is ascribed to per-step movement issues in the stepper motors, synchronized over repeated layers. This makes a lot of sense to me, and matches my experience that it is unavoidable in my i3-design cartesian but nonexistent in my delta. The solution there and here is to switch to 0.9 steppers and 16 tooth pulleys (as I have done), but seems to me that this just makes the problem smaller (as I have seen) without eliminating it.

    I think this could be addressed by adding small variations in speed, acceleration or possibly extruder temperature as the filament is laid down while printing. [Probably I'll have to hack up a g-code test tower to confirm this I think as I'm typing this...]. The point is to eliminate the layer-on-layer sychonization of the motor artifact rather than attempt to tune individual manufacturers motors.

    Thoughts? Where might be the easiest place to introduce this in the firmware, and what should be the source of the variation?



  • The Prusa thread also mentions a non linearity correction which believe refers to correcting for the distribution actual physical microstep locations within a whole step. I don't think we have an equivalent in RepRapFirmware, but it is certainly mentioned a lot in that thread.

    There's tons of settings to change relating to the TMC drivers too. Essentially once you get down to chasing fine artefacts (not belt/pulley problems - gates isn't necessarily a fix all there either) I think you may be entering the teritory of needing to fine tune the motor, and coming up against the limits of the one size fits all settings that the board defaults to. I'd suggest reading up on the driver data sheet and the control parameters you have in M569:

    https://duet3d.dozuki.com/Wiki/Gcode#Section_M569_Set_motor_driver_direction_enable_polarity_and_step_pulse_timing

    In addition if your pattern is constant frequency then the dynamic acceleration control may help too:

    https://duet3d.dozuki.com/Wiki/Gcode#Section_M593_Configure_Dynamic_Acceleration_Adjustment


  • Moderator

    You may find this thread interesting: https://forum.duet3d.com/topic/6100/extruder-linearity



  • Forgot to say the the idea of randomising certain aspects of the drive may well hide fine artefacts, but they are obviously still there. While that might seem acceptable initially a collection of simple problems can present themselves a complex issue further down the line.

    Regards the i3 desogn have you addressed the bouncy 8mm rods yet? I've noticed more flex in these than I would like. 12mm rods seem one solution, v-slot based is another.



  • Thanks for these ideas, they both seem to be more along the lines of tuning for specific hardware and situations. I know that that I can optimise or eliminate VFAs on any given object/speed combination. If I'm reading correctly, the (non)linearity settings would enable varying the per-step movement pattern directly, while M569 and M593 changes would approach this but the default settings are probably best left unchanged - and both of these would remain fixed throughout the print.

    I'm 'wishing' (in the firmware wishlist forum category) for a setting on selected stepper motor axes to add [random within parameter 1-5%] variation to the speed specified in a stock g-code file for each print move.

    The query about where and how to best do this in the firmware is more along developer lines (no pun intended :-)), as the variation needs to occur at least between layers without modifying the slicer code. As I noted, it needs a test tower to show that the idea works at all before going to this effort.

    Definitely it just masks problems, but by varying the pattern layer-on-layer it at least doesn't emphasize them. I believe this is why my delta generates my best prints, because it is such a statistical improbability to be able to synchronize the mixed contribution of three axes through the delta kinematics from layer to layer.

    For my i3, it was my first re-build - probably would have gone corexy if I had known about that design. The X and Y axes are 80x20 v-slot. Like some of the threads say, "VFAs are what you get to when you've fixed everything else." Shows up best on black PETG.



  • @robm If the lines are aligned vertically they are related to stepper position. I don't see how varying speed or acceleration would change the position of the lines, just perhaps their severity if they are due to resonance.

    On a delta the motor positions don't map linearly to object position, breaking alignment, but on a Cartesian machine there is no way to break the alignment.



  • The newest version of Cura has a "randomize" option for vertical seaming that occurs from the stacking of the same start point on a given layer. This really helps with that issue.



  • @Nuramori Ha, Skeinforge has had that option for about 10 years I think.



  • @Nuramori This addresses the layer starting point seam as you say, I am looking to randomize the the motor step pulses along the entire layer line.

    As @nophead points out though, there is still a direct mapping between motor step and cartesian printer nozzle position when the pulse hits, which will be unaffected by speed or acceleration.

    I'm thinking now about trying the M569 and M593 gcodes as @DocTrucker suggested originally (and M593 may be the key anyway for my i3 clone now that I have a corexy to compare to), or possibly adding subtle variations to the steps/mm settings as the filament is laid down -- but these ideas await me getting back to the project 🙂

    Beyond the specific case of combating VFAs, it seems like this may be interesting for changing the texture/reflectivity of the part surface in general.


Log in to reply