0

I picked up an ADS1115 and some PT100 sensors to do some high temperature readings. I'm a noob when it comes to electronics, so I'm looking for some guidance before I do something stupid :D

I thought I had this figured out, but now I'm worried that I need a constant current source to set this up (I just read about them a few minutes ago, so I'm not sure). My initial plan was to run 1 wire to one end of the sensor, and two wires off the other to A0 and A1 on the ADS1115 to take a differential reading in order to account for resistance down the wires. But I think I need to control for the amperage that goes across the PT100. I think I had planned to do a circuit like in this other SO answer, but I'm not sure if that's what I actually need.

Any guidance is very much appreciated.

edit I also keep reading about bridge configurations, but I'm not sure exactly how that fits in :/

  • what have you gotten done or attempted so far? – Mohammad Ali Sep 11 '16 at 3:02
  • I've gotten a working circuit using an MCP3008 with some LM35DZ sensors, but this is my first attempt using RTD sensors. I haven't hooked anything up for fear of ruining the sensors from overloading amps. I'm looking for some guidance to avoid ruining any components. – JesseBuesking Sep 11 '16 at 3:08
  • can you please attach a circuit diagram of some sort? and a description of where you believe that the problem may lie? – Mohammad Ali Sep 11 '16 at 3:10
  • No idea if I even have an amperage problem, that's sorta the question. What software do people generally use to create circuit diagrams? I could try making one, but the general layout was specified in the question. Again, I'm a noob when it comes to electronics. – JesseBuesking Sep 11 '16 at 4:44
  • fritzing.org/home is a popular choice, goodnight I'll be back tomorrow – Mohammad Ali Sep 11 '16 at 4:45
1

After researching over the past several days, I've implemented the following circuit:

Hand drawn circuit

Using Ohm's Law, we can choose resistors to use to limit the amperage crossing the PT100. In my case, I determined a 3.9k ohm resistor in front of my two 100 ohm resistors (the second being the PT100) would limit the amps to where I need them.

At 0°c:

  • PT100 is 100 ohms
  • A0 sees .16v -> (3.3v / (3900ohm + 100ohm + 100ohm)) * (100ohm + 100ohm)
  • A1 sees .08v -> (3.3v / (3900ohm + 100ohm + 100ohm)) * 100ohm
  • PT100 sees .805mA -> 3.3v / (3900ohm + 100ohm + 100ohm)

At 200°c:

  • PT100 is 175.84 ohms
  • A0 sees .218v -> (3.3v / (3900ohm + 100ohm + 175.84ohm)) * (100ohm + 175.84ohm)
  • A1 sees .139v -> (3.3v / (3900ohm + 100ohm + 175.84ohm)) * 175.84ohm
  • PT100 sees .79mA -> 3.3v / (3900ohm + 100ohm + 175.84ohm)

At most, the PT100 will see .805mA which is in the required .3mA to 1mA range, meaning we reduce the accuracy lost due to the PT100 self-heating. I read the voltages at pins A0 and A1, then compute the resistance of the PT100 using the equation in the link to the other SO question I posted in my question.

R2 = R1 * 1 / ( Vin / Vout - 1)

Adjusted for the labels in my diagram:

R3 = R2 * (1 / ((A0 / A1) - 1))

In my code, I check to make sure A1 is not 0, and that the quantity (A0 / A1) - 1 is also not 0, otherwise we'll be attempting to divide by 0!

Also since the highest voltage I care about is .218v, I can set the gain on the ADS1115 to 16x which puts full scale from 0 to .256v. Since the typical values we see will be on the range .08v to .218v we're losing out on some of the scale, but it's still pretty good as is!

Sidebar:

.256v full scale range at 16x gain, with 15 bits useable on the ADS1115
.256 / 2**15 = 0.0000078125v resolution
usable scale = .218v - .08v
usable scale / 0.0000078125v = 17,664 possible values
(0°c - 200°c) / 17664 = 0.011°c resolution

I had originally planned to use the PT100 with 3 wires, but one limitation of the ADS1115 is that it has a single result register, meaning I can only read 1 pin at a time! This means, at a data rate of 64, it takes roughly 1/64 of a second or 16ms to read a single pin! Given I have to read them serially since it can only store one result at a time, it takes 32ms to read both A0 and A1. I wanted to keep my loop as quick as possible, so I dropped the third wire.

Going forward, improvements would be to:

  1. Find an ADC that can store multiple results at once.
  2. Use a constant current source.
    • This would make the voltages read at pins A0 and A1 increase and decrease in a linear fashion, unlike what they do now.
    • This would also mean I don't need the 3.9k ohm resistor, since I'm able to limit the current via the current source.
    • On top of this, I wouldn't need to read the value at pin A0! (Since the current could be fixed to 1mA, and we know the value of the reference resistor is 100ohm, we have all the information we need except for the change in resistance of the PT100 which is determined by the voltage at A1.)
  3. Pick up an LMP90080, since it has it's own built in constant current source, plus more bells and whistles to accurately sample from a PT100. The drawback is that there's no python library for interfacing with it, so I'd have to walk through the datasheet and figure out how to read and write to it :(

If anyone sees any issues with my logic above or has their own recommendations, please do let me know!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.