BIG NEWS!
With a lot of help from @Les_Newell , sheetcam now has a G93 Inverse Time Feedrate Mode that is implemented in a post processor ! This means anyone experiencing the pesky feedrate inaccuracy on rotary jobs, G93 feedrate mode is the the universally understood feedrate mode in all controllers that support G93. Most do, for this very reason.
The problem, if you haven’t experienced it, is that coordinated linear (XYorZ) and angular (ABorC) motion feedrate can be interpreted in least 3 different units per min by a controller when gcode is operating in G94 distance/time feedrate mode, usually the default. Coordinated motion is what occurs when more than 1 axis is in motion simultaneously. The axes will ‘coordinate’ speed such that the control point (cutting bit) starts and ends with all axes in motion that are named in the gcode line (motion block). Since angular (rotary axes) are usually configured in degrees per min, and linear axes in mm per min, then what speed is F100 in this gcode line G01 X10 A5 F100 ?
The NIST spec for gcode interpreter states that in linear-angular motion blocks the feedrate is to be interpreted as linear, when in G94 distance/time feedrate mode. Not surprisingly, the LinuxCNC doc states the same. Not all controllers abide by the spec though. Sheetcam was designed and built perhaps before this spec was adopted by NIST, I’m not sure. Sheetcam and Mach 3/4 are aligned. Sheetcam and various grbl interpreters are not. Others I can’t say, there is a 1 in 3 chance.
The fix: use G93 Inverse Time Feedrate mode. Not all CAM sw has the option to produce gcode in G93 feedrate. Sheetcam does NOW with post processor custom code performing some clever math mojo, very specific to how Sheetcam calculates the G94 feedrate of linear-angular motion, not all CAMs do it that way either. The good news is that G93 mode makes right or wrong per a spec irrelevant, so we don’t need to go there.
The pp attached here implements rotary motion with the option to use G93 feedrate mode. The code to implement G93 is not scattered, see the function WriteFeed() and the few places it is used and supporting variables, you should be able to lift and drop into your pp if need be. I’m going to open a linked thread about G93 feedrate mode if you have questions, would rather not clutter up this thread as it will continue to have new versions of the pp for example and template use purposes.