Tuesday, 2 May 2017

UCCNC probing screen and macros

The flash adapters I am making demand a pretty complicated 3D milling. It may not look complicated to everyone, but each adapter is milled and/or drilled on five of the six sides, must be turned around several times and accuracy is very critical. To be able to turn around the same work piece several times during the milling and drilling process, as well as changing tools requires a number of setting changes on all three axes.

To be able to use UCCNC and almost fully move away from Mach3 I needed to create a number of probing macros. Mach3 uses Visual Basic and UCCNC uses C#, so all the macros had to be rewritten for UCCNC.

To make the macros more user friendly and not have to type in the macro file name every time I created a folder and buttons. This way I get direct access to the macros I frequently use.

Also added to the folder two user fields, one for the probe diameter and the other for the plate thickness values. These two parameters are used by most of the macros, so they are global values. Note that this functionality was not supported by UCCNC before version 1.2037 so my macros and screen requires at least this version.

The new PROBE folder 

In UCCNC there is a simple CAM which I don't find very useful. I decided to removed it and replaced with the PROBE folder. I kept most of the window layout but changed the field labels and added buttons also for the offsets to be able to select which offset should get which probing result. Note that Z tool height is global, so all offsets are set to the value, regardless which offset is active at the time of probing Z.

Download and use as you like

If you are interested in having a look or using my screen, buttons and macros then you can download the zipped file from this link:


There is also a file describing how to install the screen and also a few ssf files for some of the controllers. Please download this file:


Follow the instructions carefully, otherwise the installation may fail and you may experience problems. Start with taking a backup of your screen file, in my case the Defaultscreenset.ssf file.

File contents

The MyProbeScreenset.zip file contains two folders, the MyProbeBMP with all the images and the MyProbeMacros folder with all the macro files necessary to run this function.

The MyProbeMacros folder contains ten probing macros, one for each button. These are commented inside the macro files. There is also the constructor macro. If you want to use my probing macros as they are, it is necessary to add those four lines to your constructor macro, otherwise the Plate thickness and Probe diameter fields will not be kept and updated after each start of UCCNC. Copy all the txt macro files into the folder where you have your UCCNC macro files for your configuration, for example \UCCNC\UCCNC_1_2037\Profiles\Macro_Myprofile folder.

The MyProbeBMP folder contains all the bitmap images necessary for the PROBE folder window to appear in UCCNC. Copy all the files into your UCCNC installation BMP folder, for example the \UCCNC\UCCNC_1_2037\Flashscreen\BMP\Defaultscreenset folder.

Also included some screenset.ssf, files for a few controllers. If you have never made any changes to your screens, you could just replace the contents of your controllers screenset with the one included and off you go, using my new screen. Note that you should not just rename the included file and call it Defaultscreenset.ssf because that will eventually lock UCCNC and crash the application. Follow the instructions below. Note also that the CAM will no longer be available after installation. Take a backup of your Defaultscreenset.ssf file before making changes.

Quick installation of the ssf file

Included you will find some ssf files for a few UCCNC motion controllers. If you find you model you can just open your user ssf file, for example the Defaultscreenset.ssf file, find the region for your controller, delete that section and place the contents of the section for your controller included here, for example the contents of UC300_5LPT_Defaultscreenset.ssf file, into the Defaultscreenset.ssf.
You can place it at the very end of the Defaultscreenset.ssf or at the beginning, or simply paste it after any //ENDREGION part in Defaultscreenset.ssf file UCCNC will find it at start. If the ssf file for your controller is not included here or you have made other changes in your own screen which you want to keep, then you have to follow the instructions below. Installing it this way is very fast, but it is not an automated process, takes maybe 5-10 minutes.

If your controller is not included

The second fasted option is to follow the Installing the Probe screen.txt installation manual. You will need to follow those instructions very carefully, letter for letter, otherwise you will/may end up with problems. The installation instructions have been tested many times, so if you carefully read and follow then after about 10-15 minutes you will have the Probe screen running.

Slow installation

The last and slowest way of installing is doing it through the screen editor. You need to add each image manually, using the UCCNC screen editor. This gives you the liberty to design your own layout if you wish to do that, but it takes a while. The screenset file is a simple text file, but unless you do it right, you might end up with trouble. I am not able to assist in this process or help out with the screen editor. Use and read the manual or contact CNC Drive support, or any of the discussion forums on the web if you have questions about the "how to..."

How to change some default parameters

The macro files have been created for my needs, so they may not suit yours. Also note that these files are written for metric units, so if you use imperial units then you MUST change in these files because the moves will be too fast and too large for imperial units. I will not be able to do all the changes, you have to fight your way through in that case.

However, I made a short video to demonstrate how to use the most complicated button and change the probing area for that button. Watch this and regard it as a demonstration and an instruction video.

A final note

This is offered in an "as is" basis. You are free to download, distribute, use or change it as you like. I cannot promise any support and no warranties are given. The macros work just fine for me in my installation, but I have no time in supporting it unless I have a need in doing a change or improvement for my own use. Please note also that I only tested with the UC300ETH_5LPT.

Saturday, 18 February 2017

CNC upgrade progress - Current status

DIY CNC is just another way of saying "work in progress". Work in progress because I make constant improvements when I have a new idea which I believe makes it better in some way. However, my DIY CNC upgrade is now as ready as planned plus some more, and the currently ongoing improvements are smaller and smaller, so it is worth to note the current status.

Materials used

The material used (mainly, but not a complete list) is 45x90 and 30x60 aluminium extruded profiles, 10mm, 12mm and 15mm thick aluminium plates, hundreds of stainless steel screws, T-nuts and bolts mainly in 5, 6 and 8mm diameters. The total weight is approximately 80-90kg, including wiring, motors and all the electronics and power supply.

Increased stability

