数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2437|回复: 45

[Arduino] 最简单的单片机应用,限制锂电池充电电压范围,MSP430G2452,ADC

[复制链接]
发表于 2023-4-22 15:03:16 | 显示全部楼层 |阅读模式
先说说我遇到的问题,


有一个古老的安卓三星手机,三寸多的屏幕,淘汰以后,装一个时钟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





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


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


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

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














电池电压控制在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%


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

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



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
发表于 2023-5-22 13:20:48 来自手机浏览器 | 显示全部楼层
楼主会折腾,玩出花来了!
回复 支持 反对

使用道具 举报

发表于 2023-4-25 08:36:13 | 显示全部楼层
电池换个大电容,或者法拉电容,就不怕鼓包了,一直插着电用。或者外接充电电路,比如TP4056充电,在电池端串联一个肖特基二极管,这样电池始终保持在3.9V左右。感觉这样改都比电池在充电放电循环来的寿命长
回复 支持 反对

使用道具 举报

发表于 2023-4-24 08:51:01 | 显示全部楼层
哈哈,不错,起码学习到了知识了
回复 支持 反对

使用道具 举报

发表于 2023-4-24 08:26:44 | 显示全部楼层
如果能开后盖接线出来,就没必要接锂电池了,充电器+电容即可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-24 08:18:26 | 显示全部楼层
lmn2005 发表于 2023-4-24 08:11
还具备电池内阻测试器,看来楼主对电池方面的研究挺专业的。

电池也没几个,仅仅是当作买一个玩具而已,如果不是有连接电脑记录电压的功能,早就吃灰了
回复 支持 反对

使用道具 举报

发表于 2023-4-24 08:11:23 | 显示全部楼层
pcdoctor 发表于 2023-4-22 15:38
记录了一下最后效果,用了电池内阻测试器的电脑记录软件

还具备电池内阻测试器,看来楼主对电池方面的研究挺专业的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 22:29:20 | 显示全部楼层
折腾的最后结果出来了,

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



充电器,空载电压4.94V

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

二极管压降0.7V

电线压降0.1V

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


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







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2023-4-23 19:27:14 来自手机浏览器 | 显示全部楼层
还有一个办法,如果本来电池最高能到4.2v,找一个限制电压4.35v的聚合物电池代替即可
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 18:52:33 | 显示全部楼层
pcdoctor 发表于 2023-4-23 18:29
电源空载4.94V,接了负载,就只有4.88V了

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

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

回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 18:49:12 | 显示全部楼层
200mA电流,在导线上的电压降还是在电源一端,测量时4.04V, 电池两端测试3.92V,电线上消耗0.12V
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 18:29:31 | 显示全部楼层
电源空载4.94V,接了负载,就只有4.88V了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 18:23:20 | 显示全部楼层
二极管测量出的压降,和在电路中的压降是不一样的啊,

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

回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 17:54:14 | 显示全部楼层
我现在用的电池包,没有保护板,我还是换一个有保护板的,更加安心一点,万一电源出现异常,保护板还可以保护一下锂电池包
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 17:00:56 | 显示全部楼层
我的理解,电源输出标了1.2A,如果电流变大了,最多也就是1.2A,电池电压迅速升到了3.92V电流就应该会很小了,只是手机本身的耗电量
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 16:58:12 | 显示全部楼层
我所担心的一件事情,就是如果停电一段时间后,电池电压下降了,再来点,岂不是会有很大的充电电流么?这样会不会有危险?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 16:57:01 | 显示全部楼层
手机显示电量62%, 应该是永远就是这样了,电池只要不鼓包,可以用好多年了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 16:51:35 | 显示全部楼层
本帖最后由 pcdoctor 于 2023-4-23 17:04 编辑

找了一个5V电源,输出电压是4.94V, 三个二极管串联,压降到了3.92V
回复 支持 反对

使用道具 举报

发表于 2023-4-23 16:14:30 | 显示全部楼层
pcdoctor 发表于 2023-4-23 11:13
你串联一个二极管,可是锂电池需要充电和放电,双向电流,二极管是怎么实现的呢? ...

https://www.mydigit.cn/thread-344779-1-1.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 15:52:08 | 显示全部楼层
kpj001 发表于 2023-4-23 14:51
能开盖从电池位置引线出来采样,那么直接供4V电压就完事。

立刻动手在拆机二极管里面找,结果还真的很幸运,找了两个二极管串联,压降1.04V,算是比较完美的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-19 19:34 , Processed in 0.109200 second(s), 9 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表