1. About
  2. Features
  3. Explore

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?

1 Answer 1

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.