This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] BQ34110:BQ34110:bq34110的充电计数与放电等问题的充电计数不同

Guru**** 2387060 points
Other Parts Discussed in Thread: BQ34110, BQ34Z100
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1469176/bq34110-bq34110-bq34110-does-not-count-the-same-charge-charging-as-discharging-among-other-issues

器件型号:BQ34110
Thread 中讨论的其他器件: BQ34Z100

工具与软件:

你好。  我不确定这个问题是否已经包含在内。  我们正在开发中的设计使用 bq34110 ( 具体是 BQ34110PW)。  我们已多次测试此电量监测计、遇到相同的问题。  我知道这适用于电池很少放电的应用、但我们想在所有条件下进行测试。  我们已多次对多个器件执行了完整的放电测试。  我们知道、在测试开始时(电池充满 电和 BQ34110PW 正确报告、电池充满电)。  当电池电量耗尽时、报告的电量似乎被正确计数。  电池的规格为4930mA 301,电量监测计报告~í a 4750mA 在放电过程中已通过电池。  然而、在充电时、我们始终看到 BQ34110PW 在整个充电过程中仅统计~μ C 3550mA。  我们可以确认电池实际上已完全放电。  为什么会这样呢?  我们已经看到、我们可以执行多个充电/放电周期进行校准、但这对于生产线设置是不可接受的。  我们不能让单位报告几个充电/放电周期的奇怪值。  是否有人遇到过此问题?  我是电子工程工程师。  我可以提供我们的原理图(拖动到编辑器中)。  我们遵循了应用手册。  我没有太多代码细节、但如果需要、可以让我们的固件工程师提供这些信息。  请告诉我您能做些什么。

我们没有.gg 文件。  我们正使用以下命令进行编程:

int bq341xx_calibrate (const struct device* dev、const struct bq341xx_calib_data* calib_data){

if (!dev ||!calib_data){
返回-EINVAL;
}

INT RC = 0;

log_inf ("校准电池电量计");

RC = bq341xx_GAUGE_SEALED (dev、false);
如果(RC!= 0){
LOG_ERR ("解封失败");
返回-EBADF;
}

RC = bq341xx_cfg (dev、0x002D、TRUE);
如果(RC!= 0){
log_err ("enter calib err");
返回-EBADF;
}

/*校准模式*/

LOG_INF ("update flash OK");

//分压器
(void) bq341xx_change_df_u16 (dev、0x4,010,18981u);

k_msleep (BQ341XX_DELAY * 2);

/*闪存正常*/
RC = bq341xx_change_df_u16 (dev、0x4,157,1000);
如果(RC!= 0){
log_Wrn ("flash-ok fail");
}

k_msleep (BQ341XX_DELAY * 2);

//分压器
RC = bq341xx_change_df_u16 (dev、0x4,010,18981u);

k_msleep (BQ341XX_DELAY * 2);

log_inf ("change pin ctl");
RC = bq341xx_calibration_pin_ctl (dev);
如果(RC!= 0){
Log_Wrn ("pin ctl fail");
}

k_msleep (BQ341XX_DELAY * 2);

RC = bq341xx_change_df_u16 (dev、0x41F9、calib_data->design_voltage);
如果(RC!= 0){
log_Wrn ("design-vol 失败");
}

对于(int i = 0;i < array_size (calib_data->voltage_dod);++i){
k_msleep (BQ341XX_DELAY * 2);
const uint16_t DOD_addr = 0x4263 +(I * 2);

bq341xx_change_df_u16 (dev、DoD_addr、calib_data->voltage_DoD[i]);

k_msleep (BQ341XX_DELAY * 2);
}

/*设计容量*/
RC = bq341xx_change_df_u16 (dev、0x41F5、calib_data->design_capacity);
如果(RC!= 0){
LOG_WRn ("DESIGN-CAP FAIL");
}

RC = bq341xx_change_df_u16 (dev、0x40C0、calib_data->design_capacity);
如果(RC!= 0){
LOG_WRn ("DESIGN-CAP FAIL");
}

bq341xx_change_df_u16 (dev、0x40C5、0);

bq341xx_change_df_u16 (dev、0x4,184,3150);
bq341xx_change_df_u8 (dev、0x4186、2);
bq341xx_change_df_u16 (dev、0x4,187,3400);

bq341xx_change_df_u16 (dev、0x4,189,4300);
bq341xx_change_df_u8 (dev、0x418B、2);
bq341xx_change_df_u16 (dev、0x418C、4200);

//禁用自放电
bq341xx_change_df_u8 (dev、0x4295、0);

/*设计单元格*/
RC = bq341xx_change_df_u8 (dev、0x4155、calib_data->cells_count);
如果(RC!= 0){
Log_Wrn ("design-cells fail");
}

k_msleep (BQ341XX_DELAY);

/*最大电池组电压*/
RC = bq341xx_change_df_u16 (dev、0x4088、(uint16_t)(calib_data->max_voltage /20));
如果(RC!= 0){
Log_Wrn ("design-cells fail");
}

RC = bq341xx_change_df_u16 (dev、0x4123、(uint16_t)(calib_data->max_voltage));
如果(RC!= 0){
Log_Wrn ("design-cells fail");
}

k_msleep (BQ341XX_DELAY);

RC = bq341xx_change_df_u16 (dev、0x408A、(uint16_t)(calib_data->min_voltage / 20));
如果(RC!= 0){
Log_Wrn ("design-cells fail");
}

k_msleep (BQ341XX_DELAY);

RC = bq341xx_change_df_u8 (dev、0x400F、0);
}

