AD936xTemperaturesensor PDF

Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

AD936x Temperature sensor

The internal temperature sensor value can be read using the Auxiliary ADC (AuxADC) via SPI. The AuxADC
needs to be configured using the ad9361_auxadc_setup function to configure the part in temperature
sensor mode. Then use the ad9361_get_temp function to do a reading. To prevent issues with competing
functions interfering with each other, it is recommended to disable the Auxiliary ADC pin‐measurement
function when using the temperature sensor function.

The temperature sensor has inaccuracies and even with a onetime calibration the sensor is typically not
useful for accurate measurements.

There are various elements in the chain that add uncertainty and error into the temperature sensor
reading. The inaccuracies can come from

1. Diode voltage offset


2. AuxADC nonlinearities
3. Temperature word variation with respect to supply voltage, VDDA1p3_BB

Figure 1 : Temperature sensor block diagram (for understanding purpose only).

Hence a onetime factory calibration is required to use the internal temperature sensor effectively. But
even with a calibration, there is significant variation due to tolerances that can’t be removed by a
calibration. The temperature sensor should only be used by non-critical functions that are not sensitive
to the wide tolerances of the circuit.

The diode voltage offset has a fixed offset of positive 11 degrees C as well as a tolerance of 4.4 degrees
C. The 11 degree fixed offset will cause the baseband processor to indicate that the junction temperature
is 11 degrees higher than it actually is. It can be compensated by a simple correction factor in the
baseband processor code. The tolerance will be anywhere in the range of ±4.4 degrees C and would be
compensated by the onetime factory calibration.
The AuxADC has Differential Non linearity (DNL) of between +6.6 degrees C and -14 degrees C which will
exist even if a onetime factory calibration occurs which equates the temperature word with a known
junction temperature.

The temperature sensor reading is proportional to AuxADC power supply (VDDA1p3_BB). Make sure that
the power supply is stable during calibration and the variation of this supply is minimal. Any increase or
decrease in voltage will proportionally (1:1) impact the temperature sensor reading.

 Example 1 :
 VDDA1p3_BB = 1.31 volts
 The temperature word = 61 decimal
 Register 0x00B = 0
 Assume in this case that the variation is the negative value of 18 codes (degrees) which
Represents the worst case offsets of both variation over process (4 codes) and the Auxiliary ADC (14
codes) added together.

Without calibration the worst case temperature reading will be as below.

(61+256−(−18)−11)∗𝑞∗1.31
𝑇𝑗(𝐾 ) = ln(40)∗212 ∗𝑘
= 326 deg K = 53 deg C
 K is Boltzmann’s constant in J/K
 TJ is the temperature in Kelvin
 q is electron charge in Coulombs

With one time calibration variation due to process can be eliminated and the temperature read will be .
(61+256−(−14)−11)∗𝑞∗1.31
𝑇𝑗(𝐾 ) = = 322 deg K = 49 deg C.
ln(40)∗212 ∗𝑘

 Example 2 : if the VDDA1p3_BB = 1.30 volts

(61+256−(−14)−11)∗𝑞∗1.30
𝑇𝑗(𝐾 ) = = 319 deg K = 46.5 deg C
𝑙𝑛(40)∗212 ∗𝑘

The temperature word has a slope of approximately 1.00 LSB/°C

Temperature sensor can be read manually or periodically.

For the temperature measurement, the clock frequency of the AuxADC is set to the frequency of the
BBPLL divided by 64. Bits D7:D1 of Register 0x0D set the rate at which the temperature sensor
periodically takes temperature readings.

If temperature measurements are to be performed manually (Bit D0 of Register 0x0D is clear) then the
measurements start when Bit D0 of Register 0x0C (Start Temp Reading) is set.

Please see UG‐671, the register map reference manual, for register details.
FAQ.
Q1. How will I know when there is a change in temperature sensor output?

The temperature sensor word gets updated periodically. If the read happens during the update time it
will read incorrect values. To know when temperature word gets updated, a control output can be used
by setting 0x035 = 0x1E (GAIN CONTROL, TEMP SENSE VALID, AUXADC VALID). See the Control Output
section in the user guide.

The valid signal is Bit D1 of Register 0x0C. This signal should be routed out on the CTRL_OUT1 pin by
writing 0x36 to Register 0x03.

Control Output 1 (Temp Sense Valid) This signal changes state when the temperature sensor word in
0x00E is valid. The BBP can manually start a temperature measurement or it can set up the AD9361 for
periodic measurements. For periodic measurements, this control output signal will be a square wave
with a period equal to double the measurement time interval.

When periodic read is set 0x00D[b0] , there is no way to ensure that you read correct values unless you
have control out monitored.

Q2. What is the unit of temperature read, Is it Kelvin on Degree C?

The unit of temperature measured is Deg C.

Q3. What is the procedure to read the temperature sensor value?

The below API sequence and settings can be used for reading temperature sensor

Parameters for initialization

/* Temperature Sensor Control */

 256, //temp_sense_decimation *** adi,temp-sense-decimation


 1000, //temp_sense_measurement_interval_ms *** adi,temp-sense-
measurement-interval-ms
 0xCE, //temp_sense_offset_signed *** adi,temp-sense-offset- unsigned and
left justified.
 1, //temp_sense_periodic_measurement_enable *** adi,temp-sense-
periodic-measurement-enable
API for reading temperature

ad9361_get_temp(), it returns in millidegree Celsius

Ref: https://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz/software/baremetal
Below is the sequence given in UG-570.

Control_out1 toggles for every read I.e. if in periodic mode the valid signal will toggle for every
Measurement Time Interval set in 0x00D[D7:D1] and in manual mode for every temperature
measurement initiated by setting 0x00c[D0] bit.

Q4. What is the procedure to do Factory calibration of temperature sensor?

1. Make sure you have a controlled temperature environment and the board temperatures has
stabilized. For this you can do the temperature calibration as the last step in production testing.
2. Have provision on board to have a temperature sensor on the PCB close to the chip Or measure
case temperature using thermocouple in the production test environment.
3. For setting the part at a known power dissipation state, configure chip to alert state for thermal
measurements.
4. Using ΘJC or ΘJB calculate board to die or case to die temperature.
5. Read back the temperature sensor reading using API via AuxADC and compare measured Vs
read temperature and generate a temperature offset value.
6. When reading the temperature, disable the AuxADC by setting 0x01D[D0] to ensure a valid
temperature reading.
7. Use same offset value for all temperature measurements in actual application.
8. DNL cannot be calibrated and measured temperature can have a positive offset of upto 11
degrees when measuring from 30 degC to 110 deg C.

Q5. How to do same using IIO oscilloscope GUI ?

Procedure for measuring temperature sensor using GUI is given in below link.

https://wiki.analog.com/resources/tools-software/linux-drivers/iio-
transceiver/ad9361#die_temperature_reading

You might also like