The actual CNC is desktop size but has its own feet, not just placed on a table. Originally on industrial rubber wheels, these feet are now lowered to some wooden blocks to give maximum possible stability. Earlier it was just standing on four lockable rubber wheels for ease of moving around but the drawback is that this is only good as far as low speed and acceleration is used. At higher speed and acceleration the whole machine was shaking, even when those wheels were locked, and this cause some accuracy and vibration problems, so I decided to lower the machine on four wooden blocks, making it more stable and less prone to shaking. The rubber wheels are still there but to roll around the machine on them is now a bit more complicated because it must be lifted first to remove the blocks and lowered down to the wheels before it can be rolled. This solution is better and actually necessary due to the fact that the acceleration values I have now are much higher than before.

Speed and acceleration

The maximum values I can get now is 10,000mm/min speed and 900mm/s/s acceleration. On my fairly small machine I found this crazy and scary fast, so I backed off a bit and set only 8,000mm/min speed and 700mm/s/s acceleration. I am using the same on all the three axes, so even the Z moves up and down at that speed and acceleration.

Short technical summary

  • Footprint (total area it is occupying in the room): 750 x 650mm
  • Table height from floor: 890mm
  • Y table size: 450 x 300mm
  • Weight of Y: 17,5kg
  • Working area: 310 x 270mm
  • Weight of X-beam: 13,7kg
  • Size of the X-beam (height x width): 500 x 540mm
  • Size of Z: 350 x 150 mm
  • Weight of Z: 8.5kg (this is increased due to a different, longer and thicker Z plate I use now)
  • Z clearance from table top: 160mm
  • Maximum speed: 8000mm/min
  • Maximum acceleration: 700mm/s/s
  • Stepper motor data: NEMA23 2.7V/phase, 3A, 1.6uh, 0.9 Ohm/phase
  • Stepper motor driver: DQ542MA
  • Stepper drivers PSU: 44VDC unregulated supply, based on a toroidal transformer
  • Motion controller: UC300ETH
  • Spindle motor: 24,000 RPM 65mm diameter air cooled 1.5kW spindle
  • Spindle motor power supply: Bosch Rexroth EFC 5610 VFD
  • Spindle RPM control via Modbus communication
  • CNC software:  UCCNC from CNC Drive (a Hungarian company)

A never ending story

It was a long journey to get where I am now, but it was a very interesting and challenging one. Have a look on the right side, scroll down to "My CNC story" section to know more about it. The links in that section are pointing to previous posts about the progress, all the way from just a pile of aluminium to now with a fully functional nice machine, with both failures and successes documented and photographed. You will find not only textual information, but also many images and video films showing the machine in different stages and details.

However, this is not the end, since for me, DIY CNC means continuous changes and improvements so it is a never ending story, which will last as long as I find this hobby interesting.

Future improvement plans and other activities

This is just a short list of what I have in mind or working on for the moment. The progress is good, but I will not give out any details yet. Also, priorities may change as time goes by.


This is my own invention, or innovative solution if you want to call it that. It is a generic flash adapter for Nikon 1 V series cameras, allowing the camera to use standard flashes or radio triggers made for DSLR cameras. The very popular current version is called V2-F1A and of course the next one will be called V3-F1A or something similar. If you are interested in details, have a look on my blog. There are many posts about it. This innovative adapter was actually what started my DIY CNC project activity originally.

Anyway, follow this link for more details about this adapter:


Adding a 3D printer head

This is an idea I have but it is still early to say much about it. In my opinion it should be fairly easy to do it. My machine is now fast enough for the task but I have to look at it deeper. In any case, the Z is designed so that the spindle motor can easily be removed and replaced by a 3D printer head, or if I decide to do so, I could add the printer head by attaching it to the left side or the front of the spindle bracket, where I have a few drilled and tapped for optional accessory.

A high speed probe

Have all the macros written for this but need to develop the hardware and make a working prototype. I know how to do it and the work is started and the progress is good, but it is a parallel process and there are other things which pushed back the priority.

Shutter lag tester

This is a project connected to photography, not much to do with my DIY CNC except that like the V2-F1A adapter, my DIY CNC machine will be used for making it. I have a working prototype since several years which I have been using successfully but now it is time to make a commercial product out of it. This product is of interest for people and companies who technically test and validate cameras of different brand, either just out of interest or as a professional work. It measures the shutter lag with very high accuracy.

A new Z axis

In my opinion the Z can never be too good. I am happy with it right now, but I have several ideas about how to improve it even more. Never the less, it is very nice in my opinion and works well as it is.

A new X axis

This goes perhaps hand in hand with the Z axis. Maybe this is more important than the Z improvement. I think that if I can increase the rigidity of my X axis even more than my machine will be even more accurate and better, faster.

Replacing the steppers with servos

This is probably far off in the future, but would be fun to do it. I think that this change needs not only a simple replacement of necessary motors and drivers, but also improvement of the whole machine structure. I would be very disappointed if the huge increase in acceleration and speed could not be used fully because of structural issues, so the mass and the rigidity of the base, as well as the X beam, must go through a major upgrade before I invest in servo motors, but it is on my list of possible future improvements.

That's enough for now

I guess that the above, plus some other small things, will fill all my time for some years ahead. After all, this is just a hobby for me, and along with other hobbies and interests as well as a full time job and a family, it is enough for now.

Tuesday, 7 February 2017

The protective diode inside the V2-F1A

There is a protective diode inside the V2-F1A flash adapter. It's task is to protect the camera in case a user tries to attach a flash with high trigger voltage.

Can this diode cause a problem? Yes, in theory it can, but in reality it is very unlikely. Each individual adapter is made and assembled by myself. They are tested also by myself several times during the process of making and assembling, before they end up in the envelop for shipping.

Reversed diode

If the diode would be installed reversed because of a mistake then the tests would fail and no flash would be triggered on my desk, so the probability that a diode is reversed in a delivered adapter is zero, no question about that.

Broken diode

If the adapter would be exposed to extreme force so that the diode breaks than the adapter is crashed totally and it would be obvious that the adapter is useless in this case.

Bad soldering

If the soldering would for some reason loosen then the diode would get disconnected. In this case, the protection is no longer active as protection, but the adapter would work just fine, as long as the user is not connecting  a flash with high trigger voltage. If a flash with high trigger voltage would be connected to the adapter then the camera could get damaged without the diode, but a normal flash, made for digital cameras, would still work.

