修复若干bug&完善fatfs服务&完善app

This commit is contained in:
zhangzheng
2023-10-02 00:22:13 +08:00
parent 714f06e429
commit eea118f9b7
143 changed files with 6603 additions and 211 deletions

View File

@@ -0,0 +1,81 @@
#include "adc.h"
#include "temp_cal.h"
#include "sysinfo.h"
#include <math.h>
// Rt = R *EXP(B*(1/T1-1/T2))
// 这里T1和T2指的是K度即开尔文温度K度=273.15(绝对温度)+摄氏度其中T2=(273.15+25)
// Rt 是热敏电阻在T1温度下的阻值
// R是热敏电阻在T2常温下的标称阻值
// B值是热敏电阻的重要参数
// EXP是e的n次方
const float Rp = 10000.0; // 10K
const float T2 = (273.15 + 25.0); // T2
const float Bx = 3950.0; // B
const float Ka = 273.15;
// 根据电阻值计算温度值
float get_temp(int resistor)
{
float Rt;
float temp;
Rt = resistor;
// like this R=5000, T2=273.15+25,B=3470, RT=5000*EXP(3470*(1/T1-1/(273.15+25)),
temp = Rt / Rp;
temp = log(temp); // ln(Rt/Rp)
temp /= Bx; // ln(Rt/Rp)/B
temp += (1 / T2);
temp = 1 / (temp);
temp -= Ka;
return temp;
}
#define RES_CAL(a) ((double)((a)) / (((3.3 - a) / 10000.0)))
#define TEMPS_NUMBET 4 // 六路温度
#define TEP_CAP_COUNT 50 // 15次平均
u32 adc_cap_val[TEMPS_NUMBET] = {0};
u16 adc_count = 0;
void temps_cal(void)
{
u8 i;
for (i = 0; i < TEMPS_NUMBET; i++)
{
adc_cap_val[i] += ADCConvertedValue[i];
}
adc_count++;
if (adc_count >= TEP_CAP_COUNT)
{
adc_count = 0;
for (i = 0; i < TEMPS_NUMBET; i++)
{
adc_cap_val[i] /= TEP_CAP_COUNT;
}
sys_info.temp[0] = get_temp(RES_CAL(((double)adc_cap_val[0] / 4096.) * 3.3));
sys_info.temp[1] = get_temp(RES_CAL(((double)adc_cap_val[1] / 4096.) * 3.3));
sys_info.temp[2] = get_temp(RES_CAL(((double)adc_cap_val[2] / 4096.) * 3.3));
sys_info.temp[3] = get_temp(RES_CAL(((double)adc_cap_val[3] / 4096.) * 3.3));
sys_info.temp[4] = get_temp(RES_CAL(((double)adc_cap_val[4] / 4096.) * 3.3));
sys_info.temp[5] = get_temp(RES_CAL(((double)adc_cap_val[5] / 4096.) * 3.3));
for (i = 0; i < TEMPS_NUMBET; i++)
{
if (sys_info.temp[i] < TEMP_MIN_VAL)
{
sys_info.temp[i] = TEMP_MIN_VAL;
}
else if (sys_info.temp[i] > TEMP_MAX_VAL)
{
sys_info.temp[i] = TEMP_MAX_VAL;
}
}
for (i = 0; i < TEMPS_NUMBET; i++)
{
adc_cap_val[i] = 0;
}
}
}