大家好、
我使用过这个 fuergague 库-> github.com/.../SparkFun_BQ27441_Arduino_Library
并使用软件而非 BAT_DETECT 引脚进行了一些与电池检测相关的修改。
我使用 ITPOR 标志来检测是否已配置了其他电量监测计、如果已配置、则不会再次配置。
问题 A)
1 ->设置类似于、电池未连接到我的器件、我插入 USB 电源为我的器件加电、 器件开始运行并首先检查燃油表中的 ITPOR 标志、在这种情况下、它显示燃油格已加电复位、这是预期的结果、然后我配置设计容量、设计能量、终止电压、捆扎率。
2 ->已配置 OPCONF 寄存器以禁用电池检测 BIN PIN 状态、 相反、如果未连接零电池、我读取电流值、然后我写入 BAT_REMOVE 以使 BAT_DETECT 标志= 0命令、如果电流不为零、我写入 BAT_INSERT 命令以使 BT_DETECT = 1。
3->我现在将电池连接到设备。
4->现在、软件读取电池 SoC 之前读取电池 SoC 软件检查电池插入逻辑。 在这种情况下、电池已连接、软件写入 BAT_INSERT 命令。 它显示100%正确、以下是日志。
步骤1.
PAL:初始化成功
ADF:RF_Ver = 7、RF_Freq = 673000000
GPS:$PMTK220100*2F
GPS:$PMTK314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28
GPIO:已注册 GPIO INTR/TLMM
GPIO\LED:LED 已注册
ADC:已注册 ADC
PWM:PWM 寄存
Hsu:HSUART 已注册
Hsu\SMODEM:注册的 Ubik 模块
I2C:I2C 寄存器
I2C_TEMP1075:温度传感器已注册
I2C_GPIO_EXP:已注册 GPIO 扩展器
I2C_USB_PD:已注册 USB PD
I22C\BCG:电池充电器已注册
I2C_IMU:已注册 IMU
I26\FUEL_Gauge:已记录燃油表
SPI:已注册 SPI
SPI\RF_SYNTH:已注册射频合成器模块
WLAN:已注册 WLAN
NET:注册的 NET
FwUp:已注册固件升级
GPS:GPS 已注册
BLE:BLE 注册
FS:FS 已注册
I2C_FUEL_Gauge:FG:OP 配置数据= 25f8
I2C_FUEL_Gauge:FG:控制状态= c
I2C_FUEL_Gauge:FG:FLAG = 127
I2C_FUEL_Gauge:FG:FLAGS Status=127
I26\FUEL_Gauge:FG:首次初始化 FG:设置 ITPOR
I2C_FUEL_Gauge:FG:首次初始化 FG:电池容量设置为1340
I2C_FUEL_Gauge:FG:设置容量= 10500 (2904)、MSB = 29、lsb = 4
I2C_FUEL_Gauge:FG:设置 Energy = 38850 (97c2)、MSB = 97、lsb = C2
I2C_FUEL_Gauge:FG:设置项电压= 3300 (ce4)、MSB = C、lsb = e4
I2C_FUEL_Gauge:FG:设置抽头速率= 913 (391)、MSB = 3、lsb = 91
I2C_FUEL_Gauge:FG:密封状态= 0
I2C_FUEL_Gauge:FG:#2发送 SET_CFGUPFDATE 的步骤
I2C_FUEL_Gauge:FG:#3按标志寄存器确认 CFGUPDATE 模式的步骤:
FUEL_Gauge:FG:FLAG = 137
I2C_FUEL_Gauge:CFGUPMODE 标志已启动。
I2C_FUEL_Gauge:FG:#4写入0x00、使用 BlockDataControl ()命令(0x61)来启用块数据存储器控制。
I2C_FUEL_Gauge:FG:#5使用 DataBlockClass ()命令(0x3E)写入0x52以访问包含 Design Capacity 参数的 State 子类(十进制82、十六进制0x52)。
I2C_FUEL_Gauge:FG:#6使用 DataBlock ()命令(0x3F)写入块偏移位置。
I2c\fuel 测量仪表:FG:#7b 读取块和计算校验和、FG:旧的计算校验和:172 (AC)。
I2C_FUEL_Gauge:FG:#7a 使用 BlockDataChecksum ()命令(0x60)读取1字节校验和,FG:读取旧校验和:172 (AC)。
I2C_FUEL_Gauge:FG:#8从0x4A 开始读取两个设计容量字节(偏移= 10):
I2C_FUEL_Gauge:FG:电流设计容量= 1340 (53C)
I2C_FUEL_Gauge:FG:电流设计能量= 4960 (1360)
I2C_FUEL_Gauge:FG:电流设计术语批量= 1340 (53C)
I2C_FUEL_Gauge:FG:Current Design Tap Rate = 3200 (C80)
I2C_FUEL_Gauge:FG:#9写入两个设计容量字节、从0x4A 开始(偏移= 10)。
I2c\fuel gauge:FG:新的 Caclulated Checksum:136 (88)。
I2c\fuel gauge:FG:New Caclulated Checksum:192 (C0)。
I2c\fuel gauge:FG:新的 Caclulated Checksum:60 (3C)。
I2c\fuel gauge:FG:New Caclulated Checksum:218 (DA)。
I2c\fuel gauge:FG:New Caclulated Checksum:211 (D3)。
I2c\fuel gauge:FG:新的 Caclulated Checksum:43(2B)。
I2c\fuel gauge:FG:新的 Caclulated Checksum:52 (34)。
I2c\fuel gauge:FG:新的 Caclulated Checksum:35 (23)。
I2C_FUEL_Gauge:FG:#10读取块并计算校验和,新的计算校验和:35 (23)。
I2C_FUEL_Gauge:FG:#11写入新计算出的校验和。
步骤2-> opconf 更新为禁用 BIE 和(使用当前控制手动检测电池)。
I2C_FUEL_Gauge:FG:OP 配置只读数据= 25f8
I2C_FUEL_Gauge:FG:读取旧校验和:106(6A)。
I2c\fuel gauge:FG:旧 Caclulated Checksum:106 (6A)。
I2C_FUEL_Gauge:FG:Current OpconfigB Settings =0xF
I2C_FUEL_Gauge:FG:Current Opconfig Settings =0x25f8
I2C_FUEL_Gauge:FG:设置光电配置设置= 0x5d8
I2C_FUEL_Gauge:设置 Opconfig 设置= 0x5d8后
I2C_FUEL_Gauge:FG:#10 Read Block and Calculate Checksum,New Caclulated Checksum:170(AA)。
I2C_FUEL_Gauge:FG:#11写入新计算出的校验和。
I2C_FUEL_Gauge:FG:#12通过发送 SOFT_RESET 子命令 Control (0x0042)退出 CFGUPDATE 模式。
I2C_FUEL_Gauge:FG:#13 Step to confirm CFGUPDATE mode by Flags Register (按标志寄存器确认 CFGUPDATE 模式的步骤:)
FUEL_Gauge:FG:FLAG = 117
I2C_FUEL_Gauge:FG:FLAG = 0
I2C_FUEL_Gauge:FG:超时= 1
I2C_FUEL_Gauge:FG:#14步骤如果器件之前已密封、则通过发送 Control (0x0020)子命令返回密封模式。
I2C_FUEL_Gauge:FG 配置完成
>>> "此时、基于电流抑制的电池检测逻辑不会插入电池、因为它可以从日志中推断"
I2C_FUEL_Gauge:FG:电池未充电、未放电
I2C_FUEL_Gauge:FG:已移除电池
命令列表:
命令:
版本0
1.帮助
2.退出
3.堆
CPU
5.堆栈
6.复位
子组:
7. GPIO
8. ADC
9. PWM
10许
11. I2C
12. SPI
13.无线局域网
14.净额
15.向上
16.全球定位系统
17. BLE
18. FS
> 11.
I2C>19
I2C_FUEL_Gauge > 8 5.
I2C_FUEL_Gauge:I2C 电量监测计控制状态寄存器0x06 = 200c
I2C_FUEL_Gauge:I2C FuelGaugge Control VOK = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 RUP_DIS = 1.
I2C_FUEL_Gauge:I2C 电量监测计控制 LDMD = 1.
I2C_FUEL_Gauge:I2C FuelGaugge Control Sleep = 0
I2C_FUEL_Gauge:I2C 电量监测计控制休眠= 0
I2C_FUEL_Gauge:I2C FuelGaugge Control INITCOMP = 0 ->由于 BAT_REMOVE 命令。
I2C_FUEL_Gauge:I2C 电量监测计控制 RES_UP = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 Qmax_up = 0
I2C_FUEL_Gauge:I2C FuelGaugge Control BCA = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 CCA = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 CALMODE = 0
I2C_FUEL_Gauge:I2C FuelGaugge Control 密封状态= 1.
I2C_FUEL_Gauge:I2C 电量监测计控制 WDRESET = 0
I2C_FUEL_Gauge:I2C FuelGaugge Control 关断= 0
I2C_FUEL_Gauge > 8 4.
I2C_FUEL_Gauge:FG:FLAG = 0 ->表示未检测到电池
I2C_FUEL_Gauge > 8 3.
I2C_FUEL_Gauge:I2C 电量监测计光电配置寄存器0x3A = 5d8
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 温度源= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig Battery Low status = 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig RM set status= 1.
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 睡眠启用/禁用= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig GPOUT 高电平/低电平有效= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 上拉电阻内部/外部= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 电池插入 enalbe / disable = 0
电池已连接
I2C_FUEL_Gauge > 8 2.
I2C_FUEL_Gauge:FG:电池正在充电
I2C_FUEL_Gauge:FG:已插入电池
I2C\FUEL_Gauge:FG:bat %- 100%
I2C_FUEL_Gauge:FG:bat Temp Kel - 302.20K
I2C_FUEL_Gauge:FG:bat Temp CEL - 29.05C
I2C_FUEL_Gauge:FG:电池电流- 182mA
I2C_FUEL_Gauge:FG:BAT 电压- 4187mV
I2C_FUEL_Gauge:FG:BAT AVAIL 电容器- 9126mAh
I2C_FUEL_Gauge:FG:bat Rem Cap - 10500mAh
I2C_FUEL_Gauge:FG:BAT Full Cap - 10500mAh
I2C_FUEL_Gauge:FG:BAT 设计电容- 10500mAh
I2C_FUEL_Gauge:FG:电池正在充电
I2C_FUEL_Gauge:FG:已插入电池
I2C\FUEL_Gauge:FG:bat %- 100%
I2C_FUEL_Gauge > 8 5.
I2C_FUEL_Gauge:I2C 电量监测计控制状态寄存器0x06 = 208e
I2C_FUEL_Gauge:I2C 电量监测计控制 VOK = 1.
I2C_FUEL_Gauge:I2C 电量监测计控制 RUP_DIS = 1.
I2C_FUEL_Gauge:I2C 电量监测计控制 LDMD = 1.
I2C_FUEL_Gauge:I2C FuelGaugge Control Sleep = 0
I2C_FUEL_Gauge:I2C 电量监测计控制休眠= 0
I2C_FUEL_Gauge:I2C FuelGaugge Control INITCOMP = 1.
I2C_FUEL_Gauge:I2C 电量监测计控制 RES_UP = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 Qmax_up = 0
I2C_FUEL_Gauge:I2C FuelGaugge Control BCA = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 CCA = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 CALMODE = 0
I2C_FUEL_Gauge:I2C FuelGaugge Control 密封状态= 1.
I2C_FUEL_Gauge:I2C 电量监测计控制 WDRESET = 0
I2C_FUEL_Gauge:I2C FuelGaugge Control 关断= 0
I2C_FUEL_Gauge > 8 4.
I2C_FUEL_Gauge:FG:FLAG = 88
I2C_FUEL_Gauge:I2C 电量监测计标志寄存器0x06 = 88
I2C_FUEL_Gauge:检测到 I2C 电量监测标志放电= 0
I2C_FUEL_Gauge:I2C FuelGaugge Flags SOCF = 0
I2C_FUEL_Gauge:I2C FuelGaugge Flags SOC1 = 0
I2C_FUEL_Gauge:I2C FuelGauge 标志 BAT_DET = 1.
I2C_FUEL_Gauge:I2C FuelGaugge 标志 ITPOR = 0
I2C_FUEL_Gauge:I2C FuelGaugge 标志 OCVTAKEN = 1.
I2C_FUEL_Gauge:I2C FuelGaugge 标志允许快速充电= 0
I2C_FUEL_Gauge:I2C FuelGaugge Flags Full Charge Detected = 0
I2C_FUEL_Gauge:温度检测下的 I2C 电量监测计标志= 0
I2C_FUEL_Gauge:I2C FuelGaugge 标志温度检测= 0
第二项意见
现在、我移除了 USB 电源、从以下命令中、电流方向正在改变、这意味着它从电池获取电源。 并尝试多次读取电池 SoC、但显示为100%
I2C_FUEL_Gauge > 8 2.
I2C_FUEL_Gauge:FG:电池正在放电
I2C_FUEL_Gauge:FG:已插入电池
I2C\FUEL_Gauge:FG:bat %- 100%
I2C_FUEL_Gauge:FG:bat Temp Kel - 301.90K
I2C_FUEL_Gauge:FG:bat Temp CEL - 28.75C
I2C_FUEL_Gauge:FG:BAT 电流--72mA
I2C_FUEL_Gauge:FG:BAT 电压- 4021mV
I2C_FUEL_Gauge:FG:BAT AVAIL 电容器- 9126mAh
I2C_FUEL_Gauge:FG:bat Rem Cap - 9154mAh
I2C_FUEL_Gauge:FG:BAT Full Cap - 9155mAh
I2C_FUEL_Gauge:FG:BAT 设计电容- 10500mAh
I2C_FUEL_Gauge:FG:电池正在放电
I2C_FUEL_Gauge:FG:已插入电池
I2C\FUEL_Gauge:FG:bat %- 100%
现在、即使电池已连接、我也会手动发出 BAT_REMOVE 命令、然后发出 BAT_INSERT 命令。
I2C_FUEL_Gauge > 10
I2C_FUEL_Gauge:FG:已移除电池
I2C_FUEL_Gauge:FG:FLAG = 80
FUEL_Gauge:I2C 电量监测计标志寄存器0x06 = 80
I2C_FUEL_Gauge:检测到 I2C 电量监测标志放电= 0
I2C_FUEL_Gauge:I2C FuelGauget 标志[BAT_DET]= 0
I2C_FUEL_Gauge:I2C FuelGaugge 标志[ITPOR]= 0
电量监测计:I2C 电量监测计控制状态寄存器0x00 = 200c
I2C_FUEL_Gauge:I2C FuelGaugge Control Sleep = 0
I2C_FUEL_Gauge:I2C 电量监测计控制休眠= 0
I2C_FUEL_Gauge:I2C 电量监测计控制[INITCOMP]= 0
I2C_FUEL_Gauge:I2C 电量监测计控制 RES_UP = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 Qmax_up = 0
I2C_FUEL_Gauge:I2C FuelGaugge Control 密封状态= 1.
I2C_FUEL_Gauge:I2C FuelGaugge Control 关断= 0
电量监测计:I2C 电量监测计光电配置寄存器0x3A = 5d8
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 温度源= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig Battery Low status = 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig RM set status= 1.
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 睡眠启用/禁用= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig GPOUT 高电平/低电平有效= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 上拉电阻内部/外部= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 电池插入 enale/disable [BIE]= 0
I2C_FUEL_Gauge > 9.
I2C_FUEL_Gauge:FG:已插入电池
I2C_FUEL_Gauge:FG:FLAG = 188
电量监测计:I2C 电量监测计标志寄存器0x06 = 188
I2C_FUEL_Gauge:检测到 I2C 电量监测标志放电= 0
I2C_FUEL_Gauge:I2C FuelGauget 标志[BAT_DET]= 1.
I2C_FUEL_Gauge:I2C FuelGaugge 标志[ITPOR]= 0
电量监测计:I2C 电量监测计控制状态寄存器0x00 = 200e
I2C_FUEL_Gauge:I2C FuelGaugge Control Sleep = 0
I2C_FUEL_Gauge:I2C 电量监测计控制休眠= 0
I2C_FUEL_Gauge:I2C 电量监测计控制[INITCOMP]= 0
I2C_FUEL_Gauge:I2C 电量监测计控制 RES_UP = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 Qmax_up = 0
I2C_FUEL_Gauge:I2C FuelGaugge Control 密封状态= 1.
I2C_FUEL_Gauge:I2C FuelGaugge Control 关断= 0
电量监测计:I2C 电量监测计光电配置寄存器0x3A = 5d8
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 温度源= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig Battery Low status = 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig RM set status= 1.
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 睡眠启用/禁用= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig GPOUT 高电平/低电平有效= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 上拉电阻内部/外部= 0
I2C_FUEL_Gauge:I2C FuelGaugge opConfig 电池插入 enale/disable [BIE]= 0
读取 SoC 前、只需读取控制状态即可检查 INITCOMP =1
I2C_FUEL_Gauge > 8 5.
I2C_FUEL_Gauge:I2C 电量监测计控制状态寄存器0x06 = 208e
I2C_FUEL_Gauge:I2C 电量监测计控制 VOK = 1.
I2C_FUEL_Gauge:I2C 电量监测计控制 RUP_DIS = 1.
I2C_FUEL_Gauge:I2C 电量监测计控制 LDMD = 1.
I2C_FUEL_Gauge:I2C FuelGaugge Control Sleep = 0
I2C_FUEL_Gauge:I2C 电量监测计控制休眠= 0
I2C_FUEL_Gauge:I2C FuelGaugge Control INITCOMP = 1.
I2C_FUEL_Gauge:I2C 电量监测计控制 RES_UP = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 Qmax_up = 0
I2C_FUEL_Gauge:I2C FuelGaugge Control BCA = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 CCA = 0
I2C_FUEL_Gauge:I2C 电量监测计控制 CALMODE = 0
I2C_FUEL_Gauge:I2C FuelGaugge Control 密封状态= 1.
I2C_FUEL_Gauge:I2C 电量监测计控制 WDRESET = 0
I2C_FUEL_Gauge:I2C FuelGaugge Control 关断= 0
现在 、我读取电池 SOC、它显示了正确的值
I2C_FUEL_Gauge > 8 2.
I2C_FUEL_Gauge:FG:电池正在放电
I2C_FUEL_Gauge:FG:已插入电池
I2C\FUEL_Gauge:FG:bat %- 93%
I2C_FUEL_Gauge:FG:BAT Temp Kel - 300.40K
I2C_FUEL_Gauge:FG:bat Temp CEL - 27.25C
I2C_FUEL_Gauge:FG:BAT 电流--69mA
I2C_FUEL_Gauge:FG:电池电压- 3981mV
I2C_FUEL_Gauge:FG:BAT AVAIL 电容器- 8437mAh
I2C_FUEL_Gauge:FG:BAT Rem 电容- 8437mAh
I2C_FUEL_Gauge:FG:BAT Full Cap - 9126mAh
I2C_FUEL_Gauge:FG:BAT 设计电容- 10500mAh
I2C_FUEL_Gauge:FG:电池正在放电
I2C_FUEL_Gauge:FG:已插入电池
I2C\FUEL_Gauge:FG:bat %- 93%
问题1:何时配置燃油表? 基于 ITPOR 位还是基于电池检测?
问题2:在任何情况下、如果我在 USB 电源接通且连接电池的情况下配置电量监测计、SoC 始终读取100%、这是正确的行为吗? 如果不是、如何避免这种情况?