需求:高低温提示后停机和关机功能,底层需先完成上报温度的部分;
主体思想:通过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得出最终温度。