## Analog Sensors and Custom Parameter Modeling (Pt100 RTD)

In the screenshots below you'll learn how to use custom parameter elements to model and simulate a Pt100 RTD temperature sensor. CircuitLab's programming language-like features allow you to mix circuits and code, a more powerful combination than either alone.

Press / (forward slash) to begin a toolbox search and type "param" to find the Parameter Element: Click and drag to insert the element on to your schematic. Double-click to configure it: Type "RTD_TEMP" as the Key and leave "0" as the Value: RTD_TEMP will be our independent variable, representing the temperature of our Pt100 RTD sensor in degrees Celsius.

Drag three more Parameter Elements from the toolbox onto the circuit and line them up below RTD_TEMP: We'll use these three to define some constant values. Double-click each and type in the Key and Value fields to set A=3.9083e-3, B=-5.775e-7, and C=-4.183e-12: These values describe the first, second, and third order variation in resistance of a platinum resistance thermometer with temperature. (See Wikipedia's Callendar-Van Dusen equation page for more detail.)

Next, we'll implement the equations. Drag in four more parameter elements, and set them as follows:

POS_TERMS="1 + (A*RTD_TEMP) + (B*RTD_TEMP^2)"
NEG_TERM = "(C*RTD_TEMP^3 * (RTD_TEMP-100))"
TOTAL_TERMS="POS_TERMS + IF(RTD_TEMP < 0, NEG_TERM, 0)"
RTD_RESISTANCE="100.0 * TOTAL_TERMS" Parameters can reference other parameters by name, and can do math and even evaluate logic like IF statements.

To see if this worked, click Simulate at the bottom of the window, and then click DC Sweep: Click in the Parameter box and an autocomplete appears. Click RTD_TEMP to choose it as our independent variable: Leave Sweep Type as Linear, and set Start to "-200" and End to "850", with a Step of "1": Under Outputs, click + Add Expression: A text field appears asking what we'd like to plot. Type "RTD_RESISTANCE", indicating that we'd like the simulator to simply evaluate that parameter as our result variable, and press Enter: This is now added to our Outputs list: Click Run DC Sweep. A plot window appears: Success! We have temperature on the x-axis and resistance on the y-axis. We can quickly confirm that at RTD_TEMP=0, the Pt100 sensor's resistance is 100 ohms, and we can check a few other points on a table to confirm that we've properly implemented the equations.

Next, let's build a circuit using this RTD model. Click Build at the bottom of the window to return to build mode: From the toolbox, click and drag on a voltage source, two resistors, a ground, and a node name. Then double-click on NODE1 and set the node name to "out", and double-click to make the voltage source be 5 volts: Now, let's make resistor R2 be controlled by our RTD_RESISTANCE parameter, rather than being a fixed 100 Ohms. Double-click R2 and type "RTD_RESISTANCE" in its R field: Click and drag wires from the component terminals to finish wiring up the circuit so we have a voltage divider between R1 and R2, with V(out) connected at the voltage divider’s midpoint: We're done building the circuit! This "out" node might be connected to an analog-to-digital converter (ADC) if we're interested in measuring the temperature, for example. Let's see how its voltage varies with the sensor's temperature.

Click Simulate at the bottom of the window: Click on the node name "out" and notice that V(out) is added to our DC Sweep's Outputs list: Click Run DC Sweep. A plot window appears: Perfect! In the bottom subplot, we can see how the V(out) voltage our ADC sees would vary with the sensor's temperature.

It's possible that we could design a better RTD measurement circuit than a simple voltage divider, but an engineer would almost certainly start with this simplest possible circuit first and then examine ways to improve it. (For example, 4-wire measurement to eliminate the effect of lead resistance, or better rejecting variations in the power supply voltage.)

That's it! Custom parameters are powerful tools for controlling your circuit simulations.

Click below to open the final circuit, or try it yourself from scratch (recommended). 