Temprature.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*********************************************************************************************************
  2. * Module : Temprature.c
  3. * Abstract : Temprature module
  4. * Version : 1.0.0
  5. * Author : Leopul(COPYRIGHT 2025 - 2027 Leopul. All rights reserved.)
  6. * Complete : 2025-02-16
  7. * Content : None
  8. * Note : None
  9. *********************************************************************************************************/
  10. #include "Temprature.h"
  11. #include "Adc.h"
  12. #include "main.h"
  13. #include "math.h"
  14. /****************************************************************
  15. *
  16. * NXFT15XH103
  17. *
  18. * T(K) = (662.666 -45.389*ln(R)+0.069*(ln(R))^3)
  19. * T(C) = T(K) - 273.15
  20. *
  21. *****************************************************************/
  22. static float get_temp(void);
  23. #define GATHER_MAX 2000
  24. #define VREF 33
  25. #define V_HOT(ad) (((ad * 1000)>>12) * VREF / 10.0 /1000.0)
  26. #define R_HOT(ad) ((V_HOT(ad)*10000.0) / ((VREF/10.0)-(2.0*V_HOT(ad))))
  27. #define T_TEMP(res) ((662.7481 - (45.40407 * log(res)) + (0.06895 * log(res)*log(res)*log(res))) - 273.15)
  28. //static uint32_t gather_count = 0;
  29. //static uint32_t all_get_ad = 0;
  30. static float get_temp(void)
  31. {
  32. sts_data_t *data = get_sts();
  33. uint32_t all_get_ad = 0;
  34. float temprature = 0.0;
  35. for(uint32_t i = 0; i < GATHER_MAX ;i++)
  36. {
  37. all_get_ad += get_adc();
  38. }
  39. all_get_ad /= GATHER_MAX;
  40. float v_hot = V_HOT(all_get_ad);
  41. if(v_hot < 3.3)
  42. {
  43. float i_current = (3.3 - v_hot) / (10000);
  44. float res = v_hot / i_current;
  45. temprature = T_TEMP(res);
  46. if(((uint32_t)res)>=598 && ((uint32_t)res) <= 197000)
  47. {
  48. data->m_data.temprature_flag = TEMP_ONLINE;
  49. data->m_data.temprature = temprature * 100;
  50. }else
  51. {
  52. data->m_data.temprature_flag = TEMP_INLINE;
  53. data->m_data.temprature =(-88.88 *100);
  54. }
  55. }else
  56. {
  57. data->m_data.temprature_flag = TEMP_INLINE;
  58. data->m_data.temprature =(-88.88 *100);
  59. }
  60. return temprature;
  61. }
  62. void temp_init(void)
  63. {
  64. adc_init();
  65. sts_data_t *data = get_sts();
  66. data->read_temp = get_temp;
  67. }