Thermocouple emf reference functions

## Project description

Python module containing calibration data and lookup functions for standard thermocouples of types B, C, D, E, G, J, K, M, N, P, R, S, T, and some less standard types too.

## Usage and examples

Below, the first computation shows that the type K thermocouple emf at 42 °C, with reference junction at 0 °C, is 1.694 mV (compare to NIST table); the second calculation shows how passing in an array applies the function for each element, in the style of numpy:

>>> from thermocouples_reference import thermocouples
>>> typeK = thermocouples['K']
>>> typeK
<Type K thermocouple reference (-270.0 to 1372.0 degC)>
>>> typeK.emf_mVC(42, Tref=0)
1.6938477049901346
>>> typeK.emf_mVC([-3.14159, 42, 54], Tref=0)
array([-0.12369326,  1.6938477 ,  2.18822176])


An inverse lookup function is provided that you can use to get a temperature out of a measured voltage, including cold junction compensation effects. If we put our type K thermocouple into a piece of spam and we read 1.1 mV, using our voltmeter at room temperature (23 °C), then the spam is at 50 °C. [1]

>>> typeK.inverse_CmV(1.1, Tref=23.0)
49.907928030075773
>>> typeK.emf_mVC(49.907928030075773, Tref=23.0) # check result
1.1000000000000001


The functions are called emf_mVC and inverse_CmV just to remind you about the units of voltage and temperature. Other temperature units are supported as well:

Temperature unit

EMF lookup

Inverse lookup

degrees Celsius

.emf_mVC

.inverse_CmV

degrees Fahrenheit

.emf_mVF

.inverse_FmV

kelvins

.emf_mVK

.inverse_KmV

degrees Rankine

.emf_mVR

.inverse_RmV

You can also compute derivatives of the emf function. These are functional derivatives, not finite differences. The Seebeck coefficients of chromel and alumel differ by 42.00 μV/°C, at 687 °C:

>>> typeK.emf_mVC(687,derivative=1)
0.041998175982382979


## Data sources

Readers may be familiar with thermocouple lookup tables (example table). Such tables are computed from standard reference functions, generally piecewise polynomials. [2] This module contains the source polynomials directly, and so in principle it is more accurate than any lookup table. Lookup tables also often also include approximate polynomials for temperature lookup based on a given compensated emf value. Such inverse polynomials are not included in this module; rather, the inverse lookup is based on numerically searching for a solution on the exact emf function.

For any thermocouple object, information about calibration and source is available in the repr() of the .func attribute:

>>> typeK.func
<piecewise polynomial+gaussian, domain -270.0 to 1372.0 in degC, output in mV;
ITS-90 calibrated, from NIST SRD 60, type K>


The data sources are:

• Types B, E, J, K, N, R, S, T use coefficients from NIST’s website, and are calibrations to the ITS-90 scale. [3]

• Types G, M, P, and non-lettered types Au/Pt, Au/Pd, AuFe 0.07, IrRh 40/0, PtMo 5/0.1, PtRh 40/20 use coefficients from ASTM E 1751-00 and are calibrations to ITS-90.

• Types C, D [4] use coefficients found from a publication of OMEGA Engineering Inc., and are calibrations to IPTS-68 scale. [5]

Graphs of functions (if you don’t see anything, see low temperature types here, intermediate temperature types here, and high temperature types here):

## Requirements

• numpy

• scipy (optional, only needed for inverse lookup)

• python2 or python3 languages

## Installation

Recommended installation is via pip. First, install pip. Then:

pip install thermocouples_reference --user

(Remove the --user option if you are superuser and want to install system-wide.)

## Disclaimer

This module is provided for educational purposes. For any real-world process, I strongly recommend that you check the output of this module against a known good standard.

I make no warranties as to the accuracy of this module, and shall not be liable for any damage that may result from errors or omissions.

## Project details

Uploaded Source