rfg阻值校准方法

Posted bobuddy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rfg阻值校准方法相关的知识,希望对你有一定的参考价值。

Fuel Gauge Unit(FGU)

手机通过计算流进或流出电池的电流,来计算电池电量。通过获取rfg的电压,然后除以rfg的电阻,得到电流值。

由于rfg的电阻(精度1%)受pcb layout和贴片一致性的影响,需要校准rfg的阻值。原理就是给rfg灌固定的电流,然后软件读取fgu两端的电流I,然后得到修正系数。

以展讯平台为例

1.接3.8V电源开机(AC两点),然后插入usb,先禁止充电(对电流有影响echo 1 >stop_charge) stop_charge节点的路径有差异,可以通过find -name stop_charge查找。

 

2.另一路电源设置电压1V,限流1000mA,电源正极接电池座子负极B,电源负极接主板地C(禁止焊线到EF两点),然后读取电流值(current_now)。

比如rfg软件设值100毫欧,I=1050mA,那么rfg的真实阻值就是100*(1050)/1000=105毫欧,然后修改dts里这个值sprd,calib-resistance-real = <10500>;为了保证一致性,拿几台手机

获取rfg的平均值,填写到软件中。

对于mtk平台,更好操作点,不需要插入usb,工程模式可以直接读取流过fpu的电流(Hardware Testing-->Power-->Charge  Battery-->FG_Battery_CurrentConsumption)(要除以100)。第一步是一样的,第二步根据mtk参考文档,电源正极接C,电源负极接D,跟展讯的有差异,个人理解是一样的(只是电流方向不一样)。计算方法CAR_TUNE_VALUE=1000/b*100,假设b为1050mA,那么CAR_TUNE_VALUE=95,然后修改dts里这个值

  /* The resistance of PCB */
 CAR_TUNE_VALUE = <(95)>;


看下FG_Battery_CurrentConsumption的实现,工程模式apk直接cat内核的FG_Battery_CurrentConsumption节点

static DEVICE_ATTR_RW(FG_Battery_CurrentConsumption);
 
static ssize_t FG_Battery_CurrentConsumption_show(
    struct device *dev, struct device_attribute *attr, char *buf)

    int ret_value = 8888;
 
    ret_value = gauge_get_int_property(GAUGE_PROP_BATTERY_CURRENT) * 100;
    bm_err("%s[EM] FG_Battery_CurrentConsumption : %d .1mA\\n", __func__,
        ret_value);
 
    return sprintf(buf, "%d\\n", ret_value);

 
static struct mtk_gauge_sysfs_field_info mt6357_sysfs_field_tbl[] =
    ...
    GAUGE_SYSFS_FIELD_RO(battery_current_get,GAUGE_PROP_BATTERY_CURRENT),
    ...

 
static int battery_current_get(struct mtk_gauge *gauge,
    struct mtk_gauge_sysfs_field_info *attr, int *val)

    *val = instant_current(gauge);
 
    return 0;

 
static int instant_current(struct mtk_gauge *gauge)

    ...
    dvalue =((dvalue * car_tune_value) / 1000);
    return dvalue;

fg_read_dts_val(np, "CAR_TUNE_VALUE", &(fg_cust_data->car_tune_value),UNIT_TRANS_10);
static int fg_read_dts_val(const struct device_node *np,const char *node_srting,int *param, int unit)

    if (!of_property_read_u32(np, node_srting, &val))
        *param = (int)val * unit;
     

实际操作中,遇到2个坑,分享给大家

展讯平台没有stop charge,导致读出来的电流跳变,无法往下进行实验。其实也可以不通过插usb来读取电流,毕竟支持无线adb。

mtk平台也出现了电流跳变,由于偷懒,没有焊接10k电阻,直接接电池fpc来给系统供电,导致系统的地接到了电池座子的负极,导致流过rfg的电流不稳定。

参考

GM2.5_and_3.0_Customized_Setting_Flow_V1.4.pdf

FGU电压及电流检测测试及校准方法20160322.xlsx
 

以上是关于rfg阻值校准方法的主要内容,如果未能解决你的问题,请参考以下文章

浅谈同轴分流器之电阻功率系数

手机电池有三根线 各有啥用

怎样去校准CAR_TUNE_VALUE

在实验中,为啥TTL与非门输入端接入一电阻后,其阻值的大小会影响输出逻辑

电阻Pt100和Pt1000的区别

note9pro里面黑色和白色的线代表啥