Damaged diode due to high voltage flash

If the diode is fully functional and a user would connect a flash with high trigger voltage than the diode would protect the camera from getting damaged but the flash would not fire. There is a slight possibility that the diode would get damaged in this case, even if my experience shows otherwise. When I experimented with the diode and a high voltage flash it never got damaged.

These experiments are documented on my blog in this post:


Note that I do not test each adapter with a high voltage flash because of the obvious risks of causing damage to the adapter or the flash. The above tests were only made as an experiment because another customer have reported problems, which later on turned out to be caused by the fact that he tried to use a flash which was a high trigger voltage flash.

Diode with unknown damage

In theory there is a possibility that a diode gets damaged at one stage, even if this is not likely.

It is easy to test the presence and the condition of the diode. Anyone with some very basic electronic knowledge and a simple multi-meter instrument with a diode measuring option can verify the diode is working or not.

Touch the outer (GND) part of the hot shoe with the positive lead and the centre contact with the negative (common or GND can also be called) lead, like shown in the picture to the left.

Check and verify that the voltage displayed by the instrument is about 0.7V, it can be some more or some less. Switch leads, now touching the hot shoe GND with the negative lead and the centre contact with the positive lead and verify that the display does not show any voltage. It should display infinite, OL or something similar, not 0.0V.

If 0.0V is displayed then there is a short inside the diode and the V2-F1A is no longer working at all. If no voltage is displayed at all during the first measurement then the diode is burned out and the protection is gone. In this case the adapter can still be used and it should work, but the camera is not protected any more against high voltage flash use.

The V2-F1A adapter with YN622N remote flash triggers

For more details about the V2-F1A flash adapter for the Nikon 1 V series cameras, please read:


Some background about my radio trigger

Until last week I used some 10 years old radio triggers to trigger external flashes. These are now replaced with a kit, consisting of a Youngnuo YN622N-TX controller unit and two Youngnuo YN622N transceivers. I am planning to buy more transceivers now that I know these work well.

Note that this post is not intended to be a review of these units, just some information that these units work very well, not only on my D800 in iTTL modes, but also on the Nikon 1 V1, V2 and V3, which can use these together with the V2-F1A flash adapter, but of course, only in manual mode, since TTL is not supported by the adapter.

Two major reasons why I bought this kit

One is that my old triggers are far too old and deserves to be replaced. There is not much to write about this reason, other than of course, my new triggers are miles ahead in functionality and build quality, compared with the old $15 triggers I used before. No surprise there, I would be very disappointed otherwise. I will not compare them or discuss all the new functions, just a short summary that with the D800 the triggers in iTTL mode support not only normal TTL, but also high speed (Super FP) mode. Both the YN622N-TX controller and the YN622N transceiver has also built in AF assist LED and this works very well also, as opposed to the AF assist LED in the Nikon original SB-900 I also have. Of course, none of these functions are available if the triggers are used on a Nikon 1 camera because iTTL mode is not supported by the V2-F1A.

The other, even stronger reason why I bought this kit for is that I received a report from one of my customers complaining about the V2-F1A and saying that it is not working on his V3. Fortunately I know now that these work very well with the V2-F1A adapter. Though I still at this moment have no idea why he has some problems, since it seems that the problem is not very high on his priority list, so he is not very active in self help. Never the less, I decided to buy a kit just to make sure I can test it and see the problem for myself if there is one.

The video below shows how to use the V2-F1A and YN622N remote flash triggers on a Nikon 1 V1, V2 or V3 camera.

I am convinced that the problem this user sadly experiences depends on something else, not caused by these triggers or the V2-F1A, but without his assistance I can't solve the problem. The V2-F1A adapter works on the Nikon 1 V3, just as well as on the other two models, this is confirmed by several other Nikon 1 V3 users. The YN622N as said before, works on my camera and since all the other camera models trigger the flash the same way, I have no reason to believe that they would present a problem for the YN622N.

Error description

When I put a flash trigger on the V2-F1A (when on the V3) and make a picture, I see that the remote trigger gets some kind of signal. But it doesn't fire the flash. When I push the test button on the trigger on the V2-F1A, the flash does flash.

There is one condition when the YN622N kit behaves this way. This situation is shown at the 1 minute 20 second mark in the above video. At this time mark I turn off the group and Group A does not have a mode allocated to it after that. When the shutter release button on the camera is pressed the transmitter is triggered, the receivers sense the signal and the LEDs will flash normally but the flash on the triggers are not fired. When any of the Test buttons are pushed the flashes will fire normally.

This is not an error

It is a normal condition. If the user does not select  a mode for a group than that group will not be triggered. The LEDs in the transceivers and the transmitter indicate that something is going on, a trigger signal is sent/received but they also look at the "address" the signals been sent to, and they interpret that the trigger was not meant to be sent to their flash, so they don't fire the flash.

The solution

Normally it is enough to select the right mode for that group again and the flash will fire. If the units end up in an unknown state it is best to reset to factory default condition. All groups are set to TTL and everything ends up in channel 1 as default. In this condition the controller will send the signal to all transceivers and they will trigger the flashes and everything should be fine after that.

Please read the manual

This can not be emphasized enough. Unfortunately it seems that we live in a world with more and more complicated equipment but less and less interest for reading manuals and understanding the equipment we spend money on buying.

It is very important to know the equipment we use, which is why I try to convince everybody to read the manual, and which is why I include a short manual with every adapter. This is the case, not just for the adapter, but also for everything connected to it. Though it is not always easy to understand every manual, it is important to understand every equipment. It is in the best interest of each user of any equipment, otherwise the equipment can be damaged, or in some cases even personal injury can occur. Some manuals are longer than others, some are harder to understand than others, but never the less, that is where most information is gathered and that is where we can learn the basics about the equipment we use. Some parts of a manual are more important than others, but there is a reason for why the writer spent time in writing.

