As part of a project I'm working on, I'm using a power film resistor to generate heat for a PID temperature control system.
The heating resistor I'm using is the Caddock Electronics MP915-20.0-1%. According to the datasheet, the MP915 part represents the model number, the 20.0 represents resistor value in Ohms (20 ohms), and the 1% represents the tolerance.
I've been testing the resistor out in room temperature air and without a heat sink. On page 2 of the datasheet, Caddock says that the MP915 is rated for 1.25 watts in these operating conditions. (Room temp and no heat sink) With Joule's Law (P=V*I), I've worked out that the maximum voltage for this resistor is 5.0 volts and the max current is 0.25 amps.
I tried plugging the resistor into my Arduino's 5volt pin and ground pin. The resistor heated up as expected, but the board also got very hot. I am wondering if this can damage the board? Are there other components I need to be aware of that I can use to stop the board from getting so hot? Or is this unavoidable?
That heat will be the on-board voltage regulator dropping down the power jack voltage to 5V whilest
carrying 0.25A+a bit. Normally it would only handle the 30mA or so needed by the microcontroller and
USB-serial chip. Regulators normally shutdown if they get too hot. Too hot is something like
125 to 150C, note so yes the board will get very hot potentially if the power jack voltage is a lot
higher than 5V
If you were powering the board from 12V then there would be more heating in the board's regulator than in the resistor. It is capable of withstanding this but you're close to the limit. A lower input voltage or a separate power source for the resistor is a good idea.
Note that none of the Arduino's outputs can supply the resistor. If you want this to be controlled by the Arduino then you need a FET or relay.
potomac:
I tried plugging the resistor into my Arduino's 5volt pin and ground pin. The resistor heated up as expected, but the board also got very hot. I am wondering if this can damage the board?
I see what you are all saying about need for a driver for the heating resistor.
I went through a document I have describing a similar Arduino system that has 4 heating resistors. (Same model Caddock that I have) The system includes 2 Arduino shield boards. "Board #1" actually does include a driver for the heating resistor. It connects to "Board #2" via a ribbon cable that has the 4 heating resistors. It also includes a large piece of aluminum as the heat sink. The heat sink is meant to warm up a container, which will be my application too.
I pasted an annotated picture below of the Arduino system in question
The driver on Board #1 to be a 16 pin driver made by Texas Instruments. Unfortunately, the quality of the picture isn't great. I can make out the state of Texas logo, but I can't make out the text of the model number. Also, the document doesn't list the specific model. (Really crappy documentation from the author, I know).
My questions now are:
1). Can anyone, by chance, make out the text of that Texas Instruments driver? Hoping someone with more experience than me can make a more educated guess. 2). If not can you suggest a specific FET or MOSFET or NPN to drive a single heating resistor that I can buy? I just want something that I can test out the PID control system with, and get the hang for PID in general
Break out a magnifying glass and read it. More than likely its just a buffer to drive the little 8-pin part on the resistor board, which is likely an N-channel MOSFET.
CrossRoads:
Break out a magnifying glass and read it. More than likely its just a buffer to drive the little 8-pin part on the resistor board, which is likely an N-channel MOSFET.
^ I can't do that as I don't have that board in my possession. I did not take the pictures.
I believe the 16 pin part on board #1 is directly driving the resistors on board #2 via the ribbon cable. Also leading me to think the mystery Texas Instruments component is driving the heating resistors is that it's listed as the "heating resistor driver" in the document.
Firstly, you will not be powering the resistors from the Arduino at all - you power them from whatever supply is powering the Arduino (and anything else) but the current does not pass through any part of the Arduino board.
Now your power control will of course, be by PWM (of some sort); you merely need a logic-level FET of suitable rating to switch it. You specified a 20 Ohm resistor; at 12 V, this would draw 600 mA and dissipate 7.2 W.
In fact, noting that the resistors are in a TO-220 package, it makes vastly more sense (substantially cheaper) to use a transistor instead.
A 15 W or better rated Darlington would be absolutely perfect for this function (given that they are not really useful for much else )! You just select (by trial and error) a resistor to control its base from the Arduino to draw the desired collector current with the collector connected directly to the supply, and the transistor bolted to your heatsink will obediently heat up by the specified amount.
Otherwise, I'll check out my local Radioshack tomorrow so I don't have to wait for a Digikey shipment. Is there a consensus on a 15W Darlington vs a MOSFET? Can I really go wrong with either?
OK so I set up the MOSFET circuit and loaded up some PWM code. (Power source is a cell phone charger sized AC-DC converter that I stripped down and tapped into with alligator clips. Running at 4.5 volts and 1 amp)
However, no sign of any PWM whatsoever. The resistor just heats up and stays there.
I had programmed the loop to gradually heat up to 100/255 heat, then hold for 10 seconds, then cool down all the way and hold that for 10 minutes. What I got instead was a resistor that heated up to the maximum, and stayed that way the entire time. No drop to zero.
I'm at a loss for what I did wrong. It must be a rookie mistake with the breadboard wiring or the code. Not sure which
int heaterPin = 3; // heating resistor connected to digital pin 3
void setup() {
}
void loop() {
// fade in from min to max in increments of 5 points:
for (int fadeValue = 0 ; fadeValue <= 100; fadeValue += 5) {
// sets the value (range from 0 to 255):
analogWrite(heaterPin, fadeValue);
// wait for 10 secs to see the dimming effect
delay(10000);
}
// fade out from max to min in increments of 5 points:
for (int fadeValue = 100 ; fadeValue >= 0; fadeValue -= 5) {
// sets the value (range from 0 to 255):
analogWrite(heaterPin, fadeValue);
// wait for 10 minutes to see the dimming effect
delay(600000);
}
}
Your code - which you need to edit in that last post to put in code tags - takes 20 steps of 10 seconds - that is more than three minutes - to fade in, and another 20 steps of 10 minutes each - more than three hours - to fade out. Did you really observe it for that whole time?
You need an indicator - a LED with a 1k resistor - to monitor your pin 3 PWM visually. In fact, do that to get your code figured out first.