数码之家

标题: 最简单的单片机应用,限制锂电池充电电压范围,MSP430G2452,ADC [打印本页]

作者: pcdoctor    时间: 2023-4-22 15:03
标题: 最简单的单片机应用,限制锂电池充电电压范围,MSP430G2452,ADC
先说说我遇到的问题,


有一个古老的安卓三星手机,三寸多的屏幕,淘汰以后,装一个时钟App, 挂在墙上当挂钟,黑底绿色的数字,还挺显眼的

一开始是直接插着充电器的,没过几个月电池就鼓包了,手机还是可以拆后盖子的,电池把后盖顶开了,没有电池了,手机插着充电线还不让开机,又不想买替换的电池,就把原来的电池的保护板拆下来继续用,接了一个扁平的小锂电池继续用,盖子还能盖回去


第一次想到的保护电池的办法就是定时给手机通电,用了一个闲置的机械式24小时定时器,一圈拨杆,设定好通断时间,
其中一些小问题是,通断时间设置不好,电池就会耗光,增加一些时间后,电池又会比较多比例的充满

果然,又过了几个月锂电池又鼓包了

第三次换锂电池,找不到小个头的了,就用了一个拆机聚合物锂电池,个头比较大,只好在后盖上钻孔引出电线,电池就挂在手机背后了


这次还是用了定时器一段时间,可心里总是担心电池再次鼓包,就想更好的解决这个充电问题


我手头的MSP430单片机体验包还是十多年前TI做推广,申请的免费样品

一个入门开发板,两个20脚单片机,一个MSP430G2452,一个MSP430G2553

MSP430G2452的参数差一些

我曾经用MSP430G2452做了一个电子时钟,控制LED,就简单的多了

这次要学ADC,也是第一次

先说一下,MSP430G2452最小系统,只需要一个电阻,一个电容即可,太方便了,47K电阻和1uF电容,都是接在reset脚上的


我增加的,就是3.3V供电,两个5K电阻分压取样,一个NPN三极管,加1K限流电阻,用输出控制继电器,买的现成的5V继电器模块,试用才发现模块用了PNP三极管,而且控制电压要5V,所以我只能自己增加一个NPN三极管了

自己画的电路图,不是专业的,第一次学画,用了免费的KiCAD, 软件官网www.kicad.org

[attach]1804084[/attach]



3.3V供电,我是从废旧电路板上找到了,正好看到一个周围元件比较少的,电源芯片加上两个贴片电容,这回简单了,直接连电路板挖下来,我都不用自己焊接贴片元件了


继电器模块是买的,做了小改动,上面说了


取样电路要分压,因为我用的这款单片机,我用了内部参考电压2.5V, 取样的电压范围只能是0V~2.5V
锂电池电压最高4.2V, 我用两个5K电阻分压,输入电压减半

小制作用了洞洞板,把继电器模块固定上去,装了其他元件,有因地制宜,用双面胶把两个5V1A的充电器粘在上面,外面胶带固定,只能这么简陋了


[attach]1804099[/attach]



[attach]1804100[/attach]



[attach]1804101[/attach]



电池电压控制在3.8V 到 4.05V 之间

控制继电器,就跟LED开关一样简单,代码照抄

代码异常的简单

  1. #include <msp430.h>


  2. void longDelay(void)
  3. {
  4.     _delay_cycles(1000000);
  5. }



  6. unsigned int Hi_V, Lo_V;

  7. void main(void)
  8. {
  9.     WDTCTL = WDTPW | WDTHOLD;       // stop watchdog timer
  10.     P1DIR |= 0x01;                  // configure P1.0 as output

  11.     BCSCTL1= CALBC1_1MHZ;
  12.     DCOCTL = CALDCO_1MHZ;

  13.     // Set Ref as internal 2.5V, ADC10ON, enable interrupt
  14.     ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + REF2_5V + ADC10ON + ADC10IE;
  15.     _delay_cycles(30);                // Delay to allow Ref to settle

  16.     ADC10CTL1 = INCH_5|SHS_0|ADC10DIV_0|ADC10SSEL_0|CONSEQ_0;
  17.     ADC10AE0 |= BIT5;             // Set P1.5 as A5 input , INCH_5

  18.     P1DIR |= BIT5;                // Set P1.5 to output direction




  19.     Hi_V=828; //1023*4.05/2/2.5 = 828

  20.     Lo_V=777; //1023*3.8/2/2.5 = 777

  21.     while(1)
  22.     {
  23.         ADC10CTL0 |= ENC+ ADC10SC;                // Sampling and conversion start
  24.          __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exi

  25.         if (ADC10MEM < Lo_V) P1OUT = 0x01;//LED ON
  26.         if(  ADC10MEM > Hi_V ) P1OUT = 0x00;   //LED off

  27.         longDelay();
  28.     }

  29. }

  30. // ADC10 interrupt ** routine
  31. #pragma vector=ADC10_VECTOR
  32. __interrupt void ADC10_ISR (void)
  33. {
  34.   __bic_SR_register_on_exit(CPUOFF);                // Clear CPUOFF bit from 0(SR)
  35. }
