电池温度检测原理和示例代码

一、原理

  其实电池内部有个热敏电阻, 与外部分压电阻构成一个简单的分压电路,  根据ADC采样得到的电压j计算热敏阻值再反推此时的温度, 首先我们要先了解热敏电阻阻值和温度一个公式:

/* NTC热敏电阻公式 Rt = R * exp(B*(1/T1-1/T2))
Rt:在T1下的电阻值
T1/T2: 指的是K度,即开尔文温度, T=273.15 + 摄氏度
R: 在T2下的标称阻值,比如在25摄氏度10000欧, T2=273.15 + 25
B:热敏电阻一个参数, 比如3950
exp:e的n次方

我们可以通过温度得到阻值, 也可以通过阻值得到温度
Rt = 10000 * exp(3950*(1/(273.15+t1) - 1/298.15))
t1=1/(ln(Rt/10000)/3950+1/298.15)-273.15
*/

  我的外部电路如下:

 

   J2是电池插座, 三根线, 中间的就是NTC, BAT_DET连接处理器的ADC采样引脚, 分压电阻阻值47k, 参考电压1.8v, 所以:

Rt = Vadc * Rf / (Vin-Vadc)
Vadc: 热敏电阻对应的电压值
Rf: 分压电阻  对应电路47k
Vin: 参考电压 1.8v

   至于Vadc采样电压就是各个处理器自己的事了, 只要确保采集的电压是准确的, 可以和万用表对比

二、示例代码

  下面就演示温度从零下-10度到60度 热敏电阻阻值以及根据采样电压反推热敏电阻的温度, 需要注意的是,代码需要包含math.h函数库的支持, 同时, 数学ln()的叫法在C库是log()

/* gcc test.c -lm */
#include<stdio.h> #include <math.h> int main() {
  int t1; double Rt, Vadc; /* 温度从零下-10度到60度 热敏电阻阻值 */ for(t1=-10; t1<60; t1++) { Rt = 10000 * exp(3950*(1/(273.15+t1) - 1/298.15)); Vadc = 1800*Rt/(Rt + 47000); printf("%d = %.10fmv\n", t1, Vadc); } /* 根据采样电压反推热敏电阻的温度 */ for(Vadc=100; Vadc<1000; Vadc+=100) { Rt = Vadc * 47000 / (1800-Vadc); t1=1/(ln(Rt/10000)/3950+1/298.15)-273.15; printf("
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值