Thursday, 30 July 2026

Machining the SFU3205 ballscrew on the Tree lathe - or not, as the case may be...

I need to machine down the ballscrew to fit the thrust bearing. The ballscrew OD is 32mm and the bore of the bearing is 25mm. I also need to machine some 17mm hex flats on the end so I can drive it with a socket, either on a handle or an impact driver.

The Bantam is barely man enough on a good day but on this occasion, it's not even a starter, as the through bore is just over 1" (25.4mm). So the Tree will come to the rescue, as it has a through bore of just over 50mm - probably 2" from memory.

The end of the shaft I will machine initially looks like this:


But to keep life simple, I'll create a simple model:

I'm going to use a "trigon" insert, as this will be a hardened ballscrew which could be tough on more delicate inserts. Note that these toolholders have been machined down to 19mm, due to the machine being an imperial relic on account of its US heritage, so an off the shelf 20mm tool will be 1mm too high.

Machine sort of flashed up OK - until I turned on the hydraulic pump, at which point the various circuit breakers tripped, depending which ones I reset, others would trip. I've previously had trouble with this motor and sort of bodged it by fitting a site transformer (voltage isolation) with a local RCD so that the consumer unit wouldn't trip out. It was clear that there was a lot of leakage somewhere, most likely the hydraulic pump motor, given that almost all the other mains stuff had been replaced.

I'm thinking that the motor insulation has finally broken down enough that the leakage current will trip anything in its path. I just hope I haven't fucked the Yaskawa drive that powers it.

Of course, access to the end of the machine that houses the pump isn't dead easy although that's due to the fact that I've got lots of crap piled up against it. In reality, access should be pretty reasonable once all that crap is moved out of the way.

I'm hoping that simply disconnecting the motor will clear / demonstrate the fault, in which case a new motor will be the solution. The hydraulic pump is pretty noisy, so it's possible I may also get myself a new pump in the process - how long's a piece of string?

Tuesday, 28 July 2026

Chips with Probe Basic Lathe Coversational!

Despite the AliExpress tracking info showing the ballscrew sitting at the China consignment hub, look what turned up a few days ago.


Yes, SFU3205 (single ballnut, 32mm OD, 5mm pitch). It even came with a transfer tube(?) to allow you to remove the ballnut without sowing the ball bearings across the length and breadth of the workshop.


Thusmost:

Anyway, time to drill the pilot hole in the stock for the bearing bracket. Centre drill, then 8mm drill, then 25.5mm drill.


There. Ready for the boring operations.


Then set up the first boring operation in the PBL Conversational screen (open out from 25.5mm to 50mm):


