Thermal Cycling Rig for Testing Copper Via Rivets


Determine if thermal cycling will cause a failure with Copper Via Rivets.


Cycle the test board between ambient temps (about 21 deg. C or 70 degrees) and 125 deg. C (257 degrees F), hold it there for 30 seconds, and cool it back down with a fan, up to 1000 times.  Failure would be considered if the total resistance through the entire series of vias increases by more than 10%.

I decided to use 125C as the upper temp as this was used by the laboratory in the article below. 150C would be unreasonably high for the upper temp, as no board will ever see that in normal use.

I found this article about the causes of thermal cycling induced failures in industry standard plated vias, indicating that the failures are due to weakness in the via wall, and that strengthening the via wall can eliminate the failures and can constrain the relatively weak expansion forces of the FR4 laminate.  This test will show if solid copper rivets will also behave as stronger vias (being many times stronger).

Note that thinner PCB materials have less expansion issues.  Also, the failures reported in riveted vias from TV circuit boards from the 60s involved a different PCB material (similar to FR1 or FR2) – melamine, rarely used in double sided boards today due to it’s poor dimensional stability, particularly to changes in humidity, and poor CTE (Coefficient of Thermal Expansion).  An exhaustive reference is the Printed Circuits Handbook.

I just read an interesting article on Low Resistance Measurement.  I may adapt this method to measuring low resistance with an Arduino.

Current status:

I’ve rewired the temp sensors using Cat6 twisted pair and some filter components.

I’d been having problems with the temp sensors reading unreliably.  I tried several things to fix this, but really I have been trying to fix it blind, which is a bit of a pain and somewhat discouraging.  What I really needed was an oscilloscope to be able to really see what’s happening.  I just got the Rigol DS1052E scope through for $366 including shipping.  It only took 10 days to arrive.

The interesting thing about this scope is that it’s reported it can be switched to a 100 mhz scope by changing it’s model number etc using the USB port – the same hardware was used for both models!  The upgrade works.

This project will now continue, since I’ve figured a way out of my dilemma.  I need to re-make the test board, and test a slight improvement in riveting while I’m waiting for the scope to arrive.

Previous Status:

  • The hardware and electronics have been assembled
  • The Arduino Uno has been programmed.
  • I found the problem with the stepper driver board – I needed to supply a separate 5v power supply as the Arduino’s regulator was not up to it.
  • I have etched and riveted the test board.
  • The rig is ready for final pre-testing, then the main event.
  • UPDATE:When testing with my milliohm measurement setup I found that some of the riveted connections on the test board were substandard as-is (the rivets on the test board will not be soldered).  I carefully examined the board with a jewelers loop and found that some of the joints have margins, and 1 out of 200 was bad electrically.  Under normal circumstances this would not be an issue, as I would solder them which would fill in the margins.  The problem was caused by: 1 – using a dremel instead of a drill press to drill the holes which caused inconsistent hole dimensions and some minor (but enough) damage to the copper, and 2 – using some rivets that were a few mils short of what was needed.  I used some that were .093″, and should have been .100″ or longer due to the drill issues.  Today I fixed the drill press and will evaluate what to do next.
    • I think I will just build a new board, no big deal.
    • I am going to try a slightly different method of setting the rivets that may take the guesswork out of centering them.


  • An insulated metal heat chamber.
  • A heat gun for the heat source.
  • A fan for cooling the test board.
  • An A3987 stepper motor controller.
  • A recycled “can” type stepper motor from a printer.
  • An arm for moving the test board down into the heat chamber, and up to the cooling fan.
  • Two LM34 temp sensors, one on the test board, one in the heat chamber.
  • A Relay box for controlling the heat gun.
  • An Arduino Uno.
  • An LCD display (a larger capacity LCD would be nice).
  • A 2 oz double sided copper test PCB with 100 copper via rivets connected in series.  (PCB material from Ebay).
  • A similar test PCB with 100 regular soldered vias as the control (maybe).

Test Board:

Test Board in Eagle

Test Board in Eagle

Double Sided Test Board Ready To Etch

This is the double sided test board ready to etch.  It will have 100 riveted vias in series. The board will not be tinned, and will only have solder on the external connector.

Looking down into my PCB Etch Tank

I made this etch tank from a tall cereal container. It is inside a larger plastic bin to contain drips, and has an identical container next to it with water to wash the board.  It is in a very well ventilated area.

