参考开天斧官方例程,就是套用公式,计算不出温度值,不知道哪里有问题,求大佬指点
参考开天斧官方例程,就是套用公式,计算不出温度值,不知道哪里有问题,求大佬指点计算温度公式,就修改了基准电压和使用100k NTC,其余都没有变,AD值和电压值得出也是正确的,就是温度计算不出来.
试试这里面的算法呢?
NTC 热敏电阻温度计算公式:Rt = Ro *EXP(B/T-B/To),温度单位为绝对温度K,开尔文。
(1) Rt 是热敏电阻在温度T下的阻值。T是绝对温度。
(2) Ro是热敏电阻在To(25度)时的阻值。10K的热敏电阻25℃的值为10K(即Ro=10K)。To = (273.15+25)。
(3) EXP(n) 是 e 的 n 次方。
(4) B值是热敏电阻的材料系数。
通过转换可以得到温度T与电阻Rt的关系:T=1/(1/To+ln(Rt/Ro)/B)
对应的摄氏温度t=T-273.15。
position = 1.0 / (1.0 / 298.15 + log((float)adc_12bit / (4096.0-(float)adc_12bit)) / 3950) - 273.15; // 计算当前位置(温度)
DebugLab 发表于 2024-7-16 00:31
NTC 热敏电阻温度计算公式:Rt = Ro *EXP(B/T-B/To),温度单位为绝对温度K,开尔文。
(1) Rt 是热敏电阻在 ...
还是不行,adc_12bit,是读取的adc值吧?我打印出来的是-14.95。 打印出来的结果 你NTC上拉电阻(参考电阻)用的多大?贴出你的电路图。 正好写过这个,几乎和你一模一样的,只是我用的纯库函数:串口发AD值,同时OLED显示AD和温度计算值。
(补充说明:全局和局部变量有区别,不会造成错误)
先来现象:
然后是程序:
1、先看ADC转换和温度计算
2、主程序中每1000ms读出并显示AD转换值和温度计算值
float B = 3435.0;
Temperature = 1.0 / (1.0 / T2 + log(R2 / R1) / B) - K + 0.5;
这就是你的代码和官方参考代码的区别。
材料系数不同可以理解,因为你用的硬件不一样
但是公式是和参考公式不一样。如果材质、阻值都有区别,系数也有区别。还是重点看下你的公式。 本帖最后由 NTC 于 2024-7-23 22:39 编辑
float A = 2.23E-3,B = 2.38E-4,C = 3.36E-7;
float temper;
temper = 1/(A + B*log(R2) + C*pow(log(R2),3))-298.15;
试一下 本帖最后由 a阿德 于 2024-7-16 22:56 编辑
梁工 发表于 2024-7-16 18:17
你NTC上拉电阻(参考电阻)用的多大?贴出你的电路图。上拉电阻是10k,NTC使用的是B3950,100K-25℃