NTC算法 B值公式 (查表法替代)
NTC的B参数公式1/T 1/T₀ 1/B × ln(R/R₀)以下参数 NTC 10K 3950型号为例T 开尔文温度 //开尔文温度(K)T₀ 298.15K (25°C) //(273.1525) 开尔文偏移(0°C273.15K)R₀ 10000Ω (25°C时NTC电阻) //25°C时NTC电阻 10kB 3950 (NTC规格书给的) //NTC规格书给的B值R ADC根据电压采集换算的电阻值 //当前实测NTC电阻实际摄氏度温度 °C K - 273.15现在是有两个未知量1.NTC电阻值2.环境温度NTC电阻值我们可以通过ADC分压检测算出float NTC_R ALL_R * ( NTC_VREF - NTC_V) / NTC_V;那么就差温度为未知量根据float TEMP_C 1.0f / (1.0f / 298.15f logf( NTC_R / 10000.0f ) / NTC_B ) - 273.15f ;这样就可以算出温度了logf为C语言 #include math.h本算法缺陷1.测量范围越宽, 误差越大 B参数只在25°C附近准, 偏离越远误差越大2.忽略了自热效应3.无法修正电路非线性4.相较于查表调用了logf函数运算时间消耗为微秒级 不建议用在高速控制类本算法优点1.代码极简无需查表, 不用存大数组省Flash2.调参灵活改NTC_B就行, 不用重新标定整个表3.全范围连续查表只能插值参考代码/* * NTC 10K 3950 温度计算 * 电路: NTC_VREF ── NTC ──┬── ALL_R ── GND * │ * NTC_V (AD7682 IN2) * * B参数公式: 1/T 1/T₀ 1/B × ln(R/R₀) * T₀298.15K(25°C), R₀10000Ω(25°C时电阻), B3950 **/ #include math.h /* 参数宏 */ #define NTC_VREF 3.3f /* 分压参考电压(V) */ #define ALL_R 10000.0f /* 固定分压电阻(Ω) */ #define NTC_B 3950.0f /* NTC B值 */ #define NTC_R0 10000.0f /* 25°C时NTC电阻(Ω) */ #define NTC_T0 298.15f /* 25°C对应的开尔文温度: 273.1525 */ /* 温度计算函数 */ /** * brief NTC电压 → 温度 (B参数法) * param ntc_v AD7682采集的NTC分压电压(V) * return 摄氏度(°C), 异常返回-999.0 */ static float ntc_calc_temp(float ntc_v) { if (ntc_v 0.0f || ntc_v NTC_VREF) return -999.0f; /* 电压异常 */ /* ① 电压 → NTC电阻 */ float ntc_r ALL_R * (NTC_VREF - ntc_v) / ntc_v; /* ② 电阻 → 摄氏度 (B参数方程) */ float temp_c 1.0f / (1.0f/NTC_T0 logf(ntc_r/NTC_R0) / NTC_B) - 273.15f; return temp_c; }以上为简陋看法欢迎指正