Sunday, August 21, 2011

Practice with the lathe

It has been a while, at least 4 years, since I have played with a lathe.  So, before I begin to start any serious projects, I wanted to freshen my memory.

My first practice project was to make a spinning top out of some steel bar I had laying around (actually it's precision ground rod from my CNC project, unhardened).

Here it is.

Finished top
And better yet, it works!

Spinning top
The next practice project involved machining a diameter which was at a precise size.  So, using a bearing out of my roller blade wheel, I machined a part to fit it on.

Bearing and mating part
Bearing and mount assembled
Now that I've got the basics down, time for something more advanced.

Grizzly G4000 Benchtop Lathe

Ever since I worked in a machine shop over the summer when I was in school, I have loved lathes.  For a while now, I have wanted my own benchtop version to support my robot hobby.  Finally, I had the cash to buy one.  I bought the Grizzly G4000 9x19 Bench lathe (G4000 link)

First, this is the bench I made to hold it.  It is made of 1.5" square tube with a 1.5" thick wood top.  It has castors for easily moving it around, as well as leveling feet for... well, leveling.

Bench for lathe
The images below are the 'fresh out of the box' images in chronological order.

As shipped
Four jaw chuck
Face plate
Tale stock
Misc parts
Steady rest
Follow rest
Compound slide and tool holder
Stripped lathe
Drive gears and pulleys
Fully stripped lath
Chip pan
The above chip pan is to be used (per the instructions) as the bolt template to drill and secure the lathe to the bench.  It's obviously pretty easy to drill the two holes for the 1/2" bolts when you have the machine, but it would have been nice to have the information before it arrived.  So, for your convenience, the bolt center to center distance is approximately 23 3/16", as shown below.

Lathe mount bolt distance

Re-assembled lathe on bench
Workshop

Tachometer Project is Complete! (kinda)

Since my last posting, a lot has happened.  I received the new tachometer board, populated it, programmed it, and then tested it.  Below is an image of the testing set-up.

Prototyped Tach Board in Test
In the image above, you can see the oscilloscope to the left which is hooked up to the photogate signal.  I have a motor spinning an incremental encoder wheel (a disk with slots on it) from an old ball mouse.  You can also see the RPM is being displayed on the serial display.

The current code works by counting the number of 'highs' within 250 ms (1/4 sec) and doing some simple math to compute the RPM.  Although the code is working and I can call this one 'completed', I'm not too happy with the accuracy.  It is slightly inaccurate because of the method I used (as described above).  The more accurate method involves measuring the time between 'highs' (or teeth in my case).  That way there are no rounding errors.

The current method rounds down, so if the chip has counted 55 highs and is 95% to the next high, just as the time ticks to 250ms, it only sees 55.  So the extra 0.95 high is not counted.  If your gear has very few teeth, the time between teeth increases and your error becomes bigger.  The high to high counting does not have this issue.

This whole project started off by wanted to provide an RPM measurement for my dad's Mini-Mill from Grizzly.com (the G0463).  Finally, the project is at a phase where we can integrate it to the machine and I can update the program later (if I get the energy).

The images below show the mini-mill's gears which I plan on hooking my magnetic tooth sensor too.

G0463 Mini-Mill with gear cover removed
Below are the spindle and drive gears with the number of teeth marked on each.  I will obviously need the number of teeth per revolution to program into the chip.  It was not obvious to me, at lease not right away, that after you know the number of teeth per revolution, it does not matter which gear, big or small, you place the sensor next too.  Ponder it... you'll figure it out. (it's not like belts and pulleys). 

G0463 Mini-Mill Spindle and drive gears
And next I had planned to include an image of the populated board and all of the external parts (display, tooth sensor, and battery clip), but apparently I forgot to take a picture before handing the assembly over to my dad.... well, you'll have to wait.

Saturday, June 18, 2011

PIC16F688 Timer 1 Code

