Firmware for CNC milling mode


As the manual shows you have to “downgrade” marlin v2 to old V1 version with enabled CNC definintions:
I found out that only these switches were used in CNC version of Marlin v1:

#define min_software_endstops true // If true, axis won’t move to coordinates less than HOME_POS.
#define DEFAULT_MAX_FEEDRATE {500, 500, 50, 25} // (mm/sec)
#define DEFAULT_ACCELERATION 1000 // X, Y, Z and E max acceleration in mm/s^2 for printing moves
#define DEFAULT_RETRACT_ACCELERATION 1000 // X, Y, Z and E max acceleration in mm/s^2 for retracts

My question: can I change theses switches in K8200 Marlin V2 (from Velleman) and also use for CNC milling mode?
Best would be to have ONE Firmware for 3D Printing AND milling - is this already available?

Thx in advance!

Hi microbot,

how the firmware should be set up depends totally on your hardware configuration for both modes, printer and CNC. For example, #define TEMP_SENSOR_BED 0 would (obviously) disable the temperature sensor for the heated bed, which will be ok for CNC, but not for printing (unless you want to print on a cold bed).

Similar case for the other settings that you mentioned. Wrong endstops setting may result in hardware damage, which is not only a software issue, but also brings up the question on how the existing endstops can be used for homing in CNC mode (due to the different way a CNC works, subtractive vs. additive manufacturing).

The feedrates are not that important, worst case the printer will slower than expected (E: better go for 100 mm/s minimum, e.g. retracts are 65 mm/s), or too fast, resulting in friction or axis blocking (Z: 5 or 10 mm/s should be easily enough). The same is true for the acceleration settings; 1000 mm/s² is the default setting in Velleman’s V1 and V2, anyways.


Thank you for your fast replay.

So far I understood.
But I have to add a simple switch in the LCD menue (I use 128x64 pixel, therefore good to display a symbol) to change the limit switch topic at least and maybe also the speed and acceleration.
I think it is better to store to eeprom and reboot, than making a global variable…
I will do everything to avaid all the time flashing the old firmware for milling and new one for printing.

But my primary question is still not answered:
can I use marlin v2 from velleman for CNC work? any issues with that firmware. why didn’t velleman spend a v2 with CNC switches? I do not want to destroy anything when I switch to the v2 with my cnc “mod”.

Thanks in advance!

Hi microbot,

there is no special relation between those settings and CNC, or in other words: there may be other settings which have to be changed in order to operate the printer as CNC. Since the controller board is “standard” open source RepRap hardware, you can use other firmwares like the original Marlin or Repetier FW, too. Velleman’s firmware versions are provided so that people can get the printer back up and running quickly if reflashing is needed. A CNC conversion on the other hand is a very special mod, so there are no default settings which could be included into the standard firmware.

You seem to be quite focussed on the software right now. I’d recommend to start with the hardware layout instead: How will you mount the CNC tool(s)? Will you dismount the extruder for CNC operation, or mount the spindle next to the extruder? At what height will the tool be set when in use? Same thing for bed: dismount the heater for CNC? How will the blank material be fixed, and at what height? What heights will be required, only flat objects like in PCB-milling? Or do you want to mill all the way through the material, cutting out forms (probably from soft matter like foam or wood, only), or drill PCBs or the like, so that you’ll need a spacer below that you can mill/drill into? Have you eliminated or at least reduced backlash for all three basic axes, most notably Z?

The answers to all those questions should result in a concept on how to set up the machine, and the differences between printer and CNC ops. Those differences are important for you, not for the machine, since it will blindly follow any command given, not caring whether there’s an extruder or a milling tool at work.

As for the EEPROM question: max feedrates and accelerations are stored in EEPROM, but you can edit the values on the fly via G-code without the need for a reboot, so there’s not really a need for adjusting the firmware there. Limit switch behavior is different, since it’s directly embedded in the firmware during compilation. You’d have to rewrite quite some code to get a setting like that into the EEPROM, or make it editable at runtime in another way.



Thank you for the detailed answere. You allowed me to save a lot of time for now.
I am going to postpone the topic and focus on the things u mentioned. But then I will come back with my idea of one firmware and I will share my findings of course.


Hi microbot,

one more suggestion: convert your printer into a temporary pen plotter.

Operating such a plotter will give you an insight into many details that will also come up in a CNC mod, but the risk to damage something will be minimal (the cost of a pen, most likely).

For example, one point to test would be how to handle Z homing: ideally, the pen tip should be above the paper when idle, but you need to be able to move it downwards until it touches the surface. With the Z endstop in its printing setup, that won’t work: either Z home position is too high, i.e. the pen will stop at the correct (idle) height while homing, but then it cannot go further down since this will trigger the endstop. Or the position is too low, in which case the pen will press into the paper when homing to the endstop, possibly damaging the tip (and the paper). This problem can be solved either mechanically, by changing the endstop or the printbed setup, or in “software”, by issuing adapted G-code, most notably not using the Z homing routine.