嗨对话框,
我有一个问题,当我们充电电池时,它将上升到100%电池电量,但它仍然充电,当我们删除USB时(收费尚未完成),它显示低于100%。有没有办法充电时准确地确定电池水平?我们正在使用ADC方法来获得电池百分比,将使用SOC帮助吗?
你好瓦拉希尔,
对此可能有不同的因素,并且很难用给定的信息回答问题。您能否请指定电压,电流和电池规格的配置值。此外,当您与USB断开连接时,百分比下降到百分比的值是多少。
是的,SoC应该提供更好的结果,以获得电池测量。注意,在使用SOC时,执行测量的频率应该是几分钟内的东西(例如2分钟),以便提供足够的时间来处理计算,因为没有大大变化的顺序秒。
为了更好地回答问题,请提供您目前实施的一些源代码样本以测量电池百分比。如果您有任何充电时间日志,那将有用。
BR,LC.
嗨LC,
感谢您的快速响应,这是我的收费参数:#定义dg_configBATTERY_TYPE (BATTERY_TYPE_CUSTOM)#define dg_configbattery_charge_voltage 0xa // 4.2V#define dg_configbattery_type_custom_adc_voltage(3194)// 3.9V#define dg_configprecharging_threshold(2462)// 3.006V#define dg_configcharging_threshold(2498)//(2498)// 3.05V#define dg_configbattery_charge_current 3 // 45ma // 4 // 60mA#define dg_configbattery_precharge_current 20 // 2.1ma#define dg_configbattery_charge_ntc 1 //禁用#define dg_configPRECHARGING_TIMEOUT (30 * 60 * 100)
我们的电池是3.7V标称和50mAh容量Lipo电池。
我们使用以下代码来获取电池电量:#define max_battery_level 3800 // 3800mv#定义MIN_BATTERY_LEVEL 2800 //2800mV
静态UINT8_T BAT_LEVEL(UINT16_T电压){if(电压> = max_battery_level){返回100;}如果(电压<= min_battery_level){返回0;}
/**用于演示目的,近似排出(伏格VS容量)*通过线性函数。确切的公式取决于所使用的特定电池。* /return (uint8_t) (int) (voltage - MIN_BATTERY_LEVEL) * 100 /(max_battery_level - min_battery_level));}UINT16_T BAT_VOLTAGE;静态UINT8_T READ_Battery_LEVEL(void){UINT8_T级别;
battery_source bat = ad_battery_open();bat_voltage = ad_battery_raw_to_mvolt(bat,ad_battery_read(bat));Level = Bat_Level(BAT_VOLTAGE);ad_battery_close(蝙蝠);
返回水平;}
在正常使用时,即它不会充电电池电量足够精确。但是当我们充电时,它不会显示电池充电的实际值。例如,它将转到100%,但“Charging_State”变量仍然是USB_Charging_on,因此如果此时,我会断开充电电缆;电池电量降至89或90%。我的问题是有没有办法获得Charging_State == USB_Charging_On的准确测量电池级别?
谢谢你解释用例。它看起来像充电器连接并且电池充电时,一般而言,由于电池未加载,并且当充电停止并断开充电器时,可以获得更高的电压(比如约50mV),并且断开充电器时,它会降低到现在连接的负载。而且,在CV(恒压)期间,充电电压接近充电电压。
不论情况如何,不建议用ADC测量电压来测量电池充电。此外,效率也会因电压与容量的关系而变化。使用SOC测量电荷更好,因为它使用columbus计数器来估计剩余电荷。这样可以更准确地记录充电器状态。
尝试使用SOC实施电荷检测,并告知我们是否有任何其他问题或疑虑。有关参考,您可以看一下SOC实现SOC的PXP_Reporter应用程序。
最好的,LC.
你好瓦拉希尔,
对此可能有不同的因素,并且很难用给定的信息回答问题。
您能否请指定电压,电流和电池规格的配置值。此外,当您与USB断开连接时,百分比下降到百分比的值是多少。
是的,SoC应该提供更好的结果,以获得电池测量。注意,在使用SOC时,执行测量的频率应该是几分钟内的东西(例如2分钟),以便提供足够的时间来处理计算,因为没有大大变化的顺序秒。
为了更好地回答问题,请提供您目前实施的一些源代码样本以测量电池百分比。如果您有任何充电时间日志,那将有用。
BR,
LC.
嗨LC,
感谢您的快速响应,这是我的收费参数:
#定义dg_configBATTERY_TYPE (BATTERY_TYPE_CUSTOM)
#define dg_configbattery_charge_voltage 0xa // 4.2V
#define dg_configbattery_type_custom_adc_voltage(3194)// 3.9V
#define dg_configprecharging_threshold(2462)// 3.006V
#define dg_configcharging_threshold(2498)//(2498)// 3.05V
#define dg_configbattery_charge_current 3 // 45ma // 4 // 60mA
#define dg_configbattery_precharge_current 20 // 2.1ma
#define dg_configbattery_charge_ntc 1 //禁用
#define dg_configPRECHARGING_TIMEOUT (30 * 60 * 100)
我们的电池是3.7V标称和50mAh容量Lipo电池。
我们使用以下代码来获取电池电量:
#define max_battery_level 3800 // 3800mv
#定义MIN_BATTERY_LEVEL 2800 //2800mV
静态UINT8_T BAT_LEVEL(UINT16_T电压)
{
if(电压> = max_battery_level){
返回100;
}如果(电压<= min_battery_level){
返回0;
}
/*
*用于演示目的,近似排出(伏格VS容量)
*通过线性函数。确切的公式取决于所使用的特定电池。
* /
return (uint8_t) (int) (voltage - MIN_BATTERY_LEVEL) * 100 /
(max_battery_level - min_battery_level));
}
UINT16_T BAT_VOLTAGE;
静态UINT8_T READ_Battery_LEVEL(void)
{
UINT8_T级别;
battery_source bat = ad_battery_open();
bat_voltage = ad_battery_raw_to_mvolt(bat,ad_battery_read(bat));
Level = Bat_Level(BAT_VOLTAGE);
ad_battery_close(蝙蝠);
返回水平;
}
在正常使用时,即它不会充电电池电量足够精确。但是当我们充电时,它不会显示电池充电的实际值。例如,它将转到100%,但“Charging_State”变量仍然是USB_Charging_on,因此如果此时,我会断开充电电缆;电池电量降至89或90%。我的问题是有没有办法获得Charging_State == USB_Charging_On的准确测量电池级别?
你好瓦拉希尔,
谢谢你解释用例。它看起来像充电器连接并且电池充电时,一般而言,由于电池未加载,并且当充电停止并断开充电器时,可以获得更高的电压(比如约50mV),并且断开充电器时,它会降低到现在连接的负载。而且,在CV(恒压)期间,充电电压接近充电电压。
不论情况如何,不建议用ADC测量电压来测量电池充电。此外,效率也会因电压与容量的关系而变化。使用SOC测量电荷更好,因为它使用columbus计数器来估计剩余电荷。这样可以更准确地记录充电器状态。
尝试使用SOC实施电荷检测,并告知我们是否有任何其他问题或疑虑。有关参考,您可以看一下SOC实现SOC的PXP_Reporter应用程序。
最好的,
LC.