Configuring RepRapFirmware for a CNC machine
To configure RepRapFirmware for a CNC machine, follow the instructions for configuring RepRapFirmware for a 3D printer using the same architecture (e.g. Cartesian), ignoring anything to do with extruders. You still need to define at least one tool using M563, but it can have zero associated heaters and zero extruder drives.
To put the firmware in CNC mode and tell it which outputs to use for spindle motor control, use the M453 command.
If you are going to use work offsets, by ending the config.g file with a G54 command, those will be used by default. To modify the offsets use G10 L2 P1 or G10 L20 P1 commands.
The pause.g file should be changed to ensure that the spindle does not come into contact with the work piece by lifting to the maximum Z travel.
Below is an example of a pause script.
G1 Z195 F360 ; Lift Z to 5mm below the Z maximum M5 ; Turn off the spindle G4 S10 ; Wait for the spindle to stop G1 X0 Y0 F6000 ; Go to X=0 Y=0
The resume script should also be modified.
M3 R1 ; Restore the spindle speed from before the pause G4 S10 ; Wait for the spindle the get up to speed G1 R1 X0 Y0 ; Go back to the last cut move X y Position - avoiding items on the spoilboard G1 R1 X0 Y0 Z5 F6000 ; Go to 5mm above position of the last cut move
When a job is paused the coordinates and spindle RPM are saved to slot 1 automatically
Be sure that the stop.g file exists. Otherwise pausing a job will also disable the stepper drivers and the machine would need to be homed again.
Differences in firmware behaviour between CNC mode and FDM mode
- In CNC mode, G0 moves always happen at maximum speed
- In CNC mode, round brackets in a line are treated as enclosing comments. This means that if you use expressions in GCode, if you use round brackets within expressions then the whole expression must be enclosed in { }. This would normally be the case anyway when using expressions as parameters to regular GCode commands, so this only affects the use of round brackets in GCode meta commands such as if, while, var, global, echo and so on.
- In CNC mode, if a line of GCode does not begin with G or M (after skipping N and the line number, if present) but the previous command was G0 or G1, then the line is taken to be another G0 or G1 command.
Using specialised Gcodes
Many CNC machines and CNC gcode generators use specialised, or non-standard Gcodes to perform certain functions. A list of currently supported Gcodes is HERE, and a list of Gcodes NOT supported is HERE.
In RepRapFirmware 2.03 and later, if you try to execute a G- or M-command that RRF does not implement, it will execute a system macro of that name if it exists. For example, if you send G40 then it will execute /sys/G40.g if it exists; and if you send M48 then it will execute /sys/M48.g if it exists. So you can script any custom Gcodes that you need. See https://forum.duet3d.com/topic/14930/m7-... for an example.
Movement in Inches
If your CNC machine and Gcode work in inches then see the documentation for [G20].
See this forum thread for a more detailed discussion.
Connecting a spindle
Most CNC Variable Frequency Drives (VFD) expect a 0 to 10V variable voltage to control the spindle. The Duet outputs a PWM signal, so you will need a PWM to analog converter. There are 2 sorts of PWM to analog converter widely available, as shown here:
The ones with the square blue PCB have a design flaw (uses an opt isolator, but the input and output grounds are connected together) and should be avoided because (a) they are more difficult to drive from some Duets, and (b) sharing a direct ground connection between a Duet and a high powered brushless motor controller is a bad idea.
So the green sort with the 6-pin pluggable terminal block is the one to use. They have a jumper to select either 5V or 24V input. On the back it says you can use 4.3V to 24V PWM input.
Here are some ways to connect them to a Duet:
1. To a heater or fan output (don't choose FAN1 on a Duet 2 because it defaults to being on). Connect the PWMIN+ input of the converter to the +ve pin of the Duet heater or fan connector (usually labelled VIN or VFAN on the Duet). Connect the PWMIN- pin to the negative pin of the Duet heater or fan output, usually labelled Fan- or Heater- on the Duet. Set the jumper to 24V.
2. To the VFD/LASER output of a Duet 3 or 3 Mini. Connect the PWMIN+ to the OUT pin of the Duet VFD/LASER connector, and PWMIN- to the GND pin of the Duet. Set the jumper to 5V. (edited)
3. The following MIGHT work on a Duet 2 if you have no spare heater or fan outputs. Connect PWMIN+ to +3.3V on the Duet expansion connector, and connect PWMIN- to one of the EnHEAT pins of the expansion connector for some n. Set the jumper to 5V. This only drives the converter with 3.3V.
If #3 doesn't work due to insufficient voltage input from the Duet, try removing the jumper and instead connecting a resistor of about 150 ohms between these two pins.
Don't use this scheme with more than 5V input, because it bypasses the input reverse polarity protection.
Connecting a CNC pendant
Readily-available CNC Pendants can be converted for use with Duet and RRF: CNC Pendant
4 Comments
vfd wiring and firmware config? out9? tried some code but still doesnt turn on????
jason lipavsky - Reply
How about the configuration for the X-Y Linear Rail Systems as in this site ( https://www.3dprintersonlinestore.com/fo... )? Is there documentation and support for this?
william verne - Reply
Looks like a CoreXY system (which can be configured in Duet3D).
Remo Pini -
How about delta configuration CNC machine? Is there documentation and support for this?
duboko - Reply