Monday 4 November 2024

Dell XPS15 9550 new keyboard and palm rest

Yes, there's movement in the workshop again after a prolonged break due to "other stuff" going on. This time it's not metal processing or machinery fettling.

I've had this XPS15 9550 since early 2016, so over 8 years now. At the time it was a reasonably state of the art, high spec laptop and even today it's a handy piece of kit. Originally I used it for email, Office, circuit simulations, software and CAD (Inventor mainly). I had a couple of XPS before - a 15" and a 13" and have always been very happy with them. Nowadays it's my lounge laptop, used for email, social media etc.

  • i7-6700HQ, 16GB, 500GB SSD, UHD530 and GTX960M graphics
  • Fragile power jack (replaced already)
  • No Home key on the keyboard - surprisingly annoying
  • Original battery bulged and needed to be replaced under warranty (FOC)
  • Speakers attract magnetic (metallic) particles, causing distortion. The fix is fairly simply - remove the speakers and use a strong magnet to suck any particles off the surface of the speaker diaphragm. No demagnetisation of the speaker seems to result.
  • Rather heavy, as I recall when I lugged it around China over the course of several years. And it doesn't get any lighter.

This model (9550) has a hoopy looking kevlar palm rest surrounding the keyboard. This was starting to look a bit grubby 18-24 months ago, so I entrusted it to The Stupid Fat Bloke to give it a bit of a cleanup. Mistake. Unfortunately, he used IPA alcohol to try to clean the palm rest. Bad move - who knew this would make the resin go sticky - and remain sticky. Yes, a royal mess.

No, it doesn't come off - and even after >18 months it still remains slightly sticky.


Next, the keys started to misbehave, presumably due to crumbs and crud getting under them. It's not a keyboard that allows you to remove the key caps safely, so I just had to stomach the mistyped characters.

Finally about a month ago I got fed up with both the sticky palm rest and the sticky keys. Ali Express offers keyboards and palm rests for these old models - presumably new old stock. Game on. 

Keyboard and palm rest - total £60 delivered. And here's the service manual What could possibly go wrong? Well for one thing, you have to COMPLETELY dismantle the machine, then rebuild it again.

Let's do it! Will it all go wrong? Will I regret this? Only time will tell...

Lid off:


Don't forget the routing of the speaker cable:


This little flex PCB seems to contain 2 microphones and a couple of white LEDs:


The Wii module and antenna connections:


Processor fan:


Graphics fan:


Heat pipes


Peel back the tape on the back of the keyboard, otherwise, can't recover the screws I need for the new one.


As you might expect, the keyboard is in a disgusting state.


As is the underside of the kevlar palm rest:



Old and new, side by side:


The (previously replaced) power socket with ferrite bead (which should be in its cage). And the lid hinge which has come away from the underside of the palm rest:


The new palm rest with power socket correctly installed:


The touchscreen cleaned up nicely:


The keyboard, touchpad etc refitted:


Mobo, fans, heatpipes etc refitted:


Battery back in. Just the bottom cover to go back on:


Ah - but does it work?

Oh yes. Well TFFT!

Friday 16 August 2024

Updating the Centroid Lathe PLC code with ATC turret mods

Previously, I edited the Centroid Lathe PLC code to make it work with my ATC turret. The reason for this is that the generic turret options that come with the wizard expect some form of 3 line Graycode signal (similar to BCD) from the turret to tell the controller what tool position is currently in play. However, my turret (supplier unknown) actually uses 8 individual lines, one per position. I have enough spare digital inputs on the ETHER1616 expansion board to handle those extra signals, so the challenge was to modify the logic code to recognise these inputs rather than the Graycode that is expected by default.

All has been working fine since those mods were made - except from the tool touch-off functions that are required for automatically measuring the tool offsets. Previously I tore out large clumps of my hair trying to make head or tail of the behaviour before concluding that I wasn't going to be able to fix it myself. It would clearly require the Centroid engineers to dig into the code and fix what were evidently some logical errors in the offset calculation. As the lathe users appear to be fairly thin on the ground relative to the number of mill, router and plasma users, this wasn't going to happen any time soon.

That time seems to have come finally. There's a beta release that sounds as if it may have fixed some of these issues, so let's have a go at installing it and trying it out.

