请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:BQ27426 工具与软件:
嘿、我遇到一个问题、那就是所使用的电量计在软复位后不会更新充电状态。
以下代码是我现在如何配置电量计的代码:
retval BQ27426::InitModule()
{
CHECK_RV(i2c_master_.Probe(kI2cAddress, 100_ms, 5_ms));
CHECK_RV(ControlSubCommandWrite(CNTLData::kUnseal));
CHECK_RV(ControlSubCommandWrite(CNTLData::kUnseal));
uint16_t battery_capacity_ = 40;
uint16_t design_energy_ = 148;
uint16_t terminate_voltage_ = 3000;
uint16_t taper_rate_ = 500;
static const uint8_t kDesignCapcityOffset = 6;
static const uint8_t kOpConfigDOffset = 4;
static const uint8_t kTaperRateOffset = 21;
static const uint8_t kOpConfigDChemistryMask = 0x08; // Set Chem ID to 1202
static const uint8_t kBatLowEnMask = 0x7D;
static const uint8_t kGpioPolMask = 0x6C;
static const uint8_t kOpConfig3Mask = 0xDF;
// Set battery configurations, these are all located after each other in the memory
etl::array<int16_t, 3> capacity_config({battery_capacity_, design_energy_, terminate_voltage_});
CHECK_RV(SetConfiguration(
FlashSubclass::kState, kDesignCapcityOffset,
etl::span<uint8_t>((uint8_t *)capacity_config.begin(), sizeof(uint16_t) * 3), false));
CHECK_RV(SetConfiguration(FlashSubclass::kState, kTaperRateOffset,
etl::span<uint8_t>((uint8_t *)&taper_rate_, sizeof(uint16_t)),
false));
// Set battery chemistry
etl::array<uint8_t, 1> chemistry_config({kOpConfigDChemistryMask});
CHECK_RV(SetConfiguration(FlashSubclass::kRegisters, kOpConfigDOffset, chemistry_config, true));
// Enable interrupt on capacity and pin output
etl::array<uint8_t, 4> pin_config({kGpioPolMask, kBatLowEnMask, 0x00, kOpConfig3Mask});
CHECK_RV(SetConfiguration(FlashSubclass::kRegisters, 0, pin_config, true));
CHECK_RV(ControlSubCommandWrite(CNTLData::kChemB));
// Make the sensor operational
CHECK_RV(ControlSubCommandWrite(CNTLData::kSoftReset));
// Wait for flag to reset
// Somehow waiting for flag does not work. flag is always set
// Just wait for 1 sec here
vTaskDelay(1000);
CHECK_RV(ControlSubCommandWrite(CNTLData::kSealed));
/* force the BAT_DET bit to one */
CHECK_RV(ControlSubCommandWrite(CNTLData::kBatInsert));
is_initialized_ = true;
return retval::kSuccess;
}
读回寄存器的所有值都设置正确。
使用的确切元件: BQ27426YZFR
电量监测计从不更新充电阶段寄存器。 只能在软复位之后执行。
我不知道现在该怎么做来解决这个问题。 有什么建议吗?
敬上、迪德