LinuxCNC is a great CNC controller, but I’ve encountered a few gotchas that I didn’t with Mach3. While the behavior is well documented by LinuxCNC, there is a lot of material to go through, I’m sure that I would not have understand what I was reading without first encountering some of the gotchas.

One of these gotchas is that LinuxCNC, by default, attempts to maintain velocity of the tool. If the acceleration values are set too low or the tool is moving fast, LinuxCNC may have to round a sharp corner. This is called Path Blending and is controlled by G64. There is another mode, Exact Path Mode, controlled by G61, which requires that LinuxCNC visit each point exactly, even if the tool has to temporarily stop.

G61 was a great quick fix, but the LinuxCNC folks know what they are doing and if they set G64 as the default they had a reason. Also, requiring the hard edges of G61 is probably optimistic, and the smooth motion of G64 makes a lot of sense. As a compromise, I’m using G64 0.001 0.001. This allows for some corner rounding but very little.

The LinuxCNC documentation recommends explicitly adding your G61 or G64 configuration to the preamble of NC files. I don’t know how to do this in Fusion360 yet. The post processor script is pretty intimidating. So, for now, I have an init.nc file that I run on start-up of LinuxCNC to configure preferred settings and return the mill to known state.

My mill is a PM25MV and is similar in size to the G0704. I used fairly small motors for the CNC conversion, but it can run faster than I can think, so I tend to try to keep feed rate down. Also, with fast acceleration rates, the entire mill shakes. Until I have more experience to experiment with alternatives (different G64 parameters and faster accelerations), I’ll use the G64 with tight settings. I tried increasing the acceleration but started to have “joint follow” errors with the Pico Systems Universal Stepper Controller card. It’s far more annoying to have a NC program randomly and without reason fault in the middle of a run than to have the program take a little longer to run.

Additional references:
LinuxCNC g-code descriptions
LinuxCNC trajectory control