嗨,对话框中,
我有一个问题,当我们给电池充电时,它会上升到显示100%电量,但它仍在充电,当我们拔掉usb(充电尚未完成)时,它显示低于100%电量。充电时是否有办法准确判断电池电量?我们正在使用adc的方法来获取电池百分比,使用SOC会有帮助吗?
你好,穆,
这可能有不同的因素,很难用已知的信息回答这个问题。请指定电压、电流和电池规格的配置值。此外,什么是百分比值是下降到当你断开USB连接。
是的,SOC应该在获得电池测量方面提供更好的结果。注意,当使用SOC时,测量的频率应该以分钟为单位(比如2分钟),以便为SOCF驱动程序提供足够的时间来处理计算,因为秒的顺序不会有太大的变化。
为了更好地回答这个问题,请提供一些源代码示例,您目前已经实现来测量电池百分比。如果你有任何充电时间记录,会很有帮助。
BR,信用证
你好,信用证,
感谢您的快速响应,以下是我的充电参数:#定义dg_configBATTERY_TYPE (BATTERY_TYPE_CUSTOM)#define dg_configBATTERY_CHARGE_VOLTAGE 0xA // 4.2V#define dg_configBATTERY_TYPE_CUSTOM_ADC_VOLTAGE(3194)//定义电压#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 //3800 mv#定义MIN_BATTERY_LEVEL 2800 //2800mV
静态uint8_t bat_level(uint16_t voltage){if (voltage >= MAX_BATTERY_LEVEL) {返回100;} else if (voltage <= 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(空白){uint8_t水平;
Battery_source bat = ad_battery_open();ad_battery = ad_battery_raw_to_mvolt(bat, ad_battery_read(bat));水平= bat_level (bat_voltage);ad_battery_close(蝙蝠);
回报水平;}
在正常使用时,即没有充电时,电池的电量是足够准确的。但是当我们充电时,它并不显示电池充电的实际值。例如,它将到100%,但“charging_state”变量仍然是USB_CHARGING_ON,所以如果在这一点上我断开充电电缆;电池电量下降到89或90%。我的问题是,当充电_state== usb_charing_on时,是否有一种方法来获得电池水平的准确测量?
感谢您解释用例。看起来,当充电器连接,电池充电,一般你会得到一个高电压(约50 mv)因为电池充电时不加载,停下来,你断开充电器,现在下降由于连接负载。在CV(恒压)阶段,充电电压接近充电电压。
不论情况如何,不建议用ADC测量电压来测量电池充电。此外,效率也会因电压与容量的关系而变化。使用SOC测量电荷更好,因为它使用columbus计数器来估计剩余电荷。这样可以更准确地记录充电器状态。
尝试与SOC执行电荷检测,如果您有任何进一步的问题或担忧,请让我们知道。作为参考,您可以查看实现SOC的pxp_reporter应用程序。
最好的信用证
你好,穆,
这可能有不同的因素,很难用已知的信息回答这个问题。
请指定电压、电流和电池规格的配置值。此外,什么是百分比值是下降到当你断开USB连接。
是的,SOC应该在获得电池测量方面提供更好的结果。注意,当使用SOC时,测量的频率应该以分钟为单位(比如2分钟),以便为SOCF驱动程序提供足够的时间来处理计算,因为秒的顺序不会有太大的变化。
为了更好地回答这个问题,请提供一些源代码示例,您目前已经实现来测量电池百分比。如果你有任何充电时间记录,会很有帮助。
BR,
信用证
你好,信用证,
感谢您的快速响应,以下是我的充电参数:
#定义dg_configBATTERY_TYPE (BATTERY_TYPE_CUSTOM)
#define dg_configBATTERY_CHARGE_VOLTAGE 0xA // 4.2V
#define dg_configBATTERY_TYPE_CUSTOM_ADC_VOLTAGE(3194)//定义电压
#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 //3800 mv
#定义MIN_BATTERY_LEVEL 2800 //2800mV
静态uint8_t bat_level(uint16_t voltage)
{
if (voltage >= MAX_BATTERY_LEVEL) {
返回100;
} else if (voltage <= 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(空白)
{
uint8_t水平;
Battery_source bat = ad_battery_open();
ad_battery = ad_battery_raw_to_mvolt(bat, ad_battery_read(bat));
水平= bat_level (bat_voltage);
ad_battery_close(蝙蝠);
回报水平;
}
在正常使用时,即没有充电时,电池的电量是足够准确的。但是当我们充电时,它并不显示电池充电的实际值。例如,它将到100%,但“charging_state”变量仍然是USB_CHARGING_ON,所以如果在这一点上我断开充电电缆;电池电量下降到89或90%。我的问题是,当充电_state== usb_charing_on时,是否有一种方法来获得电池水平的准确测量?
你好,穆,
感谢您解释用例。看起来,当充电器连接,电池充电,一般你会得到一个高电压(约50 mv)因为电池充电时不加载,停下来,你断开充电器,现在下降由于连接负载。在CV(恒压)阶段,充电电压接近充电电压。
不论情况如何,不建议用ADC测量电压来测量电池充电。此外,效率也会因电压与容量的关系而变化。使用SOC测量电荷更好,因为它使用columbus计数器来估计剩余电荷。这样可以更准确地记录充电器状态。
尝试与SOC执行电荷检测,如果您有任何进一步的问题或担忧,请让我们知道。作为参考,您可以查看实现SOC的pxp_reporter应用程序。
最好的
信用证