Firmware question for newbie to milling

Hello awesome people of this forum. I’ve been 3d printing w Marlin for years.

My question is since its so 3d printing heavy, why should I use it for milling? I’ve seen other firmwares mentioned (GRBL & Smoothie) that seem to be milling specific.

I have a Rambo 1.4 w Dual-endstops. Not sure if I’m limited to Marlin. Pros, Cons, suggestions?

Thank you all.

Grbl doesn’t officially support the rambo. There is a grbl 5x fork that comes close and a grbl for rambo fork of that. It doesn’t have many users so it isn’t bug free.

Marlin supports a lot of boards. A lot of us are very familiar with it. It is easy to ignore the 3D printing stuff. Marlin supports screens. There isn’t much grbl can do that Marlin can’t. The gap is closing on both sides though as the new serial tft screens are out and new boards are coming out for grbl. Some of it is also now momentum.

1 Like

Do you feel like you are missing anything? What else could you hope for in a firmware?

Marlin in my opinion is the best all around without missing anything, the most supported boards, features, extremely open and active firmware that is moving fast. The only hiccup we have had was laser stuff, but that might be mostly fixed at this point, not sure anyone has really put it through it’s paces lately.

Remember, this is not just a CNC Router, it is a platform. Doing my best to keep it open to most hardware and electronics and easy to use for most any application…including very specific boards and uses.


I don’t feel like Marlin is missing anything. I was just wondering. I have yet to finish assembling my Primo w the kit I got from you so I haven really used Marlin for milling. Its slow moving with a kindergartener, lol.

I just tested my electronics/wiring and took a look through the menu options and realized there are many 3d printing features that I won’t need on this. I like that I have the option of using my Primo as a 3d printer, for now I’d like it to just be for milling and the 3d printing options seem to be visually cumbersome.

I plan to test cncjs with, and without, Octoprint on a dedicated Pi or mini PC running Linux. Not sure how Octoprint works with milling as its great for 3d printing.

Here is my random wishlist of things I’d like for my Primo. Maybe I just don’t know if Marlin supports them already:

  • I have this laser on the way so I’d like to be able to use it
  • I’d love to control using a DIY pendant similar to this to this that can:
  1. Use a joystick for big moves on all axis
  2. use a handwheel to dial in smaller moves with axis selector and speed per move selector
  3. have an auto-square button
  4. have a button to start/stop job
  5. Control of the spindle speed during the milling process (I’ll be using a DWP611)
  6. button for spindle on/off
  7. Control of the feed rate during the milling process
  8. future option to enable/disable laser

I’m also still figuring out what software I’ll be using for toolpath generation and g-code sending. I’m looking at:

  • Etslcam
  • Fusion 360
  • vCarve
  • universal g-code sender
  • repetier host
  • octoprint

I am totally open to adjusting my software workflow. I’d like to get started on something that will allow me to do the above wishlist without needing to purchase another control board. I have a lot of experience wiring up mechanical keyboards and using Pro Micros and ESP32s. Just don’t understand firmware as much.

Any thoughts on any of the above are welcome and I can’t wait to start making chips!!! Thanks Ryan and Jeff and this awesome community!!!

1 Like

If you’re willing to do a lot of that slightly differently, the tft screen can handle most of that. Not dedicated buttons, but start so job, laser settings, feedrates, homing (auto square).

There isn’t any reason you have to get all of that working out of the box either. The learning curve is big. It is valuable to just experience it and see what works best for your workflow. Not having a joystick is NBD if you have something like cncjs. It is very easy to send it 300mm in one direction with one button press.

1 Like
  1. Use a joystick for big moves on all axis

For a joystick with Marlin, you have two choices. First you can use “dumb” solution that is directly wired into the Rambo board and managed by Marlin. See here. I though I read a post recently where Jamie’s code was folded into the official Marlin release, but I’m not sure. The second choice is manage the joystick with another board and then inject g-code through the serial port on the Rambo board. I made the second choice and use a Arduino Nano. Note that g-code, including the g-code injected through the serial port, go into a queue, so I had to play games with breaking larger moves down into smaller ones and sending moves over time in order to get something that was responsive and stopped immediately.

  1. use a handwheel to dial in smaller moves with axis selector and speed per move selector
  2. have an auto-square button
  3. have a button to start/stop job

If you are injecting g-code and are comfortable with coding for the boards you mention, then these become easy, though you still have to be aware of the command queue. There is an emergency parser that can be enabled in Marlin so that a stop happens immediately.

button for spindle on/off

I went a different way. I purchased an IOT Relay for my router. The relay can be connected to the fan pin on the Rambo board so that the router can be turned on/off using g-code. So my g-code cutting files turns the router on/off automatically. And since it is ‘just’ g-code, my pendant can also turn the router on/off.

But apart from turning the router on/off for cutting, I advise you to have a big red button that kills everything. With an IOT relay, you can make the switch only deal with 12V. Killing the power to the Rambo board will almost certainly kill the power to IOT relay and therefore the router. Without the relay, you likely will need the switch to kill a MAINS powered power strip that powers both the router and the Rambo board.

Control of the spindle speed during the milling process (I’ll be using a DWP611)

Unless you make major modifications to the router, you will need to pause the cutting, rotate the dial on the router, then resume cutting Alternately you could use an external speed controller instead of the dial on the router, but I expect you would lose far more torque than if you made the change on the router.

Control of the feed rate during the milling process

I’ve not used it, but you should be able to inject an M220 to adjust the feedrate percentage.

1 Like

FWIW, the integrated joystick is far from dumb and actually is very responsive. It does some good things to keep the planner full, so it goes full speed, but not overful, so it stops pretty fast.

1 Like

That is good to know. Getting a joystick working reasonably well by inject g-code was a pain. I didn’t see Jamie’s post on Marlin joystick code until after I had my joystick working. I assume from your comment, that the joystick code made it into the official Marlin release or is it only available in a fork?

I’m pretty sure it’s in the main code. It is buried in the configuration adv, and it takes some iterations to set it right, but it seems to work well for the few that have tried it.

Based on your wish list you might want to consider Grbl_Esp32. It has a few features that might be useful to you. Grbl is designed for subtractive milling and does a pretty good job of supporting standard g codes.

For example it supports G0 rapid moves and IMO does a better job with homing. Bart Dring’s implementation of auto squaring is very good and allows code to be restarted and return to position even after power down. Also G28 can be used as a machine specific park position and G31 can be used for another machine specific tool change position. Most of the CAM software you mention has a well developed grbl post processor. Finally as long as you don’t need spindle control you can switch to laser mode without reloading the firmware. On the downside this forum provides excellent support for Marlin, less so for grbl.