- Active project
The machine is made from several different materials.
The frame is made out of 20x20 (2020) aluminium profile, and augmented with 18mm MDF. To support the X axis frame, two lengths of aluminium profile on each side sandwich a length of MDF, with MDF side panels holding it at right angles.
The Y axis (which is the bed) uses two 500mm lengths of 16mm round supported bar, and the bed itself is made from 12x 600mm lengths of 2020 aluminium profile, that are tied together with four 240mm lengths of aluminium right-angle, with a pair on each side sandwiching another 240mm length of 2020 aluminium profile.
My original plan of using a pair of ACME screws was limited by the mechanics of ony using one motor (I had some right angle gears, but the backlash was too much) - so I changed it to a single ACME screw running down the centre.
The attachment of the motor to the frame, and the ACME screw to the bed using 3D printed components.
The X axis uses two 700mm lengths of 16mm round supported bar, with the X carriage made using an A5 piece of 5mm perspex, drilled using the 3rd CNC machine. Like the Y axis, the motor mount and ACME screw to carriage mount were 3D printed. Due to its size, it is quite fiddly!
The Z axis uses two 300mm lengths of 8mm round unsupported bar, with a 3mm aluminium plate holding the spindle mechanism. The motor mount is made from right angle aluminium and 18mm MDF, but like the other axes, the screw to carriage was 3D printed
Unlike my previous machines, I decided to add in some end limit stops so the machine can self-home. This will hopefully mean I don't need to fit the camera for drilling PCBs (but it will involve having a lot of faith that it'll be aligned properly each and every time)
I had started adding these to the third machine, but its size made it tricky.
Each of the microswitches are mounted on 3D printed block.
I also bought a PCB that functions as the Z-probe. This can be moved to different points around the bed, with a 3D printed holder in 6 different positions.
In order to drive it, I elected to use grbl installed on an Arduino Nano. This is installed on a custom carrier PCB that has 3.81mm connectors for each of the axes' stepper driver connectors. This is used for the end stops, and also the spindle mechanism.
The case is a Schroff nVent 3U rack-mount case that is supplied flat-pack. Since the CNC machine can't make parts for itself, I had to drill and file all of the holes myself - so they're not perfect!
It needs to hold the power supply, stepper drivers, spindle driver and grbl controller.
I stuck on warning stickers to everything that could have a high voltage supply inside it. Bits of this are nicht fur der gerfingerpoken.
The electronics and stepper drivers are powered by a 240V to 24V DC power supply.
The carrier board simply exposes the connections to the connectors through transistors, which then goes to the stepper drivers. From the stepper drivers, 4-core cable is soldered to 4-pin XLR connectors on the front panel. Each connector is colour coded so it is easy to identfy which one needs to be plugged into the relevant axis driver.
End limit switches
The end limit switches are simple phono connectors on the case. The external wires are cable tied to their respective XLR connection cable, so, again, it's easy to marry the axis end stop to the axis itself.
Since the spindle driver uses a voltage from 0V to 10V to convert from 0 to 100V, I initially used a simple op-amp with a capacitor/resistor filter to convert the PWM signal to the voltage. A trimmer potentiometer is used to ensure that at 100% PWM, the output voltage is 10V.
Unfortunately, even at 0 PWM (which should, and did, give a voltage of 0), the spindle would eventually start moving at a slow speed, being driven by about 1V. I then added a relay inside the electronics that explicitly pulls down the output voltage to 0V in the absence of a PWM signal. A small microcontroller performs the operation of checking the PWM (I could've used something like a 555 timer, but the microcontroller is much more flexible).
This still didn't work, so I added an external relay that disconnects the 100V output from the motor. This fixed it, but it's a bit annoying that the motor driver doesn't like 0V.
Grbl controller schematics
The schematics to the Nano Controller 2 (as I've called it) is available here.
This is simply part of the hierarchical structure within Altium - it joins the two blocks together.
This is the main Arduino Nano holder, and also the transistor drivers for each of the stepper direction, enable and step signals (Q1-Q9).
A 4-pack resistor pack (RP1) is used to explicitly pull-up the limit switches, and a capacitor is used to smooth each of the signals (C1-4).
Q13 is a signal to the microcontroller that the Nano is powered up (from the USB power)
Sheet 3 is the power supply, and the PWM conversion circuit.
U4 is the dual-channel op-amp, with U4A being the PWM to a 0-5V smoothing circuit, and U4B upping the voltage to 10V, controlled by R10.
Q12 informs the microcontroller (U5) that the PWM signal is present, and this in turn triggers Q10 that drives both the explicit set-to-0V relay and the external 24V relay for the 100V signal.
U2 and U3 are internal power supplies, U2 providing 5V for the microcontroller, and U3 providing 12V for the op-amp and internal 12V relay.
Before I'd even milled its first item, I'd decided I didn't like the ACME screws on the X and Y axes, and changed them to identical lengths of ball screws. This necessitated the re-design of the 3D components as the ball screw mounting blocks held the screws at a different distance than the ACME screws.
It also solved an annoyance that I had in that the Y axis had a 4mm thread, whilst the X axis had a 2mm thread, meaning that it was able to move twice as fast in the Y axis than the X. It now uses 5mm thread for X and Y axes (Z remains at 4mm).