After developing the code on the PIC16F877A for my tachometer, I decided to use the PIC16F688 since it was cheaper and smaller.  Below is the code to run Timer 1.


// PIC16F688
// Flash LED with Timer 1
// RoboSlave.Blogspot.com 6/2011


// -----------------------------------------------------------------------
// Includes
// -----------------------------------------------------------------------
#include "system.h" // Include general file


// -----------------------------------------------------------------------
// Configuration Bits
// -----------------------------------------------------------------------
#pragma DATA _CONFIG, _PWRTE_OFF & _WDT_OFF & _CPD_OFF & _HS_OSC & _CP_OFF
#pragma CLOCK_FREQ 20000600


// -----------------------------------------------------------------------
// Defines
// -----------------------------------------------------------------------
#define TimerLED portc.0


// -----------------------------------------------------------------------
// Interrupt
// -----------------------------------------------------------------------
void interrupt( void )
{
if( pir1 & (1<<TMR1IF) )   // Handle timer1 interrupt
{
TimerLED = !TimerLED; // Toggle Timer LED
pir1.TMR1IF = 0; // Reset interrupt flag
}
}


// -----------------------------------------------------------------------
// Main Program
// -----------------------------------------------------------------------
void main( void )
{
ansel = 0x00; //Configure portC as I/O
cmcon0 = 0xFF; //Configure portC as I/O


trisc = 0x00;   //Configure port C
portc = 0x00;   //Initialize port C


tmr1h = 0x00; //should be cleared before enabling interrupts
tmr1l = 0x00;


intcon.GIE = 1; //Global Interrupt Enable bit
intcon.PEIE = 1; //Peripheral Interrupt Enable bit
pie1.TMR1IE = 1; //Timer1 Overflow Interrupt Enable bit


t1con = 0b00010001;


     while (1)
    {
}
}

Friday, June 17, 2011

Tachometer Board and Programming

Since the last post, I have been working on getting version 1.0 tachometer board up and running.  It turns out that creating the schematic and laying out the board in one night is too fast for a novice like me.  I made a number of simple mistakes that doomed the board from the schematic level.

Bad Schematic (REV -)
The two areas boxed in red were incorrect. VDD is positive 5V and VSS is ground. Apparently the PIC16F688 does not work well when it is not grounded properly. However, it does show some life.  For whatever reason, I was still able to blink an led. The delay between blinks was 5X slower than it should have been, but it did work.  This played havoc with my programming because I was convinced the board was working properly.  Finally, after a bit of programming help from the Sourceboost C forum (my thread), I managed to get Timer 1 working properly. I also have fixed my current board, shown below.

Fixed Board
The schematic has been updated to fix the errors, as well as add holes to connect to the unused pins.  I wanted this in order to use the board for prototyping in the future.

Updated Schematic (Rev A)
Updated Layout

Sunday, April 17, 2011

Tachometer board has arrived

I ordered three boards on March 25th and six show up on April 14th... Thank You BatchPCB!  After about 30 minutes of soldering, the board was fully populated.

Populated Tack Board
My desk after soldering
Best of all, I plugged my PicKit2 into the board and it was recognized!  All I need to do now is fix the code so that it works on this PIC16F688.  I developed working code on the PIC16F877, which I do most of my programming on.  Unfortunately, I did not realize the vast differences between the two... not quite plug-n-play.

Friday, March 25, 2011

Tachometer board has been ordered

Last night, I managed to get the tachometer programming and circuit all figured out.  Before I knew it, I had the schematic and then the board laid-out.
Tachometer Schematic
Tachometer Board Lay-Out
After about two hours of playing around with the schematic and moving the components around on the board, I decided I was done.  I then placed an order with BatchPCB.  This board is 1.17x1.54 inches, and cost $4.51 each with a $10 handling fee.

I also placed an order with Digi-Key which contained the gear tooth sensor which will be mounted within the gear box of the mini mill.  That order is below.
Digi-Key Order