AD936xTemperaturesensor PDF
AD936xTemperaturesensor PDF
AD936xTemperaturesensor PDF
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
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.
(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 ∗𝑘
(61+256−(−14)−11)∗𝑞∗1.30
𝑇𝑗(𝐾 ) = = 319 deg K = 46.5 deg C
𝑙𝑛(40)∗212 ∗𝑘
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.
The below API sequence and settings can be used for reading temperature sensor
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.
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.
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