你好,
我正在工作的一个项目使用DA14681芯片与SDK_BTLE_v1.0.8.1050.1。
我们使用一种系统,当产品不使用时断开电池。按下按钮或连接USB线时连接电池。
我们有一个问题,当我们开始连接USB电缆,因为对话开始之前电池开关被激活。
所以当它初始化时,SOC值被设置为0。然后它就不会更新了。电池正在正确充电,但SOC值没有更新为正确的值。
我试图通过在init函数中使用read done来添加SOC值的更新:
int16_t socf_reset_soc(空白)
{
int64_t active_count;
uint64_t active_period;
int32_t电流;
int16_t now_voltage;
active_period = SOCF_GET_DURATION (socf_pre_sample_time,
socf_start_count_time);
如果(active_period < 10) {
Hw_cpm_delay_usec ((10 - active_period) * 1000);
socf_pre_sample_time = rtc_get_fromISR ();
active_period = SOCF_GET_DURATION (socf_pre_sample_time,
socf_start_count_time);
}
active_count = socf_get_count(真正的);
socf_get_avg_current(active_count, active_period);
socf_vbat_via_adapter() + socf_vbat_via_adapter()
+ socf_vbat_via_adapter()) / 3;
Socf_soc = socf_get_soc_vbat_ibat(now_voltage, current, vol_dis_low, vol_dis_high);
socf_accum_charge_count = SOCF_SOC_TO_COUNT (socf_soc);
}
我仍然有一个问题,因为当我调用这个功能时,电池已经在充电。所以估计的百分比是不正确的充电器是活跃的。
是否有其他方法更新SOC值,如果电池连接后系统初始化?
是否有可能停止和启动与SDK的充电过程?(可以直接使用hw_charger_stop_charging和hw_charger_start_charging吗?)
乔佛里
嗨乔佛里COFFINEAU,
只是为了检查如果我正确的话,当你插入USB为了开始充电的电池,电池还没有真正连接在设备上(需要一定的时间才能电池实际上是附加在黑板上插入USB)时,所以充电器在没有电池的情况下开始充电过程,这就是破坏SOC结果的原因吗?我的理解正确吗?
由于MT_dialog
你好,
是的,情况就是这样。SOC结果从0%开始,而不是稍后连接的电池水平。
现在作为解决方案,我已经注释了
usb_attach ()
电话在usb_charger_task
为了不启动充电器。然后在稍后的应用程序中,我执行我提取的函数来重置SOC值。就在我打电话之后
hw_charger_vbus_cb(真正的)
触发usb连接。这是一个临时的路径,同时等待一个更详细的答案,从您的建议。
嗨乔佛里COFFINEAU,
您已经实现的解决方案是可以接受的,它是向前发展的一种方法,其他方法是在电池连接时重置系统,或让系统处于系统初始化任务,直到电池连接。这取决于你的设计。到目前为止,我们还没有在我们的SDK中实现这样的解决方案,因为没有电池不是一个正常的用例。
由于MT_dialog