Tuesday 31 July 2007

Hotting up

The latest RepRap heater design consists of insulated nichrome wire wound around a threaded barrel and then stuck down with a coating of J-B Weld high temperature epoxy. I think that is a good way to do it but the insulated nichrome is expensive and I happen to have some nichrome from a heating element. It came from an old hair dryer I think.



Luckily it seems to be the right gauge to give me a reasonable number of turns. The spec was for 8 ohms which gives a maximum wattage of 18W at 12V. That gave me a length of about 340 mm which made 17 turns. I attached some tinned copper tails to make the connections easier to handle. I tied them to the nichrome and then soldered it. On reflection that was probably a bad idea as the solder does not stick to nichrome so if it oxidizes it may go open circuit. Small crimps would be a better I think.

I started by laying down a layer of J-B Weld to insulate the barrel.



After letting this dry for 24 hours I put it in the lathe and turned it down to as thin a layer as I could get before it started flaking off. That was at about 0.2mm.



I added some more J-B Weld to repair the gaps and also used it to attach one end of the nichrome.



After another 24 hours I put it back in the lathe to make the winding.



Finally I added another thick layer of J-B Weld and left it another 24 hours to set. A very slow way of doing it compared to using insulated nichrome and a single coat of J-B Weld.



I tested it by putting a thermocouple probe down the barrel and running it from a variable bench power supply. I heated it up to 200 °C at which point it smoked a bit and the J-B Weld started to discolour. I dropped it back down to 160 °C which only required about 5W of power and pushed some HDPE filament down it. Pressing as hard as I could I got it to extrude some 0.75mm diameter filament though the 0.5mm hole in the nozzle. You can just see a little bit poking out in the picture of the finished article below :-



I don't know how long it will last, the J-B Weld may crack as there is nowhere for the nichrome to expand to. Insulated nichrome would be better in this respect.

There should also be a glass bead thermistor attached to the nozzle to monitor the temperature so that it can be regulated in software. Having seen the resistance of copper stepper motor coils increase noticeably when they get hot, and tungsten light bulb filaments change resistance by a factor of ten, I thought I should try using the resistance of the heater to measure its temperature. The resistance didn't seem to change much so I looked up the temperature coefficient and found it was much lower than other metals, so that is a non starter. I have ordered a couple of thermistors but they are out of stock at the moment so I will have to run it open loop to start with.

The next thing to do is put the pump back together and see if it can extrude.

Wednesday 25 July 2007

Well sprung

Some versions of the RepRap FDM extruder use four springs to press the filament against the threaded rod. The latest version uses compressed plastic piping but I read somewhere that it loses its tension over time. When I was dismantling the CD player out of my Jukebox the other day I came across five reasonably powerful springs :-



Unfortunately the two at the back are not as strong as the front three. However, Forrest Higgs has shown with his Tommelise machine that you can get away with just two springs at the top so I will put the weaker ones at the bottom.

Another problem is that the springs are too big in diameter so I made some stepped washers out of Perspex to fit in the ends. As eight were needed this was the biggest run of things I have milled so far. It was a good way of using up all the scraps of Perspex left in between things I have milled previously. The only problem was that a few disappeared up the vacuum cleaner and had to be retrieved from the bag!



I was worried about the friction in my extruder channel so I tried polishing it with metal polish. This worked very well and greatly reduced the friction. A friend just happened to give me a spray can of PTFE dry film spray today so I gave it some of that as well.

I put the pump together minus the barrel and checked that it can move HDPE filament. It remains to be seen if it can extrude it.

Monday 23 July 2007

Boring

Well turning, boring and tapping to be precise. I made the extruder nozzle and PTFE heat barrier this evening :-



I am making a mixture of an older RepRap design and the latest, mainly because I bought the parts before the design was changed. I made a small modification to the nozzle design. You are supposed to use a bottoming tap to thread the inside of the PTFE tube. As I don't have one of those, I drilled the hole 5mm deeper to accommodate the tapered end of the tap. I also turned the last 5mm of the nozzle down instead of threading it. I should have made the PTFE tube 5mm longer but I forgot so I have slightly less heat barrier.

I am not totally happy with the nozzle because I bent it while I was threading it with a die. I don't think it will affect the operation it just looks a bit scrappy. Here they are screwed together and inserted into the clamp :-



