DW1000 Temperature compensation


Can we use the external temperature sensor for temperature compensation for power?. For temperature compensation how the raw value can be calculated if we use an external temperature sensor?

Shijo Thomas

Hi Shijo,

There is an internal SAR ADC to measure temperature within the DW1000, why don’t you use it ?


Why wouldn’t you use the one built into the DW1000?

There is no reason why you couldn’t use an external sensor. It’s adding extra parts for no reason and isn’t going to give you as accurate a reading of the temperature of the chip itself, which is what you need to compensate for. But if you really wanted to do it that way it should work fine unless you’re in an environment where the temperature is constantly changing very rapidly.


The temperature may not change rapidly.

And we need to compensate for the power based on the board temperature. Is it possible to use the external temperature sensor? If so how to calculate the raw temperature?

Shijo Thomas

Yes it is possible to use an external temperature sensor. It adds cost and complexity for no benefit but it is possible.

What do you mean by “the raw temperature”?

Can you can make the following assumptions:
No rapidly changing external temperature.
The transmit / receive duty cycle of the DW1000 is roughly constant (It’s power consumption per second is roughly constant and so it can be considered a constant heat source)
Nothing else on the PCB is changing its power usage significantly over time.

If these conditions are met then the first law of thermodynamics tells us that there will be a linear relationship between the DW1000 internal temperature and a external the temperature sensor reading. For a given environmental temperature this will be a constant offset but the size of the offset will increase as external temperature decreases. The values for this calculation would need to be determined experimentally since they will depend on the mechanical construction of the end product.


Decawave has provided the API dwt_calcpowertempadj() for temperature compensation. Input to this function is

  1. The channel at which compensation of power level will be applied
  2. The TX_POWER register value recorded when reference measurements were made
  3. The difference between current ambient temperature (raw value units) and the temperature at which reference measurements were made (raw value units).

Here the third input parameter is using the raw temperature value, not the temperature value in degree Celcius. So if we are using the external temperature sensor, how we can convert this temperature in degree Celcius to raw value. In the APS023 application note, it is mentioned that measurement can be taken using a temperature sensor in DW1000 or any other on-board temperature sensor.

Shijo Thomas

You convert from degrees to raw units by reversing the formula used to convert from raw units to degrees. That formula is given in the user manual for the DW1000 in section

Temperature (°C )= ( (SAR_LTEMP – OTP_READ(Vtemp @ 23°C) ) x 1.14) + 23

Since all you want is temperature difference between your reference temperature and the current temperature the constants in that equation can be ignored and the value you need to use is simply temperature change in c / 1.14

Thank you for the input


as far as I know, one of the reason you might want to use the external temperature sensor (e.g. on the MCU or external IC) is that when reading the temperature/voltage from the DW1000 it would create a hiccup of the internal clocks of the DW1000.

For TWR it is probably not a problem if the hiccup happens outside of the measurement. For TDOA this is less desired if it would happen too often.

This is related with some errata in the DW1000 as far as I know.