复制代码




做完用上,发现手机显示电池范围大约在50%~70%,
经过测量,才知道是锂电池已经老了,内阻大,充电的时候,电池电压会上升0.1V, 所以充电电压限制应该再提高一些,关闭充电后,电池电压才会接近4.05V

懒得再拆芯片重新改程序了,就在分压电阻上做调整了,找了一个329欧姆的电阻,加在分压电路的上端,提高了电压上限,当然同时电压的下限也跟着提高了


最后,手机显示电池的电压范围大约是60%到80%


希望这个小制作能够避免电池再鼓包吧

感谢各位看官耐心看完,欢迎指导




作者: 2545889167    时间: 2023-4-22 15:18
为啥要控制220V端啊,这样不是很危险,而且还要两个充电器。
你用一个充电器,5V出来给单片机,再用MOS管或者继电器控制通断给充电就好啦呀
作者: pcdoctor    时间: 2023-4-22 15:38
记录了一下最后效果,用了电池内阻测试器的电脑记录软件



[attach]1804160[/attach]

作者: pcdoctor    时间: 2023-4-22 15:40
2545889167 发表于 2023-4-22 15:18
为啥要控制220V端啊,这样不是很危险,而且还要两个充电器。
你用一个充电器,5V出来给单片机,再用MOS管或 ...

这不是懒得拆充电器了么,反正手头闲置的5V充电器很多

想着做的这东西,体积也不算大,胶带缠两圈,也足够绝缘了吧
作者: gl542400    时间: 2023-4-22 16:09
充90电  用50有时间就补电了。深度100-20=80%大差度放电损耗快。
作者: coverme    时间: 2023-4-22 17:29
有其他的办法么
作者: mmxx2015    时间: 2023-4-22 18:07
直接用充电管理芯片控制不就行了?
作者: wpll    时间: 2023-4-22 18:21
为什么不直接用一个大的电容代替电池 体积不怕就可以 话说 大电容比这俩充电器体积小吧
作者: hshike    时间: 2023-4-22 20:09
也想改,买了一个法拉电容替换电池端,只是旧手机有时候不会充电,目前暂时还没找到办法
作者: jxf269    时间: 2023-4-22 20:10
你这个虽说是废物利用,但也太不环保了。
还是再学点别的吧,若是有root权限,或者可以刷修改版的boot.img还能开机,完全可以注册个服务,监控电池电压,让他在3.7伏开始充电,4.1伏停止充电,或者直接安装相应功能的APP,这样节能还环保。
至于咋加这个服务或者用啥APP,我早就忘了,可以问问chatGPT,了解一下


作者: myd23    时间: 2023-4-22 20:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: pcdoctor    时间: 2023-4-23 01:29
wpll 发表于 2023-4-22 18:21
为什么不直接用一个大的电容代替电池 体积不怕就可以 话说 大电容比这俩充电器体积小吧 ...

还是手头没有你说的这东西,我也不了解,想出来的办法都很有限
作者: pcdoctor    时间: 2023-4-23 01:30
jxf269 发表于 2023-4-22 20:10
你这个虽说是废物利用,但也太不环保了。
还是再学点别的吧,若是有root权限,或者可以刷修改版的boot.img ...

没有安卓开发的经验,从头学比单片机复杂多了把
作者: pcdoctor    时间: 2023-4-23 01:31
mmxx2015 发表于 2023-4-22 18:07
直接用充电管理芯片控制不就行了?

