Large OX CNC belt driven laser cutter

  • I've built a large Makerstore OX CNC router/laser cutter which uses GT2 3mm belts and NEMA23 motors (dual Y motors). The steps per mm is not some round figure due to the nature of the belts and how they need to be tightened. Below is the current relevant settings I am using -

    M350 X16 Y16:16 U16 Z64 E64 I1 ; Configure microstepping with interpolation M350 X64 Y64:64 U64 Z64 E64 I1
    M92 X53.378 Y53.384:53.354 U53.354 Z1600 E420 ; Set steps per mm Yfar:near
    M566 X700 Y700:700 U700 Z900 E900 ; Set maximum instantaneous speed changes (mm/min)
    M203 X20000 Y20000:20000 U20000 Z9000 E9000 ; Set maximum speeds (mm/min)
    M201 X400 Y400:400 U400 Z400 E1200 ; Set accelerations (mm/s^2)
    M906 X2200 Y2000:2000 U2000 Z2000 E2 I25 ; Set motor currents (mA) and motor idle factor in per cent

    What I'm puzzled about is why I'm getting a cross hatched pattern when I laser engrave any surface? It's like the motion has notches which dwell in those positions long enough for the laser to cut a fraction deeper? The head sweeps left and right on the X axis and steps on the Y axis on each X pass, adjusting the laser power to create the 3D relief.


    This is the motor used on the OX CNC -


    And this is the belt setup -


    A sample of the G-code I use for the laser etching (power set to max of 100/255 and X/Y steps set to match steps / mm of each axis, laser focus at top surface) -

    ; line 0
    G0 Y10.9018
    G1 X40.7284 S100
    G1 X40.7471 S94
    G1 X40.7659 S75
    G1 X40.7846 S50
    G1 X40.8033 S25
    G1 X40.8221 S7
    G0 X42.2271
    G1 X42.2459 S7
    G1 X42.2646 S25
    G1 X42.2833 S50
    G1 X42.3021 S75
    G1 X42.3208 S94
    G1 X51.4069 S100
    ; line 1
    G0 Y10.8831
    G1 X42.3208 S100
    G1 X42.3021 S94
    G1 X42.2833 S75
    G1 X42.2646 S50
    G1 X42.2459 S25
    G1 X42.2271 S6
    G0 X40.8221
    G1 X40.8033 S6
    G1 X40.7846 S25
    G1 X40.7659 S50
    G1 X40.7471 S75
    G1 X40.7284 S94
    G1 X0.0000 S100
    ; line 2
    G0 Y10.8643
    G1 X40.7284 S100
    G1 X40.7471 S94
    G1 X40.7659 S75
    G1 X40.7846 S50
    G1 X40.8033 S25
    G1 X40.8221 S6
    G0 X42.2271
    G1 X42.2459 S6
    G1 X42.2646 S25
    G1 X42.2833 S50
    G1 X42.3021 S75
    G1 X42.3208 S94
    G1 X51.4069 S100

    If anyone has any ideas what I can do to get a smoother surface I'm all ears?

  • I would reduce the speed at which the laser moves and see if the pattern shrinks.

    I think that it may be the laser driver that pulses the laser too slow for the speed you are running at. Typically, it seems, the laser modules are driven either on and off, like PWM instead of adjusting the voltage over the laser.

    How are the laser set up?

    Another possible cause can be trying to go too fast on the maximum speeds - if the Duet struggles to send enough stepping pulses, the next few pulses might get delayed slightly, and the laser will dwell until it is moved again.

  • administrators

    My guess is that the pattern interval is related to either the belt tooth pitch (but I suspect it is too fine for that), or the stepper motor full step size, or the laser PWM frequency as @Jacotheron suggests. If it's the laser PWM frequency then the pitch will be proportional to speed; but if it's either of the other causes then the pitch will be independent of speed.

  • Thanks for the suggestions. Unfortunately going slower made no difference to the size of the grid so it looks more like something mechanical with the stepper motion. The PWM is set to 3kHz and moving at 600mm/min should not show a pattern big enough to see. I originally had it set to 200Hz and I had exactly the same pattern.

    Seeing that the stepper motors and drive mechanics are much the same on both X and Y it really is pointing to the motion of the steppers. The only observable stuttering of the motion seems to be when the G-Code issues a G0 rapid move over the areas of the etch where the laser does not need to cut. The base of the cut areas are not multiple G1 motions but rather a single G1 call to the next change in PWM laser strength so there are not a large number of G-Code lines for the Duet to process. I even tried the M400 at the end of each pass to see if that had any bearing on smoothing the motion.

    I searched the web for NEMA23's that do 0.9deg steps and are happy to run at 24V but no luck so far. Also starting to wonder if I should use some of those servo motor systems which are just a stepper with an encoder to track position and regulate current based on load?

    Set at 16 with interpolation with the current motors/pinion sizes yields a low step/mm value so any smoothing of the motion is reliant on the interpolation in the driver. Tempted to test with interpolation off and set at 256 to increase steps/mm to see if the motion is any smoother? Either way it would be interesting to see if the grid pattern changes?

  • Also thinking of lowering the amps in the settings to see if that helps? Might also play with the jerk and acc. values? Surely I can tune these steppers to play nice?

  • I would program a very slow move so that the steps can be heard as a fast ticking sound and see if they are regular or if there as some missing beats. With much older drivers there can be a problem with them not being able to achieve low enough currents for the parts of the sin wave close to zero. See

    If this is the case then increasing the current, lowering the supply voltage or reducing the microsteps will help.

  • administrators

    @jgrouse said in Large OX CNC belt driven laser cutter:

    Unfortunately going slower made no difference to the size of the grid so it looks more like something mechanical with the stepper motion.

    What is the pitch of the banding, what is your X steps/mm, and what microstepping are you using? You may find that the pitch corresponds to one motor full step, or something like that. I've heard that Nema 23 motors tend to do less accurate microstepping than nema 17 motors, because they are typically optimised for torque rather than microstepping accuracy.

    I searched the web for NEMA23's that do 0.9deg steps and are happy to run at 24V but no luck so far.

    Ignore the voltage given in stepper motor specifications, it's the current rating that matters because the Duet (like all modern motion controllers) uses constant current stepper drivers. This one can be driven by a Duet WiFi/Ethernet:

  • @dc42 - all the relevant settings you are asking about are in my original post at the top. The belts are GT2 3mm pitch (better tooth size than the regular 2mm pitch). 16 steps on the X axis with my current settings would travel 0.3 of a mm (53.378 steps/mm). 160.134 steps would hit 3mm.

    I'm assuming the CO2 lasers out there do something different when they sweep back and forth on the X axis quickly and switch the laser at a great rate? Faster controllers?

    Will look into that NEMA23 you linked to see if it is any better than what I was supplied?

    Thanks again!

  • administrators

    You've give the machine settings in your first post, but I don't think you've told us what the pitch of the banding is, or whether it varies with feed rate.

    Another likely possibility is that the laser controller is ignoring the PWM frequency you are giving it, and instead smoothing the PWM and using its own PWM frequency. Switching high voltage power to a CO2 laser at high speeds isn't easy.

  • @jgrouse said in Large OX CNC belt driven laser cutter:

    The belts are GT2 3mm pitch

    Is that what you were asking or are you asking what the spacing is on the grid pattern on the cut surfaces? Will measure in the morning with a caliper. I mentioned earlier that it does not vary with feed speed.

    Laser is definitely going at 3kHz as you can hear the audible difference compared to running it at 1kHz and 200Hz (sound of the material being ablated). It's also not a CO2 laser, it is a 6W blue laser diode (NUBM44) with a Blackbuck 8M driver running from a filtered 12V DC source. 5V PWM pads can also take analog voltages from a trim pot.

    Tested using 1/8 stepping with interpolation just on the X axis and apart from the motor being noisier it actually looks like the vertical banding is gone. Will test some more in the morning burning at various feed speeds.

  • administrators

    Yes, I meant the pitch of the banding in the engraved/cut piece.

    It's odd that it's better with x8 microstepping. The drivers on the Duet WiFi/Ethernet only support interpolation at x16 microstepping. You might want to try x16 without interpolation, or x32.

  • nophead suggested lowering the microsteps which puzzled me however it did seem to do the trick. Not happy about 26.666 steps/mm for resolution though. Will also try 32 and 64 in the morning (11pm here now).

  • @dc42 Interpolation won't help if it can't achieve a low enough current for the microsteps near the crossing point due to the minimum on time, max off time, supply voltage and inductance. Or if the ripple current creates a big enough offset to distort at the crossing point.

    The motor has a resistance of 1R2 and inductance 4mH. Current setting seems to be 2.2A for X. Is that peak?

    I have no idea what mode the drivers are in as I have never run my Duet. Section 9.2 of the TMC2660 datasheet talks about tuning an offset for smooth zero crossing. Basically you can't just connect a random motor and expect it to be smooth motion. Does the firmware allow all these parameters to be tuned? Excuse my ignorance of it.

  • administrators

    Hi @nophead,

    Section 9.2 of the data sheet refers to constant off-time mode. If using that mode then you do indeed need to tune the settings to suit the motor. However, the default mode is spreadCycle (see section 9.1), and in that mode the driver is largely able to determine the chopper settings for itself. The exception is that sometimes the TOFF value needs to be reduced to avoid the chopper frequency being audible.

    I don't think any of our users have ever reported getting the classic low-current-microstep issues that are frequently seen with DRV8825 drivers and less often with A4988 drivers.

    All the chopper control parameters can be set using the M569 command.

    The current set by M906 is peak. We chose peak because when we introduced the Duet WiFi, the standard way to talk about motor current using the drivers of the time (A4988, DRV8824 etc.) in 3D printers was to refer to peak current.

  • After some more testing it appears that the ridges are due to fluctuations in the laser power. If you look at the image below I sped up the job twice 2/3's down (X sweeps) and you can see the ridges spacing out.
    0_1541825902224_IMG_3954.jpg At 1000mm/min the ridges are about 0.62 mm apart. I worked out that a 50Hz hum in the power supply would give me ridges that are 0.333 mm ridge to ridge so this looks like something close to 25Hz? Here in AU all AC mains is 50Hz. I put a digital oscilloscope on the 12V source and it's extremely clean with no low frequencies on it. Only other source of grief could be the laser driver itself ("BlackBuck 8") or the PWM signal which is now set at 6kHz PWM frequency? I can't put a cap on the PWM to smooth it out as the sharp edges of 3D engraved shapes would end up tapered. I cannot imagine why any 50Hz hum would end up on the PWM? Perhaps the GND pin on the PWM is floating? Either way I will need to get the oscilloscope onto it and see what it is producing.
    Belts on the router are now doubled up with one in the base of the grove facing up and glued down to help dampen sudden moves. Last test was with the microstepping set to 256 for x and y (I0).
    Another passing thought is that the air assist is pulsing rather than being a constant stream. It most likely puts out a puff every second pulse from the 50Hz AC mains source? I did turn if off briefly in that engrave above which resulted in a few dark horizontal lines, but when flames started heading for the air nozzle I had to get it back on again. Might experiment with compressing the tank fully and then letting it out slowly with the pump off during the cut to see if that makes any difference?

  • No low frequencies on the PWM out of the Duet. Tried letting the air compressor fill and then ran with it off. Still had ridges. Quite a puzzle.

  • The bottom two ridges look exactly like a drive belt. Do you have the option to use a belt that has not been doubled up?

  • @ayudtee - The large CNC router I have was set up originally with single belts and I still had this issue. If it was belt related the pattern size would be consistent regardless of the feed speed. It just looks like either the laser driver is creating a 25Hz hum on the power output or the air compressor is creating a 25Hz puff rather than a constant stream. Interestingly if I lower the max power to 50/255 I don't get the ridges so possibly the BlackBuck 8M with the temp sensor fitted is doing some power regulation at 25Hz? Might try turning down the max amps and see what that does? Also posted this question on the Laser Pointers Forum to see if anyone has had this issue as well. Plenty of NUBM44 6W blue laser owners on there.

  • Just read up on the BlackBuck 8M laser driver and it states that running higher than 5V on the MOD input is not advisable. Looking at the Vmax of 5.12V that's exactly what is happening. Might put a 10k trim pot across the input to lower the max voltage of the PWM to just below 5V and see if the ripple vanishes? Unfortunately the pad on the board popped off when I went to remove the wire so now I have to wait for the replacement driver to arrive in the mail. Made in Russia so not sure how long postage takes to AU?

    Wish they made a slightly bigger version with larger pads on the board?

  • I'm also looking into driving the laser with an actual analogue signal rather than PWM which just blasts the laser a max power in varying pulses. The I2C MCP4725 DAC is a 10bit digital to analogue chip which can be sent M260 I2C commands to set the output voltage. Since I've written my own app to turn grey scale images to GCode I'll modify it to set the power before each G1.


Looks like your connection to Duet3D was lost, please wait while we try to reconnect.