1 简介
Hi,大家好,今天向大家介绍一个学长做的单片机项目
基于单片机的移动充电宝设计与实现
大家可用于 课程设计 或 毕业设计
2 主要器件
- 主控:stm32
- 电池座 18650*2
- TP4056 电池充电IC
- MT3608 升压转换器
- 有一个TP4056电池充电IC,TP4056与DW01A和FS8205A结合使用可提供各种电池保护功能。如过充,过放,短路和反极性保护。
- 有2个MT3608升压转换器电路,用于5v和可调电压输出。
一个AMS1117 LDO来获得3.3v输出
3 实现效果
为单片机设备供电:
为手机供电:
4 设计原理
硬件原理图:
5 关键代码
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "adc.h"
#include "oled.h"
#include "iwdg.h"
int main(void)
{
u8 t;
u16 adcx;
u16 adcx2,adcx3,adcx4;
float temp,temp3,temp4,foult,tempp,power;
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
Adc_Init(); //ADC初始化
OLED_Init(); //初始化OLED
OLED_Clear();
IWDG_Init(4,625); //与分频数为64,重载值为625,溢出时间为1s
t=' ';
while(1)
{
OLED_ShowCHinese(18,0,4);//电
OLED_ShowCHinese(36,0,5);//压
OLED_ShowCHinese(72,0,4);//电
OLED_ShowCHinese(90,0,6);//流
OLED_ShowCHinese(18,4,7);//功
OLED_ShowCHinese(36,4,8);//率
adcx3=Get_Adc_Average(ADC_Channel_2,10);
printf( "%2d\n",adcx3 );
temp4=(float)adcx3*(3.3/4096);
temp3=2.0*temp4;
tempp=temp3;//
adcx3=temp3;
OLED_ShowNum(18,2,adcx3,1,16);
OLED_ShowString(26,2,".");
temp3-=adcx3;
temp3*=1000;
OLED_ShowNum(28,2,temp3,3,16);
adcx=Get_Adc_Average(ADC_Channel_1,10);
temp=(float)adcx*(3.3/4096);
foult=temp*10*1000;//temp*10为电流值,单位为mA
adcx=foult;
OLED_ShowNum(72,2,adcx,4,16);
power=temp*10*tempp;
adcx4=power;
OLED_ShowNum(60,4,adcx4,1,16);
OLED_ShowString(68,4,".");
power-=adcx4;
power*=1000;
OLED_ShowNum(70,4,temp3,3,16);
IWDG_Feed(); //喂狗
delay_ms(250);
}
}