关键是不会啊,不知道怎么直接控制手机的充电管理芯片
作者: pcdoctor    时间: 2023-4-23 01:39
我用的安卓手机系统是12,还可以用automate app加上ifttt加上TP-link智能插座来控制,充电到了80%自动停止充电

可惜这一套设置在旧的安卓手机上实现不了,就是因为系统版本太低了,装不上automate app
作者: mmxx2015    时间: 2023-4-23 03:50
pcdoctor 发表于 2023-4-23 01:31
关键是不会啊,不知道怎么直接控制手机的充电管理芯片

我的意思是把电池与手机的连接断开,接入充电控制电路,从充电电路输出引线到手机电池触点上。
作者: pcdoctor    时间: 2023-4-23 04:11
mmxx2015 发表于 2023-4-23 03:50
我的意思是把电池与手机的连接断开,接入充电控制电路,从充电电路输出引线到手机电池触点上。 ...

你说的这个主意也不错,只是我没有任何充电控制电路的基础,这么做对我来说难度更大了
作者: kkstun    时间: 2023-4-23 08:33
既然用adc ,你可以去在充电线路里串联个采样电阻,去测充电电流,如果电流大就充电,等到冲到90%变成涓流小电流就断开充电,隔一段时间再充电检测,这样应该更简单合理?
作者: dianziguan    时间: 2023-4-23 08:57
本帖最后由 dianziguan 于 2023-4-23 08:59 编辑

楼主的做法很有技术含量,但感觉是高射炮打蚊子。
我研究过这个问题,两个解决办法:一是和拆掉电芯后,usb口电源脚和保护板电源脚之间串一个二极管;二是把电芯换成超级电容。

作者: pcdoctor    时间: 2023-4-23 11:13
dianziguan 发表于 2023-4-23 08:57
楼主的做法很有技术含量,但感觉是高射炮打蚊子。
我研究过这个问题,两个解决办法:一是和拆掉电芯后,usb ...

你串联一个二极管,可是锂电池需要充电和放电,双向电流,二极管是怎么实现的呢?
作者: pcdoctor    时间: 2023-4-23 11:15
kkstun 发表于 2023-4-23 08:33
既然用adc ,你可以去在充电线路里串联个采样电阻,去测充电电流,如果电流大就充电,等到冲到90%变成涓流 ...

我理解的,如果要通过测量采样电阻的电压来测试电流,应该需要一个放大电路吧,否则采样电阻两端的电压变化太小
作者: kkstun    时间: 2023-4-23 14:12
pcdoctor 发表于 2023-4-23 11:15
我理解的,如果要通过测量采样电阻的电压来测试电流,应该需要一个放大电路吧,否则采样电阻两端的电压变 ...

是的要求不高就是lm358吗。
作者: kpj001    时间: 2023-4-23 14:51
能开盖从电池位置引线出来采样,那么直接供4V电压就完事。
作者: pcdoctor    时间: 2023-4-23 15:35
kkstun 发表于 2023-4-23 14:12
是的要求不高就是lm358吗。

我完全是个业余的,你说的这个,我还要花时间去认识一下,如果用在我的电路里,还要更多的知识储备
作者: pcdoctor    时间: 2023-4-23 15:38
kpj001 发表于 2023-4-23 14:51
能开盖从电池位置引线出来采样,那么直接供4V电压就完事。

你的建议真的是太对了,我已经被5V充电器给洗脑了,我下一步就是改装一个4V的电源,来替换掉这个单片机的作品,这样,这个单片机就可以做别的事情了
作者: pcdoctor    时间: 2023-4-23 15:43
kpj001 发表于 2023-4-23 14:51
能开盖从电池位置引线出来采样,那么直接供4V电压就完事。

我首先想到的就是5V电源串联二极管,就可以降压,只是一个二极管,正向压降不够用,两个二极管,压降有太多了,不能凑到4V
作者: kpj001    时间: 2023-4-23 15:48
pcdoctor 发表于 2023-4-23 15:43
我首先想到的就是5V电源串联二极管,就可以降压,只是一个二极管,正向压降不够用,两个二极管,压降有太 ...

一个两个都能用,手机就不开机了?真的追求精准,一个硅一个锗
作者: pcdoctor    时间: 2023-4-23 15:52
kpj001 发表于 2023-4-23 14:51
能开盖从电池位置引线出来采样,那么直接供4V电压就完事。