I need to add the heating element next.

Sunday 22 July 2007

Steady as she goes

I can confirm my homemade "three point steady" does work, I made this with it :-



It's the RepRap extruder drive screw which fits in the bearings shown in my last post. The RepRap instructions say to use a blow torch and plumber's flux to attach the steel cable but I found it easier to use a soldering iron and electrical solder.

Here it is installed with a small G-clamp in place of the top half of the pump :-



And here is a video of it being tested with a variable DC power supply until it shed the clamp :-

Bearing up

The bearings for the extruder pump are supposed to be made from brass and I had a bit of brass rod earmarked for the job. It is only 9mm diameter but the bearings are supposed to be 10mm. I had planned to make the holes in the pump housing smaller to compensate but I forgot. While wondering what to do I just happened to find a 10mm steel pin lying around at a rubbish tip.



The fact that there is no rust on it suggests that it is some form of stainless steel. It is certainly quite hard. I tried to cut it on the lathe with a parting off tool and all it it did was take the tip off the tool.



I next tried cutting it by holding a hacksaw against it while spinning it in the lathe. That worked but was very slow and shook the lathe a lot. By far the best way was to just saw it in a vice with the hacksaw.

I drilled the hole down the middle on the lathe. I had trouble centering the pilot drill. You are supposed to use a special center drill as described here, but I don't have one of those so I used the surprising technique called "catching the centre". Here are a couple of excellent videos I found that describe this technique: -





Once I had got the drill started I put the chuck back in the tailstock and drilled the full length with 1mm, 2mm and 3mm drills.

Here are the finished bearings :-



The RepRap instructions suggest that the bearings should be made after the spindle but I think it is better the do it the other way round. That way you can try the bearings against the spindle while it is still in the lathe and turn the spindle down to the right fit.

Wednesday 18 July 2007

Steady on

A friend pointed out to me that actually I have reinvented the "three point steady". Here are some examples I found on the web :-







Incidentally the only reason mine has flat sides is because the width was limited by the size of the raw material .

I have not had a chance to try it out yet, but it looks like I am on a well trodden track.

I have had a request to show the ten lines of Python which draw the simulation window. These are :-

In the constructor:

self.root = Tk()
self.root.title("HydraRaptor")
frame = Frame(self.root)
frame.pack()
self.canvas = Canvas(frame, width = 710, height = 765)
self.canvas.create_rectangle(-70*5, -76*5, 70*5, 76*5)
self.canvas.pack()

In the destructor:
self.canvas.config(scrollregion=self.canvas.bbox(ALL))
self.root.mainloop()

In the feed_xy function:
self.canvas.create_line(self.xy[0]*5, -self.xy[1]*5, pos[0]*5, -pos[1]*5)

I am sure there is a better way to do the scaling, replacing the magic numbers with constants would be a start!

Tuesday 17 July 2007

Dinner and Delrin

I am used to being inundated with HDPE milk bottles but it's something when your dinner guests bring you a bottle of wine and a carrier bag of Delrin scraps! Very welcome of course.

Not posted for a while because, apart from entertaining, I have been puzzling over how you drill a centred hole in the end of a long workpiece using a lathe. Several of the RepRap extruder parts need axial holes drilling down the middle of them. On a normal lathe these parts would not be considered long. They would be pushed back inside the chuck, so that the end which meets the drill mounted in the tail stock is well centred. On the scale of watch parts they are massive so they are too big to fit down the spindle of my watchmaker's lathe. If I put the far end in the chuck then the near end drifts out of centre. Normally you would support a long item with the tail stock when turning it, but how do you support it when drilling?

Here is a picture of a 1mm pilot hole being drilled in M5 threaded rod with a drill guide. Although this was only slightly off centre each successively bigger drill wandered further out.



The problem is not unique to my small lathe as it would occur with larger parts on a larger lathe. I searched around the web for a solution but I did not find one, so I decided to solve the problem by making a new part for the lathe. Not sure what to call it but it is a sort of inside out live tailstock. I.e. rather than having a bearing which meets the end of the workpiece, it has three rollers which support the outside of the workpiece, keeping it centred but allowing it to turn freely with access to its end for drilling.



