简介
在智能穿戴中,电池是必须的,本文主要介绍如何实时检测电池的电量,加上无线模块的话,就可以通过APP来实时检测了,只要是锂电池的产品上,这个小模块都可以使用,并且还有OLED屏显示, 结合按键控制可以做其他的二次开发,但是主要应用于智能穿戴上。
硬件介绍:
主控芯片:stm32f103c8T6 厂家:意法半导体
基准电压芯片:ADR5044 厂家:ADI
运放:MAX40110 厂家:美信
充电芯片:TP4056 厂家:南京拓微
软件介绍:主控芯片的编程软件是KEIL5,支持编程、下载硬件仿真功能,界面友好。
PCB及原理图由Altium Designer绘制,免费、稳定;且自带大量元件库。
原理图简介
供电:采用micro usb供电,电源电压为5V,给单片机最小系统板供电,和TP4056模块充电,并提供高达500 mA的输出电流。
AD电压基准:采用ADI公司的ADR5044芯片,高精度分流基准电压源,针对空间受限的应用而设计,采用超小型SC70和SOT-23封装,具有多用途、易于使用的特点,适合众多应用领域。此外还具有低温度漂移、优于0.1%的初始精度和快速建立时间特性。采用了sot-23的封装。
电流检测采用0.01欧的电阻作为采样电阻,经过美信运放max40110,基本介绍
经过R50和R51同向放大后给单片机的12位AD检测。
代码这块简单计算
int main(void)
{
static float batv,bativ;
uint8_t t=0;
static int8_t batpercent=0;
static int8_t socshi=0;
static int8_t socge=0;
static int16_t batvv=0;
static int8_t vbai=0;
static int8_t vshi=0;
static int8_t vge=0;
static int16_t bativv=0;
static int8_t ibai=0;
static int8_t ishi=0;
static int8_t ige=0;
int error;
/* 硬件初始化 */
bsp_Init();
ledinit();
oledInit();
adc1.init();
mcu_systick_delay(100);
OLED_ShowCHinese( t,0,30);//电
OLED_ShowCHinese(16 + t,0,33);//量
OLED_ShowCHinese(32 + t,0, 25);//冒号
OLED_ShowChar(80 + t,0, '%');
OLED_ShowCHinese( t,2,30);//电
OLED_ShowCHinese( t+16,2,31);//压
OLED_ShowCHinese(32 + t,2, 25);//冒号
OLED_ShowCHinese( t,5,30);//电
OLED_ShowCHinese( t+16,5,32);//流
OLED_ShowCHinese(32 + t,5, 25);//冒号
// OLED_ShowChar(0 , 4 , 'W');
// OLED_ShowChar(50 + t,2, '0');//
// OLED_ShowCHinese(48 + t+16,0, 34);//
// OLED_ShowCHinese(48 + t+16+16,1, 2);//
// OLED_ShowCHinese(48 + t+16+16+16,1, 3);//
// OLED_ShowCHinese(48 + t+16+16+16+16,1,4);//
/* 超级循环 */
while (1)
{
if(timecnt>=1000)//1000ms上传电流
{
timecnt=0;
adc1.loop();
// adc_scan();
batv=((float)s_filter_value[1]/4095.0)*3.3*2;//电池电压
bativ=((float)s_filter_value[0]/4095.0)*3.3;//运放输出电压
bativ=bativ*100/58;//算电流
bativv = bativ*100;
// batv=(batv-LOW_POWER)/(FULL_POWER-LOW_POWER);
batvv= batv*100*2;
batpercent =(batv-LOW_POWER)/(FULL_POWER-LOW_POWER)*100;
socshi=batpercent/10;
socge=batpercent%10;
switch(socshi)//显示电量高位
{
case 0:OLED_ShowChar(50 + t,0, '0'); break;
case 1:OLED_ShowChar(50 + t,0, '1');break;
case 2:OLED_ShowChar(50 + t,0, '2');break;
case 3:OLED_ShowChar(50 + t,0, '3');break;
case 4:OLED_ShowChar(50 + t,0, '4');break;
case 5:OLED_ShowChar(50 + t,0, '5');break;
case 6:OLED_ShowChar(50 + t,0, '6');break;
case 7:OLED_ShowChar(50 + t,0, '7');break;
case 8:OLED_ShowChar(50+ t,0, '8');break;
case 9:OLED_ShowChar(50+ t,0, '9');break;
default:break;
}
最后电路板这块
项目简单总结
通过对这次的智能穿戴的电量检测,也发现了关键问题,虽然运放和基准芯片的精度高,但是光靠电压和电流检测电量的多少,精度远远不够,最好用电量计来检测
项目最终结果图
电路图如下