RK3568通过读取SY6970寄存器NTCPCT值来获取电池温度

需求:高低温提示后停机和关机功能,底层需先完成上报温度的部分;

主体思想:通过SY6970寄存器NTCPCT值及硬件原理图设计,推出NTC电阻值,再将该值对照下表推导出温度:

步骤1:找出寄存器描述:

步骤2:依据硬件原理图设计推导出与寄存器值之间的关系:

即NTC/REGN = {30*RNTC/(30+RNTC)}/{5.1+30*RNTC/(30+RNTC)}

推导得:RNTC = 153(NTC/REGN)/(30-(35.1*(NTC/REGN)))

步骤3:在代码中实现:

注意点:

1、由于很久之前知道对于电量计节点来说,它本身就有一个POWER_SUPPLY_PROP_TEMP值来上报电池温度,问了统一我们也将温度上报加在这里;

2、由于我们是通过充电IC SY6970的驱动读取的数据,这里还要将值传递给电量计驱动。

接下来重中之重,就是将计算出来的NTC的电阻值对照成温度,这里可以自己定义一个结构体用来完成查表的功能:

备注:这里之所以将NTC的阻值从原来的夸大1000倍,纯属是因为无论我怎么改,只要参与计算的是小数它就会出错,刚好一起扩大1000倍算起来也方便点。

最后还有一个问题,就是表格提供的温度步进是5℃,这精确度不咋好,所以自己加工一下,改成步进为1℃,思路如下:

通过比较计算所得的NTC阻值在表中的哪两个区间内,再用这两个区间的差值除以5取一个NTC阻值的临时步进,接着判断低NTC阻值的那段阈值+临时步进值乘以i(i的取值范围为[0,7))是否大于实际所得的NTC阻值,若大于则取低温度那段的阈值+i得出最终温度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值