This is the largest thing I have milled so far, so not wanting to risk wasting time and material, I decided to add a tool path simulation view to my Python script. As I have come to expect with Python this was trivial. A quick Google found me the Tkinter package. A quick scan through the tutorial and ten lines of code later here it is:-



I don't know if the new device works yet but it looks promising. Here it is with some M5 threaded rod spinning in it:-



I don't know if I have invented a new tool or just reinvented the wheel, or three wheels to be precise.

Tuesday 10 July 2007

Peck it till it squeaks

Not much progress recently as I spent the weekend at the British F1 Grand Prix. The next part of the extruder that I made is the motor holder. Surprisingly this gave me the most trouble.



Obviously, as it is a 3D structure with overhangs, it cannot be milled out of a solid block and would be very wasteful of material if it could. Instead I made it out of three pieces of 6mm Perspex sheet. I always think of this as being pretty flat but in fact its thickness varied by about 0.25mm across a six inch square cut from a larger sheet. This wasn't a problem however.

The first problem I had was getting the dimensions from ArtOfIllusion. For the other bits I have been clicking on sub components of the object to get the size and position. In this case the model seems to have been constructed in a different way so I could not select sub parts. Also there seems to be no rulers or dimensions in AOI and the grid labels are poor. In the end I redesigned it in Visio taking measurements from the motor itself. The shape of mine is a bit simpler but I think it holds the motor in the right place so it should work.



Milling these three parts was straightforward, the hard part was drilling the holes along the plane of the sheet. There are four M3 clearance holes which are 24mm deep. These are very hard to drill in Perspex without getting the drill stuck and very time consuming. The way I did it was to make a paper template with cross hairs in Visio. I cut it out and aligned it with the edge to be drilled. I then marked the centre by drilling a few mm with a 0.5mm drill in a hand held pin vice. I then drilled the holes using a very slow drill in a drill press and the piece in an improvised drill vice. I started with a 2mm drill then opened them out with 2.5mm and 3mm drills.

You can only drill a few mm at a time before the drill starts to bind because the swarf cloggs the bit and then the Perpex melts and sets again incarcerating it. You can't then turn the drill backwards or forwards. The first time this happened I thought I was going to have to smash the workpiece to recover the drill and start again. However, I did find a less drastic way to get the drill out. I put it in a spare chuck which is the good old fashioned type with a chuck key. I tightened this as much as I could, rested the workpiece on top of vice jaws with the chuck below and tapped it with a hammer. This does work, I had to do it several times.

You have to use a pecking action while drilling. I drill until I hear the Perspex squeak which indicates the onset of binding. I then back out and brush off the swarf and repeat. Very tedious, perhaps a lubricant would help but I have no idea what to use on Perspex.

To fasten the pieces together I chose M2.5 screws and decided to tap the Perspex. The only problem there is that I have a set of large taps that go down to M3 and a set of small taps that go up to M2. I thought tapping M3 in 6mm Perspex was likely to crack it so I decided to try using the screws to cut their own thread. That was a nightmare with binding and the heads shearing.

Anyway, eventually I got it done and am quite pleased with the result.



At some point I will mount a drill vice on my X-Y table, add a laser centre finder and create a highly accurate semi-automatic drill press. Hopefully I can monitor the motor current to detect the onset of binding and make the pecking automatic.

Now I need to do some lathe work to make the moving parts, barrel and nozzle.

Tuesday 3 July 2007

All hands to the pump

I finished milling the polymer pump casing this evening. Here it is :-



The bearing gaps gave me some problems because they require a small ball end mill with a relatively long reach. As I said before all my small milling bits have shafts bigger than their heads.



Rather than order one from the US and wait for it to come I decided to try grinding down the shaft of one of the ones I already had. I put it in the lathe but it was too hard to be turned down with a cutter. Instead I put a small grinder in my Minicraft drill and held it against it while it was spun in the lathe. This worked quite well as you can see :-



The parts aren't exactly to the ArtOfIllusion models provided by RepRap. Obviously internal corners have a minimum radius due to the tool being a finite size so I will have to bevel the outside edges of the bearings a little. Both the polymer channel and the bearing gaps have a slight overhang in the models. While this would theoretically be possible with a larger ball mill it would make the programming more complicated. Hopefully I can get away without it.