You can just see the 15o watt fish tank heater on the right side which I use to keep the etchant at about 100 degrees F.  I don’t like to go much above 100 degrees, as the acid can start fuming. I intend to create an automated setup for this with a readout.

There is a plastic tube at the bottom of the tank for agitation, connected to an air compressor using a pressure regulator from an HVLP spray gun.  I will write more about this setup another time.  The etchant is made from hydrochloric (pool) acid and peroxide.  Recipes available on the web.  Just be careful and observe all safety protocols.

Board in Etch Rack

Inside the etch tank is the etch rack I made from PVC pipe.  It has a tall handle that makes it easy to lift to check the board.  This rack makes it easy to etch any size board.

The test board is shown partially etched here above. It took about 25 minutes to etch as I started with cold etchant.  I think it is easier on the resist to start with the etchant warmed up to the usual temp, so etch time is reduced.

Board Finished Etching

This is how the board looked after it came out of the etchant.

You will notice that the top (blue) layer of the Laser Film is almost gone, due to the long etch time (started with cold etchant) for the 2 oz copper,.  There is still a white layer that is protecting the toner.  I wrote about my experiences with this Laser Film in my article about Making Perfect PCBs with the Toner Transfer Method.

Test Board with Toner Removed

This is the bottom of the test board after removing the toner with acetone.  I should have etched it a few minutes longer.  There is some very very minor pitting, much better than there would have been without the laser foil.

Test board after drilling

Here is the top of the test board after drilling.  For some reason my drill press’ motor failed, due to some kind of wiring issue.  I will have to take it apart to fix it.  So… I had to use a dremel to drill the board.  I screwed it down to a strip of plywood so it wouldn’t move around while I drilled it, but I still broke a bit… I used a #63 (.0370″) drill bit.

I would classify the drilling quality as only “average” as it’s not possible to hold a dremel as steady as a drill press.  Some of the holes were slightly enlarged right at the surface, not perfectly centered, etc.  Definitely not “ideal”, but this factor will also be good for this test.

Inserting 100 copper Via Rivets.

Here I am in the process of installing the 100 copper via rivets.  It took about a minute to do five of them, so about 20 minutes to do the board.  I wasn’t rushing.  You can read more about rivet installation here.  The rivets I used averaged about 0.100 inch in length, and were made from 20 gauge tinned bus wire.  These rivets were about 42 mils longer than the board thickness, 50 mils longer would have been fine.

Finished Test Board

And here is the finished test board with the wiring soldered in place.  Only the wires were soldered.  The wires will be used to check the resistance while the thermal testing is in progress.  I have a way of measuring the resistance now in the milliohm range. See the update at the top.

The Relay Box

  • I built a relay box so the Arduino can control the heat gun.
    • This takes 5v, Gnd, and a digital input from the Arduino board to turn on the small relay.
    • The Arduino’s digital output enables a 2n2222 transistor which powers a small relay (with a diode for protection)
    • The small relay switches 110v to power the large relay (110v 25A) that will control the heat gun.

    Relay Board for Thermal Cycling Rig

    Relay Box Materials (quite inexpensive)

    • I cut the nailers off of the box and it turned out fine, for under $3.00.
    • I installed everything in the electrical box, with a master switch.  Everything is rated for 20 amps or greater, but I will only be switching up to 15 amps (120v).  I attached a plug and some terminals for the inputs and this part is done.
Completed Relay Box

Completed Relay Box

Note the outlet, it’s a 20A “Tamper Resistant” variety I hadn’t seen before.  It has plastic guards inside the flip aside when you plug in a cord.  I thought that was handy to keep any debris out, and only costs about $4.00.  After this experiment I may use this relay box to control the the fish tank heater in my PCB Etch Tank so I can keep it at an even temperature.  Or I might use it to control the heating element in my DIY electric smoker.

Assembling the Test Rig Hardware

In Alibre Design I created full sized drawings and laid them out on some scrap sheet metal, traced the outsides and punched the centers.

Patterns for Sheet metal

Patterns for Sheet metal

Then I cut the pieces out with an air-powered nibbler.  It cuts the sheet metal like butter – it took about 3 minutes total to cut out the three parts.  Then I smoothed the edges with a disk sander and a bench grinder.

