如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
BAT_thread()batterykernelthreadfor10scheckandchargerin/outevent是整个充电时间大于或等于24小时否(1)gSyncPercentage是一个同步bat_volt_check_point和BMT_status.SOC的全局变量恒压充电时间大于等于3小时否Mt6573_battery_update()是BAT_BatteryFullAction()BMT_status.bat_vol>=4.11V&&是提示充满是否在恒压充电阶段,充电的电流小于或等于120mA,且持续1分钟否是G_bat_full_user_view==1否充电界面显示电量值bat_volt_check_point=99是bat_volt_check_point>=100否bat_volt_check_point==BMT_status.SOC是gSyncPercentage=0bat_data->BAT_CAPACITY=bat_volt_check_pointMt6573_fgadc_probe()fgauge_initialization()CalculatebatterycapacitybyVBATType为0表示初始化,构建曲线通过ADC读出电池的电压值Vadcfgauge_read_capacity(0)fgauge_read_voltage()读取充电时电池的温度temp当充电时电池的温度小于-10度或大于50度,直接按-10度和50度来处理Rbat为电池充放电时电池的内阻OCV为电池的空载电压值RH为上曲线的Rbat值RL为下曲线的Rbat值VH为上曲线的OCV值VL为下曲线的OCV值Temp为当前的电池温度tempH为当前的电池温度的上温度值tempH为当前的电池温度的下温度值计算曲线的公式采用线性插入法如下:Rbat=RL+(temp-tempL)*(RH-RL)/(tempH-tempL)OCV=VL+(temp-tempL)*(VH-VL)/(tempH-tempL)fgauge_read_temperature()根读电池的电压和温度来计算电池电量的百分比fgauge_get_dod0()获取r_profile_temperature[]数组的首地址fgauge_get_profile_r_table(TEMPERATURE_T)构建当前温度[Rbat,OCV]曲线并保存在r_profile_temperature[]数组中获取battery_profile_temperature[]数组的首地址构建当前温度[DOD,OCV]曲线并保存在battery_profile_temperature[]数组中通过传入的Vadc算出VC值并得到OCV当前温度的[DOD,OCV]曲线即为Battery_profile_temperature[]DOD=DODl+(Vh-OCV)*(DODh-DODl)/(Vh-Vl)其中Vh和Vl为当前温度的[DOD,OCV]曲线中比OCV大和小的值DODh和DODl为当前温度的[DOD,OCV]曲线中Vh和Vl对应的DOD值Fgauge_construct_r_table_profile()OCV=VL+(temp-tempL)*(VH-VL)/(tempH-tempL)将当前温度的上温度曲线中的DOD直接赋值给当前温度的DODDOD=DODHfgauge_get_profile(TEMPERATURE_T)Fgauge_construct_battery_profile()在当前温度[Rbat,OCV]曲线即r_profile_temperature[]中找到Vadc的插入点,用下面的公式算出RbatRbat=Rl+(Vh-Vadc)*(Rh-Rl)/(Vh-Vl)其中Vh和Vl为当前温度的[Rbat,OCV]曲线中比Vadc大和小的值Rh和Rl为鼻拔露鹊腫Rbat,OCV]曲线中Vh和Vl对应的R值Vc=Ifg*(Rbat+Rfg)/1000其中Vc为补偿电压Rfg为电池负极上20mOhm的电阻Ifg为流过Rfg上的电流值Vc=(Vc+(10/2))/10充电时补偿电压为负值,不充电时为正值if(gFG_Is_Charging==KAL_TRUE)Vc=Vc-(Vc*2);=Vadc+VcgFG_DOD0=100-gFG_capacityvoltage=voltage+fgauge_compensate_battery_voltage_recursion(voltage,5);在当前温度的[DOD,OCV]