I also increased the bore of the polymer channel from 3 mm to 3.2 mm as my reel of HDPE is a bit over sized. I am still a bit worried about this being too tight. Also the material I used is not as slippery as say PolyMorph so there may be too much friction. I think I will open it up slightly with some fine emery paper and then polish it with wax.

Sunday 1 July 2007

Coupling

Well in my last post I said things could only get worse and they did! I picked the extruder motor coupler to make next as it looked easy. Ironically the first thing I did was to destroy my z-axis motor coupler by getting the vacuum pipe trapped underneath the drill. It's amazing how much torque a decent stepper motor can deliver. Fortunately I had another stronger coupling lying around.



The only problem was that the hole for the shaft was only 6mm and my shafts were 1/4 inch. Luckily I posses one reamer and it happens to be 1/4 inch. I didn't even know it was a reamer until a friend told me it was recently. I thought up to then it was a milling bit. It got a bit toasted the other day when I used it to cut MDF at 30000 RPM. Still it worked on aluminium like a dream with some paraffin lubricant and my drill set to its slowest speed.



The machine is a lot noisier with the thicker coupling so perhaps a rubber one would be better.

The next disaster was that I dropped my camera on the floor and broke the USB connector so I had no way to get the pictures off it. Surface mount connectors are a nightmare. They make production cheaper but they are just too fragile for external connections. It broke off the PCB and all the pins came out. I managed to solder it back on and press the pins back in, hence these photos.

Milling the coupler was tricky because the small milling bit I used to keep the corner radii small has limited reach because its shaft is 0.3mm bigger than its head.



The coupler is 16mm deep so I had to step the outside out 0.2mm half way down. Similarly the inside slot had to step in. It made the programming complicated because in order to step out part way down you need to have opened up the gap to the scrap above. I.e. you have to cut a sort of stepped V shaped trench needing three passes.

The final result came out OK



It couples the motor which has a round shaft with two flats to a hexagonal nut. Here it is attached to the motor :-



I have made a start on the polymer pump halves but they have curved upper surfaces requiring a ball end mill and true 3D milling so a bit more programming is required.

Friday 29 June 2007

Bob on

Here is the first RepRap part that HydraRaptor has milled :-



It is the extruder barrel clamp as shown in the previous post. As you can see it is dimensionally correct to two decimal places! It's not a fluke, the height is bob on 45.00mm as well. I have been getting pretty good accuracy with my previous milling attempts but this is astonishing.

I used a smaller end mill (2.22mm) in a collet chuck which is more accurate than the three jaw chuck I used before. The plastic is a sheet of 9mm Delrin or Acetal which I used because I read somewhere that it was a good plastic for machining. It did machine well but all the edges were left with a thin burr. This was fairly easy to remove with a fingernail.

This is not the latest version of the RepRap design but I decided it would fit my machine better. I added two more mounting holes and changed the central hole diameter to match my PTFE barrel which is 12mm rather than 10 or 16mm in the original design. The central slot is 2.5mm rather than 2mm because my bit was too big. Obviously I will have to drill the horizontal hole for the clamping bolt with a drill press.

Here is an edited video of it being made, it took around 20 minutes to make the part :-



And here is an amusing out-take if you listen to the sound :-



So having achieved perfection on this first part, things can only get worse when I attempt to make the rest of the extruder.

Tuesday 26 June 2007

End of play

You may recall that I said my replacement spindle motor, AKA Minicraft drill, had a bit of end play due to the bearing moving. This evening I made some shim washers by milling a thin piece of hard plastic that I got from the inside of a PC power supply. They are 11mm diameter with a 8.5mm hole and about 0.2mm thick. They were a bit ragged round the edges due to the plastic burring quite badly but it didn't really matter. I made three but two were enough to stop the bearing moving.



This is what the inside of the drill looks like. I added the capacitor myself to keep the radiated emissions from the cable to a minimum.



The result was very pleasing and I now have a working milling machine again. My next job will be to mill an FDM extruder. I plan to start with the clamp as this looks the easiest part.




Obviously I will have to modify it a bit. For example I can't do sharp internal right angles due to the tool's radius.

Monday 25 June 2007

Bodge it and move on

The I²C nightmare continues. I thought slowing the clock of the MSP430 had fixed the problem. However, it still locks up after a few packets. The symptoms are that the MC9S12NE64 decides that the MSP430 has not ACKed the address byte. At this point both clock and data are low. The MC9S12NE64 sends a stop and both lines go high. It then thinks the bus is permanently busy. If I reset the MC9S12NE64 then it works for a while again so the MSP430 is not locked up.