Important points in the manual of V2-F1A

  • Always read the manual of the equipment before use.
  • Always attach the flash or the trigger to the adapter first, before pushing the adapter in the camera hot shoe.
  • Always attach a heavy flash via a PC cord.
  • Never put anything heavy in the V2-F1A hot shoe.
  • Never exceed the maximum weight of 120 g (4.2 oz) in the hot shoe, including batteries
  • Never use a high voltage flash.
  • Always attach the PC cord before pushing the adapter in the camera hot shoe if a PC cord is used.
  • Always handle the adapter with care, especially the contact which is used for triggering is very delicate. Nothing I can help, since the original Nikon design does not allow stronger, more robust contact. 
Not following the above may result in damage of the adapter, the flash, the trigger, the camera or any other equipment connected to it.


The Youngnuo YN622N-TX controller unit and the Youngnuo YN622N transceivers are very nice pair. Easy to set up, very reliable in use and the only thing to watch out for is that the right group must be set up on both the transmitter (the controller) and the receivers (also called transceivers), and that there are fresh batteries in all the units.

A few words about batteries

I no longer use rechargeable batteries because they all, regardless of brand, cause trouble sooner or later. Also, they have lower voltage, and actually not suitable for equipment which consumes low current, like these remote triggers. They can also discharge without warning and the self discharging is always a problem. This is not the case with ordinary high quality alkaline batteries, and my advice is always to use alkaline batteries, especially in remote controllers or other low current consumer products. Personally I prefer always to use alkaline, even in the flash guns.

Friday, 6 January 2017

Milling aluminium on my DIY CNC

I have a low profile centre gripping aluminum vise, which is excellent for plastic and PCB works or other things which need a shallow grip. Centre gripping is a good idea in some situations, but not always. Sometimes I wished it was a traditional type with one of the gripping ends fixed, because that allows better repeat-ability since it provides a fixed reference point or line, and that line remains the same even after changing the work material, so the items made with the help of this type vise can keep the same, very accurate references. With the centre gripping type both of the jaws are moving and due to the backlash of the screw there might be some differences when the work piece is changed.

After some considerations I decided to make two small modifications. One for the fixed end gripping mentioned above and the other was to make the fixing bolt pockets a little larger than the original ones.


Fixing new vise jaws

Never really milled aluminum on my CNC, so I was a bit pessimistic about the performance and also not wanted to cause any damage, so my idea was to use a BF20 I have access to also. It is not mine, so everything is not set up as I would like to have it set up, but I considered to try out, took off one end of my vise and milled one track on each piece. The results were good, but not good enough, it needed some fixing due to some slight parallelism error. This was best done on my own CNC. At the same time I changed my mind and decided to try out my machine, see what it can do with aluminum, after all, aluminum is not much harder than the Delrin I am normally milling, and my upgraded CNC is now so rigid that it should work.

Milled two new jaw traces at the other end of the vise on my own CNC and was very happy with what I have seen. Excellent finish, very nice and even edges. No lubrication, no cooling, not even air was used, only dry milled. With the right speeds it is not necessary to use anything. The tool or the work piece not even heated up to any sensible temperature and everything worked fine, no melting.

It was a really satisfying feeling to watch the aluminum chip spray flying away from the tool and to see the results when the machine stopped. The pre-milled jaw pairs were also fixed on my CNC to get them as good as possible.

The bolt pockets

The original pockets were too small and only the bolt head would fit in them, no washers. I take this as a design flaw of the manufacturer because it is not a good idea to omit the use of washers, especially not in aluminum, since the bolt eats its way inside the material when tightened hard enough. It is nice to be able to bolt the vise down firmly to the bed, much better than before.

Final steps

I made a vise fixture plate out of 12mm thick aluminum sheet which I will keep it permanently installed on. This gives it much better rigidity and is also easy to remove from the CNC table if I wanted to.

Once everything was as good as I could make it, I assembled and installed the vise, squared the sides on my CNC table and made another final milling run on the jaws to make them absolutely parallel, or at least as good as I could make it. I measured the parallelism error to 0.003mm from one side to the other, over a total width of 140mm, so that is 0.0214mm per meter error, which is good enough for me.

For those who are interested, here is a short video about the modifications I made.

This was the first time I milled aluminum with my upgraded DIY CNC. I am a bit surprised with the results, very satisfying and nice in my opinion. I know some people will disagree with me, but I will continue dry milling aluminum without any lubricant. For now, I see no problems with dry milling. Of course, the speeds must be right, but it seems to work just fine. Perhaps tool ware is much worse, and perhaps the results would be even better with lubricants, so it is a compromise, but at least I don’t have to handle chemicals and inhale the fumes.

Thursday, 8 December 2016

The making of the pulse stretcher

This is a follow up post about the pulse stretcher I made for my CNC, which you can read the details about here:


I made a video about it as well. The reason is that I am really happy with the results, the LEDs are flashing like crazy at the right pace, easy to see from any angle, unlike before, and if I wanted to see the status I had to be in front of them to see anything. The intensity is simply too low at high speed, so stretching is necessary.

The circuit is really simple, just a few resistors and capacitors and two 74HC14 inverters.

Anybody interested can just make the same circuit. If you are not happy with the pulse lengths you can play with the four resistors (R1, R2, R3, R4) and/or the four capacitors (C1, C2, C3, C4) to change the behavior of the circuit. I used Eagle to draw the circuit and to create the layout.

The PCB turned out really nice, no additional work needed with cleaning the tracks or anything at all. Traces are beautifully milled and follow what's been routed with the auto router of Eagle. Manually routing or double sided PCB would have created a more beautiful art work, but it is good enough.

I hope you enjoy the video, it shows not only the work flow, but also a before and after sequence.


I just noticed an error in the video. I mill the first pass at 0.04mm depth and the second pass at 0.07mm and nothing else. In the video I wrote that I mill the first pass at 0.4mm and the second at 0.7 and that is just too much for PCB milling. The copper layer is just 0.035mm, so there is no need to mill deeper but I double that value to be on the safe side, however, making it 20 times deeper than necessary would be crazy.

Friday, 2 December 2016

