请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:BQ25731EVM 主题中讨论的其他器件: BQ25731
工具/软件:
我一直在尝试使用 i2c 命令读取 VBAT 和 VSYS。 我正在使用 BQ25731EVM。
我有2个函数调用。 我可以读取 VBUS 的 ADC 来没问题、结果为5.3V。 但出于任何原因、我得到768mV 作为 VBAT 和 VSYS 的返回值。 我看到 PSYS 和 VBUS 寄存器与读取方法之间没有差异、但 VBAT 和 VSYS 没有提供适当的3.6V 值、显示的值为768mV
bq25731_dev.set_low_power_mode(0);
result = bq25731_dev.set_adc_enable(EN_ADC_VBAT | EN_ADC_VBUS | EN_ADC_VSYS);
bq25731_dev.set_adc_operation(ADC_START | ADC_FULLSCALE);
delay(75); //25ms required per EN entry from set_adc_enable
Serial.print("ADC_Option: 0x");
Serial.println(result, HEX);
Serial.print("Input Voltage Voltage: ");
Serial.print(bq25731_dev.get_adc_vbus() * 96);
Serial.println("mV");
Serial.print("SYS Voltage Voltage: ");
Serial.print(bq25731_dev.get_adc_vsys() * 64);
Serial.println("mV");
Serial.print("Battery Voltage: ");
Serial.print(bq25731_dev.get_adc_vbat() * 64);
Serial.println("mV");
struct {
uint8_t psys;
uint8_t vbus;
} REG_ADC_VIN;
struct {
uint8_t vsys;
uint8_t vbat;
} REG_ADC_VOUT;
Same basic calls:
uint8_t bq25731::get_adc_vbus(void){
get_adc_vbuspsys();
return REG_ADC_VIN.vbus;
}
uint8_t bq25731::get_adc_vbat(void){
get_adc_vsysvbat();
return REG_ADC_VOUT.vbat;
}
And same basic i2c request:
#define ADC_VBUS_PSYS 0x26
uint16_t bq25731::get_adc_vbuspsys(void){
dev.i2c_read(ADC_VBUS_PSYS, readBuf, 2);
REG_ADC_VIN.vbus = readBuf[1];
REG_ADC_VIN.psys = readBuf[0];
return (readBuf[1] << 8) + readBuf[0];
}
#define ADC_VSYS_VBAT 0x2C
uint16_t bq25731::get_adc_vsysvbat(void){
dev.i2c_read(ADC_VSYS_VBAT, readBuf, 2);
REG_ADC_VOUT.vsys = readBuf[1];
REG_ADC_VOUT.vbat = readBuf[0];
return (readBuf[1] << 8) + readBuf[0];
}
输出:
ADC_Option: 0x2043 Input Voltage Voltage: 5376mV SYS Voltage Voltage: 768mV Battery Voltage: 768mV
