嗨,对话框中,
我有一个问题,当我们充电时,它会上升到显示100%的电池水平,但它仍在充电,当我们移开usb(充电尚未完成),它显示低于100%。有没有一种方法可以准确地确定充电时的电池电量?我们正在使用adc方法来获取电池百分比,使用SOC会有帮助吗?
你好,穆,
这可能有不同的因素,很难用给定的信息来回答这个问题。请指定电压、电流和电池规格的配置值。还有,当你断开USB连接时,它下降到的百分比是多少?
是的,SOC在获取电池测量时应该提供更好的结果。注意,当使用SOC时,测量的频率应该是分钟(比如2分钟),以便为SOCF驱动程序提供足够的时间来处理计算,因为在秒的顺序上不会有太大的变化。
为了更好地回答这个问题,请提供一些源代码样本,您目前已经实现了测量电池百分比。如果你有充电时间记录,那将会很有帮助。
布罗尔,信用证
你好,信用证,
感谢您的快速响应,以下是我的充电参数:#define dg_configbattery_type(battery_type_custom)#define dg_configBATTERY_CHARGE_VOLTAGE 0xA // 4.2V . define dg_configBATTERY_CHARGE_VOLTAGE#define dg_configBATTERY_TYPE_CUSTOM_ADC_VOLTAGE (3194)// 3.9v#define dg_configPRECHARGING_THRESHOLD (2462) // 3.006V . define dg_configPRECHARGING_THRESHOLD (2462) //#define dg_configCHARGING_THRESHOLD (2498)//(2498) // 3.05V . define dg_configCHARGING_THRESHOLD (2498)//#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#define min_battery_level 2800 // 2800mv
Static uint8_t bat_level(uint16_t电压){if (voltage >= MAX_BATTERY_LEVEL) {返回100;} else if (voltage <= MIN_BATTERY_LEVEL) {返回0;}
/ **为演示目的,放电(伏特vs容量)是近似的*由一个线性函数。确切的配方取决于使用的具体电池。*/返回(UINT8_T)((int)(电压 - min_battery_level)* 100 /(MAX_BATTERY_LEVEL - MIN_BATTERY_LEVEL));}uint16_t bat_voltage;静态uint8_t read_battery_level(空白){uint8_t水平;
bat = ad_battery_open();Bat_voltage = 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%。我的问题是有一种方法得到一个准确的测量电池水平时,充电状态==USB_CHARGING_ON?
感谢您对用例的解释。看起来,当充电器连接,电池充电,一般你会得到一个高电压(约50 mv)因为电池充电时不加载,停下来,你断开充电器,现在下降由于连接负载。在恒压阶段,充电电压与充电电压接近。
无论情况如何,建议不要通过测量伏特来测量ADC的电池电量。此外,效率可能因容量映射伏特而异。由于它使用Coloumb计数器来估计剩余充电,因此测量充电更好地完成。记录充电器状态时,这将更加准确。
尝试与SOC实现电荷检测,如果您有任何进一步的问题或担忧,请让我们知道。为了参考,您可以查看实现SOC的pxp_reporter应用程序。
最好的信用证
你好,穆,
这可能有不同的因素,很难用给定的信息来回答这个问题。
请指定电压、电流和电池规格的配置值。还有,当你断开USB连接时,它下降到的百分比是多少?
是的,SOC在获取电池测量时应该提供更好的结果。注意,当使用SOC时,测量的频率应该是分钟(比如2分钟),以便为SOCF驱动程序提供足够的时间来处理计算,因为在秒的顺序上不会有太大的变化。
为了更好地回答这个问题,请提供一些源代码样本,您目前已经实现了测量电池百分比。如果你有充电时间记录,那将会很有帮助。
布罗尔,
信用证
你好,信用证,
感谢您的快速响应,以下是我的充电参数:
#define dg_configbattery_type(battery_type_custom)
#define dg_configBATTERY_CHARGE_VOLTAGE 0xA // 4.2V . define dg_configBATTERY_CHARGE_VOLTAGE
#define dg_configBATTERY_TYPE_CUSTOM_ADC_VOLTAGE (3194)// 3.9v
#define dg_configPRECHARGING_THRESHOLD (2462) // 3.006V . define dg_configPRECHARGING_THRESHOLD (2462) //
#define dg_configCHARGING_THRESHOLD (2498)//(2498) // 3.05V . define dg_configCHARGING_THRESHOLD (2498)//
#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
#define min_battery_level 2800 // 2800mv
Static uint8_t bat_level(uint16_t电压)
{
if (voltage >= MAX_BATTERY_LEVEL) {
返回100;
} else if (voltage <= MIN_BATTERY_LEVEL) {
返回0;
}
/ *
*为演示目的,放电(伏特vs容量)是近似的
*由一个线性函数。确切的配方取决于使用的具体电池。
*/
返回(UINT8_T)((int)(电压 - min_battery_level)* 100 /
(MAX_BATTERY_LEVEL - MIN_BATTERY_LEVEL));
}
uint16_t bat_voltage;
静态uint8_t read_battery_level(空白)
{
uint8_t水平;
bat = ad_battery_open();
Bat_voltage = 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%。我的问题是有一种方法得到一个准确的测量电池水平时,充电状态==USB_CHARGING_ON?
你好,穆,
感谢您对用例的解释。看起来,当充电器连接,电池充电,一般你会得到一个高电压(约50 mv)因为电池充电时不加载,停下来,你断开充电器,现在下降由于连接负载。在恒压阶段,充电电压与充电电压接近。
无论情况如何,建议不要通过测量伏特来测量ADC的电池电量。此外,效率可能因容量映射伏特而异。由于它使用Coloumb计数器来估计剩余充电,因此测量充电更好地完成。记录充电器状态时,这将更加准确。
尝试与SOC实现电荷检测,如果您有任何进一步的问题或担忧,请让我们知道。为了参考,您可以查看实现SOC的pxp_reporter应用程序。
最好的
信用证