AXIOM Beta/Temperatures

From apertus wiki
Jump to: navigation, search

1 Different Temperature Sensors

The AXIOM Beta hardware contains several temperature sensors (some dedicated sensors some integrated in other chips) the different chips and components are also operating at different temperature ranges. The Zynq for example has a rather hot operation range but the image sensor is meant to be as cold as possible meaning just a few degrees above room temperature. This page is a collection of information related to reading the different temperatures throughout the hardware.

In a closed case it's all about the air flow, so you need to carefully consider where the air enters and leaves the case. Ventilating out through holes above the fan is recommended. It's best to make a sort of wind-tunnel effect if you like. If you simply put a few 'holes' at the back and have a gap between fan and case, the hot air will mostly circulate inside the case, which is not what you want.

The Zynq will work relatively fine up to 90°C, although that is a little high for normal use. For the sensor you want to keep temperature quite low - typically not more than a few degrees above room temperature, so adding holes or slits close to the sensor is a good idea.

Always keep in-take holes/slits at the bottom or at least bottom side, because it aids natural convection. As a rule of the thumb, for intake you want to have about 1.5-2x the area you have for the exhaust (in total, which is the inside area of the fan). If you have too little intake, the fan gets slowed down, if you have to much, cooling will be ineffective.

1.1 MicroZed™ Zynq 7020

The Zynq 7020 has a maximum operating temperature of 85°C and has a special heat sink attached.

The temperature can be read with (Firmware 2.0)

axiom_zynq_info.sh

script (AXIOM Beta Firmware Version 2.0) which contains the following code lines:

ZTO=`cat /sys/devices/soc0/amba/*.adc/iio*/in_temp0_offset` 
ZTR=`cat /sys/devices/soc0/amba/*.adc/iio*/in_temp0_raw` 
ZTS=`cat /sys/devices/soc0/amba/*.adc/iio*/in_temp0_scale` 

ZT=`dc -e "5k $ZTR ${ZTO/-/_} + $ZTS * 1000 / p"`

printf "%-14.14s\t%8.4f °C\n" "Temp" $ZT

Output Example (of a full axiom-zynq-info.sh):

Temp             56.5988 °C
Vccint            0.9858 V
Vccaux            1.7769 V
Vccbram           0.9866 V
Vccpint           0.9836 V
Vccpaux           1.7769 V
Vccoddr           1.4809 V
Vrefp             0.0000 V
Vrefn             0.0000 V

1.2 Power Board

The AXIOM Beta Power Board contains a dedicated LM75 digital thermometer (datasheet) which can be read with the following command:

cat /sys/class/hwmon/hwmon0/temp1_input 

The output divided by 1000 is provided in °C.

The normal operation range of the Power Board goes until 60°C but should not exceed 75°C.

example output:

[root@beta] /home/operator # cat /sys/class/hwmon/hwmon0/temp1_input 
44500

1.3 CMV12000 Image Sensor

The image sensor contains an integrated temperature sensor, see CMV12000 datasheet chapter 7.6.5 Temperature Sensor for reference.

This value can be read by running (AXIOM Beta Firmware Version 2.0):

axiom_cmv_reg 127

example output:

0x00000267

The return value needs to be processed to acquire the temperature in degrees (the 𝐶𝐿𝐾_𝐼𝑁 is currently 20.833):

temperature [°C] = (RETURN_VALUE - 572.92) / 2.43



The CMV12000 is meant to operate as cool as possible as a temperature increase means visible image noise increase. In normal operation the image sensor is just a few degrees above room temperature.

1.4 Temperature Logging Script

The following bash script can be run inside the AXIOM Beta and captures Zynq, Power Board and CMV12000 temperatures every 10 seconds and logs them into a file (tab separated values) if run like:

./temperature_record.sh | tee temperature.log

Script:

#!/bin/bash

# make sure axiom-start.sh has been run before the script 
# otherwise this will crash the camera when trying to read image sensor 
# registers.

echo "Time  Zynq    Power Board     Image Sensor"

while true; do
# Power Board
PBTEMPRAW=`cat /sys/class/hwmon/hwmon0/temp1_input`


# Zynq
ZTO=`cat /sys/devices/soc0/amba/*.adc/iio*/in_temp0_offset`
ZTR=`cat /sys/devices/soc0/amba/*.adc/iio*/in_temp0_raw`
ZTS=`cat /sys/devices/soc0/amba/*.adc/iio*/in_temp0_scale`
ZT=`dc -e "5k $ZTR ${ZTO/-/_} + $ZTS * 1000 / p"`


# CMV12000
CMVTEMP=`axiom-cmv-reg.sh 127`

# CLK_IN = 250/12 MHz = 20.8333

# cmv12000 offset formular:
# 825*freq/30 = 572.92

# cmv12000 slope formular:
# 3.5*freq/30 = 2.43

CMVTEMPDEC=`printf "%d" $CMVTEMP`
CMVTEMPFLOAT=`bc <<< "scale=3;($CMVTEMPDEC - 572.92) / 2.43"`

# Output
printf "%d\t%8.2f\t%8.2f\t%8.2f\n" $SECONDS $ZT $(($PBTEMPRAW/1000)) $CMVTEMPFLOAT

#repeat reading every 10 seconds
sleep 10

done

The resulting temperature.log can then be visualized with gnuplot for example:

set notitle
set term svg size 2048, 1024
set multiplot
set obj 1 rectangle behind from screen 0,0 to screen 1,1
set obj 1 fillstyle solid 1.0 fillcolor rgbcolor "white"
set xlabel "Time [seconds]"
set ylabel "Temperature [°C]"

set yrange[22:85]
plot 	'temperature.log' using 1:2    with lines lc rgb "#FF0000" lw 2    title "Zynq", \
	    'temperature.log' using 1:3    with lines lc rgb "#00FF00" lw 2    title "Power Board", \
	    'temperature.log' using 1:4    with lines lc rgb "#0000FF" lw 2    title "CMV12000"
unset multiplot

run with:

gnuplot temperature.plot > temperature-curve.svg

With a few additional annotations this can create a graph like:

AXIOM-Beta-CP-Fan-Sunon-MF60101V3-1000U-A99.jpg