There’s a lot of debate out there over the merits of asking someone what they want for Christmas. Does it defeat the purpose of buying thoughtful gifts which show how well you know someone? Or does it accomplish the real goal of giving presents which are truly useful and desirable? Well, I personally don’t have a problem with being asked what I’d like for a present. Particularly when I can request, and receive, a sweet power supply like the Agilent U8002A:
Yes, Santa my parents were very kind to me this Christmas. Finally, more than 15 months after considering a handful of different supplies, I have one to call my own. And interestingly, it wasn’t one of the supplies I discussed in my original list. But I think it still meets my original set of requirements fairly well:
Output voltage: 0-30V, 10mV resolution
Output current: 0-5A, 10mA resolution
Output voltage ripple: 0.01% + 2mV (5mV @ 30V)
Output current ripple: 0.02% + 2mA (3mA @ 5A)
So far I’m very pleased with this supply. My multimeter indicates that its voltage and current readings are spot-on. This is no surprise though, considering that it came with a calibration certificate from Agilent. I also attempted to measure its output voltage ripple using my Red2 IOBoard, but quickly discovered that I didn’t have the necessary ADC resolution (in other words, the output was so clean I couldn’t measure any ripple or noise).
The interface on the U8002A is quite nice. Simple yet powerful. I particularly like the fact that I can adjust its voltage and current limits before enabling the output. This is one feature that would have been missing in most of the cheaper power supplies I looked at.
Just out of curiosity, I ran one more test while I had my IOBoard out and connected. I connected up a 20Ω resistive load and enabled the output while logging data:
That little cut in the voltage just before the output reaches steady-state is a little odd. Not that I’ve looked at a lot of PSU transient responses though. It just seems like the control is doing something strange there. Perhaps some sort of filter capacitor gets switched in and we hit a brief current limit? Who knows… It’s not a problem though. I’d be more concerned if the voltage had overshot the limit, but that’s clearly not the case.
Overall, if you’re looking for a PSU with specs like this one, I’d highly recommend the U8002A. It’s made by Agilent, so you know it’ll be a quality piece. And yet it’s reasonably priced (unlike most of their hardware). Let me know if you have any questions about it.
That’s right, I’m now the proud new owner of a Dangerous Prototypes’ Bus Pirate. I’ve been looking at these things for awhile, and finally decided that I should stop being such a cheapskate and just get one. Yea, I know I can always rig up one of my AVRs to do serial communications, but this is just so much more convenient. And at $30 (I got mine from SparkFun), it’s a pretty sweet deal.
So what did I get for my three Hamiltons? Well, check this out (courtesy SFE):
2- and 3-wire libraries with bitwise pin control
Scriptable binary bitbang, 1-Wire, I2C, SPI, and UART modes
0-5.5volt tolerant pins
0-6volt measurement probe
1Hz – 40MHz frequency measurement
1kHz – 4MHz pulse-width modulator, frequency generator
On-board multi-voltage pull-up resistors
On-board 3.3volt and 5volt power supplies with software reset
Macros for common operations
Bus traffic sniffers (SPI, I2C)
A bootloader for easy firmware updates
Transparent USB->serial mode
10Hz – 1MHz low-speed logic analyzer
Scriptable from Perl, Python, etc. (aka everything)
Translations (currently Spanish and Italian)
Enumerates as a virtual COM port over USB
Can operate as AVR STK v2 clone programmer
Access to PIC24FJ64 ICSP programming port
Needless to say, the Bus Pirate’s capabilities are extensive. And open source.
Thus far I’ve tested out its UART and SPI modes, and have been sufficiently impressed. Which leads me to my next new toy, an SPI digital potentiometer, the MCP42010:
This particular part comes in a 14-DIP package, contains two 10k potentiometers with 8-bit resolution, and can be had for just $2.40 from Digi-Key. I’m thinking of using it in an audio compressor / volume control prototype, but it may come in handy elsewhere.
Controlling this digipot is just ridiculously easy when using the Bus Pirate. Once connected and in SPI mode, I simply issue the command “[0b11011111, x]” (without the quotes), where x is a value from 0-255 representing the potentiometers’ wiper positions. The two least significant bits (11 above) of the first byte tell the chip which of its potentiometers to adjust. You can set one at a time, or both simultaneously. Bits 4 and 5 of the first byte (01 above) allow you to either write data to the wiper registers or put the digipot into a high-impedance shutdown mode (which could be great for reducing power consumption). The same effect can be achieved by pulling pin 12 low. Want to reset the potentiometer to its 50% position (this also happens automatically on power-up)? Pin 11 will do just that when pulled low. For all the gory details, take a look at this datasheet.
This little chip is pretty impressive. It’s also available in 50k and 100k versions. The only thing it really can’t do is handle much current (wiper current should be kept under ±1mA). But just toss in some buffer op-amps and you’ll be all set. That’s my plan anyways.
A couple of weeks ago I spent some time examining a fairly complex circuit board from my old, but still functional, clock radio/CD player. I was using the probe of my handheld multimeter to measure voltages at various IC pins and circuit traces. At one point during the process I thought, “Gee, wouldn’t it be nice if I had someone here to read the voltmeter to me as I test various points? That way I could focus on my probe and not accidentally short neighboring pins.” But then I realized that I did have someone to do just that: Microsoft Sam. I present to you the NI LabVIEW talking voltmeter:
For those of you without LabVIEW, here are a few screenshots of the subVIs shown in the video above. Don’t forget that you can always download a free, unrestricted 30-day trial of LabVIEW from the NI website (seriously, it’s awesome, you should try it).
First, the initialization VI, which opens the Microsoft ISpeechVoice reference:
Next, the blocks responsible for detecting new steady-state voltages:
Finally, the code which converts numbers into strings and sends them to Sam:
Many thanks to Grant Heimbach, whose sample speech VI saved me a lot of development time (his original code is available on the NI Developer Community).
Click here to download a simple example VI which utilizes the code shown above.
The full, unmodified IOBoard Voltmeter program, as well as all of its supporting components, can be located at the bottom of the Mobile Studio Downloads page.
Got questions or comments? As always, feel free to leave them below!
Apparently I have a thing for testing. I rather love to run experiments, even when there’s no immediate need for the results. I guess I just enjoy trying stuff, and hey, maybe even learning a thing or two. 🙂
So last weekend I was doing a bit of tinkering and got to wondering about the performance of different heatsinks. Now just intuitively, I know that larger heat sinks tend to dissipate more heat than smaller ones – particularly if they have larger surface areas. But just how much better is a tall, finned heatsink than a small, clip-on device? This is what I wanted to find out. So I gathered up five sinks of varying sizes and started to design my test.
Pictured above, from left to right, we have the following parts:
I decided to test each of these sinks with a TO-220 package transistor (since, at least in the case of the first three devices, this is what they were designed to cool). Specifically, I’ve chosen the IRL2703, an N-channel MOSFET rated for 30V and 24A. Now, the TO-220 package is also commonly used with regulators, diodes, etc. So these heatsinks might be found in a number of different applications.
In order to control the power dissipated in the transistor, I’ve built a very simple current-control circuit using an op-amp (LM741) and a 0.1Ω sense resistor (Rs):
I will be using the transistor as, essentially, a variable resistor connected to a 12VDC power supply. The transistor’s drain-to-source resistance varies based on the voltage applied between its gate and source. Control of this voltage is the responsibility of the op-amp shown in the schematic above.
If you can recall the “golden rules” of ideal op-amps, you’ll remember that, with negative feedback (that is, a path between the op-amp’s output and its inverting (-) terminal), the voltage at the op-amp’s inverting (-) terminal will be equal to the voltage at its non-inverting (+) terminal. In the circuit above then, if Vin = 1V, after being passed through the potentiometer’s 10:1 voltage division, the voltage at the op-amp’s non-inverting (+) terminal, and consequently its inverting terminal, will be 0.1V (remember also that no current flows into either of these “ideal” terminals).
So notice that the op-amp’s inverting terminal is connected to one leg of our sense resistor, Rs. So when our input voltage is 1V, the voltage across Rs will be 0.1V (remember the voltage divider). By Ohm’s law then, the current through the sense resistor will be I = V/R = 0.1/0.1 = 1Amp. So an input of 1V will yield 1A through the transistor. With an input voltage of 12V then, we’ll be dissipating approximately 12W in the transistor (actually 11.9W, to be precise; we’ll lose 0.1W in the sense resistor).
For my experiments, I’ll be using a constant current of 0.5A, which will yield a power of 6W. This seems to be a reasonable value to use with all of my heat sinks. And it’s still not quite enough to completely toast a naked (no heatsink) transistor.
In order to measure the temperature of the transistor as the test proceeds, I’ll be using a Kintrex infrared thermometer, model IRT0421, which I’ve had for years. My plan is to simply move the thermometer around the transistor, at close range (1-2″), and record its maximum reading. Admittedly, this isn’t the most precise solution. A better idea would probably be to attach a small thermocouple between the transistor and the sink. But that’s something I don’t have. My method should at least provide a good indicator of relative, if not absolute, performance.
My procedure here is quite simple. First, I will attach a heatsink to the transistor using a small thermal pad. I will then apply a current of 0.5A at 12VDC, and allow the transistor to reach a stead-state temperature. I will then allow everything to cool, remove the thermal pad, and try the same test again. Perhaps my video-self can explain this better:
Before diving into the results, here are a few more pictures of the circuit and setup. By the way, in case you’re wondering what that silver pen-like device is that’s jammed into my protoboard next to the opamp, it’s my home-made scope probe. I took an old BIC pen, removed the guts, and then epoxied in a dulled sewing needle and wire. It’s actually a great little probe; I leave it connected to my IOBoard most of the time.
This is how the transistor was attached to the Crydom heatsink: And for the Pentium 4 cooling package, a single 4-40 hole was tapped (note that this image has been flipped horizontally, for aesthetic reasons, so ignore the wire colors):
Alright, so I’m sure you can’t wait to learn how things turned out, right? Well, without further ado, I present to you my grand table of results:
Heatsink Under Test
Temp @ 10 Mins.
Temp @ 40 Mins.
(Note that these test were performed at an ambient temperature of 21°C. The “Expected Temp” numbers are calculated by multiplying the manufacturer’s ratings by 6W, and then adding the ambient temperature. Also, the smaller heatsinks were only tested for 10 minutes, as it only took this long for them to reach steady state. The more massive heatsinks were given 40 minutes.)
So now you may be wondering, “Wait, what happened to the tests with and without the thermal pads in place?” Well I’ll tell you: the difference in final temperature with and without the pads was insignificant (perhaps one or two degrees at most). This was a little surprising to me, as I’ve always been told to be liberal with the thermal grease/paste (and these thermal pads serve the same purpose, they’re just cleaner). So I figured the exposed side of the transistor would be somewhat warmer without the pads in place. And yet, that does not appear to be the case. But am I confident enough in this result to stop using thermal paste/pads? Eh, not really. I’d probably still use the pads, and I’d make sure the heatsink was firmly attached (since that makes for better conduction).
Another interesting point to note: the snap-on heatsink I tested here performed little better than operation without a sink (it yielded just a 13% lower temperature rise).
Strangely though, the snap-on heatsink was the only one that seemed to measure up to its manufacturer’s °C/W rating. I calculate a value of (136-21)/6 = 19.2°C/W, which is less than the advertised 28.5°C/W (a good thing). But neither of the bolt-on heat sinks met their advertised ratings. The medium-sized sink reached just 12°C/W while the larger one hit 9.5°C/W. I’m not sure what to make of this. Is there something I’m missing here? Perhaps an error in my calculation? It sure seems straight-forward…
Well finally, I was rather pleased with the performance of the Pentium 4 cooler as well as with the Crydom heatsink. I did expect both to do well though. The Socket-478 Pentiums could produce about 60W, so you’d expect even a stock heat sink to be able to handle one-tenth of that power with little problem. I was amazed at just how quickly turning on the fan brought down the temperature though. Within just a few minutes the heatsink felt cool to the touch (having just been at about 38°C/100°F).
In light of this data, which of these heatsinks would I choose? Well, for this transistor, the datasheet lists a maximum operating junction temperature of 175°C. In the above tests, I’ve measured case temperatures, so we’ll need to factor that in. Again, the datasheet lists a thermal resistance from junction to case of 3.3°C/W. So when dissipating 6W, as in the tests above, the junction temperature will be about 20°C warmer than the temperature of the case. So our maximum allowed case temperature will be 155°C. You’ll notice that with no heat sink, the transistor reached a temperature of 152°C, so in theory, you could safely operate at 6W with no heatsink at all. But should you? No. For one thing, stuff starts to smell nasty at that temperature. Plus, continuously running hot will almost certainly reduce the operating life of your transistor.
In general, I’d suggest keeping transistors well below 100°C. So in this case, I’d be comfortable with either of the two bolt-on heatsinks. Anything more is overkill.
By the way, here’s a neat article on defacing currency some home-made heat sinks.
So, comments, questions, suggestions? Feel free to leave them below. Thanks!
Christoph kindly pointed out in the comments section (below) that I’d forgotten to incorporate the dissipation of the TO-220 package itself when predicting case temperature values based on the heatsink specs. Although not quite half of the transistor’s surface area is attached to the heatsink, the front is still sitting in open air. Now, the datasheet specifies a thermal resistance of 62°C/W from junction to ambient. I’m measuring case temperatures, so we need the thermal resistance between case and ambient. To get this, I need to subtract out the junction to case resistance of 3.3°C/W, for a case to ambient package resistance of 58.7°C/W.
Now, instead of trying to figure out the thermal resistance for just the front of the heatsink (which would just be a guess, really), let’s see what the effect of adding in the transistor datasheet’s full thermal resistance has on our predicted temperatures.
As with electrical resistances, we can determine the combined thermal resistance of the heatsink and transistor by adding them in parallel, as follows:
R_tot = 1/(1/R_transistor + 1/R_heatsink)
Let’s apply this for the clip-on heatsink:
R_tot = 1/(1/58.7 + 1/28.5) = 19.2°C/W.
That’s a pretty big difference! For 6W, this predicts a temperature of 136.2°C – much less than the 192°C I calculated above, and much closer to my measured value (136°C). Here is a summary of the new predicted resistances and temperatures (I have NOT yet updated the table above with these new values):
Clip-on Sink: 19.2°C/W, 136°C
Medium Bolt-on Sink: 2.9°C/W, 38°C
Large Bolt-on Sink: 6.7°C/W, 61°C
P4 CPU Cooler: N/A
Crydom Sink: No Effective Difference (the supposed resistance of this heatsink is already so low, adding in the dissipation of the transistor itself makes no noticeable difference)
So making this correction helps with the clip-on sink, but it’s made things worse (at least by comparison with the tested value) for the two bolt-on sinks…
The other adjustment we could make would be to add the case-to-sink resistance of the transistor. The datasheet lists this value as 0.5°C/W for a flat, greased surface. Which in this case adds 3°C for 6W. This could account quite well for the difference in measured values for the Crydom heatsink, but it doesn’t make a huge difference for the others.
Again, these are all pretty much approximations, and as I’ve already admitted, my testing procedure is not terribly accurate. However, I do believe that it’s still a fairly good relative comparison of these sinks. If I were measuring the temperatures of the sinks directly, yes, there would be differences in their emissivity, which would affect my IR thermometer. However, I held the thermometer very close to the transistor and measured the temperature of the same point on the case of the same transistor in all tests. So I’m not too worried about this. Again, thanks to all for the comments!
On my desktop, I keep a list of miscellaneous parts I’d like to buy at some point (e.g. power resistors, laser diodes, etc). Parts not destined for any specific project, just things that I’d like to toy with. Well for a long time, I’ve wanted to get my hands on some high-power LEDs. I suppose I’m just a sucker for pretty lights. But for some reason, I’ve never gotten around to ordering any – probably because I’ve never had a good means of driving said LEDs (and I’m too busy lazy to make my own driver circuit).
Well last week Farnell (Newark in the States) came to my rescue with an offer to send me any product from their site (within a certain price limit) for free. All they asked of me was an evaluation (this post) and a link to the product on their site. And which product did I pick? The TPS62260LED-338, a three-color LED driver evaluation module:
This board hosts three 500mA LEDs (W5SM) from OSRAM. Each LED is driven by a TPS62260 step-down DC-DC converter. A low-cost MSP430F2131 microcontroller controls all three drivers via pulse-width modulation.
Out of the box, my first impression: these LEDs are painfully bright (especially that red one – my vision is still spotted as I type this). They’re not kidding about protective eyewear. But I wouldn’t want it any other way. 🙂 For most of my testing however, I simply covered the LEDs with about four sheets of paper. That brought their intensity down to a comfortable level.
I must commend TI on making this board very easy to use and probe. They’ve provided several nice wire-loop test points for connecting scope probes. And they’ve even broken out the power and ground connections for people like me who don’t have the proper barrel connector power supply. I was also pleased to see how they’d integrated heat sinks for each of the three LEDs into the PCB itself using a plethora of plated drill holes. In operation, the board only just becomes warm to the touch.
But let’s talk about the real highlight of this board: the LED driver circuits. Because LEDs operate within such a tight voltage range (their operating voltage is actually assumed to be about constant), they’re normally powered by some type of current controller (since the brightness of an LED is proportional to the current flowing through it). Any yet, this board features three DC-DC voltage converters – devices which take a high input voltage and convert it to a lower output voltage. So how is this supposed to work?
Well, each converter IC provides closed-loop control over its switching output. In other words, the TPS62260 measures a feedback voltage and uses this to adjust its output duty cycle. So regardless of how much current (well, up to 600mA) is being drawn from the output, the converter is able to maintain a fixed output voltage. But here’s the tricky part: you can attach the converter’s feedback measurement input pin to anything (within reason, of course). In this case, TI has wired each feedback pin to a 2Ω current-sensing resistor (part R9, below) connected in series with each LED. Each converter will adjust its output in order to maintain 0.6V at its feedback pin (as 0.6V is the internal voltage reference of the converter). Using ohm’s law, and realizing that the current will be the same in both the sense resistor and the LED, since they are in series, we can determine the LED’s current to be I = V/R = 0.6/2 = 0.3A or 300mA.
But wait, the current-sensing resistor is fixed, the converter’s internal voltage reference is fixed… so how do we control the current delivered to the LED? Simply put: we don’t. Then how can we control its brightness? Pulse-width modulation. Imagine flipping a light switch on and off so rapidly that you can no longer detect a flicker. Then, adjust the ratio of the on and off times. The longer the on time, the brighter the light will appear. This is precisely what the MSP430 microcontroller is doing to control the brightness of the LEDs. In fact, you can see this happening if you wave the board around rapidly while one of the LEDs is being dimmed (in this case, the blue LED):
That image was captured with a 0.1s shutter speed. And actually, with that knowledge, we can calculate the frequency of the PWM signal. I count about twelve blinks of the blue LED there – so twelve blinks in 0.1s yields a frequency of 12/0.1 = 120Hz (a result I confirmed with my IOBoard oscilloscope). If you’d like to read more about pulse-width modulation, check out my previous post on the subject.
So out of the box, the microcontroller on this evaluation board is programmed to slowly turn on and off each LED in sequence, such that one LED is always fully on while another is being ramped on or off. This produces a very pleasing color gradient.
Now, according to the manual that came with the board, you’re also supposed to be able to turn the knob on the board in order to manually adjust the color balance. Unfortunately, this feature did not work for me. When I turn the knob on my board, the automatic sequence stops and the LEDs hold their current brightness states. However, they do not change brightness when the knob is turned further. I’ve probed the knob (which is actually a digital encoder) and believe it to be working properly. My guess is that somebody just botched up the software. It happens.
This brings me to my final point of discussion: reprogramming. The TPS62260LED-338 provides a JTAG header for the traditional four-wire JTAG programmer. Unfortunately, I do not possess such a programmer. I was hoping instead to use the MSP430 programmer which is integrated into my LaunchPad development board. Sadly, I never checked into the details: the LaunchPad programs via the two-wire SpyBiWire (SBW) interface, not the standard JTAG interface. And of course, the MSP430F2131 does not support SBW. So for now, there will be no reprogramming. Of course, thanks to all of the convenient test points, it’s fairly easy for me to just put the micro into reset and drive the LEDs using my own PWM waveforms. If anyone out there has any tricks for reprogramming though, please let me know!
So in conclusion, I’d say the TPS62260LED-338 is a product worth checking out. For just over $20, it’s a pretty good deal. If they’d given it the USB programming interface of the LaunchPad, I’d probably be happier, but then they would’ve needed to lower the current draw of the LEDs, which would’ve been no fun, or required a separate power supply, which wouldn’t have been such a big deal.