So my first bodge was to detect the MC9S12NE64 thinking the bus is busy when it should not be and reset its I²C module. This caused it to lock up thinking the bus was not busy when it should have been. In desperation I added a 100us delay after the reset and now it works.

It looks like my digital scope will not arrive for at least a couple of weeks so I can't really get to the bottom of this until then but at least it is working with retries. I haven't done a lot of I²C stuff in my career but it looks like a really clever protocol. Less wires than SPI but has defined start and stop codes, multi-master arbitration and auto clocking down to the slowest device. As both ends implement it in hardware I just expected it to work. I should have known better as most hardware has bugs these days like all software.

Thursday 21 June 2007

The day the music died

Although I am fortunate enough to have a project room which is nearly 3m by 4m, as you can see it almost completely full of junk.



The large glass fronted MDF box on the far left next to HydraRaptor is a 400 CD jukebox that I designed and made in 1990. I used it for about 10 years until the CD player's laser wore out. At that point I ripped all the discs and stored them on my PC as mp3s. I haven't used it since but I could never bring myself to dismantle it as it is probably the best thing I have ever made. However, this week I got fed up of not having enough work space so I decided it had to go.

This is what it looked like. It had a sealed glass door on the front which is hard to photograph.



Here it is with the door open.



The discs were stacked 10 high on wooden pegs arranged in semi circles of six on seven shelves, i.e. 42 sites. The bottom shelf had a hole in it above the open CD player drawer and an empty peg used to store the next disc to be played.



That left 40 pegs of ten discs giving a maximum capacity of 400 discs. Worst case, to play a disc at the bottom of a peg, involved moving the nine discs above it to three nearest neighbours. This took about 40 seconds but as long as the playlist was not empty it would get the next disc ready and place it on the peg next to the player. It would then move the discs it had moved out of the way back onto their home pegs. Then it would hover above the player waiting for the disc being played to finish. When it did it would lift it out of the drawer and stash it on an the adjacent peg. It would then insert the new disc and while that was playing it would return the previous disc to the top of its home peg. That way the most popular discs tended to be at the top of their pegs for fast access.

The discs were moved by a robotic arm with a rubber suction cup on the end made out of a toy dart.



This was moved radially by a stepper motor with a gear box. It was attached to a trolley on steel rails which was moved vertically by a toothed timing belt driven by a large 12V DC motor with a gear box. As you can see the end of the arm has three micro switches. The left hand one was used during initialisation to find the home position of the arm. The other two were just for safety. The vertical motor is so powerful it could easily snap the arm off so I wired the limit switches in series with the motor so if the software crashed and left the motor running it would do no damage.

The arm is actually made of two pieces of perspex clamped together at the hub. When the arm descends onto a disc the top piece bends way from the bottom piece and a pair of switch contacts between them part. Again this was in series with motor for safety.

Here is a view of the electronics shelf after I removed the top :-



On the far left is a mains modem which allowed my PC upstairs to communicate with it when it was in its original home in an under stairs cupboard.



Next to that is a small switch mode PSU which powered everything.

In the middle is an aquarium pump which I used to generate the vacuum to lift the discs. I converted it from blowing to sucking by sealing the case and connecting a pipe to the air inlet underneath.

On the right is the controller :-



This is a Motorola MC6809 microprocessor with 32K battery backed RAM, 32K EPROM, a timer, a UART and two PIAs. Nowadays this would be a single chip. Here are the circuits, no free ECAD programs in those days :-



Here is a view with the electronics removed :-



Here is a close up of the mechanics :-



The vacuum pump took a while to build up pressure and release it again so I made a solenoid operated 3 way valve to turn the suction on and off quickly.

The top circuit board is an opto detector which looked at tabs on the right hand rail to know where the shelves were. The board below it is a vacuum pressure sensor to enable it to know if it had failed to pick up or dropped a disc. That only happened during development really but it was vital to detect it otherwise it would lose track of which discs were on which pegs. Originally there was just one vacuum sensor but about twice a year I had to recalibrate it. Eventually I realised this was because the change in atmospheric pressure, due to weather, was greater than the vacuum level. I fixed it by adding a second sensor and measuring the difference between the vacuum pipe and atmospheric pressure. Not a very cost effective solution as the sensors were about £13 each.