Cutting With Nibbler

Cutting With Nibbler

It took longer to pick up all the moon shaped nibbler chips with a magnet.  You don’t want these left around your shop… they are sharp.

Nibbler Chips

Sharp Nibbler Chips

Here are the cut out parts.  This nibbler was from Harbor Freight.  It comes in handy from time to time.  It would have been very difficult to cut this sheet metal with aircraft sheers.

Parts Cut Out

Parts for Test Rig Cut Out

I tested a hole punch set from Harbor Freight to cut out the hole for the stepper.  This did not work very well – the small hole punch broke when the hole was about done.  I switched to the larger punch.  I don’t recommend getting this tool from H.F. (the quality is hit or miss there).  Next time I’ll just use a hole saw.

Cutting Stepper Hole with Hole Punch

I cut the slow with a high speed saw.  This worked pretty well, but this saw does stall easily.  I find I can use a hack saw blade in it… that could be why it stalls tho.

Slot Cut With Saw

Slot Cut With Saw in Base Plate

Insulated Can

A can insulated with fiberglass, before foil was added.

Insulated base plate fastened to can

Insulated base plate fastened to can (with Foil inside)

  • The stepper is attached to a plate and angle iron
  • The arm is attached to the stepper with a pin.
Arm Attached to Stepper With a Pin

Arm Attached to Stepper With a Pin

The attachment thingie (I’m not sure what they are called, I inherited it.) used to attach the arm to the stepper.  The center hole is actually threaded although the threads were not used.  It just happened to be just the right size for the stepper’s shaft to fit.  I drilled a hole through it and the stepper shaft and inserted a pin.

  • The Arm has washers and a bolt on the back end for balance – I have since changed these washers out for a lead block for better balance.  It was cool designing this in Alibre Design and being able to rotate the parts there to see how they fit, and determine how large the slot needed to be, and have the actual parts fit exactly.  In Alibre you can easily set constraints so parts are aligned and mated, and they stay in place and can be rotated or slid depending on the kind of constraints you chose.
  • This assembly was bolted to the base plate with a layer of fiberglass insulation for a thermal break.  I later added some standoffs on the arm to attach the test board to.

Arm Balanced with Counterweight

I attached a 110v fan to the stepper motor bracket.

Completed Test Rig Hardware, Arm in Up position

Completed Test Rig Hardware, Arm in Up position

Completed Test Rig Hardware, Arm in Down position

Completed Test Rig Hardware, Arm in Down position

Determine which wires on the stepper to use

The stepper I’m using came from an old printer.  It’s a unipolar type stepper.  You can tell this because it has two sets of three (or more) wires.  Now most stepper motor drivers these days are bipolar – they use two sets of two wires.  The nice thing is that a unipolar stepper motor can be used bipolar quite easily.

The way to tell which wires to use is by measuring their resistance – there are two wires connecting to the outside of a coil, and third that is like a center tap.  The resistance on the outside wires will be higher:

Measuring Stepper Motor Coil Resistance

Measuring Stepper Motor Coil Resistance of the Outside Wires.

Measuring Stepper Center Tap

Measuring Stepper Center Tap – it will have half the resistance.

So since there are (in this case) three wires per coil it is quite easy to determine which is the center tap.  The resistance measured between it and either of the other two wires will be half.  Since I will never be using this stepper in unipolar mode (only bipolar mode) I snipped the center taps and later wired the motor to a longer cable.  These “can” type steppers have poor resolution, I wouldn’t use one for something like this again – it’s barely adequate.

Stepper with Center Taps Removed

Determine Maximum Stepper Voltage using Coil Inductance

My multimeter also measures inductance.  The two coils did not measure the same inductance, so I used the lower value: 7.53 mh as that will calculate a smaller maximum voltage.

You can determine the maximum coil voltage using the formula that Gecko uses:

32 * sqrt(motor inductance in mH) = 32 * sqrt(7.53) = 87.81V.

Now just because I can theoretically use 87 volts maximum with this motor doesn’t mean I should. My A3987 stepper motor driver can use up to 50v, and I have a 42v power supply (salvaged from a large dot-matrix printer), so that’s what I’ll use.

