Difference between revisions of "Temperature Interface"

From BitWizard Wiki
Jump to navigation Jump to search
 
(18 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[File:.jpg|thumb|300px|alt=|]]
[[File:Tempic.jpg|thumb|300px|alt=Temperature Interface|Temperature Interface]]

This is the documentation page for the SPI_temp and I2C_temp boards.


This is the documentation page for the Temperature Interface. That you can buy in the [http://www.bitwizard.nl/shop/expansion-boards/temp-interface BitWizard shop].
== Overview ==
== Overview ==


This board enables you to measure up to 4 analog signals, specifically configured for measuring temperature with an MCP9700 sensor (or LM35 if you only require above-freezing temperatures).


== Assembly instructions ==
== Assembly instructions ==


None: the board comes fully assembled. The orientation of your sensor is indicated on the board, if you use the recommended MCP9700. We suggest you first test with the MCP9700 directly inserted into the socket in the board, before you make an extension cord to put it where you want to measure the temperature.

Officially electronics should easily be able to handle temperatures of about 80 °C, so it should be possible to put the whole module where you want to measure. I'd try try to avoid that situation.


=== Possible Configurations ===
=== Possible Configurations ===


with MCP9700 or LM35. If you know of other sensors that provide a similar signal, let us know.

Option 1: cheap, simple, positive only LM35.

* Install solder jumper
* don't install diode, capacitor, resistors.

Option 2: LM35 with negative temperatures.

* install diode,
* install pullup resistor? 50k
* install pulldown resistor 15k.
* Optional capacitor 100n.
* do not install solder jumper.

Option 3: thermocouple.

* install diode,
* install pullup.
* do not install pulldown.
* do not install solder jumper.

Diodes: PNB7000 or BAS31S or BAV99. should all work. Others should work too. The idea is that at 0.1mA forward current the voltage drop is about 1V.


== External resources ==
== External resources ==



=== Datasheets ===
=== Datasheets ===
* MCP9700: http://ww1.microchip.com/downloads/en/DeviceDoc/21942e.pdf

* LM35: http://www.ti.com/lit/ds/symlink/lm35.pdf


== Additional software ==
== Additional software ==
Line 45: Line 27:
=== Related projects ===
=== Related projects ===


This is a simplified version of the "DIO", but with a more convenient pinout for its purpose. We've taken out the features that cannot be used anyway on this board, like stepper motor control.
* [[Temperature_control]]


== Pinout ==
== Pinout ==

Each of the four temperature connectors has:

* 1 VCC
* 2 signal
* 3 GND

See [[Analog inputs]] for the configuration of the ADC channel you need for each of the connectors.




=== LEDs ===
=== LEDs ===


There is one power-led.


== Jumper settings ==
== Jumper settings ==


There is one solder jumper that would allow you to configure the second SPI port as a programming connector for software development.


== Protocol ==
== Protocol ==
For the intro to the SPI and I2C protocols read: [[SPI versus I2C protocols]]
For the intro to the SPI and I2C protocols read: [[SPI versus I2C protocols]]


The board specific protocol can be found here: [[DIO_protocol]]
The board specific protocol can be found here: [[DIO_protocol]] The STEPPER, BUTTONS and PWM functions are not implemented on "temp".

See [[Analog inputs]] for the configuration of the ADC channel you need for each of the connectors.


You should also read the [[General_SPI_protocol]] notes.
You should also read the [[General_SPI_protocol]] notes.
Line 65: Line 59:
For arduino, a sample PDE is available, called ardemo_lcd.pde, also at [http://www.bitwizard.nl/software the BitWizard software download directory] .<br>
For arduino, a sample PDE is available, called ardemo_lcd.pde, also at [http://www.bitwizard.nl/software the BitWizard software download directory] .<br>
<br>
<br>
This is a demo to send things using SPI to the lcd board. The SPI routines there are applicable for the DIO, 3FETS and 7FETS boards as well.<br>
This is a demo to send things using SPI to the lcd board. The SPI routines there are applicable for the DIO and TEMP boards as well.<br>

== Accuracy ==

The sensors claim a +/- 1 or +/- 2 degree accuracy. But the system adds a few more uncertainties. For example, the "internal 1.1V reference" is officially +/- 10%. In practise we've measured it way closer to 1.1 than the range would suggest, but it is a possible source of errors. Similarly, the analog amplifier has an offset voltage that contributes to the overall error.

In practise we often see an error on the order of 5 degrees C too high compared to the ideal temperature reading. We suggest you calibrate at least the offset by doing a reference measurement with a thermometer that you trust. Best would be to electrically insulate the sensor and put it in melting water (0C), and then in boiling water (100C). That way you can calibrate both the offset and gain.


== The software ==
== Examples ==




The folowing script
== Default operation ==


#!/bin/sh
# Sample script to read and calculate a temperature.
#
# for I2C:
TEMPBRD="bw_tool -I -D /dev/i2c-1 -a 8c"
# for SPI:
#TEMPBRD="bw_tool -a 8c"
#
if [ x"$1" = x"--init" ] ; then
# First initialize the temperature sensor.
# Channel 0 is first sensor, ... channel 3 is last sensor, sample four channels,
# add 64 (0x40) samples, and then... don't shift
$TEMPBRD -W 70:81:b 71:80:b 72:82:b 73:83:b 80:4:b 81:40:b 82:0:b
# wait for the settings to apply and enough sampes to be taken.
sleep 1
fi
adcconversion=`$TEMPBRD -1 -R 68:s`
# This value is scaled to 65535 is 1.1V.
# So:
# (1) voltage = adcconversion * 1.1 / 65535
# For the MCP9700 temperature sensor:
# (2) voltage = 0.5V + temp * 0.010V/C
# Some reworking results in:
# (3) temp = (voltage - 0.5)/0.01
# Now we can substitute the voltage from (1) and get:
# (4) temp = 100 * (adcconversion * 1.1 / 65535 - 0.5)
# and reworking this we get:
# (5) temp = .001678 * adcconversion - 50
temp=`echo $adcconversion \* .001678 - 50 | bc -l`
echo "temperature is: $temp"


== Future hardware enhancements ==


will initialize all four channels if you pass it --init and then read out just the first. On the adcconversion= ... line you need to change to 69 for the second sensor, 6a for the third and 6b for the last.


== Future software enhancements ==
== Future software enhancements ==

Latest revision as of 11:54, 11 November 2015

Temperature Interface
Temperature Interface

This is the documentation page for the Temperature Interface. That you can buy in the BitWizard shop.

Overview

This board enables you to measure up to 4 analog signals, specifically configured for measuring temperature with an MCP9700 sensor (or LM35 if you only require above-freezing temperatures).

Assembly instructions

None: the board comes fully assembled. The orientation of your sensor is indicated on the board, if you use the recommended MCP9700. We suggest you first test with the MCP9700 directly inserted into the socket in the board, before you make an extension cord to put it where you want to measure the temperature.

Officially electronics should easily be able to handle temperatures of about 80 °C, so it should be possible to put the whole module where you want to measure. I'd try try to avoid that situation.

Possible Configurations

with MCP9700 or LM35. If you know of other sensors that provide a similar signal, let us know.

External resources

Datasheets

Additional software

Related projects

This is a simplified version of the "DIO", but with a more convenient pinout for its purpose. We've taken out the features that cannot be used anyway on this board, like stepper motor control.

Pinout

Each of the four temperature connectors has:

  • 1 VCC
  • 2 signal
  • 3 GND

See Analog inputs for the configuration of the ADC channel you need for each of the connectors.


LEDs

There is one power-led.

Jumper settings

There is one solder jumper that would allow you to configure the second SPI port as a programming connector for software development.

Protocol

For the intro to the SPI and I2C protocols read: SPI versus I2C protocols

The board specific protocol can be found here: DIO_protocol The STEPPER, BUTTONS and PWM functions are not implemented on "temp".

See Analog inputs for the configuration of the ADC channel you need for each of the connectors.

You should also read the General_SPI_protocol notes.
For arduino, a sample PDE is available, called ardemo_lcd.pde, also at the BitWizard software download directory .

This is a demo to send things using SPI to the lcd board. The SPI routines there are applicable for the DIO and TEMP boards as well.

Accuracy

The sensors claim a +/- 1 or +/- 2 degree accuracy. But the system adds a few more uncertainties. For example, the "internal 1.1V reference" is officially +/- 10%. In practise we've measured it way closer to 1.1 than the range would suggest, but it is a possible source of errors. Similarly, the analog amplifier has an offset voltage that contributes to the overall error.

In practise we often see an error on the order of 5 degrees C too high compared to the ideal temperature reading. We suggest you calibrate at least the offset by doing a reference measurement with a thermometer that you trust. Best would be to electrically insulate the sensor and put it in melting water (0C), and then in boiling water (100C). That way you can calibrate both the offset and gain.

Examples

The folowing script

#!/bin/sh
# Sample script to read and calculate a temperature. 
#
# for I2C:
TEMPBRD="bw_tool -I -D /dev/i2c-1 -a 8c"
# for SPI: 
#TEMPBRD="bw_tool -a 8c"
#
if [ x"$1" = x"--init" ] ; then 
  # First initialize the temperature sensor. 
  # Channel 0 is first sensor, ... channel 3 is last sensor, sample four channels, 
  # add 64 (0x40) samples, and then... don't shift
  $TEMPBRD -W 70:81:b 71:80:b 72:82:b 73:83:b 80:4:b 81:40:b 82:0:b
  # wait for the settings to apply and enough sampes to be taken. 
  sleep 1
fi
adcconversion=`$TEMPBRD -1 -R 68:s`

# This value is scaled to 65535 is 1.1V. 
# So: 
# (1)    voltage = adcconversion * 1.1 / 65535
# For the MCP9700 temperature sensor: 
# (2)    voltage = 0.5V + temp * 0.010V/C
# Some reworking results in: 
# (3)    temp = (voltage - 0.5)/0.01
# Now we can substitute the voltage from (1) and get: 
# (4)    temp = 100 * (adcconversion * 1.1 / 65535 - 0.5)
# and reworking this we get: 
# (5)    temp = .001678 * adcconversion - 50
temp=`echo $adcconversion \* .001678 - 50 | bc -l`

echo "temperature is: $temp"


will initialize all four channels if you pass it --init and then read out just the first. On the adcconversion= ... line you need to change to 69 for the second sensor, 6a for the third and 6b for the last.

Future software enhancements

Changelog

1.0

  • Initial public release