Arduino Projects

How to Play with PT100 Sensors

Recently I came across a bundle of PT100 temperature sensors (after a long time), and wanted to build a temperature sensor device with the help of an Arduino. Even though I already had a few ‘analog’ projects based on the same sensor in the past (just before the Arduino era), the new craft seemed to be a bit daunting as I found that the analog-to-digital conversion (ADC) is not very easy. Luckily, after a bit of searching around, I found some awesome documents that explains the problem and provides practical solutions. Well, let me share my thoughts and findings here which may help you to proceed with your own PT100 DIY projects.

Why PT100?

When it comes to measuring temperature, most hobbyists may be think of a cheap thermistor first. The usual second choice will be an integrated solution like the LM35 or DS18B20. Admittedly that’s enough for most applications, but not a good fit for certain industrial environments where the temperature range to be monitored may shoots up to (and above) 400°C. Luckily a heavy-duty PT100 high-precision high-temperature PT100 platinum resistance thermometer probe can handle -200°C to +800°C.

Most resistance temperature detectors (RTDs) have higher accuracy and repeatability than thermocouples, and consist of a fine wire (typically platinum) wrapped around a ceramic core, exhibiting a linear increase in resistance as temperature rises. The most common type PT100 has a resistance of 100Ω at 0°C and 138.4 ohms at 100°C. RTDs come in 2-wire, 3-wire or 4-wire versions. The 2-wire RTD signal is affected by the distance to the controller, but 3-wire or 4-wire RTDs can compensate for line losses. Unlike thermocouples, special connection cables are not very necessary for PT100 sensors. However, the probe and cable should be chosen carefully to suit the specific application.

PT100 2 Wire and 3 Wire

MAX31865 Module: Because of the extremely low signal levels, it’s important to call for a resistance-to-digital converter optimized for platinum resistance temperature detectors to get an accurate temperature readout. The MAX31865 IC (www.maximintegrated.com) is an easy-to-acquire solution for handling 100Ω to 1kΩ (at 0°C) Platinum RTDs because with only one  external resistor we can set the sensitivity for the RTD being used, and the precision delta-sigma ADC converts the ratio of the RTD resistance to the reference resistance into digital form. Programmable detection of RTD and cable open/short conditions is also available. MAX31865 available in TFQN and SSOP packages are a bit difficult to handle for most hobbyists but fortunately pre-wired universal (2/3/4 wire sensors) MAX31865 modules are now widely available (see below image).

MAX31865 PT100 Module

Nothing fancy, design of this MAX31865 module is very close from the original Maxim MAX31865 datasheet. Host interface of the module consists of total 8 connection terminals as pointed below.

  • VIN – Supply Voltage Input (3-5 VDC)
  • GND – Ground (0V)
  • 3V3 – 3.3V Supply Line
  • CLK – Serial Data Clock Input
  • SDO – Serial Data Output
  • SDI – Serial Data input
  • CS – Active Low Chip Select
  • RDY – Active Low Data Ready Push Pull Output

And, the sensor interface has 4 connection terminals, viz.

  • F+ : High Side RTD Drive
  • RTD+ : Positive RTD Input
  • RTD- : Negative RTD Input
  • F- : Low Side RTD Return

Also, there’re multiple solder jumpers on the module to configure the converter for 2 or 3 or 4 wire PT100 sensor input. Before the first use, you need to put some solder on the solder jumpers to select which type of sensor you want to connect on. Solder Jumper configurations (greenish marks) for a standard 2-wire PT1oo sensor is shown below.

MAX31865 PT100 Module Jumper Setup

Arduino Fun

Arduino lovers can speed up their projects by downloading a special Arduino driver library for the MAX31865 RTD chip with example code from https://github.com/olewolf/arduino-max31865. Here’s another Arduino example code for the quick test https://github.com/hallard/arduino-max31865/blob/59facafe63292bc011fe4808ead911d7504334e1/Examples/Full_Test_Serial/Full_Test_Serial.ino . While playing with those codes remember that, in this particular MAX31865 module, value of the 1% reference resistor (Rref) is 430Ω (not 390 Ω).

PT100 Signal Amplifier

Apart from the costly MAX31865 module, there’s also a bunch of comparatively inexpensive modules in the market, like the “high temperature sensor” SEN0198 from DFRobotics (www.dfrobot.com). The simple module (https://www.dfrobot.com/product-1474.html) is built around LMV321 as the signal amplifier, and  TL431 as the reference voltage generator. The module also holds an onboard 3V regulator, and provides an analog output for further processing by an external microcontroller. Arduino library for the DFR sensor is available here https://raw.githubusercontent.com/nxcosa/HighTemperatureSensor/master/libraries.zip

DFR SEN0198 Sensor

DFR SEN0198 Sensor Setup Example

Delta-Sigma Converters:

Ofcourse you can try other methods to build a thermometer using PT100 as the temperature sensor. For example, the popular 20-bit delta-sigma converter IC – LTC2420 ( www.linear-tech.com) will be a clever choice, as you can drive PT100 from a dc current source to measure the voltage developed across it with LTC2420. The readings can then be routed through SPI interface to a microcontroller coded to perform interpolation that converts resistance to temperature using ITS-90 scale (see the basic circuit idea shown below). For a full-fledged PIC project, go through this link http://www.kswichit.com/Pt100/Pt100.htm

LTC2420 Idea

When looking for an introduction to PT100 & Microcontrollers I found that many explanations were from a very theoretical point of view. It took me a while to understand how it really work. So I decided to write this primer for hobbyists who prefer practical hints to learning hard rock theory. That’s all for now!

References

https://www.picotech.com/library/application-note/pt100-platinum-resistance-thermometers
http://www.kswichit.com/pt100handheld/Pt100handheld.htm

Leave a Comment