Making a PCB with my upgraded DIY CNC

Upgrading to UCCNC and the UC300ETH means that the pulses are far too fast for the LEDs I have on the step pulse signals. Pulses are barely visible due to the 400kHz pulsing the UC300ETH allows, so I decided to make a simple circuit to stretch the pulses and make them visible. These stretched pulses are not affecting the milling, this is only a “good to have” feature for my electronic control box.

I used the same circuit before in some other project but never really bothered making a PCB, but now since I upgraded my CNC with a new high speed spindle, VFD, power supply, control electronics and new software as well as mechanical upgrade it is time to check how well everything turned out. So I decided to make a PCB for this circuit, as the first real job with everything finally in place and working.

The first thing I did was not really this PCB, but a test drawing to make sure the CNC was working as expected after the upgrade, and after that I levelled the MDF spoil board also, but the PCB was meant to be the first REAL job.


Of course, before milling the PCB the circuit must be designed, routed and the G-code must be generated and so on. The work flow I am using is the following:

1.    Schematic design
2.    Board layout
3.    Routing
4.    G-code generation
5.    Adding text traces to g-code
6.    Editing g-code to generate multi pass milling
7.    Test drawing
8.    Levelled G-code generation (not always)
9.    Milling
10.  Drilling

All software and plug-ins are freely available if you can live with the limitations. For this project I skipped auto levelling, for reasons which will be mentioned later on.

Electronic schematic and board routing

To design electronic circuits I am using EAGLE PCB Design software from CADsoft.


It is not always an intuitive tool, but it is very common in the business, not only among hobby designers but also among professionals, and is a complete tool for handling electronic projects, from schematic to PCB routing. It handles auto routing very well even if the art work is not always as logical as a pair of trained eyes can see and a human can do. Of course, even a simple circuit is routed faster automatically than manually, so unless visual impression is necessary, I prefer auto routing, though some connections are often necessary to route manually because for some reason the software occasionally creates all the routes but fails to route right and can create really ugly corners for no reason at all. I don’t know why, probably a bug of some sort, but no big deal. It can also create boards with several layers, but the freeware version is limited to two layers only, which is not really a limitation since we can only create double sided boards with a mill. The other limitation the freeware version has is that the card size is limited to 100x80mm, but that size, small as it sounds, is enough to create pretty complex boards anyway. Boards can also divided into several projects, so designing and milling larger sizes is not that difficult if it would be really be necessary. For this project the area needed is considerably smaller, so the limitations are really a non-issue. With this software I complete steps 1-3 of my workflow.

G-code generation

The software I am using for this is PCB-gcode.


It is a plug-in for EAGLE PCB Design. It is pretty well documented on the Internet, so I will not go into details about it. When the plug-in is started, there are some parameters to watch out for. In my opinion, some of the default values are wrong and must be adjusted, depending on the machine parameters and the cutter used. Parameters depend also on the type and quality of the PCB clad used. I am using FR4 with 35 micrometre copper layer, so the minimum depth to be milled to get isolation is 0.035mm. Of course, this is very optimistic, since these cards don’t have such precision, but inaccuracy is less than 100% so I decided to use a mill depth of 0.07mm, which gives me 100% error margin, more than actually needed.

I am using 30 degree 0.2mm V-bits. With this cutter tool the cut depth of 0.07mm, according to some trigonometric calculations, will result in exactly 0.02375mm isolation, which is good enough for me. The default G-code would generate three passes with slight position shifts and far too wide separation for my taste, so in the PCB-gcode settings I select single pass to keep the calculated 0.24mm.

The plug-in generates several files, but only the etch and drill files are used. The etch file contains the traces and spot drilling for the holes. In the plug-in I set 0.07mm Z depth for the etching and 22,000rpm spindle speed. I also set 450mm/min feed rate, which I know by experience is a good value. Since the plug-in does not have a setting for milling in two passes with different Z depth, the file must be edited manually. Simply by opening the g-code file I separate the spot drilling part, copy the trace milling to get two identical passes, and in the first pass I replaced all Z-0.0700 with Z-0.04 and merge back the spot drilling at the end of the file. I changed also the feed rate of the second pass from 450mm/min to 650mm/min, but ONLY the second pass. I don’t want to break the tip halfway down the first pass, so being careful there is more important. Also to cut nicely through the copper layer is easier with the slower speed. Perhaps another time I will optimize this and find more optimal values for the next PCB, but for now this feels safe and good. This manual editing takes 2-3 minutes and result in a multi pass milling of the same tracks, first pass at 0.04mm depth and with 450mm/min feed rate, and the second at the final 0.07mm and 650mm/min feed rate. The spot drilling depth is at default and is only done in one pass.

Engraving text

Now it is time to add the text which I intend to engrave. While it is possible to create the text in EAGLE, I prefer to do it with the help of F-Engrave, which is another freeware.


I am pretty familiar with this piece of excellent freeware, so text generation takes just a minute or two, the code is saved and merged to the PCB g-code etch file. Engraving is also done in one single pass, the depth I set is 0,1mm which will result in 0,25mm wide lines.

This completes steps 4-6 of my work flow and the g-code is now ready for milling.

Test drawing

Normally I prefer not to be too eager in starting the milling, I prefer making a test drawing first. This can save cutters and a lot of extra work, in case something is wrong with the files or the machine settings. In Mach3 there is a g-code simulator which I normally use to get an approximate time needed for the job, especially if the g-code has many lines and the job contains a lot of moves. UCCNC does not have this possibility, so users can only guess how long time a job may take.

Drawing is done in real time, and it gives me an opportunity to check that the g-code works as expected and also that the traces are going to be milled where I want them to be milled, no short circuits and no cut/broken traces. It also gives me a way of checking trace widths, in case I would not be happy and need to reroute because of too thin traces or too thin/wide isolation.

Test drawing is straight forward, nothing special. My pen holder has a weak point, the pen tip has a large play, which is why lines are not always as straight as they will be after milling. The result of this weakness is clearly visible in the engraved text, but also the traces are not exactly matching the final board.