The update process for my system is as follows:

  • Open CNC12, run the settings wizard and take screenshots of all the settings screens. NB: For subsequent versions, hitting Ctl-P will automatically save the as PDFs.
  • Save the current (4.80) installation by renaming the C:\cnct folder to something like C:\cnct_4.80. You can easily revert back to this working version at any time by simply renaming it back to c:\cnct
  • Create a fresh install from the downloaded link (5.19 beta in this case)
  • Run the wizard and copy the settings across from the PDF screenshots.
  • Update the ATC-related parameters in the config > parameters screen:
    • P160 >> 1 [enhanced ATC:1 = Nonrandom]
    • P264 >> 7 [rapid rate override display - actually non-ATC]
    • P830 >> 4 [ATC type: 4 = Graycode 1 output]
    • P849 >> 10 [toolchange timeout TimerDefault = 10]
    • P851 >> 0.1 [ATC time before reversing]
  • Using Visual Studio Code or Notepad++, open the acorn_lathe_plc.src source file from the c:\cnct folder and comment out or delete the following content...
=========================================================================
                               ATCGrayCodeStage
;=========================================================================
; Check input based on parameter bits to determine tool location
IF !(ToolTurretPosBit1 ^ P831Bit0) && !(ToolTurretPosBit2 ^ P831Bit1) 
 && !(ToolTurretPosBit3 ^ P831Bit2) && !(ToolTurretPosBit4 ^ P831Bit3)
 && SV_MACHINE_PARAMETER_161 >= 1 THEN CurrentTurretPosition_W = 1
IF !(ToolTurretPosBit1 ^ P832Bit0) && !(ToolTurretPosBit2 ^ P832Bit1) 
 && !(ToolTurretPosBit3 ^ P832Bit2) && !(ToolTurretPosBit4 ^ P832Bit3)
 && SV_MACHINE_PARAMETER_161 >= 2 THEN CurrentTurretPosition_W = 2
IF !(ToolTurretPosBit1 ^ P833Bit0) && !(ToolTurretPosBit2 ^ P833Bit1) 
 && !(ToolTurretPosBit3 ^ P833Bit2) && !(ToolTurretPosBit4 ^ P833Bit3)
 && SV_MACHINE_PARAMETER_161 >= 3 THEN CurrentTurretPosition_W = 3
IF !(ToolTurretPosBit1 ^ P834Bit0) && !(ToolTurretPosBit2 ^ P834Bit1) 
 && !(ToolTurretPosBit3 ^ P834Bit2) && !(ToolTurretPosBit4 ^ P834Bit3)
 && SV_MACHINE_PARAMETER_161 >= 4 THEN CurrentTurretPosition_W = 4
IF !(ToolTurretPosBit1 ^ P835Bit0) && !(ToolTurretPosBit2 ^ P835Bit1)
 && !(ToolTurretPosBit3 ^ P835Bit2) && !(ToolTurretPosBit4 ^ P835Bit3)
 && SV_MACHINE_PARAMETER_161 >= 6 THEN CurrentTurretPosition_W = 5
IF !(ToolTurretPosBit1 ^ P836Bit0) && !(ToolTurretPosBit2 ^ P836Bit1)
 && !(ToolTurretPosBit3 ^ P836Bit2) && !(ToolTurretPosBit4 ^ P836Bit3)
 && SV_MACHINE_PARAMETER_161 >= 6 THEN CurrentTurretPosition_W = 6
IF !(ToolTurretPosBit1 ^ P837Bit0) && !(ToolTurretPosBit2 ^ P837Bit1)
 && !(ToolTurretPosBit3 ^ P837Bit2) && !(ToolTurretPosBit4 ^ P837Bit3)
 && SV_MACHINE_PARAMETER_161 >= 7 THEN CurrentTurretPosition_W = 7
IF !(ToolTurretPosBit1 ^ P838Bit0) && !(ToolTurretPosBit2 ^ P838Bit1)
 && !(ToolTurretPosBit3 ^ P838Bit2) && !(ToolTurretPosBit4 ^ P838Bit3)
 && SV_MACHINE_PARAMETER_161 >= 8 THEN CurrentTurretPosition_W = 8
IF !(ToolTurretPosBit1 ^ P839Bit0) && !(ToolTurretPosBit2 ^ P839Bit1)
 && !(ToolTurretPosBit3 ^ P839Bit2) && !(ToolTurretPosBit4 ^ P839Bit3)
 && SV_MACHINE_PARAMETER_161 >= 9 THEN CurrentTurretPosition_W = 9
IF !(ToolTurretPosBit1 ^ P840Bit0) && !(ToolTurretPosBit2 ^ P840Bit1)
 && !(ToolTurretPosBit3 ^ P840Bit2) && !(ToolTurretPosBit4 ^ P840Bit3)
 && SV_MACHINE_PARAMETER_161 >= 10 THEN CurrentTurretPosition_W = 10
IF !(ToolTurretPosBit1 ^ P841Bit0) && !(ToolTurretPosBit2 ^ P841Bit1)
 && !(ToolTurretPosBit3 ^ P841Bit2) && !(ToolTurretPosBit4 ^ P841Bit3)
 && SV_MACHINE_PARAMETER_161 >= 11 THEN CurrentTurretPosition_W = 11