The hardware is now finished.  I also finished the following:

  1. Installed mounting hardware for the test board on the arm.
  2. Wired the temp sensors to a cable with pins that will go into the breadboard.  I am using two LM34.
  3. Mounted the temp sensors, one on the arm for the test board, one into the chamber.
  4. Mounted the power supply, stepper driver, and a solderless breadboard to a mounting board.
  5. Connected the stepper to the stepper driver board.

Programmed the Arduino Uno for:

  • Readout of Cycle count, read and display 2 temp sensors, read and display board resistance, display current status, and heater status on LCD display.
  • Monitor chamber temp and control heat gun (via relay box) as needed.
  • Monitor board resistance, halt test if resistance increases more than 10%.
  • Down cycle: move arm down, wait until board has reached 257 degrees F, wait 30 seconds.
  • Up cycle: move arm up, wait until board has reached the cool down temp, wait 30 seconds, add to cycle counter, one cycle complete.
  • Between cycles: set the stepper motor driver into half-sleep mode.  This is a mode I created using a tiny solid state relay on the stepper driver board that drops the current in half so the motor does not overheat, yet unlike sleep mode – the stepper will hold it’s position.  This is not strictly needed for this motor, but I am testing the concept.
  • I will post the Arduino code when the test is complete.
Test Rig LED Display

Test Rig LED Display before startup, showing Cycle #, Board temp, Chamber Temp, Heat/Cool mode, (countdown not shown), and voltage readout.

Initial testing complete:

  • I set the stepper driver current  using a pot on the stepper motor driver board – at 0.75 amps it does not get hot.
  • Connected the power supply to the stepper driver.
  • Tested stepper movement.  This was tricky because the “can” type stepper I used has 7.5 degrees per step, and the arm has a lot of mass, so only a very narrow range of steps-per-second would move it smoothly, even at 1/16 microstepping.  I wouldn’t use this kind of motor again for this kind of thing.
  • Added a limit switch so that the arm position is calibrated when the arm is raised (picture needed).
  • Tested the full sequence (without heat) to check the programming.
  • Fixed a problem with the driver by added an additional 5v supply.  The Arduino’s 5v regulator was not powerful enough to power everything.  My prototype stepper driver board has a few extra diagnostic LEDs and the relay box draws 50 ma for the relay, and then there’s the LCD display…
  • I added a resistor between the 5v supply and the LM34 temp sensors, and that settled the readings down a bit.  There is still some noise when the stepper driver is engaged that causes the temp readings to jump a couple degrees.  I will find a way around this.
  • I tested the chamber temperature control, and debugged the various modes.

Whats Next

  1. Final pre-test of all components.
  2. Mount the test board.
  3. Begin testing.

Test Procedure (draft)

PCB material: I will first test using 2 oz double sided copper FR4 PCBs – this is what I am using for my A3987 stepper controller.   I may test standard 1 oz copper FR4 PCB after this test is complete.  (The thickness of the copper on PCB is rated in ounces, 1 ounce being the most popular.  2 oz was specified by Allegro Microsystems for boards using their A3987 chip – for lower thermal resistance.)

The Arduino can do a coarse test of the resistance (by measuring a voltage through the test board) as the test is in progress, and will halt the test if there is a major failure.  I will also test the resistance with my Amprobe 37XR-A multimeter at intervals.

  • When turned on the rig will raise the arm and determine the room temperature using the board temp sensor (LM34), once it stabilizes.  This calibration will also happen each time the arm is raised (to allow for changes in room temp).
  • The Arduino will also monitor the chamber temp using the second LM34, and will turn the heat gun on and off using the relay box.  It takes about 10-15 seconds for the chamber to come up to temperature.
  • The cycle then starts- the arm will lower the board into the heat chamber and wait until the board comes up to temperature, then hold it there for 30 seconds.
  • The arm will then be raised in front of the fan to cool the board down to room temp, and will be held there for 30 seconds.  That is one cycle.   999 more cycles to go…
  • I may do 10 batches of 100 cycles.  At the end of each batch I will test the resistance during one entire cycle with my meter.  I do not know yet how long a full cycle will take.

Renderings of the test rig – arm up:

Thermal Cycling Test Rig with arm in up position

Thermal Cycling Test Rig with arm in up position

With the arm in the up position the test board will be cooled by the fan to ambient temp.

Thermal Cycling Test Rig with arm in the Down Position

With the arm in the down position the test board is heated to 125C and held for 30 seconds.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s