Never the less, I am happy with the results since the traces and isolation are the most important. I will make a new pen holder another time…

Auto levelling

Sometimes there can be issues with the PCB skewed, warped or bent and with the very thin copper layer even a slight error can cause air traces or demand too deep milling. With that in mind, I thought I will try the auto leveller plug-in which comes with the UCCNC software. I gave up that idea pretty fast. The reason is simple, I did not like that the plug-in picks the dimensions from the g-code and automatically sets the area, based on and starting from the work zero position. Work zero is the corner of the PCB, so the auto leveller plug-in would make a probing pass along the edges of the PCB, which is totally wrong. I could not find any settings to change that and narrow down the probing area. I decided to try editing the levelled g-code manually, which was pretty simple. Started the g-code and the probing began, but for some reason halfway down the probing work, when about 50% of the area was done, the plug-in gave up and sent a message that it lost contact with the probe (don’t know the exact word) and the probing stopped. This was it, I gave up, threw away the g-code and loaded a clean one again, and since my table is levelled and I had a 100% depth margin compared to the required minimum, I decided to try it without auto levelling.

Perhaps there are settings I missed, but for now I don’t care about auto levelling, at least not for small areas like this PCB is.

Milling and drilling

Really, nothing special, everything as expected. After the first pass was done, I could clearly see that the 0.04mm depth was enough to cut through the copper layer, so it seemed that the second pass was not necessary. Of course, this was just a quick view impression, I did not stop the job and let even the second pass finish as well as the engraving and the milling before I removed the PCB for inspection.

The results were fantastic. Very clean and nice cuts, trace edges are excellent, nothing more is needed to be done to clean the surface.

There is also nothing to complain about regarding the engraved text. Unlike in the test drawing, lines are nice and straight, exactly as shown on the screen, curves are even and all the letters are nicely drawn.

Visual inspection against light shows that there are no air traces or short circuits, tracks and isolation are even and everything seems fine. I am glad I skipped auto levelling, it would have just been waste of time.

One problem/fault with the PCB is the final drilling. Unfortunately I had no PCB drill of the right dimension, which for the large holes is 1.2mm, so I used an ordinary twist drill. This was not tight enough in the collet and the drill was not sharp enough for the plunge feed rate of 250mm/min for the drilling, so after a while the drill slide into the collet. I have seen it when it happened but didn’t care doing anything about it because drilling those holes on a pillar drill will not be a big issue. For the next job I’ll buy PCB drill bits even for the large holes. The smaller holes are drilled with 0.6mm high speed PCB drill bits, so those turned out nice.

Total job time was about 15 minutes. This includes milling and drilling, tool changing and zeroing the machine. I doubt this would have been possible to do in such short time using chemical etching, since in that case all the preparations and after-work would have taken more time than that. My conclusion is that milling PCB is a better way of prototyping or making small series than chemical etching. It is also less messy and less hazardous.

Summary of technical information

Spindle speed: 22,000rpm
Cutter: 30 degree 0.2mm V-bit engraving cutter
Drill bits: high speed PCB drills, 0.6mm and 1.2mm
Maximum milling depth: 0.07mm
Isolation distance: 0.2375mm
PCB type: fibre glass 1.6mm, FR4 with 35um copper layer
Feed rates: 450mm/min first pass, 650mm/min second pass
Z plunge rate for drilling: 250mm/min

A short video about the process

I made a short movie for those who are interested in watching the work. I hope you enjoy it.

Tuesday, 22 November 2016

Is CNC stepper motion really smoother with UCCNC than with Mach3?

Please note that this post is just a description of my findings and is based, apart from my short experience with UCCNC and longer experience of Mach3, on some mail conversations and experimental testing.

The causes of smoother motion

Some of the causes of smoother motion are improvements in predictions of movements and a more accurate timing between step pulses in UCCNC than in Mach3. The main contributing factor for smoothness is the timing between signals. Better prediction algorithm is contributing mainly to accuracy in movements, not exactly the smoothness, even though the better prediction also contributes to “better sounding” CNC, which gives the impression of smoother movements.

Smoothness is mostly caused by how precise the step signals are timed

Take a simple motion from 0mm to 100mm with X mm/min constant speed as an example. Looking at the constant velocity part (not the accelerations / decelerations), that part of the path in an ideal world should contain a constant stepping frequency of Y kHz. If the frequency of the steps is not constant then there are errors in the timing, and since stepper motors are actually synchronous motors with high pole count acting in open loop position control, they are very sensitive for timing errors.

Timing error in this case means that the pulsing is not at a constant time tick, and the interval between pulses is varying. This is not ideal; an errorless motion requires constant pulsing, ideally repeated at exact same interval between pulses.

Disadvantages of parallel port

When a parallel port (LPT) is used for stepper motor pulse generation the pulses are timed by Windows so the timing will not be as accurate as required for even and smooth motion. Pulses and the pauses between pulses will have varying times and as a result, the speed of the motors will not be smooth and constant in every situation.

Advantages of external motion controller

When using an external motion controller, like for example the UC300ETH, the pulses are timed by the motion controller. In this case the time base is only a few hundreds of nanoseconds (using the UC300ETH), there will be so little timing error that it can be ignored, and the motion will look and sound smooth, very stable and constant.

The benefits of smooth motion

The smoother and more accurate the timing is, the less is the risk for the motors to loose steps, and the higher is the speed which will cause them to get out of sync and loose steps due to motor speed. This is why it is possible to run at higher speeds with external motion controllers than using parallel port. The smoothness of the motion is the same when running UCCNC or Mach3 if the same motion controller is used because the timing base is the same.


If Mach3 users feel that their machines are not running as smooth as they wish for, the first step would be to have a look at the way those machines are driven. If they use parallel port then it is advisable to get an external motion controller of good quality. My experience is with the CNC Drive external motion controller products, and only with the UC300USB and the UC300ETH, but it is my understanding that even other external motion controllers will have a positive effect on smoothness. Some motion controllers have Mach3 plugins available, so of course, anybody interested in using an external controller must first find out if the supplier has a Mach3 plugin or not, before buying one. Also look for compatibility level. Not all motion controllers have a high enough G-code compatibility and all the necessary codes may not be supported, so don’t just buy an external controller, do your homework first. I made a mistake of buying a USB controller which was not compatible enough for my needs, so I wasted about $100 on that mistake, so watch out for this point as well.

