切换到宽版
爱科技/爱创意/爱折腾/爱极致;技术知识分享平台,点击进入新版数码之家网站
  • 4004阅读
  • 14回复

[电源]也来搞个利用电动车充电器转灯信号的定时器 [复制链接]

上一主题 下一主题
离线turkey99
 

发帖
231
M币
263
专家
1
粉丝
14
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2016-02-22
话说春节期间某天早上下楼去取电动车,看到电动车充电器经过1整晚还没亮绿灯,心里一咯噔,坏了。手一摸电池,果然热的发烫,赶紧拔充电器,只听到啪的一声,充电器也完蛋了。我去,什么破烂玩意,现在的充电器质量真不行,都换了三四个了。反正坏了,也不管了,改干嘛干嘛去先。
第二天闲着在家,闲的蛋疼突然想着自己来修理充电器。说干就干,第一次,之前从未修过,先百度做足功课,然后就动手了。
充电器拆开就这个样:

炸黑的电阻是后来放烟火造成的,刚开始没炸

请无视那些渣焊点,铜皮都被我折腾掉了,哈哈

看起来就是能省的都省了。。。做工烂,其实是没有修的价值,我就纯当练手了。
折腾一整天,场管拆了又焊上,变压器也拆了又焊上,来回折腾,第一次搞,没经验,本身对电路也不太懂,更不熟悉各个元器件,一切都是现场百度。终于在傍晚时分修好了。其实就只坏了一个3842,二极管,场管,电阻什么的统统没坏,也没烧保险。一开始就换了3842,但一直不行,原因是换上去的3842是拆了另外一个充电器的,也是个坏的,不会量好坏,走了不少弯路。不过也好,折腾一天后,至少熟悉了充电器电路。到了晚上,就顺手把电动车原配的西普尔修好了,西普尔坏的元件就多了,场管,保险,二极管,3842都换了。


好了,前面一堆废话,不再婆妈了。修好充电器就开始琢磨以后怎么避免头天早上的情况,论坛一通搜索加百度后,决定自己也来做个定时器。
综合前辈们的各种方法后,定出了适合自己的方案:
低压区取电源,利用转灯信号,单片机定时,继电器控制3842的供电,来达到目的。
说说为什么这样做吧,
第一,高压区我不会玩,低压区取电,1个7805加2电容搞定,不用再额外准备电源,省事
第二,转灯信号配合光耦就可以了,比检测电路方便省事,我专挑简单的
第三,我不会玩cd4060,本身电路知识就不行,单片机简单,写几句代码就搞定了,想怎么定时就怎么定,灵活
第四,我没大的继电器,就有个5v的小型继电器,控制220v交流电是不行了,直接控制输出线,48v几A的电流,怕也是不行,就取巧控制3842供电,3842不工作了,也就没输出了,至于220v没断开,不是我考虑的问题。
第五,手上有stc的15F104W,sop8封装,小,自带时钟,接上电源就能工作,我喜欢

电路是参考了各位前辈的,依葫芦画瓢,各种保护就没有了,只留下最基本的。
不会电路软件,本身也简单,就手画了,不对的地方别笑我:

焊好调试程序的样子:

LED可以不用的,我是为了便于调试观察加的

此时还没有加7805上去,这中间还有个插曲,一开始想当然认为充电器低压区芯片工作电压是5v的,所以调好程序后就直接焊充电器上试机,结果按下按钮的瞬间,一缕青烟升起。。。。。。好hi,定时器上的光耦挂了,单片机挂了,m7二极管也挂了,充电器则3842又挂了,我想可能是控制板光耦发光端击穿后等同于充电器低压端短路造成的吧。

然后又是修充电器,给定时器换零件,加7805,最后就这样了
正面:

反面


无视溶胶,标准山寨做法,哈哈,我是为了绝缘和防震

反复检查测试认为没问题了,焊到充电器上,通上220v,激动的时刻来了,按下按钮,咦?没反应?断开220v,仔细检查,没问题呀,再次通上220v,按下按钮,hoho,啪~~啪~~啪~~,放烟花了,真好看。。。。。。。
我勒个去,充电器光耦,场管,3842反馈电阻,高压整流二极管全报销了,3842量起来没坏,是不是真没坏,没心情了,这个破充电器不整他了,气死我了。

反复检查定时器确认没问题,换个充电器,割断3842第7脚与电源的线路,连上定时器,通电,颤抖着再次按下定时器按钮。
谢天谢地,没烟花看了,一切正常。定时器LED正常闪烁了。
好吧,我只能认为前面那个充电器是它寿命已尽,它以完成了我的练手任务,留着拆件吧。

最后上单片机源代码,写的简单粗暴,只求实用,不求多功能,也不管时间精准,差个几分几秒那都不是事。芯片内部时钟本身就有偏差呢。高手不要笑我。里面各种注释比较详尽了,还有一些注释掉的代码都是调试时用的,这里就不再说明了。

  1. #include "15F104W.h"
  2. #include "intrins.h"
  3. sbit My_led = P3^3;
  4. sbit Switch = P3^0;
  5. #define uint unsigned int
  6. #define uchar unsigned char      
  7. bit Green_led;
  8. //-----------------------------------------------
  9. void Timer0Init(void)        //100毫秒@5.5296MHz
  10. {
  11.     AUXR &= 0x7F;        //定时器时钟12T模式
  12.     TMOD &= 0xF0;        //设置定时器模式
  13.     TL0 = 0x00;        //设置定时初值
  14.     TH0 = 0x4C;        //设置定时初值
  15.     TF0 = 0;        //清除TF0标志
  16.     TR0 = 1;        //定时器0开始计时
  17. }
  18. //-----------------------------------------
  19. //中断服务程序
  20. void exint0() interrupt 0       //INT0中断入口
  21. {
  22.     Green_led = 1;                 //将标志位置位
  23. }
  24. //-----------------------------------------
  25. //延时1秒钟
  26. void Delay1S()
  27. {
  28. uchar i;
  29.     TF0 = 0;
  30.     for (i=0;i<10;i++){
  31.         while(!TF0);
  32.         TF0 = 0;
  33.     }        
  34. }
  35. //-----------------------------------------------
  36. void main()
  37. {
  38. uchar hour,min,second;
  39.     P3M1 = 0x00;                //P30,P33推挽模式
  40.     P3M0 = 0x09;                //PXM1,PXM0:  00:标准io口    01:推挽输出    10:高阻输入    11:开漏模式
  41.     P5M1 = 0x00;
  42.     P5M0 = 0x00;
  43.     IT0 = 1;                    //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
  44.     EX0 = 1;                    //使能INT0中断
  45.     EA = 1;
  46. //    P3 = 4;P5 = 0;
  47.     Green_led = 0;
  48.     My_led = 1;
  49. //    Switch = 1;                    //继电器吸合
  50.     
  51.     Timer0Init();
  52.     
  53.     for(second=0;second<10;second++){    //延时10秒钟,防止误动作
  54.         Delay1S();
  55.     }
  56.         
  57. //            for (second=0;second<60;second++){        //秒
  58. //last2hours:
  59. //                Delay1S();
  60. //                My_led = !My_led;                        //led闪灯,测试用
  61. //                if (Green_led){                            //充满转绿灯了?
  62. //                    Green_led = 0;                        //清除标志位
  63. //                    EA = 0;
  64. //                    if ((second+10)<60){                    //已经充电8小时了?
  65. //                        second = 50;                        //已充8小时就不做任何变化,继续剩下时间
  66. //                        goto last2hours;                //未充满8小时就转灯,则跳转到最后2小时
  67. //                    }
  68. //                }
  69. //            }
  70. //            Switch = 0;
  71.             
  72.             
  73.     for (hour=0;hour<10;hour++){                    //小时,最大10小时
  74. last2hours:    
  75.         for (min=0;min<60;min++){                    //分钟
  76.             for (second=0;second<60;second++){        //秒
  77.                 Delay1S();
  78.                 My_led = !My_led;                        //led闪灯,测试用
  79.             }
  80.             if (Green_led){                            //充满转绿灯了?
  81.                 Green_led = 0;                        //清除标志位
  82.                 EA = 0;                                        //关中断
  83.                 if ((hour+2)<10){                    //已经充电8小时了?
  84.                     hour =8;                        //已充8小时就不做任何变化,继续剩下时间
  85.                     goto last2hours;                //未充满8小时就转灯,则跳转到最后2小时
  86.                 }    
  87.             }
  88.         }
  89.     }
  90.     Switch =0;                                        //绿灯2小时或总共10小时后,断开继电器
  91.     while (1);
  92. }



本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共10条打赏M币+31
离线brown

发帖
240
M币
330
专家
1
粉丝
18
只看该作者 1楼 发表于: 2016-02-22
请登录后查看
离线turkey99

发帖
231
M币
263
专家
1
粉丝
14
只看该作者 2楼 发表于: 2016-02-22
请登录后查看
离线guishan987

发帖
2486
M币
2367
专家
5
粉丝
87
只看该作者 3楼 发表于: 2016-02-22
请登录后查看

发帖
977
M币
2040
专家
6
粉丝
31
只看该作者 4楼 发表于: 2016-02-22
请登录后查看
离线hopestone

发帖
604
M币
987
专家
8
粉丝
87
只看该作者 5楼 发表于: 2016-02-22
请登录后查看
离线蕴殇

发帖
7284
M币
3578
专家
9
粉丝
114
只看该作者 6楼 发表于: 2016-02-22
请登录后查看
离线turkey99

发帖
231
M币
263
专家
1
粉丝
14
只看该作者 7楼 发表于: 2016-02-23
请登录后查看
离线fanchuanhai

发帖
1973
M币
191
专家
1
粉丝
0
只看该作者 8楼 发表于: 2016-02-23
请登录后查看
离线fghjgjjfg
发帖
437
M币
7
专家
1
粉丝
27
只看该作者 9楼 发表于: 2016-05-14
请登录后查看
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个