Digital Planer/Sander Gauge

03/25/10 Update

04/13/10 Update


As part of my woodworking hobby, I had acquired both a Dewalt DW733 portable thickness planer and a Performax (now Jet) 16/32 drum sander over the years.  Both tools are fine but I have always wished for better, more accurate thickness control.  I use a set of calipers to measure board thickness after a pass but the actual measurement scale supplied on each tool is just a moving pointer on a fixed scale so it can be difficult to get consistent, repeatable results.  Wixey makes a digital gauge that I could purchase and install but what fun would that be.  Besides I wanted a gauge that I could program to work the way I wanted it to not the way someone else wanted it to.  It would be ideal to basically attach the calipers I was using directly to the machine.  I had seen numerous sites over the years that covered hacking and interfacing an inexpensive digital caliper and thought that this might be a good way to go.

I use several different sleds and jigs on both machines so a gauge which I calibrate once and then don't have to calibrate again wouldn't quite meet my needs.  Wixey has a relative mode where you can measure your board, subtract the desired thickness from the measured thickness, set the gauge to zero and then adjust the machine to remove the required amount.  My plan was to measure a board, set the gauge to the measured reading, and then, as you adjust the machine, the readout will read the actual board thickness.


As I mentioned above, my plan was to use an inexpensive digital caliper like the kind they sell at Harbor Freight.  The calipers are made in normally China and you can buy them numerous places.  There are also numerous web sites which have detailed information about hacking these calipers.  I have actually seen them on sale at Harbor Freight for as little as $10.  Here's what mine looked like:

digital caliper

The interesting thing about these calipers is that they have a small, sliding window that, when opened, exposes 4 connectors on the circuit board that provide an interface to the caliper and its readings.  The interface looks like this:


The 4 connections are ground, data, clock, and 1.5 Volts from left to right.  The data is clocked out on the data pin about every 300 to 330 ms and is composed of 2 - 24 bit numbers that represent an absolute position and a relative position since the last time the caliper was set to zero.  The numbers are in 1/20480ths of an inch.  There are a number of web sites that probably explain the protocol much better than I could and I provide a link to many of those sites at the bottom of this page.

I also needed a cable to connect to the caliper and Little Machine Shop sells just such a cable.  The problem is that there really doesn't seem to be a mechanical standard for the caliper housing and they are not all the same.  I have three of these calipers and the cable only worked really well on one of them.  My solution, which I also found on the Internet,  was to solder the wires directly to the circuit board and provide a simple strain relief.  The idea and detailed instructions for this modification are provided on this web site (which is in German but translated here into English) and worked really well.  This is what my circuit board looked like with wires attached ready to re-assemble:


Finally I made several modifications to the calipers themselves just to simplify mounting for my application.  I added 2 - 1/4" X 3/16" bushings and planned to mount them on my machine with a pair of 3/16" shoulder screws.  Unfortunately I ignored the fact that the calipers are positive ground (in that the +1.5 volts is connected to the frame of the calipers).  For that reason they needed to be isolated from the metal frame of the machine so I ended up mounting the calipers with nylon hardware.  This would be optional and may not be necessary at all depending on your application.  Here's my completed calipers ready to go:

finished caliper

The final piece of the system is the interface itself.  I chose to use an Atmel AVR micro to interface with the calipers - specifically an ATMEGA168.  Most of the information I found on the Internet related to using PIC processors so this is the first AVR implementation that I'm aware of.  The program only uses 19% of the processor memory so a smaller processor would work but I wanted room to grow and I only stock 2 or 3 different processors since the cost difference for a one-off application is nominal.  Here's the schematic for the interface, you can click on it for a larger view and the files are available for download at the bottom of this page:


There are several interesting things to discuss here.  As I mentioned, the processor is an ATMEGA168 running at 8 Mhz.  I probably could have gotten by using the internal oscillator but I chose to add an external resonator.  Although I'm not currently using it, I added a header for RS232 serial communications in case I needed it in the future and the internal oscillator is not always accurate enough for reliable RS232 comms.  I'm using an external 5 volt regulated wall wart so no need for a 5 volt regulator but I do like to provide reverse voltage protection to my projects and that presents a minor problem since the normal method is a blocking diode but that would lower the 5 volts to only about 4.4 volts.  The solution was to use a PMOSFET in an unusual configuration.  Rather than a detailed explanation, here and here are two sites where I got the idea and that explain this use much better than I could.

The calipers require 1.5 volts so I used a TI TSP769 series LDO regulator.  This regulator also has shutdown capability.  I have connected this pin to a processor output pin but am not currently using this feature.  The problem with 1.5 volts on the caliper volts is that signals from the clock and data pins are also 1.5 volts and, since I'm running the processor at 5 volts, the Mega168 data sheet specifys the input port high voltage needs to be a minimum of 0.6Vcc - that means I need a minimum of 3.0 volts to recognize a high signal.  I solved this problem by using a 2N3904 NPN transistors with appropriate resistors on both the data and clock signals.  This has the effect of boosting the high voltage to 5 volts and also inverting both signals.  This doesn't really bother me since I can compensate for the inversion in software if necessary.

You can also see an NLAS4501 analog switch that can connect 1.5 volts to the clock pin through a 10K resistor.  This can be used in software to zero the calipers.  There is also quadrature encoder with push button switch which provides the user interface to the caliper gauge.  This is connected according to the encoder data sheet.

Finally there's a Crystalfontz LCD to display the readings and three LEDs - one for power on, one for mode display, and the final one is a heartbeat signal that is toggled every time a new reading is received.