IF !(ToolTurretPosBit1 ^ P842Bit0) && !(ToolTurretPosBit2 ^ P842Bit1)
 && !(ToolTurretPosBit3 ^ P842Bit2) && !(ToolTurretPosBit4 ^ P842Bit3)
 && SV_MACHINE_PARAMETER_161 >= 12 THEN CurrentTurretPosition_W = 12
IF !(ToolTurretPosBit1 ^ P843Bit0) && !(ToolTurretPosBit2 ^ P843Bit1)
 && !(ToolTurretPosBit3 ^ P843Bit2) && !(ToolTurretPosBit4 ^ P843Bit3)
 && SV_MACHINE_PARAMETER_161 >= 13 THEN CurrentTurretPosition_W = 13
IF !(ToolTurretPosBit1 ^ P844Bit0) && !(ToolTurretPosBit2 ^ P844Bit1)
 && !(ToolTurretPosBit3 ^ P844Bit2) && !(ToolTurretPosBit4 ^ P844Bit3)
 && SV_MACHINE_PARAMETER_161 >= 14 THEN CurrentTurretPosition_W = 14
IF !(ToolTurretPosBit1 ^ P845Bit0) && !(ToolTurretPosBit2 ^ P845Bit1)
 && !(ToolTurretPosBit3 ^ P845Bit2) && !(ToolTurretPosBit4 ^ P845Bit3)
 && SV_MACHINE_PARAMETER_161 >= 15 THEN CurrentTurretPosition_W = 15
IF !(ToolTurretPosBit1 ^ P846Bit0) && !(ToolTurretPosBit2 ^ P846Bit1)
 && !(ToolTurretPosBit3 ^ P846Bit2) && !(ToolTurretPosBit4 ^ P846Bit3)
 && SV_MACHINE_PARAMETER_161 >= 16 THEN CurrentTurretPosition_W = 16

IF TRUE THEN SV_PLC_CAROUSEL_POSITION = CurrentTurretPosition_W
  • ...then paste the following section to replace the content you just commented out or deleted:
;===========================================================
                               ATCGrayCodeStage
;===========================================================
; EME 2024-08-09 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
  • Change to the cnct folder and compile the modified acorn_lathe_plc.src file to create the mpu.plc file using the following commands in a CMD window:
    • cd c:\cnct
    • mpucomp acorn_lathe_plc.src mpu.plc
  • Run CNC12 and follow the instructions - you will need to let it reflash the Beaglebone and cycle the Acorn before you can expect it to work consistently.
That should do the trick. And sure enough it works - once you remember to update the parameters that is. So: install new CNC12, update parameters and modify the plc code.

Friday 9 February 2024

Final assembly and test of the spindle nose adaptor - RESULT!!

After the recent distraction caused by the 3D scanner, resurrecting the 3D printer and buggering about with the throttle bodies for my Honda S800 engine, the spindle nose adaptor has seen no action.

On the face of it, there should be little more left than to assemble the parts and test the runout. The big, big question is - is the runout remotely acceptable? I will be more than just slightly pissed off if there's any noticeable runout after all the time and care I've put into this thing. 

Last time round, I was preparing to finish machine the taper and face while mounted in place on the lathe spindle. Here's what happened.

Finish machining:

Let's go Fatty.




Phew - no cockups yet. We will leave it there:


There's a slight burr at the join of the taper and the face that fouls the register on the chuck backplate. I manually machined that off:


Now the face needs to be skimmed back, as there is still a rattle fit on the taper. How much? Plastigauge to the rescue. The taper is 7.125 degrees, so each mm of reduction in the radius of the taper will result in an 8mm needing to be removed from the axial position of the face, since Tan(7.125) = 1/8. I ensured the gap was on the Plastgauge side when squashing the backplate up against the spindle tape, so the 150um represents the total diametric gap.


With a radial gap of 150um/2 = 75um, I need to skim the face about 0.6mm axially (=75um x 8). Perhaps a bit more than I'd planned but there's not much I can do. Obvs if that gap were too big, I'd find problems getting the cams to tighten up...


How's that looking?


Really rather good!

There. Job done. Good tight fit on the taper and no cockups along the way.

What about the runout?