Thursday, 10 November 2016

CNC upgrade progress - End of the cracked spindle holder story

The cracked spindle holder is now replaced. One reason is that because the cracked and fixed one did not allow me to attach the necessary accessories I want to use in a comfortable and secure way. There are currently two accessories I can't be without, these are the dust shoe and the pen holder.

The new spindle holder arrived some time ago but I could not find the time before to finish it, which means some drilling and tapping, as well as fixing a few dents it received during manufacturing and transport. Fixing meant also surfacing the bottom to get a 100% fit on the Z plate. The new spindle holder feels a bit better made than the old one, and the 65mm hole for the spindle was actually 65mm all around, unlike the previous one, which was a bit oval in shape. The spindle fits exactly, only a tiny expansion is needed to push the spindle motor in.

Maybe the reason why the previous holder cracked was the oval whole, which needed a larger expansion. Anyway, end of the story, this weekend I replaced the fixed one with the new and I even made a short video of it.

The spindle holder has a few extra tapped and untapped holes for future accessory expansion as well as for the currently used dust shoe and pen holder. Some of the future accessory plans I have includes 3D printer head, laser cross, laser engraver head, camera and LED light, so the extra holes will come handy later on.

Sunday, 11 September 2016

CNC upgrade progress - Fixing the cracked spindle holder

 Found a solution for the cracked spindle motor bracket. It is pretty simple, but very efficient. I simply cut off the cracked side, drilled and tapped two new holes and by using the two separate bracket halves, which are some sort of a car part I found in a hardware shop, my spindle holder is as good as new, perhaps even better. The brackets I found are for 70mm exhaust pipe, 5mm more than I need, but that wasn't a problem.
To improve it further, I added a 2mm aluminum strap between the steel bracket and the spindle motor. This gives a softer grip on the motor than just the steel brackets would give.

I am quite happy with this brand new spindle holder, in fact so happy that I decided to carry on, not wait for the newly ordered spindle bracket to arrive. 
I have installed it on the Z plate and I am very satisfied with the results, so perhaps I will keep this one, and once the one I ordered arrives I will keep that one as spare.

I believe that this solution does not need an additional safety bracket since it is made up of two individual brackets. I don't think the bottom of the spindle holder will ever crack, the top part is more sensitive.

Anyway, now I can carry on with my upgrade.

Tuesday, 6 September 2016

CNC upgrade progress - Disaster strikes

I am busy upgrading my CNC, basically it is a complete rework with mechanics and electronics changed, redesigned or changed, and even the spindle is going to be replaced. Details about the mechanical upgrade are here:


Feel free to read and comment. Other posts will follow, but in the meantime here is one about a small disaster, which actually could have been a major problem and could have caused serious damage if it would have happened at a later stage.

I finished the mechanical upgrade by making a nice new Z plate during the weekend. This was necessary to make, to be able to install the three phase brush-less spindle motor which is going to replace the old DC motor I used so far.

I was busy installing the spindle motor when I noticed that the screw to slightly expand the motor bracket to be able to push the motor into it was suddenly far too easy to turn, like if I was screwing it into a block of butter. Initially I thought that the thread was worn out, but then I saw the cause. A hair thin, fine line across the motor bracket gave the immediate answer to the softness, the bracket was cracked and split in two pieces.

The crack shows that the bracket is really bad quality. It is cast aluminum, but the work is really poorly done, the material is very porous and spongy, providing practically zero flexibility, probably due to the poor material quality, or bad heating, or too low pressure during the casting process. I am not an expert in casting, but the cast aluminum sheets I normally use are much harder, stronger and definitely not look like this when cut, or drilled.

I bought a new one immediately, but this sets me back by about two weeks due to delivery time. Will take a chance of buying a similar one, but not from the same seller. Hopefully the new one will be  a bit better but if not then I'll have to find a different one and make some changes to my new Z plate.

One can say that I was still lucky because it could have been cracked during use, in which case the spindle motor would have fallen to the mill table, causing all sorts of possible damage, especially if it would have been spinning at the time of disaster.

Lessons learned

I will modify my Z plate and make this broken motor bracket into a safety holder. In case the main bracket will crack during use this will prevent the spindle motor from falling down on the table, and possibly on my hand if I would be busy changing tool or would for some other reason have my hand under it. The weight of the spindle alone is enough, even if not spinning, to push a cutter right through my hand, especially since most of the time I am using very small cutters, mostly below 2mm diameter, and also a lot of V-bits. It would create a nasty mess and I would not like to get those pushed through my hand, and I figure if I have a safety holder then the risks are really minimal.

Tuesday, 30 August 2016

CNC upgrade progress (mechanical parts)

A few months ago I decided to start an upgrade of my DIY CNC. The target was to keep the same foot print size but increase the stability and the speed, as well as the accuracy. I did not want to build a brand new one from scratch, though looking in the mirror, only the feet and the bottom frame are the same, so basically I built a completely new CNC. Z and X axes were planned to be larger than before, mainly higher, to give me more Z clearance.

Of course, this upgrade had many advantages apart from higher possible speed. Being larger means also more weight and the larger mass gives higher stability. This is definitely positive, since the old CNC had quite a lot of unwanted vibrations and was generally too weak even for milling plastics.

My plans were not just to upgrade the mechanical parts, but also the electrical parts, basically keeping only the stepper motors and the stepper drives, the BOB and the motion controller. This includes new power supply and a VFD controlled spindle as well, in other words, practically a totally new CNC.

To be able to reduce down time as much as possible I had the following workflow for the order of upgrading.

Building a new Z axis.

This was done and ready at the end of 2015. I think that building the Z is the most difficult part, mainly because it is the smallest axis with very little error margins and little possibilities to correct small mistakes. I think that’s why many people buy readily made Z axis to build their CNC around that, instead of designing and building one from scratch, like I did.