Once the schematic was designed and tested, the next thing was a PCB to build the interface.  Here's the designed and the completed PCB:

pcb design


I designed the board using FreePCB and purchased the board through BatchPCB.  I have used both of these for several projects now and have been very pleased with the results.  I also used an enclosure from SparkFun.  I have used these enclosures before and I like the size and the fact that they are clear and you can see your project and any LEDs you might have.  Here's the populated board and the finished enclosure:



Finally, here are all of the pieces together:

all pieces


The software is written with Bascom AVR from MCS Electric.  I have been using this software for quite a few years and find it to be very good, very fast, and easy to use.  There are two modes in the program - calibrate mode and measure mode.  The main loop in the program checks the encoder pushbutton and, when pressed, toggles between the two modes.  In calibrate mode the software monitors the encoder movement and allows the user to dial in a measurement which then becomes the current measurement and all further movement of the calipers are relative to this value.  In measure mode the calipers are read with each update and this value is added or subtracted from the calibrate value and displayed on the screen.  The current mode is displayed on the LCD as well as either the set point or measured value.  The current mode is also indicated by an LED on the board.  Both modes are controlled by interrupts.

In measure mode, the clock pin is connected to the Int0 pin.  An actual set of readings only takes about a millisecond so the software looks for any clock signal then waits 5 milliseconds to make sure we are past a reading before enabling the interrupt, this prevents us from starting in the middle of a reading.  Once enabled, the interrupt signals when the clock start signal is detected and the interrupt routine clocks in the 2 - 24 bit signals that the caliper sends out using the Shiftin routine.   Each time a new reading is available, the main loop combines this new reading with the calibrate set point and displays this combined reading on the LCD.  Here's what a typical reading looks like on my scope:


The calibrate routine uses several interrupts.  The two quadrature outputs are connected to inputs which are configured as pin change interrupts and a separate Timer1 interrupt is also enabled.  The Timer1 interrupt occurs every 65.5 ms and increments a variable to a max of 5.  Each time an encoder interrupt occurs, the interrupt routine determines the direction of the encoder and checks the value of the timer variable and, using these two pieces of information, determines whether to add or subtract to the calibrate value and how much to add or subtract.  Each time the value changes, the reading is updated on the LCD.  Using this method, if you turn the encoder fast, the value will be increased by large amounts and, if you turn slowly, the value will be incremented by a minimum amount.  This way you can get to a large number quickly and then slow down to dial in the exact value desired.

Finished Project

Here are a few pictures of the finished project mounted and in operation:

Downloads and Future Plans

I'm providing a full download package that includes all of the relevant files for this project including:
You can also purchase a PCB directly from BatchPCB.

My next step is make a second gauge and install it on the sander.  In retrospect there is one thing I would probably change if I started over again.  I would probably add a large capacitor that would keep the voltage up for a few seconds after I powered the unit down.  That way I could detect that the power was shut off and save the current reading to  EEPROM so that I could make that the calibrate reading the next time power was turned on.  I can accomplish the same thing on this board by installing a momentary contact switch and saving the reading if I press the switch.  I actually added a two pin header on the current PCB just in case I wanted to do something like this.

Here are some of the Internet links that I found useful in developing this project presented in no particular order:

Updated 3/25/10

After a few months of using the new gauge, I decided I needed to make a few upgrades.  I still had a header on the PCB labeled Switch that I had originally thought of using to change modes until I decided to use an encoder that had a switch built in.  I left the switch header in case I came up with another use for it.  Well I installed a small NO pushbutton switch and wired it to this header and programmed the switch to save the current reading to the EEPROM memory when it was pressed.  Then I read that reading from EEPROM each time the gauge is powered up.  Unless I move the planer head when the power is off to the gauge, the calibration shouldn't change between uses of the planer.

The second change was to retain the current reading when going into calibrate mode.  Previously the calibrate offset always went to zero.  I realized that more often than not I only needed to make a minor tweak to the setting and going back to zero each time was a waste of time.  So far I'm happy with the new changes.

This what the gauge looks like now.  You can see the pushbutton in the upper right corner.

I have included the new Bascom source and hex files in the download package.

Updated 4/13/10

Well, this is embarrassing.  I posted the update below after mounting my new gauge and running the head up and down to make sure it worked - but never actually running the sander.  I ran the sander today and found a major problem.  Running the drum itself caused no problems but, running the conveyor, produced major electrical noise that caused the gauge to go crazy.  The conveyor motor is a 90V DC motor and utilizes a KB Electronics OEM DC drive.  I tried a shielded cable from the calipers to my controller but that didn't seem to help at all.  So far I have not been able to solve this problem but am working on it.  Any thoughts or advice would certainly be appreciated.  Thanks.

Well I finally got around to building and installing one of these gauges for my Performax 16/32 Sander.  The installation went just fine and I like this even better than having a gauge on my planer.  The adjustment on the sander is very smooth and I can dial in just the thickness I want.  I did make an interesting discovery though.  The handle on my sander indicates that a quarter turn is equal to 1/64" so a full turn would be 1/16" or .0625".  So I assumed that the screw was a 16 pitch thread.  In actuality it appears that one full turn is .0551"-.0552" which would make it a 1.4mm pitch thread.  Not a big deal but still interesting.

So here's the readout mounted:

And here's the caliper mounted:

Thanks for reading and be sure to email me if you have any questions or comments


link_blue16 (1K)