The next (final?) step is to do the final assembly and check the runout. Firstly, the grubs screws that hold the cams need to be ground back a little. Skimming 0.6mm off the face of the adaptor has made them stick out slightly proud of the adap[tor body so that the chuck can't sit flush. A quick spell on the belt sand does the trick


The Multisize collet chuck is probably the most accurate chuck I have, so let's use it to do a proper runout test. This is the internal taper that the collets locate against. The runout barely registers on this 10um DTI, so is of the order of 1um or so and most of this is surface roughness rather than actual runout.


And here's the proof:

I think we can call that a success. Thank fuck for that. And woohoo - I've actually finished a job for once in my life!

Sunday 31 December 2023

CAD time - couple CBR600RR throttle bodies to my 1967 Honda S800 engine

Having played with the 3D scanner and dismissed this as a sensible means of "designing" stuff, I'm going to focus on CAD solutions for connecting up the throttle bodies and crafting some sort of airbox solution for this setup.

Here's the current arrangement - the throttle bodies (ITBs) are only loosely held in place here on the S800 intake manifold, to illustrate the general concept:


I've previously hacked off the bottom of the original CBR600RR airbox, "leaving for later" the question of how to close it up again. The original airbox fouled the alternator.


The secondary injector bank sits in front of the intake trumpets. They only come on at high engine speeds and throttle settings.



It's ages since I last fiddled with this setup. Back then, my solution to matching the ITBs to the engine were these aluminium adaptors. They are needed because the engine ports are slightly Siamesed in pairs. 


Each pair of ports (1 and 2, 3 and 4) are on 65mm centres. But overall, the ports on the engine are spaced such that the average spacing across the 4 cylinders is 74mm, which is rather handy given that the CBR600RR ITBs have a consistent spacing of.....74mm across all 4 ports. If you do the math, that means each inlet in a Siamesed pair requires a 4.5mm offset.

I went with this hooky solution because it was the best I could do back then. These were made by clamping some thick wall aluminium pipe eccentrically by 2.25mm in the 4 jaw, then machining each end (manually). Ideally, the porting would be flowed to avoid sudden discontinuities. I had imagined that I would do this manually at some later date using a hand held burr.



The inlet ports are somewhat less than free flowing with those steps at the transitions:


Here's what I plan instead. The rubber adaptors are looking a bit perished after 46 years, so it may be rather foolish to design around them. Instead, I will mount my new adaptors direct to the water cooled inlet manifold. This means the mounting surface could see ~100C which is a bit hot for most 3D printed materials. However, the solution may simply be to make a heat insulator plate from Acetal / PEEK or similar. I can deal with that later.


Using the Loft function, I can sort of align the inlet and outlet so they transition more smoothly.


Let's try out the idea in PLA. Obvs I won't be using PLA on a real (hot) engine with gasoline but this should give me an idea if the concept is workable. I'd probably get them made by one of the online providers using something more sensible like glass filled PETG or perhaps some sort of SLA material.


The weak point will be the relatively narrow (thin) neck that mates with the rubber connector at the back of the ITBs. One solution might be to make a short metal insert that fits into the plastic body - but this would require some new materials that I don't currently have and some machining thereof.

Revopoint POP3 3D scanner!!

What up?
I'm sort of preparing myself to get involved with my 1967 Honda S800 coupe again. It's been salted away for the last 30 years (family, kids etc) and deserves to be brought back to life. Rightly or wrongly, I decided to replace the original quad carb setup with a fuel injection system. Nobody knows why - but either way I am some way down the road with it, having hacked the fuel tank about and fitted it with a high pressure fuel pump, so there seems to be no going back.

The main activity remaining is finishing off the airbox, ideally in such a way I can incorporate an air filter. The issue being that the original CBR600RR airbox clashes with the alternator.

Here's the intake side of the engine:



And after a few hours buggering about with the scanner, I've got a sort of result. Ish.








Hmm. Quite a few bits missing here. Here's what the scanning process looks like when you have parts that are small enough to fit on the (Bluetooth controlled) turntable:


The throttle bodies are almost recognisable here, but this is hardly a breathtakingly accurate model. 


I seem to be stuck between 2 extremes: on the one hand, to get decent scanning (ie without losing "tracking" continuity), you need lots of features that the software can recognise and use to stitch together the hundreds of scans, yet wtih too many features, the software is easily overwhelmed. I seem to have fallen foul of the latter. 

Conclusions:
For now, I will conclude that these scanners are good for scanning smallish, organic shapes eg broken handles, hooks, housings etc, thus avoiding having to fully design stuff in CAD. For larger components such as my throttle body assembly, I will be better off sticking to conventional CAD. Must say, I'm somewhat less than surprised at this finding.

Certainly, I'm clearly not going to be able to create a meaningful engine and throttle body model that I can sensibly manipulate within Fusion 360, so for now the scanner will go back in its box while I stick to CAD.

Not vastly surprised or disappointed but it's good to have some clarity as to whet this is good for. And yes, I wouldn't have bought this if it hadn't been for the "season of giving".

Dell XPS15 9550 new keyboard and palm rest

Yes, there's movement in the workshop again after a prolonged break due to "other stuff" going on. This time it's not meta...