There is a short post about that work here:


I was very happy with the results of that work, especially considering the huge speed increase, the jump from 500mm/min to 1500mm/min made a huge difference and gave me a confidence to carry on with the X-beam and was certain that the rest of the mechanical upgrade will be very smooth and well worth the efforts.

Of course, the speed change was easily explained by the screw change. Originally I used an ordinary threaded stainless steel rod with 12mm diameter and 1.75mm thread pitch as lead screw and unsupported 12mm round rods. This was replaced by a 1605 ball screw with matching nut and fully supported 16mm round rods. This means that the screw now is 16mm diameter with 5mm pitch, which is 2.86 times more than the old one, and that is almost the same as the speed increase from 500 to 1500mm/min.

Also additional benefits came from the use of ball nut, which slides much better than the DIY Delrin nut I used previously, but since I still used the original 24V switching supply as stepper power supply, it seems that this was the maximum possible speed for this machine until the power supply is replaced.

The new Z axis is also considerably larger than the old one. I made it to suit a high speed brush-less spindle, not just the small DC motor I used in my first CNC. Of course, it is also much heavier, which is an advantage because it makes the machine more stable and results in less vibration.

Building a brand new X-beam 


Next step was to build a new X axis to carry the new Z. After my first version of CNC was finished I realized that the Z clearance is not enough in the long run, so now it was time to correct this design flaw and build the second version with better clearance and more stability. The new beam is much higher than my original X-beam, allowing about twice the Z clearance I had before, which I think is going to be enough for my needs.


Building the new X-beam was not that exciting, even if it took some time to do it. It is made out of 45x90 and 30x60 extruded aluminum profiles. Pretty simple, straight forward design, fairly easy to adjust and align to get the machine squared.


Once the new X-beam was ready I installed the Z on it and tested on my desk. After aligning the Z to the X and once I was ready with my tests it was time to remove the old beam and replace it with the new one. This was really easy thing to do, due to the original design, and my CNC was fully usable during the whole process except for about the 2-3 hours I needed to remove the old gantry and replace it with the new, including the necessary wiring and squaring, so I was pretty happy so far.

Of course, at this stage I still had the old and slow Y axis with the table, but I could at least use the CNC in case I needed it.

New work table and Y axis

This was the easiest part. The table is just a 15mm thick aluminum plate, with 15mm thick T-slot bed on top of that to allow fixtures and / or spoil board installation. I have also decided to build an acrylic glass frame around to prevent chips flying out of the table area. This slides in under the X-beam, so the height is limited, but it provides enough protection to prevent the chips from falling in under the bed and onto the ball screw or the horizontal linear guides under the table.

Installing the new table in the CNC frame was also very easy. Even in this case, it took less than 3 hours and basically after this installation the mechanical upgrade was done.

Safety first!

For personal safety, I also have a much higher acrylic glass frame around the whole CNC. I had this also before in my original design also, and in my opinion this is absolutely necessary. In case a tool breaks and the cutter flies off like a projectile it stops the tool from causing damage. It happened more than once that I made a mistake and heard the snapping and the loud bang when the end mill hit the acrylic wall, preventing this “projectile” from hitting me or somebody or something else in the room. I guess this is even more important with the high speed spindle and the stronger, faster CNC than it was before. Remember, safety first…

Some technical data of my current CNC

Material used (mainly, but not a complete list): 45x90 and 30x60 aluminum extruded profiles, 10mm, 12mm and 15mm thick aluminum plates, hundreds of stainless steel screws, T-slot nuts and bolts mainly in 5, 6 and 8mm diameters. Total weight is approximately 80kg, including wiring, motors and all the electronics and power supply. CNC fixed to its own feet with four lockable rubber wheels for ease of moving around.

  • Footprint (total area it is occupying in the room): 750 x 650mm
  • Table height from floor: 910mm
  • Y table size: 450 x 300mm
  • Weight of Y: 17,5kg
  • Working area: 310 x 270mm
  • Weight of X-beam: 13,7kg
  • Size of the X-beam (height x width): 500 x 540mm
  • Size of Z: 350 x 150 mm
  • Weight of Z: 8.5kg
  • Z clearance from table top: 160mm
  • Maximum speed: 1500mm/min
  • Stepper motor data: NEMA23 2.7V/phase, 3A, 1.6uh, 0.9 Ohm/phase
  • Stepper motor driver: DQ542MA
  • Power supply to stepper drivers: 24VDC 15A switching supply (to be upgraded)
  • Motion controller: UC300
  • Spindle motor: 400W 48V DC motor, maximum 12,000 RPM, 52mm diameter with ER11 collet (to be upgraded by a 24,000 RPM 1.5kW spindle)
  • Spindle motor power supply: 36VDC fed to a manual PWM speed regulator providing 9000 RPM (will be replaced by VFD)

Next upgrade steps

These steps will be described more in detail separately, this is just a list of what is coming.

New power supply

This is already finished and working. In a few words I can say that it is providing unregulated 44VDC to the stepper drivers. It is an analogue power supply based on a toroidal transformer. This new PSU allows me to increase the maximum speed to 5500mm/min, so it is a huge step forward.

Also in the box is a separate 12V and 5V supplies, these are regulated and will be used for the electronics in the control box.

New control box

It will be separated from the power supply and moved below the CNC work table. Moving the power supply and the control box to below the table will increase the balance since the centre of gravity will move down with these items as well, which is an advantage in stability.

New spindle and a VFD

I bought a Bosch Rexroth EFC 5610 VFD from a UK company and a cheap Chinese air cooled 1.5kW high speed spindle with ER11 collet from an eBay dealer. It is tested and working but not yet installed. The VFD and the spindle will be controlled via RS485 and Modbus, using the functions provided in Mach3. I think this is a much better and safer solution than using digital outputs and 0-10V. Of course, the new spindle means some modification of the Z axis, but it will be worth the efforts.

Thank you for now, stay tuned, I’ll be back.