Temprature.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 200
  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.666 - (45.389 * log10(res)) + (0.069 * log10(res)*log10(res)*log10(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. if(gather_count < GATHER_MAX)
  36. {
  37. all_get_ad += get_adc();
  38. gather_count++;
  39. }else
  40. {
  41. all_get_ad /= GATHER_MAX;
  42. float v_hot = V_HOT(all_get_ad);
  43. if((uint32_t)((v_hot)*100) < 165)
  44. {
  45. float res = ((v_hot)*10000) / (3.3 - 2 * v_hot);
  46. if(res>=598 && res <= 197000)
  47. {
  48. temprature = T_TEMP(res);
  49. data->temp_online_flag = TEMP_ONLINE;
  50. }else
  51. {
  52. data->temp_online_flag = TEMP_INLINE;
  53. }
  54. }else
  55. {
  56. temprature = 0.0;
  57. data->temp_online_flag = TEMP_INLINE;
  58. }
  59. gather_count = 0;
  60. all_get_ad = 0;
  61. }
  62. data->temprature = temprature;
  63. return temprature;
  64. }
  65. void temp_init(void)
  66. {
  67. adc_init();
  68. sts_data_t *data = get_sts();
  69. data->read_temp = get_temp;
  70. }