Marlin - slowing down print speed

  • I'm currently using Marlin firmware (1.1.0-RC7 - 31 July 2016) and would like to experiment with print speed.



    In the file Marlin_main.cpp I see in the process_next_command() function, there is a variable called current_command which (supposedly) holds the G-Code values for travel distance and feedrate(speed).



    I'm expecting the actual command for travelling to look something like this:



    G1 X50 Y25.3 E22.4 F1500 


    but I'm getting tied up figuring out exactly where it is. I'm assuming if I can change F1500 to F200, I can effectively slow down the print speed.



    I'm aware of line 753 in the configuration.h file:



    #define DEFAULT_MAX_FEEDRATE {300, 300, 5, 25}  // (mm/sec)


    I'm not interested in setting a fixed slow feedrate but would rather change individual G-Code commands. Can someone tell me where I can find the actual G-Code command to edit it?


  • G-code commands are not in the firmware. You're trying to find something in the code that simply isn't there. Your slicer is responsible for generating a g-code file, which you can then send to your printer (either by printing from an SD-card) or using a host program like repetier or cura. The commands in the G-code file are then executed by the firmware, but they're not part of it.



    How the commands are actually processed is not trivial, and it happens in multiple places.



    The commands are processed in the process_commands of Marlin_main.cpp. Upon reading a G1 command, it calls get_coordinates to parse the X/Y/Z/feedrate values from the command. Next, the prepare_move function is called, which applies the necessary transformations (clamping to endstops, and the reverse kinematics if you have a delta) before calling plan_buffer_line (which is in planner.cpp) which does some more preprocessing and computes a "block" which is pushed onto the buffer. Next, planner_recalculate is called, which iterates over the blocks to find feasible acceleration patterns for them. Finally, an interrupt (in stepper.cpp, ISR(TIMER1_COMPA_vect)) periodically reads blocks from the buffer and actually sends the signals to the steppers.


    I get that G-Code commands are not in the firmware I am just trying to find the exact part where they are fetched and executed. I would like to edit the fetched code it before it is executed.

    @makeithappen This was not clear from your question. I've edited my answer to explain (roughly) how the motion planning works. I don't understand why you are pursuing the firmware route, if you want to change F1500 to F200 just do it before you send the file to the printer!

License under CC-BY-SA with attribution


Content dated before 7/24/2021 11:53 AM