立刻动手在拆机二极管里面找,结果还真的很幸运,找了两个二极管串联,压降1.04V,算是比较完美的
作者: dianziguan    时间: 2023-4-23 16:14
pcdoctor 发表于 2023-4-23 11:13
你串联一个二极管,可是锂电池需要充电和放电,双向电流,二极管是怎么实现的呢? ...

https://www.mydigit.cn/thread-344779-1-1.html
作者: pcdoctor    时间: 2023-4-23 16:51
本帖最后由 pcdoctor 于 2023-4-23 17:04 编辑

找了一个5V电源,输出电压是4.94V, 三个二极管串联,压降到了3.92V
作者: pcdoctor    时间: 2023-4-23 16:57
手机显示电量62%, 应该是永远就是这样了,电池只要不鼓包,可以用好多年了
作者: pcdoctor    时间: 2023-4-23 16:58
我所担心的一件事情,就是如果停电一段时间后,电池电压下降了,再来点,岂不是会有很大的充电电流么?这样会不会有危险?
作者: pcdoctor    时间: 2023-4-23 17:00
我的理解,电源输出标了1.2A,如果电流变大了,最多也就是1.2A,电池电压迅速升到了3.92V电流就应该会很小了,只是手机本身的耗电量
作者: pcdoctor    时间: 2023-4-23 17:54
我现在用的电池包,没有保护板,我还是换一个有保护板的,更加安心一点,万一电源出现异常,保护板还可以保护一下锂电池包
作者: pcdoctor    时间: 2023-4-23 18:23
二极管测量出的压降,和在电路中的压降是不一样的啊,

两个二极管串联,测量的压降是1.04V, 结果实际串在电路中,有电流通过的压降是1.4V,电流大约100mA而已


作者: pcdoctor    时间: 2023-4-23 18:29
电源空载4.94V,接了负载,就只有4.88V了
作者: pcdoctor    时间: 2023-4-23 18:49
200mA电流,在导线上的电压降还是在电源一端,测量时4.04V, 电池两端测试3.92V,电线上消耗0.12V
作者: pcdoctor    时间: 2023-4-23 18:52
pcdoctor 发表于 2023-4-23 18:29
电源空载4.94V,接了负载,就只有4.88V了

4.88V测试的时候,屏幕灭掉了,
屏幕点亮,电源输出只有4.80V了

现在只用一个二极管,观察一下时间长了电池电压会稳定在多少V


作者: wwb2002    时间: 2023-4-23 19:27
还有一个办法,如果本来电池最高能到4.2v,找一个限制电压4.35v的聚合物电池代替即可
作者: pcdoctor    时间: 2023-4-23 22:29
折腾的最后结果出来了,

先是更换了一个小容量带保护板的锂电池,标300mAh



充电器,空载电压4.94V

亮屏测试,电源端测试4.80V

二极管压降0.7V

电线压降0.1V

最后电池电压稳定在4V, 完美,电池电量显示70%


这是折腾过程监控电池电压的过程

[attach]1805450[/attach]






作者: lmn2005    时间: 2023-4-24 08:11
pcdoctor 发表于 2023-4-22 15:38
记录了一下最后效果,用了电池内阻测试器的电脑记录软件

还具备电池内阻测试器,看来楼主对电池方面的研究挺专业的。
作者: pcdoctor    时间: 2023-4-24 08:18
lmn2005 发表于 2023-4-24 08:11
还具备电池内阻测试器,看来楼主对电池方面的研究挺专业的。

电池也没几个,仅仅是当作买一个玩具而已,如果不是有连接电脑记录电压的功能,早就吃灰了
作者: kkstun    时间: 2023-4-24 08:26
如果能开后盖接线出来,就没必要接锂电池了,充电器+电容即可。
作者: 人艰不拆了    时间: 2023-4-24 08:51
哈哈,不错,起码学习到了知识了
作者: 忘情居士    时间: 2023-4-25 08:36
电池换个大电容,或者法拉电容,就不怕鼓包了,一直插着电用。或者外接充电电路,比如TP4056充电,在电池端串联一个肖特基二极管,这样电池始终保持在3.9V左右。感觉这样改都比电池在充电放电循环来的寿命长
作者: myselfsky    时间: 2023-5-22 13:20
楼主会折腾,玩出花来了!




欢迎光临 数码之家 (https://www.mydigit.cn/) Powered by Discuz! X3.4