Post Go back to editing

ADPD188bi and temperature

Hi when the temperature changes my adpd188bi data drifts. Is there a way to fix this?

Thread Notes

Parents
  • I tried using a temperature sensor to help adjust but increasing and decreasing have different equations and also the rate of change makes a difference so it has become very rough

  • Which hardware are you using?  The CN0583 has a temperature sensor mounted closely to the module and firmware that does some compensation to reduce the amount of drift by back-applying the graphs from figures 18 and 19 of the ADPD188BI datasheet.  If you are using the EVAL-ADPD188BIZ, this system does not have any temperature compensation.

  • I see, thank you for your response, my colleague and I have built our own board, and integrated the EVAL-ADPD188biz. I assumed there was a register to adjust for temperature, but I guess there is not, so this definitely answers my question. If you do not mind, I have two additional questions. In regard to the CN0583, you mention that it does some compensation, does that mean that the tolerance is high. Do you have any tests that show how the CN0583 adjusts with temperature. I might consider using the CN0583 but want to get an idea of how well it will adjust for the temperature drift. Lastly, my colleague and I both have the ADPD188biz and Analog uC board, we have installed all the necessary software but still cannot get it to show as a usb, is there anything we might be missing. I have used a windows 11, windows 10 and windows 7 computer for them all. Thank you!

  • I also have my own temperature sensor. Is it possible to obtain the files that show how ADPD has gathered how Blue LED data changes with temperature. I am looking for something where I can get exact data points not just the figures shown on the pdfs. Thanks!

  • The CN0583 code that includes power transfer ratio, clock calibration, and temperature compensation is available here.
    https://github.com/analogdevicesinc/no-OS/tree/cn0583/projects/cn0583

    The file in particular that has the temperature compensation is "cn0537.c".  These two board share similar code, so some names were carried over.

    The coefficients are listed below.  The blue coefficients are also a function of LED current.  The IR compensation coefficients are not.

    const float ir_temp_coff[] = {
    1.023, 1.024, 1.024, 1.024, 1.023, 1.022, 1.020, 1.018,
    1.016, 1.014, 1.011, 1.007, 1.004, 1, 0.996, 0.992,
    0.987, 0.983, 0.978, 0.973, 0.968, 0.963, 0.958, 0.952,
    0.947, 0.942
    };
    const float blue_temp_coff_100ma[] = {
    0.932, 0.947, 0.96, 0.971, 0.98, 0.988, 0.994, 0.998,
    1.001, 1.003, 1.004, 1.004, 1.003, 1, 0.998, 0.994,
    0.99, 0.986, 0.981, 0.976, 0.971, 0.966, 0.961, 0.956,
    0.951, 0.947
    };
    const float blue_temp_coff_175ma[] = {
    0.875, 0.894, 0.912, 0.927, 0.941, 0.953, 0.963, 0.972,
    0.980, 0.986, 0.991, 0.995, 0.998, 1, 1.001, 1.001,
    1.001, 0.999, 0.998, 0.995, 0.992, 0.989, 0.986, 0.982,
    0.979, 0.975
    };
    uint8_t coff_index;

    The index for the array above is with, integer division, coff_index = (40 + dev->temp_celsius) / 5;

    These coefficients represent the measured attenuation at the specific temperature.  Therefore, for compensation a division step needs to be used.

Reply
  • The CN0583 code that includes power transfer ratio, clock calibration, and temperature compensation is available here.
    https://github.com/analogdevicesinc/no-OS/tree/cn0583/projects/cn0583

    The file in particular that has the temperature compensation is "cn0537.c".  These two board share similar code, so some names were carried over.

    The coefficients are listed below.  The blue coefficients are also a function of LED current.  The IR compensation coefficients are not.

    const float ir_temp_coff[] = {
    1.023, 1.024, 1.024, 1.024, 1.023, 1.022, 1.020, 1.018,
    1.016, 1.014, 1.011, 1.007, 1.004, 1, 0.996, 0.992,
    0.987, 0.983, 0.978, 0.973, 0.968, 0.963, 0.958, 0.952,
    0.947, 0.942
    };
    const float blue_temp_coff_100ma[] = {
    0.932, 0.947, 0.96, 0.971, 0.98, 0.988, 0.994, 0.998,
    1.001, 1.003, 1.004, 1.004, 1.003, 1, 0.998, 0.994,
    0.99, 0.986, 0.981, 0.976, 0.971, 0.966, 0.961, 0.956,
    0.951, 0.947
    };
    const float blue_temp_coff_175ma[] = {
    0.875, 0.894, 0.912, 0.927, 0.941, 0.953, 0.963, 0.972,
    0.980, 0.986, 0.991, 0.995, 0.998, 1, 1.001, 1.001,
    1.001, 0.999, 0.998, 0.995, 0.992, 0.989, 0.986, 0.982,
    0.979, 0.975
    };
    uint8_t coff_index;

    The index for the array above is with, integer division, coff_index = (40 + dev->temp_celsius) / 5;

    These coefficients represent the measured attenuation at the specific temperature.  Therefore, for compensation a division step needs to be used.

Children
No Data