ALGO_Temperature_ATY.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * @file ALGO_Temperature_ATY.c
  3. *
  4. * @param Project ALGO_Algorithm_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2023 MZ-ATY
  10. * - This code follows:
  11. * - MZ-ATY Various Contents Joint Statement -
  12. * <a href="https://mengze.top/MZ-ATY_VCJS">
  13. * https://mengze.top/MZ-ATY_VCJS</a>
  14. * - CC 4.0 BY-NC-SA -
  15. * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  16. * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
  17. * - Your use will be deemed to have accepted the terms of this statement.
  18. *
  19. * @brief Familiar functions of NTC or others temperature calc
  20. *
  21. * @version
  22. * - 1_01_230107 > ATY
  23. * -# Preliminary version, first Release
  24. ********************************************************************************
  25. */
  26. #ifndef __ALGO_Temperature_ATY_C
  27. #define __ALGO_Temperature_ATY_C
  28. #include "ALGO_Temperature_ATY.h"
  29. /******************************* For user *************************************/
  30. /******************************************************************************/
  31. /**
  32. * @brief Calculate temperature from ntc resistance
  33. * @param Rntc Current NTC resistance value
  34. * @param R25 NTC standard resistance value at 25C
  35. * @param B B value of NTC
  36. * @return Current temperature in Celsius
  37. * @note T25: Kelvin temperature at 25C = 298.15 = ALGO_TEMP_CtoT(25)
  38. * R25: NTC standard resistance value at 25C like 10K,5K,100K...
  39. * B: B value of NTC like 3435,3950...
  40. * Rntc: Current NTC resistance value
  41. * Tn: Actual Kelvin temperature(Cn = Tn-273.15)
  42. * B = (lnR25 - lnRntc)/(1/T25 - 1/Tn)
  43. */
  44. float ALGO_ResToKelvinTemp(float Rntc, float R25, float B)
  45. {
  46. float Tn = 0.0;
  47. float Cn = 0.0;
  48. float temp_f[2];
  49. temp_f[0] = (ALGO_MATH_LogLn(R25) - ALGO_MATH_LogLn(Rntc)) / B;
  50. temp_f[1] = (1 / ALGO_TEMP_CtoT(25)) - temp_f[0];
  51. Tn = 1 / temp_f[1];
  52. Cn = ALGO_TEMP_TtoC(Tn);
  53. return Cn;
  54. }
  55. /**
  56. * @brief Calculate temperature from ntc resistance
  57. * @param vADC ADC voltage in mV
  58. * @param vRef NTC ref voltage in mV
  59. * @param rRefK ref resistance in kOhm
  60. * @param R25 NTC standard resistance value at 25C
  61. * @param B B value of NTC
  62. * @param rRefPos ref res psition, 1 for pull up, 0 for pull down(for ntc)
  63. * @return Current temperature in Celsius
  64. * @note T25: Kelvin temperature at 25C = 298.15 = ALGO_TEMP_CtoT(25)
  65. * R25: NTC standard resistance value at 25C like 10K,5K,100K...
  66. * B: B value of NTC like 3435,3950...
  67. * Rntc: Current NTC resistance value
  68. * Tn: Actual Kelvin temperature(Cn = Tn-273.15)
  69. * B = (lnR25 - lnRntc)/(1/T25 - 1/Tn)
  70. */
  71. float ALGO_VolToKelvinTemp(float vADC, float vRef, float rRefK, float R25, float B, uint8_t rRefPos)
  72. {
  73. if(rRefPos == 1){
  74. return ALGO_ResToKelvinTemp(ALGO_VoltageToResDown(vADC, vRef, rRefK), R25, B);
  75. }
  76. else{
  77. return ALGO_ResToKelvinTemp(ALGO_VoltageToResUp(vADC, vRef, rRefK), R25, B);
  78. }
  79. }
  80. // resultTemp = ALGO_ResToKelvinTemp(ALGO_VoltageToResDown(resultTemp, vref_t, 10), 1, 3200);
  81. #endif /* __ALGO_Temperature_ATY_C */
  82. /******************************** End Of File *********************************/