EEVblog Electronics Community Forum
Electronics => Projects, Designs, and Technical Stuff => Topic started by: cellularmitosis on January 15, 2018, 04:37:22 am
-
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/ (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 (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 (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 (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 (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 (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 (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
-
Just for giggles, here's a 5% carbon resistor. -300ppm/K!
-
Pretty cool low-cost setup. How about programming in 0.1c steps. With some filtering you could get nice smooth ramp ;).
-
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.
...
The leads to the controller board are banana jacks, so reversing the peltier polarity only takes a moment.
...
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).
...
Edit: The measurement approach was to step the temperature by 1C every 90 seconds, over 10 steps (10C total).
Hello,
nice setup.
some notes:
- since I have seen the post of soldering drift for a Z201 resistor I usually try to keep any solder heat from precision resistors.
also Edwin stated that the nominal value of the resistor is trimmed at a certain distancs from the body.
but with longer leads you will also have more heat transfer through the leads into/from the resistor.
- reversing polarity of a TEC is only recommended when both sides are thermally equal.
If you quick-reverse the peltier it might act as a generator and thus overload your supply.
- its getting not clear to me: do you use the same supply for the voltage divider and the VREF of the arduino. (ratiometric measurement?)
does a arduino run from 3.3V or 5V?
- on the other side: the thermistor is specced with 2.5mW/K. If you constantly power from 5V (2.5V worst case at the thermistor) the self heating is around 0.25K.
- measurement rate is dammed fast against my setup.
some effects of resistors show only up when you let them rest for a longer time (at least at the temperature extremes).
thats also one reason why I ramp down and up with around the same rate.
with best regards
Andreas
-
Hello,
nice setup.
some notes:
- since I have seen the post of soldering drift for a Z201 resistor I usually try to keep any solder heat from precision resistors.
also Edwin stated that the nominal value of the resistor is trimmed at a certain distancs from the body.
but with longer leads you will also have more heat transfer through the leads into/from the resistor.
- reversing polarity of a TEC is only recommended when both sides are thermally equal.
If you quick-reverse the peltier it might act as a generator and thus overload your supply.
- its getting not clear to me: do you use the same supply for the voltage divider and the VREF of the arduino. (ratiometric measurement?)
does a arduino run from 3.3V or 5V?
- on the other side: the thermistor is specced with 2.5mW/K. If you constantly power from 5V (2.5V worst case at the thermistor) the self heating is around 0.25K.
- measurement rate is dammed fast against my setup.
some effects of resistors show only up when you let them rest for a longer time (at least at the temperature extremes).
thats also one reason why I ramp down and up with around the same rate.
with best regards
Andreas
Thanks!
Yeah, I've been mulling over how to treat precision resistors, with regard to their soldering-induced hysteresis and possibly "resetting" their drift. Here, I'm taking the attitude that I'll probably have to solder them when I deploy them in a circuit, which will cause a new drift cycle, so I'm not bothered by soldering them a few times before then.
Interesting note about the peltier acting as generator! Good to know. Also, I tried the peltier in cooling mode and was underwhelmed by its performance. I'll probably just stick to heating for now. (A future build might use some nichrome wrapped around a hammond case, which may give a more linear response of current to heat than a peltier?).
The Arduino has an AREF pin which allows the ATMega to use an external AREF, and I'm connecting both the divider and AREF to the same voltage (the Arduino 5V pin or 3.3V pin), so either way it should span the same portion of the ADC. Thanks for the note about self heating -- I also need to put my Si7012 in as the DUT and see if my steinhart-based thermistor measurement is correct.
With these first few measurements I was definitely impatient. Actually, on the 5% carbon resistor plot, you can see that 90 seconds wasn't totally sufficient, as it has a strange "reversal" near the end of each step, so that resistor probably needed more time per step (https://github.com/cellularmitosis/logs/blob/master/20180114-r-tempcos/run6-5pct-carbon-film-10k/tempco.png). I'm sure the wirewound resistors will also need more time per step as well. What ramp speed do you typically use? I seem to recall seeing something like 0.1K/min on a graph around here recently...
I'm also curious to see if I can trigger some hysteresis to show up if I ramp the temperature up much higher.
-
Those are interesting looking banana plugs. Easy to grab, it looks like!
-
Those are interesting looking banana plugs. Easy to grab, it looks like!
Yeah, a while back I ordered a few different types of plugs with "fixed" springs. Decided to use this opportunity to use them for something :)
-
The RLC filter looks a little odd. It is usually easier to use just a kind of LC filtering with a free wheeling diode to make it a kind of buck converter.
The inductor looks quite small (and might reach saturation) - so there might be more residual ripple than expected.
For cooling it is important, not to use too much current. In the datasheet, there usually is a nominal optimum current (near the maximum current). With higher current the cooling power will go down. The DS value is for optimum thermal contact at the hot side - with an extra thermal resistance at the hot side, the maximum cooling power will shift to a lower current.
For a good efficiency it can be a good idea to reduce the current even further, unless one wants to get close to the maximum temperature difference.
For optimum regulation (especially in the cooling range) with TEC cooler it would be a good idea to take into account the nonlinear (about a parabola around the optimum current) current vs cooling/heating. A second option would be to have a second sensor at the hot side.
-
Be sure to read about clamping tension. This can be determined by your thermal grease datasheet. Most people dont realize there is a force per area requirement there.
Also to maintain longevity of these modules be sure to restrict slew rate of temperature to like 4% per minute. This will reduce thermal stress on the module. This is particularly important when its clamped tight. Using the wall of a hammond box as a thermal transfer surface is not the best as they are typically from some kind of zinc metal thats easy to cut.
What you wanna do is.
1) see if you can use a plastic box
2) make a properly tensioned heatsink sandwich out of two heatsinks with the peltier and goop in the middle. Use torque wrenches to get the correct contact pressure. I would recommend six points of contact with six bolts
3) seal this sandwich with a electronics grade silicone sealant to prevent moisture ingress.
4) add mounting brackets to your peltier sandwich.
5) mount a fan to one side
6) cut a hole in your box that allows the sandwich to be between the inside and outside of the box
7) mount the brackets and reseal with caulk. You dont want this to be your only sealing step. If its already mounted before your first seal you cannot assure a good moisture seal.
8) insulate the box with stuff mentioned in my thermal insulation thread
You might also want to put a fan inside of the box to recirculate the internal air.
-
Hrmm, I think I just realized a problem with this setup, or rather, I have found its limitations.
For my first few runs, I just so happened to pick a 10k resistor. This is at the top of the 10k resistance range on my HP34401A.
I then tested as 20k resistor, which is in the next resistance range, and only uses 20% of that range.
Here's the result: a very noisy graph. I've reproduced a very similar result with two different 20k VHP202Z resistors.
If my thinking as to the cause of this problem is correct, the problem should be even more exacerbated if I measure e.g. a 12k resistor.
So it looks like I may need to find a different way to measure the resistance. I believe Andreas may be comparing one resistor (held at constant temperature) to another (at varying temperature). I'll have to come up with something similar.
-
I'm sure the wirewound resistors will also need more time per step as well. What ramp speed do you typically use? I seem to recall seeing something like 0.1K/min on a graph around here recently...
I'm also curious to see if I can trigger some hysteresis to show up if I ramp the temperature up much higher.
Hello,
I usually use something between 0.1K/min and 0.3K/min.
At the moment mostly 0.12K/min for practical reasons (measurement time).
At very short measurement duration you will not recognize some relaxation effects in the resistors which take some time.
At very long measurement duration the drift of your instrument may be too large to get a closed cycle even with perfect resistors.
with best regards
Andreas
-
Rule 1 of metrology practice: always measure and log the lab temperature. You may be seeing temperature effects on the measuring instrument, or on the control system (how temperature stable is the ADC and thermistor conditioning?)
-
Rule 1 of metrology practice: always measure and log the lab temperature. You may be seeing temperature effects on the measuring instrument, or on the control system (how temperature stable is the ADC and thermistor conditioning?)
I think I’ll set up a temperature logger at a few spots in my apartment and try to find the room which has the best temperature control
-
I think putting whole thing into well insulated box (with heatsink on hot side of TEC tall enough to be sticking outside + it's fan, ofc) will do much better then trying to find quietest spot in room. Ofcourse you want env for your meter though. Alternative is to average hell out of noisy data, with oversampling. I was doing this (https://xdevs.com/vpg_tcr_rms2/) when using nv-scanner card to measure 8 resistors in single chain by single meter.
Worth to measure tempco of your DMM, keeping constant DUT resistor at constant temp, and variating DMM temp with sensor attached to it (e.g. by putting dmm inside a blanket, like I did with 3458 tests).
-
I think putting whole thing into well insulated box (with heatsink on hot side of TEC tall enough to be sticking outside + it's fan, ofc) will do much better then trying to find quietest spot in room.
Do you mean putting the meter into a well insulated box? I don't think changing the TEC setup will help -- if you look at the graph of temperature, it is much more stable than the resistance reading. That tells me the problem is the drift of the meter itself, because I'm near the bottom end of the ADC range (so each LSB gets magnified in the graph).
Worth to measure tempco of your DMM, keeping constant DUT resistor at constant temp, and variating DMM temp with sensor attached to it (e.g. by putting dmm inside a blanket, like I did with 3458 tests).
Yes! Good idea -- I will definitely be doing this soon.
-
How about connecting 20K direct to the meter (no wires, just adapter to bananas) and doing simple log over an hour?
I'm not convinced that all that noise is coming from the meter. :-//
-
How about connecting 20K direct to the meter (no wires, just adapter to bananas) and doing simple log over an hour?
I'm not convinced that all that noise is coming from the meter. :-//
That's a good idea as well! I'll give that a shot.
-
Here is an initial, very rough result of attempting to determine the tempco of my HP 34401A.
I hooked up an LM399, then threw the meter into my fridge, then took it back out again. An Si7021 logged the ambient temperature (and went into the fridge with the meter).
The results look very strange. I don't think the meter's tempco could actually adjust that fast. Perhaps I'm measuring the tempco of the banana connectors on the meter?
(there is a large amount of noise when I moved the meter into the fridge, and then shortly after when I opened up the fridge again to throw my leftovers in there :)
Edit: the horizontal scale is 77 minutes total. Data: https://github.com/cellularmitosis/logs/tree/master/20180117-hp34401a-tempco/run1-fridge
-
A different take: I threw the meter outside (it is very cold in Austin right now), with the LM399 inside.
The cables go through a sliding glass door, so there is a small gap where the cold air can come inside of the apartment. I was worried this might affect the internal temperature near the LM399, so after some time I opened up the door again and just brought the temperature sensor inside for 10 minutes, leaving the meter outside. This showed that the internal temperature was basically unaffected, but strangely opening the sliding glass door caused a shift in the meter's measurement, which I cannot explain.
I'd guess the meter's tempco is about 0.3ppm/C.
-
Ah, the spec says 5ppm/C.
https://www.keysight.com/upload/cmc_upload/All/34401-90013-mla2.pdf (https://www.keysight.com/upload/cmc_upload/All/34401-90013-mla2.pdf)
edit: wait... that's 10 times greater than what I just measured...
-
Nice work taking notes :-+
No oven needed today :o Hit 44+ on the bench.....
2 LSD drift from 25 to 44. To hot to play resistors.
-
The results look very strange. I don't think the meter's tempco could actually adjust that fast. Perhaps I'm measuring the tempco of the banana connectors on the meter?
Thermoelectric effect somewhere in the signal chain?
-
One has to be careful with operating the meter when it comes from a colder temperature to a warm room. There is a chance for condensation. At least one can expect quite a bid of additional humidity effect from surface layers.
The more normal test would be to test the meter at slightly warmer temperatures, like an 20 to 30 C environment. This could be just a box around the meter and the normal power consumption if the meter. As the temperature effect does not need to be linear, there is no need to measure over a much larger range than normal use. So 20-30 C environment would be enough.
-
Kleistein, that is a good point, and in fact the Si7021 even shows a spike in humidity (from condensation) when bringing it back indoors. The sensor element is able to quickly shed the condensation, but the internals of the meter may not be so lucky
-
Took the meter inside. Still hasn't reverted back yet... :-[ :palm:
-
Hello Jason,
every measurement range has different components in use.
So measuring the T.C. of the 10V range will not give you information about measurements in the Ohms range.
I have differences between 100mV range (not measurable) and 10V range (short below 1ppm/K) also on my K2000.
With best regards
Andreas
-
On the way home from work last night, I picked up a styrofoam chest and threw the meter in there overnight, then moved it back to room temperature while at work today.
there's definitely some sort of tempco visible in all of this, but the large, instantaneous shifts I don't understand.
https://github.com/cellularmitosis/logs/tree/master/20180117-hp34401a-tempco
I've been able to keep this all one continuous run, so the graph below is a continuation of the above.
-
How about connecting 20K direct to the meter (no wires, just adapter to bananas) and doing simple log over an hour?
I'm not convinced that all that noise is coming from the meter. :-//
coming up!
-
...............
there's definitely some sort of tempco visible in all of this, but the large, instantaneous shifts I don't understand.
........................
Might simply be static electricity... Styrofoam box....
-
Hrmm, I think I just realized a problem with this setup, or rather, I have found its limitations.
For my first few runs, I just so happened to pick a 10k resistor. This is at the top of the 10k resistance range on my HP34401A.
I then tested as 20k resistor, which is in the next resistance range, and only uses 20% of that range.
Here's the result: a very noisy graph. I've reproduced a very similar result with two different 20k VHP202Z resistors.
If my thinking as to the cause of this problem is correct, the problem should be even more exacerbated if I measure e.g. a 12k resistor.
So it looks like I may need to find a different way to measure the resistance. I believe Andreas may be comparing one resistor (held at constant temperature) to another (at varying temperature). I'll have to come up with something similar.
I spent some time just measuring various resistors this evening, and I think I have good evidence to support this idea.
Essentially, trying to measure in terms of ppms (relative to the DUT) is fine if you are near full-scale, but becomes problematic near the other end of the scale.
Here is a measurement run of a 20k, 25k, 30k, 50k, and 100k. The "noise" gets (relatively) smaller as you approach full-scale of the meter's range. The ppm scale of all graphs ranges from +2ppm to -2ppm, for ease of comparison.
https://github.com/cellularmitosis/logs/tree/master/20180119-resistor-ppm-noise-demo
-
If my thinking as to the cause of this problem is correct, the problem should be even more exacerbated if I measure e.g. a 12k resistor.
for this special case I have used a work-around for a 120 Ohms resistor.
Simply switch a 100K resistor in parallel directly at the input connector of the instrument.
(a 50ppm/K metal film will do the job if you keep the temperature of the instrument relative constant as the ratio is 800:1)
I have done this as sanity check for my setup as I first couldnt believe the large T.C. of the 8G16 resistors.
with best regards
Andreas
-
Very clever, thanks!
-
Are those paper clips? :-DD
^-^
-
I had a thought on this. Extreme thermal shock. Dunk the resistor in liquid nitrogen , measure then 300 C hot , measure. This way the R/coefficient could be easier to measure as it would be greater. Maybe return to room temperature to check for permanent damage caused by extreme thermal shock.
-
Thanks for the article / post.
Temp control is brand new to me and of very high interest at this time.
But I have a lot of technical catching-up to do tho repeat your experiment,
Are there any inexpensive ready-made temp chambers out there ?
George Dowell