At this stage I was thinking I should check the spindle speed. This machine originally had a 1500 / 3000rpm motor and if you wanted the max spindle speed of 1600rpm, you needed the motor to be running at 3000rpm (that's the no-load, synchronous speed - slightly lower when under load).

The motor fitted to the machine is a 4 pole (ie 1500rpm) 3kW induction motor. That's a bit OTT but I had it kicking about and it saved having to buy another one. HWIW, it originally powered an air compressor on an electric urban bus to power the brakes and air suspension.

If I'm running this motor much above its 1500rpm base speed, it's going to be well down on power. And in the Linuxcnc .INI file, there's a spindle scaling factor that translates / scales the 0-10Vdc output from the Mesa 7i76 board to actual spindle speed. I've disable the I (and D) term in the PID controller so that the motor speed is a direct function of the analogue control voltage from the 7i76's digital potentiometer.

The only simple way to independently measure the spindle speed is using the "Machtach" device that I procured, built and installed on the machine some years ago. 


This uses an optical sensor to detect markers on the spindle nose and calculate the rpm. Those markers are still present on the spindle nose and the device itself seems to work once powered up.


True, there's an encoder on the spindle that reports back the actual speed but I'm not 100% convinced it's set up correctly - I suspect it is but now would be a good time to check.

You may notice that the motor pulley is rather larger than the original - it's actually the biggest I could fit under the cover. That's because I swapped it out when upgrading the motor

This was before, with the original, smaller pulley:


And after, with the oversized pulley:


The result is that I can actually get over 1500rpm at the spindle from this setup, with the motor operating below base speed ie not field weakened. And the scale factor is bang on - I'd clearly frigged it to get the exact correct values. And the reported spindle speed displayed (from the encoder) is sot on.

On with cutting chips, then. The operation is broken down into 2 steps - bore through at 50mm, then counterbore at 62mm. If I ran both operations together, I believe the conversational feature would merge them and avoid duplication (air cutting). However, this is the first time out for Chris Polanski's "Intuiturn" conversational macros, so one step at a time etc.

That seems to be going well so far: 


Oooof, even with the rear and top chip guards fitted, this was a painful business. Blue hot chips are flying out in all directions. Rather than stop the process, I grabbed a handy cardboard box and hid behind it.



That was almost manageable, containing perhaps 90% of the hot chips. And a good result. In fact, I must have screwed up the touch off step a bit, as the bore came out almost 0.4mm undersize. Easily managed by a final (manual) pass.


Good result.


So there we have it - the first use of the (Internal Turning) conversational macros. I need to fit a more sensible chip guard that will enclose the front of the machine, so I don't get burned and the workshop isn't sprayed in tiny chips.

Arguably it would be sensible to connect up the coolant pump but the same thing goes - I need a guard to contain the mess, so it's simpler to just run dry for now.

Thursday, 23 July 2026

Setting up to test the rewired CNC Bantam and Probe Basic Lathe

Now that I've developed a ballscrew attachment for the JD TB3 tube bender, I need to prepare to get the new compts machined. This requires:

  • Find suitable material for the 2 blocks., This should really be steel, as loominum isn't going to work so well, either in terms of strength or as a bearing material where it bears against the bender's arms. I seem to have a piece of 1" x 3" hot rolled steel of 190mm length. That's a bit shorter than I'd planned but I have little choice of material to start from. I can cut it into a 100mm length for the bearing bock and a 90mm length for the ballnut. I will modify the blocks in Fusion to suit the new reality.
  • Cut the stock ready for machining. 
  • Flash up some lathe tools in Fusion. Currently, most of the tools in my library are for the Tree ie LH tools, whereas I need RH tools. So to start with I will create a 25.5mm drill, a CCMT060204 tipped boring bar and a fairly conventional RH turning tool with DCMT11T304 insert, while I'm at it.
  • Create the toolpaths in Fusion using the new tools.
  • Export the tools from Fusion as a JSON file and import them into the PBL as the tool library.
  • Import the g code for the boring operations into PBL.

I don't intend to do the predrilling as a CNC operation, as I will be using a tailstock mounted drill for that. Similarly I'm not sure I can be arsed to face off the front of the stock afterwards. So this will simply comprise the rough boring and finish boring operations.

Here's the modified bearing block. It's a fair bit thinner than before and instead of having pillars sticking out on top and bottom, I will insert short collared spacers or shouldered screws.


Similarly, the ballnut bracket has shorter pillars.


There should be enough info here for me to set up the machine:


Here's the boring bar setup:


And the turning tool:

For the CCMT060304, I will use 80m/min surface speed, 0.1mm per rev feedrate and 1mm depth of cut. This is a slender boring bar, albeit carbide, so I've erred on the cautious side.

For the DCMT11T304, I will use 150m/min surface speed, 0.1mm per rev feedrate and 2mm depth of cut. Or I would if I planned to use it here.

Note that there's no actual (internal) boring operation as such. Instead, you select Profile Roughing and Profile Finishing and by selecting the appropriate features you define a boring operation.

FFS, some of the Fusion turning toolpaths are a rite of passage. I struggled to get this done but finally found that turning "Rest Machining" off allowed the thing to generate non-empty toolpaths, which is quite helpful. The rough boring and finish boring operations, which make use of a pre-drilled 25.5mm hole:


The (not used facing operation):


The g code for the boring operations:

%
(3001)
(BRG BLOCK)
N10 G7
N11 G18
N12 G90
N13 G21
N14 G28 X0.
N15 G28 Z0.

(PROFILE ROUGHING2)
N16 T12 M6
N18 G54
N19 G97 S3500 M3
N20 G95
....
....
N127 G1 Z-16.9 F0.1
N128 X59.9
N129 X57.9 Z-15.9
N130 G0 X0.
N131 Z5.
N132 G97 S3500 M3

(PROFILE FINISHING2)
N133 M5
N134 M1
N135 G97 S2000 M3
N136 G95
N137 G0 X0. Z5.
N138 G96 D2000 S80 M3
N139 G0 Z1.014
N140 X58.922
N141 G1 X59.172 F0.1
N142 X62. Z-0.4
N143 Z-17.
N144 X50.
N145 X47.172 Z-15.586
N146 G0 X0.
N147 Z5.
N148 G97 S2000 M3

(PROFILE FINISHING3)
N149 M5
N150 M1
N151 G97 S2000 M3
N152 G95
N153 G0 X0. Z5.
N154 G96 D2000 S80 M3
N155 G0 Z-15.986
N156 X46.922
N157 G1 X47.172 F0.1
N158 X50. Z-17.4
N159 Z-25.4
N160 X46.
N161 G0 X0.
N162 Z5.
N163 G97 S2000 M3

N164 M5
N165 G28 X0.
N166 G28 Z0.
N167 M30
%

Let's get the stock set up in the 4 jaw and import the g code into PBL.


Ooof, those jaws are in the way of the boring toolpath. That's what happens when you allow The Stupid Fat Bloke to get ahead of himself and set stuff up before thinking things through. And it was all dialled in at this stage of course.


That's better. With a 4-jaw chuck you can remove 2 of the jaws and swap them round without removing the work, then do the same with the other 2 jaws. So it remains true and now has a helpful gap between the rear of the stock and the chuck and jaws. This method costs less in terms of inserts, carbide boring bars and chuck jaws.

Once I've imported the g code, I may be forced to actually machine this bearing block.....

Tuesday, 14 July 2026

Update Centroid Acorn Lathe to 5.4 - and modifying the PLC code to suit - sneaky gotcha!!

I've updated the Tree CNC lathe with Centroid CNC12 latest major version ie 5.42 at the time of writing. The process is still a bit clunky - you have to take screenshots of each setup screen, run the CNC12 installer (having backed up the current, working example under a different folder name), then use the Setup Wizard to replicate every option, item by item, screen by screen.

But as I also had to create a custom PLC program for my powered ATC turret, I'll need to modify the 5.42 PLC in a similar fashion. This turret doesn't use Gray Code to report its position - instead it has a single switch for each of the 8 positions. These come in via the Ether1616 expansion board. There's no default option for an "8-input" turret position feedback.

The edits I made are documented here and there was a minor edit that resulted from testing it out. I'll now need to replicate those changes. The main PLC code will almost certainly have changed since I made my changes back in August 2022.

It's worth noting that the inputs from the turret feedback signals that come in via the Ether1616 expansion board aren't set up by the Setup Wizard - they are effectively hard coded in the PLC code. If you don't make the PLC edits, the ATC turret isn't going to know correctly which tool is loaded.

The final step, after editing the SRC code file is to compile it. Using CMD window, change to the c:\cnct folder, then run the compile:

cd c:\cnct
mpu compile acorn_lathe_plc.src mpu.plc

This generates a new mpu.plc file that will be picked up by CNC12 and run.

The gotcha

Ooof.

c:\cnct>mpucomp acorn_lathe_plc.src mpu.plc
MPUCOMP v5.42 Rev 07 MPU11 PLC compiler
$Id: mpucompiler.cpp 21173 2025-07-21 17:11:10Z keith $
Copyright 2001-2018 Centroid Corp.

Input file : acorn_lathe_plc.src
Output file: mpu.plc
Error Line 6913 Col 4: Undefined label TRUE
IF TRUE THEN CurrentTurretPosition_W = 0
   ^
Error Line 6922 Col 4: Undefined label TRUE
IF TRUE THEN SV_PLC_CAROUSEL_POSITION = CurrentTurretPosition_W
   ^
Error Line 6913 Col 4: Bad Numerical Factor
IF TRUE THEN CurrentTurretPosition_W = 0
   ^
Error Line 6922 Col 4: Bad Numerical Factor
IF TRUE THEN SV_PLC_CAROUSEL_POSITION = CurrentTurretPosition_W
   ^
Compilation failed.
c:\cnct>

WTF?? Turns out they changed the rules slightly somewhere between v5.20 (my last working installation) and v5.42 (today's update):

According to Mr AI, "If you try to compile a legacy .SRC file (written during the CNC12 v4.xx era or earlier) using the new mpucomp compiler from v5.xx+, it will instantly flag IF TRUE as a compiler syntax error. To upgrade old logic to work under v5.xx software, open your old .SRC file and find/replace every instance of TRUE used in logic statements to TRUE_M."

There are only 2 instances of the IF TRUE statement, both of which I pasted in when updating the turret code using snippets of the v5.20 code:

;==============================================================================
                               ATCGrayCodeStage
;==============================================================================
; EME 2024-11-10 ATC control trials
; Input 1 on Ether1616 with A0 address = CNC12 input 33 etc
; IF Tool1Input THEN CurrentTurretPosition_W = 1
; IF Tool2Input THEN CurrentTurretPosition_W = 2
; etc...
IF TRUE THEN CurrentTurretPosition_W = 0
IF INP33 THEN CurrentTurretPosition_W = 1
IF INP34 THEN CurrentTurretPosition_W = 2
IF INP35 THEN CurrentTurretPosition_W = 3
IF INP36 THEN CurrentTurretPosition_W = 4
IF INP37 THEN CurrentTurretPosition_W = 5
IF INP38 THEN CurrentTurretPosition_W = 6
IF INP39 THEN CurrentTurretPosition_W = 7
IF INP40 THEN CurrentTurretPosition_W = 8
IF TRUE THEN SV_PLC_CAROUSEL_POSITION = CurrentTurretPosition_W
; EME end of substitution

Replaced both TRUE instances with TRUE_M. That's better:

c:\cnct>mpucomp acorn_lathe_plc.src mpu.plc
MPUCOMP v5.42 Rev 07 MPU11 PLC compiler
$Id: mpucompiler.cpp 21173 2025-07-21 17:11:10Z keith $
Copyright 2001-2018 Centroid Corp.
Input file : acorn_lathe_plc.src
Output file: mpu.plc
Compilation successful
Max stack depth = 7
Program size: 13475 tokens (82.2449% of max)
c:\cnct>

That should work. It compiles and runs OK although I'll leave the testing of the turret until tomorrow, as it's a pretty noisy, brutal mechanism and it's late and I'm supposed to be getting tired soon.

Ballscrew driver for tube bender?

Although I'm not 100% convinced the "JD Squared" tube bender is going to cut it for me with this particular exhaust task. However, it's pretty awkward to use, even with a long "helper" tube fitted to the actuator handle. Here are some observations about its use - and thoughts about how to add a power assist.

The default assumption in the US is that any man worth his salt will have compressed air in his (work)shop, so one of those "pneumatic to hydraulic" adaptors would be a fairly simple matter to connect up. This would allow a hydraulic cylinder to be fitted to the bender - and be operated from a compressed air supply. We don't do that over here so much and even if we did, there are every few of those "pneumatic to hydraulic" products available.


Here's a JD Squared (clone) bender fitted with a hydraulic cylinder. Note that although it says "$200", that price doesn't include any actual dies...


So, how about simply fitting a large Chinesium ballscrew and driving it with an impact driver? Just pulling specs out of my ass, I'm thinking a 32mm ballscrew with a 5mm pitch would suffice. Generally, these seem to rated at around 4 Chinese tonnes of dynamic load. 

Looking at a HLTNC (a semi reputable Chinese supplier of SFU3205?), I'm seeing a static load bearing capacity of ~50kN and a dynamic load of ~17kN. That's between 1.7 and 5 tonnes of force in street talk. With the kind of leverage we see on that bender of about 20:1 when fitted with a 1m helper bar (~5cm active length at the ratchet bar), I'd be needing to apply about 85kgf or 250kgf on the helper bar to exert a similar force manually. I'm pretty certain I've never come close to that, so as far as calculations go, I think we can leave it there - "an SFU3205 ballscrew will be man enough", even allowing for Chinese units of measure.

So what would it look like, this ballscrew power feeder thing?


Check the bearing loads - that looks adequate.

Here's the assembly with all joints working but not bothering with "real" pivots, fixings etc. I'm only interested in the ballnut, bearing and ballscrew at this stage.



That will do. Let's focus on making it happen.

Monday, 13 July 2026

Purge bung for 32mm tube

Unless you plan to butt weld your stainless steel exhaust pipe tube without achieving full penetration (on a 1.5mm wall thickness), you need to back purge the tube ie drive out the oxygen / air from the inside. Failure to do so will result in a shitty black oxide eruption from the back side of the weld. It's called "sugaring" and is best avoided, if only for cosmetic reasons.


The usual requirement is for some form of simple bung to wedge into the end of one of the tubes with an argon supply. Any other openings are covered, usually with aluminium foil, allowing some means for the purged air and argon to escape.

I have dual argon regulators and 2 hoses, so I should be able to adjust the flow of the torch and purge gases independently. It's a little bit crowded / messy up front here but I'm trying to run both gasses through the solenoid of the welder so that I can't accidentally leave the purge running - or forget to turn it on. 

The bottle has a sort of master flow regulator feeding the welder, so I'm hoping to be able to set the total flow rate above the sum of the individual flows and/or use the master regulator to achieve the required balance. Time will tell if that is a workable concept in practice. The individual gauges have simple needle valves, whereas the master regulator actually regulates the flow at a constant level, up a maximum (but modest) back pressure. You can see how that might work....


At the far end of the purge hose, I will fit one of these "quick connect" connections. As well as enabling the hose to be connected and disconnected from the purge bung, it closes off any flow when the connection is broken.


So tonight's challenge is to make a simple tapered bung (in black ABS again, certainly for the moment) that will accept one of those male plugs. They are 6mm and 8mm - and given that I have 2 of the 6mm, I will use that.

This should work for both 32mm and 38mm tubes. The 6mm plug should be a nice push fit into the 5.5mm hole.


Corners rounded off:


That one can join the (growing) queue to be printed.

Adjustable home and limit switch targets for the CNC Bantam

Another little job to do for the CNC Bantam. I'm using inductive proximity switches for the home and limit switches on the Z axis. These are the Omron TL-Q sensors. These use an open ended pot core to detect the presence of a conductive body within the magnetic field generated by an AC driving voltage, due to its effect on the q factor of the circuit. The target can be conductive but does not necessarily need to be magnetic - and in fact a higher conductivity body (and most likely non magnetic) gives the smallest detection distance and hence arguably the most accurate homing distance. 

Currently, for the Z axis home target, I have simply stuck a piece of aluminium angle iron onto the leaner encoder scale extrusion using a piece of double sided tape - yes, another temporary measure taken while I proved out the function. Furthermore, I haven't fitted a target for the Z limit switch, which is the further sensor in the photo. The notion was that I would be able to move that to suit the work in hand. So if I am using a big chuck with a lot of stickout, I might move the limit switch target further from the headstock. 

The alternative would be to change the software limits in the .INI file, which is hardly user friendly - or not have anything to prevent the tool flying into the headstock/work/chuck if I have left The Stupid Fat Bloke in charge of operations.


So I need a couple of (plastic) clamps that will attach to the linear scale housing and be easily adjustable for position by sliding along the housing. 

This was the initial concept. This is the reverse side. I need to be able to assemble the thing without dismantling the scale or trying to spring the clip. This will be 100% fill ABS, so shouldn't be capable of springing that much. So there's a screw holding the rear part of the clip in place:


The target will be an M8 grub screw on the underside of the clip:


Looks OK from here, although the magnet needs to be moved out so it is above the centre of the sensor. There's a grub screw that allows the clip to be locked in position. I'll either use a plastic screw or (more likely) a steel one with a plastic pad to avoid damaging the scale housing.



With some further measurement and thought, here we are. The target grub screw is now placed in the middle of the sensor, hence the joggled end. And the limit switch is simply a mirror image of the home switch, with the same clamp piece.




If this works out OK, I will need to print the mirror image part for the other limit switch ie the max travel limit. However, it takes 6.5h, so we will have to wait and see what emerges finally. Meanwhile, I've just taken delivery of another 2kg of black ABS. The Creality CR-ABS seems to work really well and is nice and solid when printed at 100% fill density.

An interesting / useful point to note is that those M8 threads are modelled in Fusion and the printer does a reasonable job of reproducing them, to the extent that you can simply screw an M8 screw into them without needing to clear the threads with a tap. Certainly good enough for the application in this case. For more demanding applications it may be necessary to fit a captive nut or threaded bar into the body, as I did on the pipe tube cutting fixture.

Sunday, 12 July 2026

Mandrel bend cutting jig

I've now got myself a load of 32mm mandrel bends in 45 degree and 90 degree segments. However, I'll need to chop some of them off at other angles. They could be pretty tricky to hold while using a bandsaw or angle grinder to cut them to the required angle.

There are a few examples of 3D models that achieve this function on places like Thingiverse etc. Naively, I thought I might be able to download something that I could simply print out and use - something like these:




...but the only models I could find were expecting some form of payment, either as STL files or even as the printed items themselves, with prices ranging from ~£5 (model) to £40 (printed). Well fuck that. Apart from that being against my religion, many of them don't actually do what I need, not least being for the wrong diameter tube and none of them are parametric or even in Fusion format. Details, I know.

Fusion time:

What I want:
  • Suitable for 32mm tube (ie OD, not ID)
  • Settable at 5 degree increments
  • Split halves, to allow easy setting and clamping
  • 1mm gap between the halves so there's movement for the vise to clamp the tube
  • 10mm dowels to hold halves together before being clamped
  • Solid (100%) fill in ABS, so it can be solidly clamped
Like this perhaps:


Obvs you need to account for the diameter of the stop pin when setting the angular positions of the holes. Like this:


Lots of support structures in the various holes. This is my first trial attempt, using default settings (to save material). 


Came out OK but made a couple of enhancements to the design, namely:

  • Rather than use 10mm dowels to align the halves, use M10 screws with captive nuts, so I can nip them up before going into the bandsaw vise.
  • Use an M4 caphead screw for the tube stop. And provide a counterbore for the head on the reverse side - or in fact a whole series of them, one for each position.
  • Reduce the gap between the halves from 1mm to 0.1mm. Yes, it still clamps nicely but doesn't wobble around.
  • Use 100% fill, as I'm reasonably confident this is in a good enough state not to require further iterations.


And it finally printed out after 7.5 hours. Using the default fill of 25%(?) would have only saved me about 30 minutes apparently. The main difference of going for 100% fill is the cost of the material. Total usage should be around 187g. At about £15 per kg, that's about £2.85 for the final part ie not exactly extravagant.




But after some poking and pulling, it's all cleared out and working. Reamed out the holes with a couple of drills and it's a good 'un.


I will need to cut that M4 screw down to 45mm so it doesn't poke out. Later.



Also, the big M10 screws holding the halves together need to be 45mm long. Seems I have only one M10 caphead screw in my entire collection and it's about 60mm long. That's a great excuse to buy some 30, 45 and 60mm for my "stock". I'm not ready to do any pipe cutting and welding yet, so completing the final assembly of this thing can wait until I have the final delivery of u-bends from China and the screws from ebay.

Job done.

Machining the SFU3205 ballscrew on the Tree lathe - or not, as the case may be...

I need to machine down the ballscrew to fit the thrust bearing. The ballscrew OD is 32mm and the bore of the bearing is 25mm. I also need to...