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.

[参考译文] BQ25622:使用 ADC 控制降低电流(和电池充电过程)

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1442953/bq25622-using-adc-control-reduce-amperage-and-battery-charging-process

器件型号:BQ25622

工具与软件:

大家好!

我是一名软件开发人员、负责为 VR 游戏开发触觉设备。

最近、我收到了集成 BQ25622充电器的新 PCB、这样我就可以读取电池电压。
我设法通过 I2C 协议激活 ADC 控制器、读取二进制值、并将它们转换为不稳定值。 (使用 ESP-IDF)

但我注意到插装充电器时的电流变化。  
不执行任何操作时、电池的充电电流为1A (正常)
通过 I2C 总线启用 ADC 控制(因此我可以读取电池电压)时、电池的充电电流为0.5A
当通过 I2C 总线读取电池电压时(每3秒)、我的电池充电电流为0.1A


这是正常行为吗? (如果是这样、我只需要在充电时禁用 ADC 控制和电池读数)
如果不是、我更有可能弄乱了 I2C 对话框、还是它来自 PCB 的架构本身?  (我不是电工、因此我可能不了解有关硬件的一些内容)


下面是我如何 设置 I2C 总线并启用 ADC 控制

//	 Config i2c
	i2c_config_t conf;
	conf.mode = I2C_MODE_MASTER;
	conf.sda_io_num = SDA;
	conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
	conf.scl_io_num = SCL;
	conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
	conf.master.clk_speed = 1000000;
	i2c_param_config(I2C_NUM_0, &conf);
	i2c_driver_install(I2C_NUM_0, conf.mode, 0, 0, 0);
	
	i2c_cmd_handle_t cmdConfig = i2c_cmd_link_create();
	i2c_master_start(cmdConfig);
	i2c_master_write_byte(cmdConfig, (0x6b << 1) | I2C_MASTER_WRITE, 1); // on donne l'adresse du device
	i2c_master_write_byte(cmdConfig, 0x26, 1); // on donne l'dresse du registre (adresse de l'adc)
	i2c_master_write_byte(cmdConfig, 0xB0, 1);	
	i2c_master_stop(cmdConfig);
	i2c_master_cmd_begin(I2C_NUM_0, cmdConfig, pdMS_TO_TICKS(1000));
	i2c_cmd_link_delete(cmdConfig);	


下面是我读取 VBAT 值的方式:
    i2c_cmd_handle_t cmd = i2c_cmd_link_create();
	i2c_master_start(cmd);
	i2c_master_write_byte(cmd, (address << 1) | I2C_MASTER_WRITE, 1); // device address
	i2c_master_write_byte(cmd, reg, 1); // register address
	i2c_master_start(cmd);
	i2c_master_write_byte(cmd, (address << 1) | I2C_MASTER_READ, 1); // device address
	i2c_master_read(cmd, data, 2, I2C_MASTER_LAST_NACK); // reading value
	i2c_master_stop(cmd);
	i2c_master_cmd_begin(I2C_NUM_0, cmd, pdMS_TO_TICKS(1000));
	i2c_cmd_link_delete(cmd);




到目前为止、我已经能够读取准确的电池电压值(这就是我 认为我正确设置 I2C 的原因、我假设如果我没有设置 I2C、我将永远无法获得有意义的值)
唯一的问题是我的电池现在的充电电流为0.1A、而不是1A  

谢谢大家!

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

    您好!  

    感谢您通过 E2E 联系我们。 请查看我的以下评论。  

    与内置 ADC 的 I2C 通信不会对充电电流产生任何影响。 对 BQ25622上的 ADC 寄存器进行写入和读取不是充电电流从1A 变为0.5A 再变为0.1A 的原因。  

    充电电流变化有多种可能的原因。 最简单的方法是更改 ICHG 或 IINDPM 寄存器设置、但充电电流也会因负载曲线的变化或 IC 过热而变化。  

    要进一步调试、请帮助提供有关您的测试设置的更多详细信息。 测试期间的所有寄存器设置是什么? 什么是 VBUS 和 VBAT 电压? 输入源的额定电流是多少? 系统其余部分的预期负载分布是什么?  

    此致、

    Garrett  

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

    你好,谢谢你的答复

    不幸的是、我对 I2C 很陌生(不是电工)、所以我现在不能告诉你很多(英语不是我的母语不是帮助 ahah)
    通过 I2C 启用 ADC_Control 后、我只能与 VBAT 和 VBUS 进行交互。 这是我唯一与之交互的3个寄存器

    VBAT 读数正常、对应于我的电池电流电压  
    VBUS 为5.2V 左右

    你说"负载配置文件"是什么意思?

    再次感谢

    此致

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

    您好!

    由于美国节假日、我们的回复将会延迟、由此给您带来的不便、我们深表歉意。

    此致、

    Wyatt Keller

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

    您好、Lorenzo:  

    "加载配置文件"是什么意思?

    负载分布是从 BQ25622器件的 SYS 引脚汲取的预期电流。 如果电流足够大、更改系统其余部分的电流消耗可能会影响充电电流。 数据表的第8.3.4.2节描述了此行为。  

    我要重申、使用 ADC 不会改变充电电流。 在您的系统中发生了更多功能、需要进行更多调试。 请注意、您仅与 ADC_CONTROL 和 VBAT 及 VBUS ADC 输出寄存器 I2C 交互进行交互、不应是充电电流降低的原因。

    如果可能、您可以在电流减小时以十六进制格式提供对所有 BQ25622寄存器的寄存器读取吗? 查看所有状态寄存器将是很有帮助的下一步。  

    此致、

    Garrett