0
\$\begingroup\$

Recently I have been trying to interface with the MLX90616 an infra red temperature sensor by Melexis. After reading the datasheet I have I have written a program to take the object temperature readings via the on board SMBus. Everything on my end seems to be working however the the temperature readings are taking extremely long (greater then 10 minutes) to reach the object temperature. Based on the datasheet the temperature should settle within seconds thanks to the inbuilt thermal gradient compensation. Is there some EPROM setting I have missed to turn on the thermal gradient compensation to acquire fast stable readings?

Further more has anybody had a similar experience with this sensor? I am unable to find any details of others who have used this particular sensor in the past so some details would be greatly appreciated.

I have attached the main body of my code for your reference:

 I2C1_Init(50000);                   //I2C clock must be in the range of 10kHz to 100kHz for operation according to the SMBus specifications
  //delay_ms(100);                      //Allow time for the SSP module to initialise

  I2C1_Start();
  //Sometimes if I2C read is peformed without an acknologment it can hang the I2C BUS error check on each operation is therefore necessary
  if(I2C1_Wr(0xB4) == 0)           //Address for a write operation to 0x5A
  {
    if(I2C1_Wr(0x07) == 0)         //Address for RAM command to 0x7
    {
      I2C1_Repeated_Start();
      if(I2C1_Wr(0xB5)== 0)        //Address for read operation to 0x5A
      {
        lowerByte = I2C1_Rd(1);
        upperByte = I2C1_Rd(1);
      }
    }
  }
  I2C1_Stop();
\$\endgroup\$
4
  • \$\begingroup\$ Perhaps your sensor is not isolated from radiant source, as it measures the temperature difference between source and casing. Therfore if casing is not temperature stabile, you are waiting that sensor heats up to steady state temp. \$\endgroup\$ Commented Oct 5, 2015 at 11:57
  • \$\begingroup\$ Thank you for your suggestion. I have designed a casing for this purpose which restricts the field of view of the sensor and regulates the temperature appropriately as per the datasheet. However the problem still persists. \$\endgroup\$ Commented Oct 5, 2015 at 12:29
  • \$\begingroup\$ What material did you use? The temperature readout would be an average temp. of all FOV, therefore if the sensor's FOV is bigger than restricted FOV you won't get the temp. of the object, rather a mean value of object and case temp. \$\endgroup\$ Commented Oct 5, 2015 at 12:44
  • \$\begingroup\$ The casing is a mortified version of the casing found in your typical hand held temperature gun consisting of a metal housing around the sensor with a plastic insert. Your make a valid point however i observed that without the housing I still have the some problem. basically I tried pointing the sensor at the hot plate of an iron and the temperature reading would rise extremely slowly (over 10 minutes) with or without the housing. \$\endgroup\$ Commented Oct 5, 2015 at 15:24

2 Answers 2

0
\$\begingroup\$

The MLX90616 does not come factory calibrated as such all the calibration co-efficients are set to zero by default. This means that the Object temperature readings will not respond to fluctuations in temperature. In order to get readings from this particular sensor a calibration procedure must first be performed and the co-efficients written to the appropriate EPROM locations. You need to contact your supplier for further details on the calibration procedures.

\$\endgroup\$
0
\$\begingroup\$

I have had the same problem. After carefully reading the datasheet it is clear it needs to be calibrated (how, I'm not sure just yet). It's frustrating because Melexis will not provide technical support unless you're buying 10k+, and are very vague about their "calibration software".

The ambient temperature sensor in the MLX90616 is calibrated in the factory... The sensor-lens combination temperature measurement has to be calibrated by the customer.

I spent a couple weeks before I realized the reason it was not working, was because it was not calibrated. The output appears to simply be the ambient temperature!

If you read the calibration coefficient register 0x0F you'll see that it is 0x0020.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.