Pages: [1]   Go Down
Author Topic: about using pt100 with constant current source  (Read 2260 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 1
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

United Kingdom
Offline Offline
Tesla Member
***
Karma: 224
Posts: 6593
Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

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.

Offline Offline
Jr. Member
**
Karma: 1
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

United Kingdom
Offline Offline
Tesla Member
***
Karma: 224
Posts: 6593
Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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.

Offline Offline
Jr. Member
**
Karma: 1
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dc42:
sorry, what do you mean the normal resistance?  smiley-kiss
Logged

Left Coast, CA (USA)
Offline Offline
Brattain Member
*****
Karma: 361
Posts: 17263
Measurement changes behavior
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

United Kingdom
Offline Offline
Tesla Member
***
Karma: 224
Posts: 6593
Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.]


* Scan 220.JPG (46.86 KB, 1653x1165 - viewed 175 times.)
« Last Edit: November 23, 2013, 07:09:19 am by dc42 » Logged

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.

Victoria, Australia
Online Online
Edison Member
*
Karma: 46
Posts: 1392
Electronics Engineer/Industrial Control
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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... smiley
Logged

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

Helsingborg, Sweden
Offline Offline
Sr. Member
****
Karma: 24
Posts: 499
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

United Kingdom
Offline Offline
Tesla Member
***
Karma: 224
Posts: 6593
Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

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.

Offline Offline
Jr. Member
**
Karma: 1
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sorry, I forgot posting the code.
Code:
#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 filter
double digitalLowPass(double last_smoothed, double new_value, double filterVal)
{
  double smoothed = (new_value * (1 - filterVal)) + (last_smoothed * filterVal);
  return smoothed;
}
Logged

Pages: [1]   Go Up
Jump to: