|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
先说说我遇到的问题,
有一个古老的安卓三星手机,三寸多的屏幕,淘汰以后,装一个时钟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开关一样简单,代码照抄
代码异常的简单
- #include <msp430.h>
- void longDelay(void)
- {
- _delay_cycles(1000000);
- }
- unsigned int Hi_V, Lo_V;
- void main(void)
- {
- WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
- P1DIR |= 0x01; // configure P1.0 as output
- BCSCTL1= CALBC1_1MHZ;
- DCOCTL = CALDCO_1MHZ;
- // Set Ref as internal 2.5V, ADC10ON, enable interrupt
- ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + REF2_5V + ADC10ON + ADC10IE;
- _delay_cycles(30); // Delay to allow Ref to settle
- ADC10CTL1 = INCH_5|SHS_0|ADC10DIV_0|ADC10SSEL_0|CONSEQ_0;
- ADC10AE0 |= BIT5; // Set P1.5 as A5 input , INCH_5
- P1DIR |= BIT5; // Set P1.5 to output direction
- Hi_V=828; //1023*4.05/2/2.5 = 828
- Lo_V=777; //1023*3.8/2/2.5 = 777
- while(1)
- {
- ADC10CTL0 |= ENC+ ADC10SC; // Sampling and conversion start
- __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exi
- if (ADC10MEM < Lo_V) P1OUT = 0x01;//LED ON
- if( ADC10MEM > Hi_V ) P1OUT = 0x00; //LED off
- longDelay();
- }
- }
- // ADC10 interrupt ** routine
- #pragma vector=ADC10_VECTOR
- __interrupt void ADC10_ISR (void)
- {
- __bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
- }
复制代码
做完用上,发现手机显示电池范围大约在50%~70%,
经过测量,才知道是锂电池已经老了,内阻大,充电的时候,电池电压会上升0.1V, 所以充电电压限制应该再提高一些,关闭充电后,电池电压才会接近4.05V
懒得再拆芯片重新改程序了,就在分压电阻上做调整了,找了一个329欧姆的电阻,加在分压电路的上端,提高了电压上限,当然同时电压的下限也跟着提高了
最后,手机显示电池的电压范围大约是60%到80%
希望这个小制作能够避免电池再鼓包吧
感谢各位看官耐心看完,欢迎指导
|
|