This weekend I put together a little rig to characterize the tempco of resistors. I hope to soon be able to contribute to Andreas' excellent T.C. thread:
https://www.eevblog.com/forum/metrology/t-c-measurements-on-precision-resistors/The rig consists of a Hammond 1590A case with a 12706 peltier (affixed with Arctic Silver thermal epoxy) and 40mm heatsink and fan. A layer of 1/4-inch "craft foam" was affixed (using hot glue) for insulation, to allow the walls of the case to better approximate an iso-thermal environment.
Inside the case, the DUT resistor is taped to the bottom with Kapton tape, and (compressed) cotton balls are used both to form a spring which pushes the resistor against the case, as well as act as insulation and eliminate air currents.
A 10k thermistor (
http://www.vishay.com/docs/29050/ntclg100.pdf) was affixed to the inside of the case using thermal epoxy (Arctic Silver). I used 30 AWG "Kynar" wire to try to minimize error due to heat conduction out the leads of the thermistor. Some hot glue was added for strain relief.
I used the same Kynar wire for the 4-wire leads (bending a length in half and burning away the insulation at the midpoint makes for a kelvin connection which is easy to solder).
The TEC driver is just a half (quarter?) H-bridge, so the controller can only be used in one "direction" at a time. The leads to the controller board are banana jacks, so reversing the peltier polarity only takes a moment. I used parts I had on-hand: a FQP30N06L n-channel mosfet does the switching, and the peltier sits behind an RLC filter (to protect it from PWM) made of a 0.22R power resistor from a junked stereo, a 100uH inductor, and 330uF OSCON cap paralleled with a cheap-o 1000uF electrolytic. A 6A05 gives reverse polarity protection.
The controller is an Arduino using a PID library (my current code is here:
https://github.com/cellularmitosis/logs/tree/master/20180114-r-tempcos/tec-controller). The PID constants were arrived at by fiddling around for a few hours (see my log of intermediate results here:
https://github.com/cellularmitosis/logs/blob/master/20180114-pid-oven-tuning/README.md) A switch-mode bench supply powers the controller.
Also on the controller is the other half of the 10k / 10k resistor-thermistor divider (just a simple 1% metal film 10k), along with a filter to provide a clean ADC setup (Arduino 5V to ferrite bead to 1uF film to ground, which feeds AREF as well as the 10k resistor / 10k thermistor divider, which has a 0.1uF film cap to ground from the midpoint).
I implemented 64x software oversampling to increase the apparent ADC resolution, but I ran into a problem initially when I used the 3.3V Arduino line (which is filtered more heavily than the noisy 5V USB line) -- I had no noise left in the system and ended up with a distinct "stairstep" ADC response, which caused stability problems with the PID algorithm. Switching back to the 5V (noisy) USB eliminated this problem (compare the trailing cool-down portions of the graphs of PID-tuning run 16
https://raw.githubusercontent.com/cellularmitosis/logs/master/20180114-pid-oven-tuning/run16-input.png and run 17
https://raw.githubusercontent.com/cellularmitosis/logs/master/20180114-pid-oven-tuning/run17-input.png).
Resistance drift was measured using an HP 34401A (logged via RS232), using a python script (
https://github.com/cellularmitosis/logs/blob/master/20180114-r-tempcos/multi-logger.py). Charts were generated (by hand) by pulling the CSV into Google Sheets.
Finally, I began taking some actual data, and ended up with a reasonable result: I measured an AE XT 10K000 as having a 1.2ppm/K tempco over a span of 10C. It felt great to get a real result in just one weekend of work!
I kept an eye towards reproducibility with this setup -- all of the parts used are readily available and cheap. If someone else is able to use this work, that would be fantastic!
Edit: The measurement approach was to step the temperature by 1C every 90 seconds, over 10 steps (10C total). The hope was to create "stair-steps" which would be easy to visually verify and measure (by counting the total ppm and dividing by 10C).
Edit2: fixing minor gridlines in last chart