现在准备做个移动电源玩玩哈!基本功能已经实现了,现在就是在对移动电源进行充电的时候,电量显示遇到点问题!所以有点小Bug,在这里提提,希望大家踊跃发言,如果完美实现了到时打板的话有需要的还可以送大家几块!
1、对移动电源充电要求:
电量低于25%,LED1闪烁;电量在25%~50%,LED1常亮,LED2闪烁;电量在50%~75%,LED1、LED2常亮,LED3闪烁;电量在75%~100%之间,LED1、LED2、LED3常亮,LED4闪烁;然后检测到充电IC的充电状态转变的时候充满标志位DC_OK置位,说明充电已经完成,四个LED常亮。我是通过采集电池电压AD来判断电量的,但是我发现这样不行,因为电量在50%~100%的时候,电池电压就可能已经达到4.2V了,进入了恒压充电阶段,这个时候检测电池电压已经没有用啦!所以用这种方法判断的时候发现,前面两个LED灯就是闪烁个两三分钟,就常亮了,然后LED3也闪烁时间不长,最后就是充电不久,前面三个LED就常亮了,然后LED4闪烁很久,一直闪到检测到充电完成。这样的感觉就是有点别扭,因为这样前面75%的电量显得很容易就充满了,给人的感觉不是很好,因此想问问大家有没有什么好的想法。我也有想过前面两个电通过采集电池电压AD来判断,然后第三格电和第四格电通过定时器来计时,认为给它一个充电时间,充电时间到了就进入下一格电的充电状态!这样不知道行不行,马上就写程序验证一下!嘎嘎...
基于STM8S的移动电源设计:
由于硬件是同事做的,公司帮别的公司设计的方案,软件也不是我写,是另外一个软件工程师写的。所以,我是属于业余爱好,自己重新用STM8的最小系统写的。因此,原理图就不给了,这里只跟大家讲个大概思想。
一、首先讲放电部分:
放电部分是用一个同步升压IC(这个百度一搜一大把),将锂电池的电压升压到5V以后,对手机充电。同步升压IC有一个使能端,我们控制放电和禁止放电,就是通过控制那个使能端来控制放电的。默认情况下是一按下开机键,就打开放电使能端口的,然后程序通过检测电流AD值大小来判断是否有负载(手机)接入,如果没有,5s后关闭移动电源,反之则不停的检测电流AD值,当检测到小于某个值时,认为手机已经充满了,移动电源关闭,进入低功耗模式!
二、电量指示部分:
放电的时候,电量指示处理是检测电池电压的AD值来进行四段分段处理的。至于怎么分,大家都有自己的想法,只要不要让锂电池过放就行了。
按动按键开关后,指示本体电量:
a) 电量大于75%时,亮4 颗蓝色LED灯;
b) 电量介于50%--75%之间,亮3 颗蓝色LED灯;
c) 电量介于25%--50%之间,亮2 颗蓝色LED灯;
d) 电量介于5%--25%之间,亮1 颗蓝色LED灯;
e) 电量低于5%时,最后一颗蓝色LED灯熄灭或者闪烁。
由于STM8S少引脚的没有外部参考引脚,所以我是采用3.3V内部电源电压做参考的。
这里重点说明一下,我们采集的AD值是有误差的,并不是任何时候采集的AD值都是一样的,所以当我们的AD值在两段电量的临界点时,如果处理不当的话,会有时显示两格电,有时显示三格电(我是假定电池电压AD值是在第二格电和第三格电的临界点)。我说下我的处理方法,首先声明一个AD变量dAdc1_CH1_Value1,初始化变量值为1050(这个值是不可能出现的,因为STM8的AD为10位的),然后我们在采集的时候在声明一个变量adc_min,将采集到的AD值赋给adc_min,然后我们判断adc_min<dAdc1_CH1_Value1是否成立,如果成立,则将adc_min的值赋给dAdc1_CH1_Value1,否则不做任何处理。比如我们判断dAdc1_CH1_Value1>625为第三格电,小于等于625时为两格电,如果当前时刻AD值(adc_min)等于626,如果下一时刻AD值(adc_min)等于625,那么电量就从第三格电变为显示两格电,如果再在下一时刻,AD值(adc_min)变为626,这时由于adc_min>dAdc1_CH1_Value1,程序不做处理,因此还是显示两格电,并不会显示三格电。
还要说明一下,我一般判断电压都是直接用AD值去判断的,即自己先用计算器计算出某个电压对应的AD值,然后程序用该AD值去进行处理,这样避免了算乘除法时占用过多的程序空间,如果你使用的是像义隆松翰等程序空间不富有的单片机的话,显得尤为重要。
充电时的电量指示:
放电时的电量指示说明在文章最开头就说了,当时遇到点问题,现在也差不多了,虽然说不完美,但是将就着用吧!处理方法就是把放电时的电量指示反过来,上面是定义一个adc_min,充电时定义一个adc_max,具体大家看程序就知道了。
三、唤醒方式:
唤醒方式有个,一个是通过按键(设为外部中断,并且是TLI中断,即最高优先级中断,普通外部中断也行),另外一个就是充电器插入唤醒中断。具体处理过程看程序,这里也就不多讲了。充电器插入检测一般是通过两个分压电阻对插入口的5V电压分压,然后MCU采集分压电压来实现的,充电器没有插入,IO口被分压电阻拉低,充电器插入后,IO被分压电阻分压成高电平。
好了,下面最重要的来了,小伙伴期待的开源来了。见附件程序。
|