| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /*********************************************************************************************************
- * Module : Temprature.c
- * Abstract : Temprature module
- * Version : 1.0.0
- * Author : Leopul(COPYRIGHT 2025 - 2027 Leopul. All rights reserved.)
- * Complete : 2025-02-16
- * Content : None
- * Note : None
- *********************************************************************************************************/
- #include "Temprature.h"
- #include "Adc.h"
- #include "main.h"
- #include "math.h"
- #include "ds18b20.h"
- /****************************************************************
- *
- * NXFT15XH103
- *
- * T(K) = (662.666 -45.389*ln(R)+0.069*(ln(R))^3)
- * T(C) = T(K) - 273.15
- *
- *****************************************************************/
- static float get_temp(void);
- #define GATHER_MAX 2000
- #define VREF 33
- #define V_HOT(ad) (((ad * 1000)>>12) * VREF / 10.0 /1000.0)
- #define R_HOT(ad) ((V_HOT(ad)*10000.0) / ((VREF/10.0)-(2.0*V_HOT(ad))))
- #define T_TEMP(res) ((662.7481 - (45.40407 * log(res)) + (0.06895 * log(res)*log(res)*log(res))) - 273.15)
- //static uint32_t gather_count = 0;
- //static uint32_t all_get_ad = 0;
- static short temp[20] = {0};
- static int count = 0;
- static int cmp_func (const void * a, const void * b)
- {
- return (*(short*)a - *(short*)b);
- }
- static float get_temp(void)
- {
- sts_data_t *data = get_sts();
- uint32_t all_get_ad = 0;
- float temprature = 0.0;
- short tmp = DS18B20_Get_Temp();
- if(tmp >= -550 && tmp <=1250)
- {
- temp[count++] = tmp;
- if(count == 20)
- {
- qsort(temp, 20, sizeof(short),cmp_func);
- temprature = (float)(temp[10]) / 10.0;
- data->m_data.temprature = temprature * 10;
- count = 0;
- }
- }
- if(data->m_data.temprature_flag == 0)
- {
- data->m_data.temprature = 0;
- }
- #if 0
- for(uint32_t i = 0; i < GATHER_MAX ;i++)
- {
- all_get_ad += get_adc();
- }
- all_get_ad /= GATHER_MAX;
- float v_hot = V_HOT(all_get_ad);
- if(v_hot < 3.3)
- {
- float i_current = (3.3 - v_hot) / (10000);
- float res = v_hot / i_current;
- temprature = T_TEMP(res);
- if(((uint32_t)res)>=598 && ((uint32_t)res) <= 197000)
- {
- data->m_data.temprature_flag = TEMP_ONLINE;
- data->m_data.temprature = temprature * 100;
- }else
- {
- data->m_data.temprature_flag = TEMP_INLINE;
- data->m_data.temprature =(-88.88 *100);
- }
- }else
- {
- data->m_data.temprature_flag = TEMP_INLINE;
- data->m_data.temprature =(-88.88 *100);
- }
- #endif
-
- return temprature;
- }
- void temp_init(void)
- {
- //adc_init();
- DS18B20_Init();
- sts_data_t *data = get_sts();
- data->read_temp = get_temp;
- }
|