工具/软件:
我们的项目有一个奇怪的情况。 我来解释一下设置。
外部电源>12V
输入电流限制为 2A。
只有系统导轨上的东西是直接连接的蜂窝调制解调器。 (接受范围为 2V 至 5.5V)
STM32 通过 3.3V 稳压器实现。
激活时的调制解调器将在其电压电平下平均消耗大约 200 –300mA、偶尔会出现 2A 非常长的“短“尖峰。
STM32 在激活时使用以下 10mA。
我们将 BQ 配置为将 18650 电池充电至 4.1V。
这是批量寄存器设置代码。
void BQ25622Driver::setup()
{
// Configure registers (as per your original settings)
_log.noticeln("[BQ25622] Resetting BMC Regs");
writeRegister8(BQ25622Register::ChargerControl2, 0b1'1'00'01'0'1);
_log.noticeln("[BQ25622] Setting Charge Current Limit to 1A");
writeRegister16(BQ25622Register::ChargeCurrentLimit, 0b0000001101000000); // 1A charge current
setChargeVoltage(4100); // value in mV
_log.noticeln("[BQ25622] Setting Input Current Limit to 2A");
writeRegister16(BQ25622Register::InputCurrentLimit, 0b0000010111110000); // 2A input current limit
_log.noticeln("[BQ25622] Setting Input Voltage Limit to 6V");
writeRegister16(BQ25622Register::InputVoltageLimit, 0b0001001011000000); // 6V input voltage limit
_log.noticeln("[BQ25622] Setting Pre-Charge Current to 300mA");
writeRegister16(BQ25622Register::PreChargeControl, 0b0000000011100000); // 300mA pre-charge current
_log.noticeln("[BQ25622] Setting Termination Current to 100mA");
writeRegister16(BQ25622Register::TerminationControl, 0b0000000001001000); // 100mA termination current
_log.noticeln("[BQ25622] Configuring Charge Control 0 register");
writeRegister8(BQ25622Register::ChargeControl0, 0b00000110);
_log.noticeln("[BQ25622] Setting Charge Timer Control");
writeRegister8(BQ25622Register::ChargeTimerControl, 0b01001100);
_log.noticeln("[BQ25622] Configuring Charger Control 1");
writeRegister8(BQ25622Register::ChargerControl1, 0b101000'00); // first two bits control the watchdog that caused charge current to reduce. Setting this to 0 disables watchdog
_log.noticeln("[BQ25622] Configured Charger Control 1");
_log.noticeln("[BQ25622] Host Watchdog disabled");
_log.noticeln("[BQ25622] Configuring Charger Control 2");
writeRegister8(BQ25622Register::ChargerControl2, 0b0'1'00'01'0'1);
_log.noticeln("[BQ25622] Configuring Charger Control 3");
writeRegister8(BQ25622Register::ChargerControl3, 0b000'0'1'1'00);
_log.noticeln("[BQ25622] Configuring Charger Control 4 with 3A peak battery output");
writeRegister8(BQ25622Register::ChargerControl4, 0b10'0'00'0'00);
_log.noticeln("[BQ25622] Configuring NTC Control 0");
writeRegister8(BQ25622Register::NTCControl0, 0b01011101);
_log.noticeln("[BQ25622] Configuring NTC Control 1");
writeRegister8(BQ25622Register::NTCControl1, 0b00100101);
_log.noticeln("[BQ25622] Configuring NTC Control 2");
writeRegister8(BQ25622Register::NTCControl2, 0b00111111);
}
您可以看到、它大多数都硬编码了字节值。
我们将系统设置在工作台电源上。
主要问题是 、我们有时会看到电流消耗在小数点后三位的 PSU 上显示为 0。 系统似乎正在消耗电池而不是外部电源。
此时、我们知道蜂窝调制解调器处于连续模式、因此它应该在 PSU 处绘制大致的 60mA。 这远低于 2A 电流限制设置。 因此 BQ 不应补充系统电源。
但此时、系统似乎完全由电池供电。
电池可能有时略高于 4.1V。 我们想知道 BQ 是否优于外部电源将电池放电至 4.1V 电平。
当我们连接 STLink 对 STM32 进行编程并与其连接时、我们通常也会在 PSU 上看到此 0 电流。
它是官方 STLink、其 3.3V 引脚用于检测电压电平、不提供电压。
我认为、首先、我们需要更好地了解 BQ 将如何处理略高于目标电压但仍在电池化学范围内的电池。
这也是为什么 BQ 似乎不时为系统供电、即使连接了外部电源也是如此。
发生这种情况的原因。
目前它不会破坏我们的产品,但它是扔了大量的问号,我们需要首先理解,然后我们才能够舒适地前进。