Hi all,
I recently grilled the control board of a Nomad Pro 883 from Carbide3D we have at work and as they don't produce replacement parts often (apparently) I decided to go with a Duet 3 Mini 5+. It was also the occasion to make the router smarter and access its progress over wifi, add a LEDs strip and dream about future improvements ! Anyway the thing is now all patched up so it's a good time to share my config.
A few tips if you are trying to do the same:
- Be careful the phases are flipped on carbidemotion boards compared to the duets.
- The card might overheat (at least it does cutting through aluminium) so you will need a nice radiator block inside the electronic case or use a fan (what I did).
- The duet doesn't directly output what's needed for the three phases brushless motor of the Nomad. I used Carbide's McGuillicutty (the stock controller). To make it fit inside the electronic box I had to pierce and thread a new hole.
- The new Nomad 3 doesn't use the same motor/motor controller do you your own research to know what's needed in that case.
Config file
; Configuration file for Duet 3 Mini 5+ (firmware version 3.3)
; executed by the firmware on start-up
;
; generated by RepRapFirmware Configuration Tool v3.3.16 on Tue Oct 10 2023 09:38:06 GMT+0200 (heure d’été d’Europe centrale)
; General preferences
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves
M550 P"NomadPro" ; set printer name
; Network
M551 P"---------" ; set password
M552 S1 ; enable network
M586 P0 S1 ; enable HTTP
M586 P1 S0 ; disable FTP
M586 P2 S0 ; disable Telnet
; Drives
M569 P0.0 S0 ; physical drive 0.0 goes forwards
M569 P0.1 S1 ; physical drive 0.1 goes forwards
M569 P0.2 S1 ; physical drive 0.2 goes forwards
M584 X0.0 Y0.1 Z0.2 ; set drive mapping
M350 X8 Y8 Z8 I1 ; configure microstepping with interpolation
M92 X200.00 Y200.00 Z200.00 ; set steps per mm
M566 X900.00 Y900.00 Z900.00 ; set maximum instantaneous speed changes (mm/min)
M203 X5000.00 Y3000.00 Z1000 I1 ; set maximum speeds (mm/min)
M201 X500.00 Y500.00 Z200 ; set accelerations (mm/s^2)
M906 X2000 Y2000 Z2000 I80 ; set motor currents XYZ(mA) I(percent)
M84 S0 ; disable motor idle current reduction
M669 S5 ; segmentation of movements to permit faster pauses and screening
; Axis Limits
M208 X0 Y0 Z0 S1 ; set axis minima
M208 X240 Y225 Z98 S0 ; set axis maxima
; Endstops
M574 X2 S1 P"!^io0.in" ; configure switch-type (e.g. microswitch) endstop for low end on X via pin ^io0.in
M574 Y2 S1 P"!^io1.in" ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin ^io1.in
M574 Z2 S1 P"!^io2.in" ; configure switch-type (e.g. microswitch) endstop for high end on Z via pin ^io2.in
; Triggers
M950 J1 C"io5.in" ; binds io5.in to trigger #1
M581 P1 T0 S1 R0 ; triggers emergency stop on front button switch
; Z-Probe
M558 P5 C"!^io3.in" H5 F90 T6000 ; set Z probe type to switch and the dive height + speeds, first probe at 300mm/s, then 90mm/s
G31 P500 X0 Y0 Z0 ; set Z probe trigger value, offset and trigger height
; Heaters
M140 H-1 ; disable heated bed (overrides default heater mapping)
; Fans
M950 F1 C"out4" Q500 ; create fan 1 on pin out4 and set its frequency
M106 P1 S1 H-1 ; set fan 1 value. Thermostatic control is turned off (note used btw)
M950 F0 C"out3" Q500 ; create fan 0 on pin out3 and set its frequency
M308 S10 Y"mcu-temp" A"MCU" ; electronics temperature sensor on 10
M106 P0 H10 T50 ; sensors 10 (and 11) control fan 0 a PWM starts from 40C at 0 to 70C at 100
; Spindle
M950 R0 C"vfd" L10000 ; maximum rpm = 10000
M563 P0 S"Spindle" R0 ; define tool0
M563 P1 S"Spindle" R0 ; define tool1
M563 P2 S"Spindle" R0 ; define tool2
M563 P3 S"Spindle" R0 ; define tool3
M563 P4 S"Spindle" R0 ; define tool4
M563 P5 S"Spindle" R0 ; define tool5
M563 P6 S"Spindle" R0 ; define tool6
M563 P7 S"Spindle" R0 ; define tool7
M563 P8 S"Spindle" R0 ; define tool8
M563 P9 S"Spindle" R0 ; define tool9
M563 P10 S"Spindle" R0 ; define tool10
G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets
G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C
M453 ; enable CNC mode
; LED
M950 P0 C"out5" ; LED strip on OutPut 5
Tool probing macro
;probeTool.g
;
if state.currentTool == -1 ; if no tool is selected, select the 0th
T0 P0
if !move.axes[2].homed ; home what needs to be homed
G28 Z
if !move.axes[0].homed
G28 X
if !move.axes[1].homed ; even Y has to be homed if using G30
G28 Y
M5 ; stops spindle just in case
G53 G0 Z{move.axes[2].max} ; get high to avoid collision
G53 G0 X237.5 ; get above the bit setter
;G53 G0 Z35 ; dive to get close
M558 F1100 ; change probe speed
G30 S-2 ; probe fast
G0 Z3 ; rise up 3mm
M558 F60 ; change probe speed
G30 S-2 ; probe slow
G53 G0 Z{move.axes[2].max} ; get back up
Might need to move up more than 5mm depending on luck and descent speed...
Changing tool
This started to work as I was writing this entry so it hasn't be intensely tested. Stay by the CNC for your first time !
; tfree.g
if !move.axes[2].homed
G28 Z
else
G53 G1 Z{move.axes[2].max} ; lift tool high
M5 ; spindle off, should be automatic and already done but you never know
; tpre.g
if !move.axes[2].homed ; home what needs to be homed
G28 Z
if !move.axes[0].homed
G28 X
G53 G0 Z{move.axes[2].max} ; lift the tool
G53 G0 X{move.axes[0].max/2} ; parking position to easily change the tool
M291 P"Please change the tool and then press ok" R"Tool change" S3 ; message to wait for user action
M98 P"0:/macros/probeTool.g"
; tpost0.g
G53 G0 Z{move.axes[2].max} ;Sets tool to highest to avoid collisons
G0 R2 X0 Y0 ;Return to working XY coordinates
M3 ;Turn spindle on
G0 R2 Z1 ;Descend tool to working height +1mm
G1 R2 Z0 F30
EDIT: Added ten M563 commands to create new tools, tool changing had a bizarre behaviour before that (duh). Mind you only T0-10 are available in this setup.