Go Down

Topic: about using pt100 with constant current source (Read 7790 times)previous topic - next topic

MikeLuo

Nov 22, 2013, 10:29 pm
hi guys:
I am currently working on a project that is using pt100. I realized constant current source can easily get the temperature working accurately. I have trying LM317 to work with it, but the current drop when the resister value goes up. Does any one have idea about building a constant current source or fixing the circuit ?

dc42

#1
Nov 23, 2013, 12:17 am
By trying to drive the PT100 with a constant current source, you are making the reading depend not only on the temperature coefficient of the current-setting resistor, but also on the temperature coefficient of the voltage reference in the LM317 and the line regulation of the LM317. So you are needlessly introducing errors. It would be better to just connect the sensor in a half-bridge configuration, and use the voltage supply to the bridge as the reference voltage for the ADC. Then there is just 1 resistor that needs to have a stable value.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

MikeLuo

#2
Nov 23, 2013, 12:55 am
hi dc42:
Thank you for sharing your suggestion with me, but I am not very good at hardware, do you mind share your circuit with me?

dc42

#3
Nov 23, 2013, 09:33 am
Certainly. What is the nominal resistance of your PT100? Does it have a recommended operating voltage or current?
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

MikeLuo

#4
Nov 23, 2013, 12:15 pm
dc42:
sorry, what do you mean the normal resistance?  :*

retrolefty

#5
Nov 23, 2013, 12:19 pm

Certainly. What is the nominal resistance of your PT100? Does it have a recommended operating voltage or current?

PT100 = 100 ohms at 0 degrees C, resistance goes up with rising temp, so positive temp coeffecient.

General practice is to operate a PT100 sensor at as low a current as practical to combat the effects of self heating of the platimum sensor wire which can effect the accuracy of the actual measurement. RTD sensors come in different physical sizes with different mass so self heating may not be a problem depending on various properties.

http://en.wikipedia.org/wiki/Resistance_thermometer

dc42

#6
Nov 23, 2013, 12:46 pmLast Edit: Nov 23, 2013, 01:09 pm by dc42 Reason: 1
Thanks lefty, I wasn't sure whether the 100 in PT100 meant that the resistance was always 100 ohms nominal.

Mike, if you want to read it using the Arduino ADC then I suggest the attached schematic. The two resistors and the PT100 form a voltage divider that puts just over about 1V (the minimum recommended value) on the Aref pin. The PT100 gets about 0.5V across it, so it will dissipate 2.5mW. The 10uF capacitor ensures that the reference voltage is stable during the time it takes to perform a conversion. The 100 ohm resistor should have a low temperature coefficient, but the 820 ohm resistor is not critical. You will get a change in the value returned by analogRead of just under 2 per degC temperature change. If you want greater resolution than that, then I suggest you use an external ADC.

[EDIT: if your Arduino has a 3.3V pin, then a 430 ohm resistor to 3.3V would give a more stable reference than 820 ohms to +5V.]
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

TomGeorge

#7
Nov 24, 2013, 01:00 pm
Hi, MikeLou can I suggest you try a search for pt100 in the "search the Arduino Forum" box at the top of the forum.
This question and others relating to pt100 have been asked and answered so many times before you might just find the answer you need.
If you do some ohms law equations with your pt100 at the temperatures you want, I think you will find you need more than just a potential divider and power supply considering the resolution of the arduino AtoD.

Tom...
Everything runs on smoke, let the smoke out, it stops running....

nilton61

#8
Nov 24, 2013, 03:47 pm
There are plenty of RTD circuits on the net. Some better some worse. Some use bridges, some use current sources.
The main reason for using RTD's is precision, if you don't need that use a thermocouple or thermistor instead. and if you need the precision i would go for a ready made transmitter which can be calibrated to the appropriate temperature range. The most common type is the "puck" type which is meant to be built into the housing of the sensor. With a 4-20mA interface you can have as long wires as you want and use a 250 Ohm sensing resistor. Thats the standard solution.

MikeLuo

#9
Nov 25, 2013, 06:06 am
dc42:
I forgot to tell you that the testing range is about 450 C to -20 C. The reason I am using LM317 is because the current could be able to maintain constantly. I wonder if other examples that are shared on the forum could help with this project. One of Reason I don't use other temperature sensor is because the pt100 is already liberalized and also I can use one sensor to pretty much all other places. BTW, thanks for everyone's suggestions, those are really helpful to me to think about the solution.

dc42

#10
Nov 25, 2013, 10:06 am

dc42:
I forgot to tell you that the testing range is about 450 C to -20 C. The reason I am using LM317 is because the current could be able to maintain constantly.

Then the resistance will vary from about 92 ohms @ -20C to about 270 ohms @ 450C. I'd still use the PT100 in a simple voltage divider. However, I would choose a value for the fixed resistor near the geometric mean of these extreme values, and use a 14- or 16-bit external ADC to get better resolution.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.

MikeLuo

#11
Nov 26, 2013, 12:25 am
Thank you so much guys. Those references are very very helpful. I use this web site's resource. I wonder if any one know which board this project based on.
http://openenergymonitor.org/emon/buildingblocks/rtd-temperature-sensing
I look at the code, I feel confused about the pint out and wiring. Can anyone help me with this.
It mentions about INPUT0 pin12, INPUT1 pin14 and INPUT2 pin15.  where are those pins.

MikeLuo

#12
Nov 27, 2013, 12:16 am
Sorry, I forgot posting the code.
Code: [Select]
`#include "RTDModule.h"RTDModule rtd;//----------------------------------------------------------------------------// Temperature variables//----------------------------------------------------------------------------double CYLB,CYLT,COL;//----------------------------------------------------------------------------// Setup//----------------------------------------------------------------------------void setup(){  rtd.setPins(4,5,2);                                //RTD PT1000 pins 4,5 are digital pins for multiplexer, 2 is analog input    //rtd.calibration( input number, scaler, offset )  rtd.calibration(0, 0.120270927, -15.066198679);   //INPUT 0 pin 12  rtd.calibration(1, 0.120821076, -13.824162893);   //INPUT 1 pin 14  rtd.calibration(2, 0.120400012, -14.91327759);    //INPUT 2 pin 15        analogReference(INTERNAL);                        //Set reference to 1.1V ready for RTD measurements  Serial.begin(9600);}//----------------------------------------------------------------------------// Main loop//----------------------------------------------------------------------------void loop(){  //Get temperatures and pass through digital low pass filter  COL = digitalLowPass(COL, rtd.getTemperature(0) ,0.90);  CYLB = digitalLowPass(CYLB, rtd.getTemperature(1) ,0.90);  CYLT = digitalLowPass(CYLT, rtd.getTemperature(2) ,0.90);    //Print temperatures out to serial  Serial.print(COL);  Serial.print(' ');  Serial.print(CYLB);  Serial.print(' ');  Serial.println(CYLT);  }//----------------------------------------------------------------------------//Digital low pass filterdouble digitalLowPass(double last_smoothed, double new_value, double filterVal){  double smoothed = (new_value * (1 - filterVal)) + (last_smoothed * filterVal);  return smoothed;}`

Go Up