Here is a video of it moving some discs. I had to drive it manually from the test routine as it would not run without a working CD player.


You probably will have noticed that each time it picks up a disc it pauses over the peg for a while. This was because the discs tended to stick together by suction after being pressed by the weight of the ones above. This was mainly cured by putting a small circular spot label near the centre of the disc to break the seal. The delay gave time for the second disc to drop back onto the peg if it did initially lift.

So now it is no more, but perhaps I might reuse the vacuum system and the metre long axis for some sort of pick and place machine.

Monday 18 June 2007

Disaster, frustration, success, disaster

Not posted for a while because I couldn't get the I²C link between my main controller and the spindle controller working. Before that I had a minor disaster when I crashed the drill chuck into a block of plastic. It appears to have bent the shaft out of true as the tool runs a little eccentrically now. The drill was made by Minicraft but they seem to have gone out of business. This made me realise how precarious it is to make something out of surplus components and things you have to hand rather than readily available parts. If I break anything then it might be impossible to get a drop-in replacement. Something like the $4000 XY table I got for $400 would be virtually irreplaceable.

Fortunately the drills seem to crop up on eBay fairly often. I got one almost identical except that it has a collet chuck rather than a three jaw one. It seems to have a bit of end play but this appears to be due to the bearing being loose in the housing rather than having play itself. I should be able to fix it with glue or shim it with a washer.

The I²C problem was a nightmare. I could get it to work if I stepped through the code at either end but not if I ran it. I was fairly sure the software was right because I had used the MSP430F2013 code before on a very similar device and it was based on an app note. The code at the MC9S12NE64 end was a translation of some code I used recently on a Coldfire which seems to have an almost identical I²C module. Not surprising as they are both Freescale devices.

Obviously it was a timing issue but all the timing should be done by the hardware. I am only running it at 100K baud and with 1K pullup resistors over 4 inches of cable I should have no problems. Looking round the Web I found an errata for the MSP430 which seemed to have lots of I²C bugs in the B revision of the chip with no workarounds. Mosts of these are fixed by revision C but my chip seems to have an X where the die revision should be.

Because the problem manifested itself as a lockup it wasn't possible to get a repetitive signal to look at on my analogue scope. I decided I should really have a digital storage scope for these types of problem so I ordered a cheap USB scope front end made in China from a company in the US. $360 plus shipping for 100MHz bandwidth, two channels, 250 MSps. Not bad if it works and the software is half decent. Most software to support hardware seems to be complete rubbish these days. I have had four PC TV cards so far each with decent hardware but software that is utter crap.

While waiting for it to arrive I decided in desperation to try reducing the clock speed of the MSP430. To my amazement dropping it from 16MHz to 8 MHz appeared to fix the problem. So definitely hardware not software then.

Flushed with success I added a Python function to control the drill speed by sending a command via Ethernet to the main controller which forwards it by I²C to the head controller. This worked fine but as soon as the drill made contact with the tool height sensor for the first time the sensor stopped working. I thought the shaft of the drill was ground but actually it was +12V. Now that the power supplies are linked by the comms cable it stuffed 12V into two of the 3.3V inputs of the MC9S12NE64 and not surprisingly they don't work anymore! In fact I am surprised any of it still works but most of it does.

So, major disaster. It will be very difficult to replace the chip as it is fine pitch surface mount. I do have some spare inputs I could use providing the rest of the chip holds out. I can probably still buy another demo board but its starting to get expensive repairing my mistakes.

Curiously the replacement drill seems to have an isolated shaft. I knew the first one wasn't but I assumed it was ground not +12V. However, it wouldn't have made any difference because foolishly I switched it with a low side driver so when it is off both wires are at 12V!

So now I have to rewire the tool sensor inputs, add some protection and cobble the two drills together to make one good one, preferably using the motor with the isolated shaft. The I²C comms need beefing up a bit with a CRC, packet sequence flag and an acknowledgment / retry mechanism. I also want to add drill stall detection and employ the shaft encoders on the XY table to detect that stalling as well. Hopefully then I will avoid any more costly tool crashes and move on to making the RepRap extruder.