如题,函数如下
__STATIC_INLINE uint32_t
AONBatMonBatteryVoltageGet(void)
{
uint32_t ui32CurrentBattery;
ui32CurrentBattery = HWREG(AON_BATMON_BASE + AON_BATMON_O_BAT);
//
// Return the current battery voltage measurement.
//
return (ui32CurrentBattery >> AON_BATMON_BAT_FRAC_S);
}
返回值是838,请问转换成电池电压是多少,怎样计算
Viki Shi:
//Get battery voltage (this will return battery voltage in decimal form you need to convert)
BATstatus = AONBatMonBatteryVoltageGet();// convert in Milli volts
BATstatus = (BATstatus * 125) >> 5;//convert in floating point value
BATvoltage = (float)BATstatus / 1000;
user1388075:
回复 Viki Shi:
计算出是3.27的样子,这是电池的电压么?我电池3.7v的样子。
要用这个函数是不是电路要做适配才行?
Viki Shi:
回复 user1388075:
电池电压会变化,你有精确测量过吗?这个误差有点大了,一般在50mv以内
user1388075:
回复 Viki Shi:
我用台表测的。
调用这个函数 AONBatMonBatteryVoltageGet(),硬件上难道不需要任何接线处理么?我始终无法理解芯片是怎样测出电池电压的,电池输出给稳压芯片后,才间接给蓝牙芯片供电, 蓝牙芯片不可能知道前面的电池电压是多少啊?
Viki Shi:
回复 user1388075:
硬件上如果有个稳压电路自然更好,请参考TRM第18章获取电池监测的更多信息:www.ti.com/…/swcu117i.pdf
user1388075:
回复 Viki Shi:
稳压电路肯定是有的。为什么算出来的不是电池电压呢
Viki Shi:
回复 user1388075:
battery monitor测量的是VDDS脚的电压,你实测的是这个引脚吗?
user1388075:
回复 Viki Shi:
我要测的是电池正负极之间的电压,查看设备剩余电量情况。不关心VDDS的电压
Albin Zhang:
回复 user1388075:
如果中间有稳压芯片的话,battery monitor不能直接用了。
如果电池电压比芯片供电电压高,你也不能直接用ADC测量。最廉价的方式就是电阻分压。
BR. AZ
user1388075:
回复 Albin Zhang:
电池电压范围是3.7-4.2V, VDDS脚接入的电压范围是0-3.3V么, 你的意思是在电池上用电阻分压接到VDDS引脚上,比如分压一半, 那么VDDS的实际接入的电压范围就是1.25V到2.1V了。