Setting Up an LY Group CNC 3020 With Mach3

I purchased a 3020 CNC from a company called LY Group in China. I also ordered the 4th rotary axis and a 1.5kW water-cooled spindle with it. With shipping and import duties it came to about $1400 USD.

I think these machines get a bad rap on the internet for being cheaply made. In contrast to my 3018 CNC, the 3020 has solid stainless steel parts, great anti-backlash ballscrews and nuts, and other quality components.

The manufacturers claim 0.03mm accuracy. They sell machines up to the 90x60 range and I feel like this 30x20 machine will have tighter resonant frequencies than its larger brothers because of its smaller size and water-cooled spindle. The gantry is also slightly larger than 30x20 and has extra room on its sides for clamping. Overall it has a very solid functional feel but without the branding, polish and finish that Western CNC kit makers tend to put on their parts.

This unit has the USB control board inside the control box with the VFD and stepper controllers. My controller PC is an older AMD Phenom 6-core and doesn’t have a parallel port. I believe the device is a BL-UsbMach control board, version 2.2. I got this by examining the board and comparing with internet photos, but also later on from the BL-UsbMach plugin driver itself (see below.)

In time I can see myself replacing the USB control board and pport control board (which really just hosts the stepper drivers and probe pins). I have a vague idea of implementing a controller based on the Raspberry Pi 4, but that will be a project for another summer.

The sales associate from LY Group was very polite and helpful. He sent me links with 7 files:

installation instructions.txt
LYCNC-Mach3-manual.pdf
Mach1Lic.dat
Mach3Mill.xml
Mach3Version3.043.066.exe
ShuttlePro.dll
UsbMach-V3.dll

The manual was also specific to the parallel port version and offers pin/port assignments for Mach3, but these aren’t entered manually as the plugin is doing most of the control.

I also didn’t use the version of Mach3 (3.043.066) that the vendor provided. Instead I downloaded the latest version.

The instructions were mostly in Chinese and this is not a language I understand, but I was able to get things working by copying to the following folders:

Mach1Lic.dat -> C:\Mach3
Mach3Mill.xml -> C:\Mach3
UsbMach-V3.dll -> C:\Mach3\Plugins
ShuttlePro.dll -> C:\Mach3\Plugins

In retrospect it seems trivial to put them in these locations, but as a Mach3 newbie I had to spend a couple of hours sorting through forum posts to get here:

When you start Mach3 it will ask you if you want to use the BL-UsbMach driver (2.2 in my case). This channels my device rather than the parallel port.

The plugin options are really limited – basically you can choose your sampling rate. I left mine at 65khz.

One flaw of the driver is that limit overrides don’t seem to work. Once an axis hits a limit switch, it seems to put the entire machine in an E-stop that doesn’t exit until you back the machine off manually. There doesn’t seem to be a way to back it off electronically. I use the axis knobs to manually full-step the axis away from the switch. This means that referencing is not very precise. I’d like to improve on this later with some code. It seems like a pushbutton homing procedure with back-offs would be quite useful.

It’s ready to start making parts. I just need to read a little more of the Mach3 user’s manual before I feel comfortable setting fixtures and making a run.



FreeCAD: Use a ShapeBinder to Communicate Details From One PartBody to Another

I used FreeCAD to model some stepper motor parts so that I can place them into a larger mechanical design.

The Part Design workbench lets me model basic solid parts. A single non-decomposable object like this 28BYJ-48 Stepper usually goes into a file as a single PartBody that I can reuse and instantiate in larger assemblies and in other files.

The intention of having a single solid part is that it can be used to carve out pockets within other solid structures
and that these pockets can be milled straight out of stock.

This makes it easy to create the appropriate mating surfaces for any static fixtures that need to have a rigid attachment
to the stepper.

One issue however is that a given part often has related “pocket” areas that define certain clearances around the part itself. For example, this stepper has a 5-wire cable that extends out of the top of the device. If I were to create a mechanical fixture to hold this stepper, there’s a chance that the fixture would obscure the port that the cable comes out of.

Read More



STM32 Stepper Motor Controller

This week I built a small controller for a unipolar stepper motor.

I’d like to use these steppers in a robotics project of some kind. They only draw 600mA and run on 5V power. There’s also a builtin gear reducer inside.

They move slowly (<60rpm) but produce pretty decent torque. This is perfect for a small robot arm.

I used STM32 CubeMX to generate a project and SW4STM32 as my toolchain. This was exciting as it’s the first STM32 project I’ve completed apart from the usual “blinking LED”.

Next I need to look at designing some mechanical segments to join several of these steppers together.



New Blog

This little space is where I’ll document my solutions to technical problems that I encounter while working with my computer.