嗨,对话,
我有一个问题,当我们给电池充电时,它会显示100%的电池电量,但它仍在充电,当我们移除usb(充电尚未完成)时,它显示低于100%。充电时有没有办法准确确定电池电量?我们正在使用adc方法获取电池百分比,使用SOC会有帮助吗?
你好,穆塔希尔,
这可能有不同的因素,很难用给定的信息回答问题。请指定电压、电流和电池规格的配置值。另外,当您断开USB连接时,它下降到的百分比值是多少。
是的,SOC应提供更好的电池测量结果。请注意,在使用SOC时,测量频率应为分钟(例如2分钟),以便为SOCF驱动器提供足够的时间来处理计算,因为秒数的变化不大。
为了更好地回答这个问题,请提供一些您当前实现的用于测量电池百分比的源代码示例。如果你有充电时间记录,那会很有帮助。
BR,信用证
嗨,LC,
感谢您的快速响应,以下是我的充电参数:#定义dg_configBATTERY_TYPE (BATTERY_TYPE_CUSTOM)#定义dg配置电池充电电压0xA//4.2V#定义dg配置电池类型自定义ADC电压(3194)//3.9v#定义dg_配置预充电_阈值(2462)//3.006V#定义dg_配置充电_阈值(2498)//(2498)//3.05V#定义dg配置电池充电电流3//45mA//4//60mA#定义dg配置电池预充电电流20//2.1mA#定义dg\u配置电池\u充电\u NTC 1//已禁用#define dg_configPRECHARGING_TIMEOUT (30 * 60 * 100)
我们的电池是额定电压为3.7V、容量为50mAh的LiPo电池。
我们正在使用以下代码来获取电池水平:#定义最大电池电量3800//3800mV#define MIN_BATTERY_LEVEL 2800 //2800mV
静态uint8电池电平(uint16电压){如果(电压>=最大电池电量){返回100;}否则如果(电压<=最小电池电量){返回0;}
/**出于演示目的,放电(电压与容量)为近似值*通过线性函数。确切的公式取决于所使用的特定电池。*/返回(uint8_t) ((int) (voltage - MIN_BATTERY_LEVEL) * 100 /(最大电池电量-最小电池电量);}uint16电池电压;静态uint8读取电池电量(无效){uint8级;
电池\源电池=ad\电池\打开();bat_电压=ad_电池_原始_至_mvolt(bat,ad_电池_读取(bat));电平=电池电平(电池电压);ad_电池_关闭(bat);
回报水平;}
正常使用时,即未充电时,电池电量足够准确。但当我们充电时,它并没有显示电池充电的实际值。例如,它将变为100%,但“charging_state”变量仍然是USB_charging_ON,因此如果此时我断开充电电缆;电池电量降至89%或90%。我的问题是,当充电状态=USB充电打开时,有没有一种方法可以准确测量电池电量?
感谢您解释这个用例。看起来,当充电器连接且电池正在充电时,一般情况下,由于电池未加载,您将获得稍高的电压(例如约50mV),当充电停止且您断开充电器时,由于现在连接的负载,它会下降。此外,在CV(恒定电压)阶段,充电电压接近充电电压。
不管情况如何,不建议用ADC通过测量伏特来测量电池充电。此外,效率可以根据电压与容量的映射而变化。测量电荷最好是用SOC来完成,因为它使用科隆计数器来估计剩余电荷。这将更准确地记录充电器状态。
尝试使用SOC进行充电检测,如果您有任何其他问题或顾虑,请告知我们。作为参考,您可以查看pxp_reporter应用程序,其中实现了SOC。
最好的,信用证
你好,穆塔希尔,
这可能有不同的因素,很难用给定的信息回答问题。
请指定电压、电流和电池规格的配置值。另外,当您断开USB连接时,它下降到的百分比值是多少。
是的,SOC应提供更好的电池测量结果。请注意,在使用SOC时,测量频率应为分钟(例如2分钟),以便为SOCF驱动器提供足够的时间来处理计算,因为秒数的变化不大。
为了更好地回答这个问题,请提供一些您当前实现的用于测量电池百分比的源代码示例。如果你有充电时间记录,那会很有帮助。
BR,
信用证
嗨,LC,
感谢您的快速响应,以下是我的充电参数:
#定义dg_configBATTERY_TYPE (BATTERY_TYPE_CUSTOM)
#定义dg配置电池充电电压0xA//4.2V
#定义dg配置电池类型自定义ADC电压(3194)//3.9v
#定义dg_配置预充电_阈值(2462)//3.006V
#定义dg_配置充电_阈值(2498)//(2498)//3.05V
#定义dg配置电池充电电流3//45mA//4//60mA
#定义dg配置电池预充电电流20//2.1mA
#定义dg\u配置电池\u充电\u NTC 1//已禁用
#define dg_configPRECHARGING_TIMEOUT (30 * 60 * 100)
我们的电池是额定电压为3.7V、容量为50mAh的LiPo电池。
我们正在使用以下代码来获取电池水平:
#定义最大电池电量3800//3800mV
#define MIN_BATTERY_LEVEL 2800 //2800mV
静态uint8电池电平(uint16电压)
{
如果(电压>=最大电池电量){
返回100;
}否则如果(电压<=最小电池电量){
返回0;
}
/*
*出于演示目的,放电(电压与容量)为近似值
*通过线性函数。确切的公式取决于所使用的特定电池。
*/
返回(uint8_t) ((int) (voltage - MIN_BATTERY_LEVEL) * 100 /
(最大电池电量-最小电池电量);
}
uint16电池电压;
静态uint8读取电池电量(无效)
{
uint8级;
电池\源电池=ad\电池\打开();
bat_电压=ad_电池_原始_至_mvolt(bat,ad_电池_读取(bat));
电平=电池电平(电池电压);
ad_电池_关闭(bat);
回报水平;
}
正常使用时,即未充电时,电池电量足够准确。但当我们充电时,它并没有显示电池充电的实际值。例如,它将变为100%,但“charging_state”变量仍然是USB_charging_ON,因此如果此时我断开充电电缆;电池电量降至89%或90%。我的问题是,当充电状态=USB充电打开时,有没有一种方法可以准确测量电池电量?
你好,穆塔希尔,
感谢您解释这个用例。看起来,当充电器连接且电池正在充电时,一般情况下,由于电池未加载,您将获得稍高的电压(例如约50mV),当充电停止且您断开充电器时,由于现在连接的负载,它会下降。此外,在CV(恒定电压)阶段,充电电压接近充电电压。
不管情况如何,不建议用ADC通过测量伏特来测量电池充电。此外,效率可以根据电压与容量的映射而变化。测量电荷最好是用SOC来完成,因为它使用科隆计数器来估计剩余电荷。这将更准确地记录充电器状态。
尝试使用SOC进行充电检测,如果您有任何其他问题或顾虑,请告知我们。作为参考,您可以查看pxp_reporter应用程序,其中实现了SOC。
最好的,
信用证