k_msleep (BQ341XX_DELAY);

RC = bq341xx_cfg (dev、0x2D、false);
如果(RC!= 0){
log_Wrn ("exit calib err");
}

bq341xx_reset (dev);

返回0;
}

这是我们的寄存器映射:

寄存器  地址值
0x4010  18981u
0x4157  1000
0x4010  18981u (重复)
0x41F9  calib_data->design_voltage
0x4263 +(I * 2) calib_data->voltage_dod[i](循环)
0x41F5  calib_data->design_capacity
0x40C0  calib_data->design_capacity
0x40C5  0
0x4184  3150
0x4186  2.
0x4187  3400
0x4189  4300
0x418B  2.
0x418C  4200
0x4295  0 (禁用自放电)
0x4155  calib_data->cells_count (设计单元格)
0x4088  (uint16_t)(calib_data->max_voltage/20)
0x4123  (uint16_t)(calib_data->max_voltage)
0x408A  (uint16_t)(calib_data->min_voltage/20)
0x400F  0

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否共享日志文件?

    这些是您唯一更改过的参数吗?

    此致、

    Diego

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、这就是 FW 团队给我的所有内容、所以一定是他们设置的全部内容。  我也感到惊讶、因为数据表中有更多的给出公式和计算正确设置的内容、这意味着需要设置它们。  我认为 FW 的家伙可能会感到困惑,因为我问他,他说这些是'学习'和更新自己,但当我勾选了一个盒子,经过了几个周期,他们没有改变。  我最近与电池制造商交谈、他们表示、他们可能会为该器件的所有设置提供建议。  你们是否有一个示例设置、我可以将其传递给 FW 人员、以便他可以查看除了上述设置之外、他还应该查看什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好!  还有一两个问题。  在我上次的回复中、我提到了电池制造商如何告知他们已为  BQ34110推荐了参数、但事实证明、他们使用的是所谓的"BQ34100"。  我正在研究它们之间的相似性。  你能解释一下吗?  搜索 Digikey 或 Google BQ34100时、仅搜索 BQ34Z100。  我现在很担心、因为他们实际上并没有使用相同的部件、甚至可能没有为我提供他们所使用的部件的正确 PN。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好!  我能在这里得到一些反馈吗?  我让固件团队再次查看这个、他们正在查看需要设置的其他参数。  我已与电池制造商取得联系、尝试从他们那里获取所有有助于设置寄存器和校准的物理参数信息。