Marlin Adjusting feedrate

  • I'm using the Marlin firmware (1.1.0-RC7 - 31 July 2016) for a 3d printer. Currently the printing is not perfect due to slight inaccuracies in movements along the x and y axis. I'm trying to change the feedrate for speed along the xy axis whilst the printer is in operation to make sure the printer stops on time and prints accurately.

    I have some code for controlling the feedrate but the problem is that I'm not sure where I am supposed make these adjustments. In the configuration.h file I see this code: (lines 742 and 753 )

    /*line 742*/ #define HOMING_FEEDRATE_XY (50*60) 
    /*line 753*/ #define DEFAULT_MAX_FEEDRATE {300, 300, 5, 25} // (mm/sec)

    I'm probably misunderstanding something but it seems like this sets the feedrate to a default value which is the same as the maximum.

    If the feedrate changes during printing I'm guessing it would be done in Marlin_main.cpp but I'm not sure which part it actually changes. Can someone point me in the right direction here?

    The feed rate is set by the g-code you provide, why not just set the printing feed rate lower? The only thing you are going to change in the firmware without modify it is the max and homing feed rates.

  • You can change the maximum allowable feedrate in Configuration.h, but the actual feedrate that is used isn't determined by your firmware. The feedrate is specified in the G-Code file. A command like

    G0 X10.0 Y15.0 Z3.0 F9000

    indicates a move to (10,15,3) at a feedrate of 9000 mm/min. If F is not specified, the last used feedrate is used.

    You just have to provide the appropriate G-code commands with the feedrate you want in them. There's no reason to modify the firmware to get a different feedrate.

    So then would the feedrate need to be the same for all x,y and z axes? Also are you familiar with which part of the Marlin_main.cpp is responsible for reading the commands from the G-Code file?

    No, the feedrate for the individual axes is calculated so that the total feedrate is 9000mm/s (e.g. euclidian distance between points divided by time for move equals feedrate). If you move from 0,0 to 2,1 the feedrate for X will be two times higher than the feedrate for Y. I'm not sure what you're trying to achieve, but changing the firmware probably isn't the right option. If you insist, you should probably be looking at the `prepare_move` function.

    You can't set the feedrate for the axes independently because then one axis might reach its destination before another does. You want a move from X,Y to X',Y' to result in a straight line. Therefore the feedrates depend on each other.

License under CC-BY-SA with attribution

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

Tags used