锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

2022-06-09 RK817 PMU 电池温度检测

时间:2023-07-11 15:37:00 ptc正温度系数电阻器ts4温度传感器

一、硬件连接,TS/GPIO,连接电池的热敏电阻 thermistor

二、热敏电阻(the resistance of the thermistor)大致分为两类:
1.电阻随温度升高而增加,称为正温度系数(PTC,Positive Temperature Coefficient)热敏电阻。
2.电阻随温度升高而降低,称为负温度系数(NTC,Negative Temperature Coefficient)热敏电阻。

三、电池内部原理图

四、测温型NTC 热敏电阻器的特性表

五、与热敏电阻值相关的寄存器

1、gas_gauge_ADC_CONFIG0
Address: Operational Base offset (0x0050),TS_ADC_EN位要配置为1

2、gas_gauge_ADC_CONFIG1 Address: Operational Base offset (0x0055)VOL_ADC_TSCUR_SEL确保这个描述从TS脚输出的电流大小.

3、CODEC_AREF_RTCFG1
Address: Operational Base offset (0x0017)REF_ADC_SEL 设置ADC 参考电压。

4、gas_gauge_BAT_TS_H 和gas_gauge_BAT_TS_L 获取ADC 值

六、修改代码并测试

修改的代码

commit b353b70850442863c4b051beb258681c6cd71cdf Author: xxx.wei  Date:   Thu Jun 9 14:09:22 2022  0800      get battery temperature      diff --git a/drivers/power/supply/rk817_battery.c b/drivers/power/supply/rk817_battery.c index 32e2d65..4c49a27 100755 --- a/drivers/power/supply/rk817_battery.c     b/drivers/power/supply/rk817_battery.c @@ -632,6  632,11 @@ struct rk817_battery_device {   bool    change; /* Battery status change, report information */  };    struct battery_res_temp_data {   unsigned long res;   int temp;  };    static void rk817_bat_resume_work(struct work_struct *work);    static u64 get_boot_sec(void) @@ -2095,6  2100,40 @@ static int rk817_battery_time_to_full(struct rk817_battery_device *battery)   return time_sec;  }    static const struct battery_res_temp_data bat_temp_table[] = {   {324  ,125},{  371,120},{  427,115},{  491,110},{  567,105},   {657  ,100},{  763, 95},{  890, 90},{ 1044, 85},{ 1228, 80},   {1452 , 75},{ 1725, 70},{ 2058, 65},{ 2466, 60},{ 2968, 55},   {3588 , 50},{ 4357, 45},{ 5318, 40},{ 6523, 35},{ 8047, 30},   {10000, 25},{12461, 20},{15652, 15},{19783, 10},{25152,  5},   {32116,  0},{41306, -{53280,-10},{68982,-15},{89682,-20}  };    #define BAT_TEMP_TEBLE_NUM (sizeof(bat_temp_table) / sizeof(bat_temp_table[0]))    static int  rk817_battery_get_temperature(struct rk817_battery_device *battery)  {      int i ,ret = 25 ;   unsigned long val = 0 ,res = 0;   val = rk817_bat_field_read(battery, BAT_TS_H) << 8;   val |= rk817_bat_field_read(battery, BAT_TS_L);      res=(val * 12 *10000)/(0XFFFF 1);//res=(val * 12 *1000000)/((0XFFFF 1)*10*10);   for( i = 0; i < BAT_TEMP_TEBLE_NUM ;i  )   {    if ( res <= bat_temp_table[i].res)    {     if( i > 0)      ret = bat_temp_table[i].temp   ((bat_temp_table[i].res - res)*5/(bat_temp_table[i].res-bat_temp_table[i-1].res));     else      ret = bat_temp_table[i].temp;       break;       }     }   printk("Negative Temperature Coefficient,val = %lu ,res = %lu ret = %d \r\n",val,res,ret);   return ret;  }    static int rk817_battery_get_property(struct power_supply *psy,            enum power_supply_property psp,            union power_supply_propval *val) @@ -2141,6  2180,7 @@ static int rk817_battery_get_property(struct power_supply *psy,    break;   case POWER_SUPPLY_PROP_TEMP:    val->intval = battery->temperature;    val->intval = rk817_battery_get_temperature(battery);    if (battery->pdata->bat_mode == MODE_VIRTUAL)     val->intval = VIRTUAL_TEMPERATURE;    break; 

2、cat /sys/class/power_supply/battery/temp 获取温度值

七、参考文章

RK3566,rk817上TS脚模拟输入功能NTC检测_lkdcom的博客-CSDN博客

NTC温度传感器395010k_热敏电阻温度阻值对应表 - 百度文库

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章