424

主题

3

好友

1万

积分
     

超级版主 当前离线

Rank: 8Rank: 8

UID
13663
帖子
13726
精华
6
经验
10608 点
金钱
8449 ¥
注册时间
2006-10-21

论坛版主 优秀版主 乐于助人 DIY大赛获奖

发表于 2014-8-15 17:49 | 显示全部楼层
本帖最后由 ahao 于 2014-8-15 18:15 编辑

其实这个东西几年前已经实现并且成功申请专利,由于个人能力等等诸多原因没有转化成成品。


原来的是控制器和充电器分开的,最近抽空又做了一个二合一的,将控制器、充电器做在了一起,手边有一个设备壳子刚好放得下,虽说外观糙点但是使用还算比较方便,这个装置主要为老妈的电动三轮车充电的,老人家年龄大了记性不好,经常是要么忘了插充电器的220v插头,要么忘了拔充电器220v插头,现在相对方便多了,充电时她只要把楼下充电线插头插上就行其它不用管,自动充电充满自动断电;用车时只需拔掉楼下充电线插头,骑车走就行其它不用管。

使用方法和实现功能:
将本充电装置放在室内,接出一根低压充电线连接室外电动车。当骑电动车到家楼下后,把低压充电线插头直接插在电动车充电口,然后室内控制器检测到自家车子插上了,先蜂鸣器响2声(可以起到提醒家人准备开门目的)然后延时3秒启动充电器开始充电,同时面板指示灯开始闪烁,充电1小时就隔2秒闪1次,充电5小时就隔2秒闪5次以此指示大概充电时间。
充满电后延时20分钟断电,指示灯1秒闪一次(为了预防因为电池老化热失控造成充电器一直处于充电状态,控制器做了特别处理,充电超过12小时强制断电)。
如果需要取用电动车,直接把室外充电线插头拔下即可,室内充电器如果正在充电中会立即断电,同时蜂鸣器响5声作为提醒,指示灯转为呼吸灯模式。

面板开关作用,长按3秒可以查看充电器充满蓄电池共用了几个小时,用指示灯闪烁次数表示。

06.jpg

09.jpg

424

主题

3

好友

1万

积分
     

超级版主 当前离线

Rank: 8Rank: 8

UID
13663
帖子
13726
精华
6
经验
10608 点
金钱
8449 ¥
注册时间
2006-10-21

论坛版主 优秀版主 乐于助人 DIY大赛获奖

 楼主| 发表于 2014-8-15 17:52 | 显示全部楼层
制作过程


01.jpg
02.jpg
03.jpg
04.jpg
05.jpg
06.jpg
07.jpg
08.jpg
09.jpg

424

主题

3

好友

1万

积分
     

超级版主 当前离线

Rank: 8Rank: 8

UID
13663
帖子
13726
精华
6
经验
10608 点
金钱
8449 ¥
注册时间
2006-10-21

论坛版主 优秀版主 乐于助人 DIY大赛获奖

 楼主| 发表于 2014-8-15 17:57 | 显示全部楼层
本帖最后由 ahao 于 2014-8-18 11:29 编辑

电原理,程序过几天更新


充电.gif



C程序如下红字部分,水平有限写的比较繁琐效率不高,可能有一些不合理的地方,仅供初学者参考。
头文件参考这个帖子3楼http://bbs.hifidiy.net/forum.php ... 48&pid=21285825

#include "STC15F104E.H"                                        //头文件
#define uint unsigned int                       
#define uchar unsigned char                        //两个宏定义

sbit key=P3^0;
sbit deng=P3^1;
                                                //位声明
sbit speak=P3^2;
sbit out=P3^3;
sbit ok=P3^4;
sbit star=P3^5;

uchar bz_key,tt_key,linshi,bz_ok,stop,tt_sp1,tt_sp2,tt0,tt_huxi,abc,biaoshi,tt_js,temp1,tt_led,tt00,miao,fen,shi,tt01;         //定义变量
uint tt02;


void main()                                                        //主程序
{

        TMOD=0x10;                                                //设定定时器0工作模式为16位自动重装模式
        TH0=0xff;                                                //(65536-10)/256 定时器0装初值 10us
        TL0=0xf6;                                                //(65536-10)%256
        ET0=1;                                                         //打开定时器0         
//        TR0=1;       
        TH1=0x3c;                                                //(65536-50000)/256 定时器1装初值 50ms
        TL1=0xb0;                                                //(65536-50000)%256
        ET1=1;                                                         //打开定时器1         
        TR1=1;                                                        //启动定时器1
        EA=1;                                                          //打开总中断

        P3M0=0x0e;                                                   //0000 1110 P3.1/2/3口为强推挽输出

        deng=1;
        bz_ok=1;
        linshi=0;
        tt00=miao=fen=shi=0;
        speak=0;

        while(1)                                                //大循环
        {
               
                if(star==0)                                                //室外电动车充电线插上
                {
                        TR0=0;
                        abc=100;
                        biaoshi=1;

                        tt_sp2=0;
                        if(tt_sp1<15)                                 //室外线插上后蜂鸣器响2次
                                speak=1;
                        else
                                speak=0;

                        if(tt01>60)                                                //插上大于3秒
                        {
                                if(shi<12)                                        //充电时间小于12小时
                                {
                                        if(bz_ok)                                //充满标志
                                        {
                                                if(ok)                                //并且没充满时开始充电
                                                {
                                                        out=1;
                                                        tt02=0;
                                                        stop=0;                           //满停标志
                                                }
                                                else                                   //充满后延时20分钟断电
                                                {
                                                        if(tt02>24000)
                                                        {
                                                                out=0;
                                                                stop=1;
                                                                linshi=shi;        //临时数据记录当前小时数
                                                                bz_ok=0;        //充满标志置零,目的是只运行一次此if语句
                                                        }
                                                }
                                        }
                                        else                                           //充满后
                                        {
                                                if(key==0)
                                                {
                                                        if(tt_key>40)        //延时消抖 长按2秒后led用闪亮方式显示充满共用了几个小时
                                                        {
                                                                bz_key=1;         //键盘标志置1
                                                                stop=0;                //满停标志置零,led显示方式为2秒一组闪烁
                                                        }
                                                }
                                                else
                                                {
                                                        tt_key=0;
                                                        bz_key=0;
                                                        stop=1;
                                                        out=0;
                                                }
                                        }
                                }
                                else
                                {
                                        out=0;                                        //充电时间大于12小时强制断电
                                        stop=1;
                                }
                        }
                }
                else                                                                   //室外线被拔掉后
                {
                        tt_sp1=0;
                        if(tt_sp2<45)                                           //室外线拔掉后蜂鸣器响4次
                                speak=1;
                        else
                                speak=0;

                        bz_ok=1;
                        biaoshi=0;                                                //标示、变量全置零
                        miao=0;
                        fen=0;
                        shi=0;
                        temp1=0;
                        tt00=0;
                        tt01=0;
                        tt02=0;
                        out=0;                                                           //输出关闭
                        stop=0;

                        TR0=1;                                                          //定时器0启动,指示灯呼吸显示

                }
        }
}

void timer0() interrupt 1                        //定时器0的服务程序 0.1ms
{

        if(tt0<100)
                tt0++;                                                          
        else
                tt0=0;

        if(tt0<abc)                                                //led 调光
                deng=1;
        else
                deng=0;
       
}

void timer1() interrupt 3                        //定时器1的服务程序 50ms
{
        TH1=0x3c;                                                //(65536-50000)/256 定时器1装初值 50ms
        TL1=0xb0;                                                //(65536-50000)%256       

        if(tt_huxi)                                                //待机时呼吸灯效果
        {
                abc+=2;
                if(abc>=70)
                        tt_huxi=0;
        }
        else
        {
                abc-=2;
                if(abc<=1)
                        tt_huxi=1;
        }



        if(biaoshi)
        {
                if(tt02<30000)
                        tt02++;
               
                if(tt01<200)
                        tt01++;

                if(tt_sp1<200)
                        tt_sp1++;

                if(tt_key<100)
                        tt_key++;


                tt00++;
                if(tt00>=20)
                {
                        miao++;
                        tt00=0;
                        if(miao>=60)
                        {
                                fen++;
                                miao=0;
                                if(fen>=60)
                                {
                                        if(shi<24)
                                                shi++;
                                        fen=0;
                                }
                        }
                }
       
                if(stop)
                {
                        tt_led++;
                        if(tt_led>=10)                                //充满断电后指示灯1秒闪一次
                        {
                                deng=~deng;       
                                tt_led=0;
                        }
                }
                else                                                          //未充满时指示灯点闪一次表示1小时内
                {
                        if(tt_led<40)
                        {
                                tt_led++;
                                if(bz_key)                                //按键标志为1时led闪烁为充满用了几个小时
                                        temp1=linshi;
                                else                                           //按键标志为0时led闪烁为正在充电几个小时内
                                        temp1=shi;
                        }
                        else                                                //2s到 新一轮闪灯动作
                        {
                                tt_js++;
                                if(tt_js<4)                                //200ms内灯亮
                                        deng=1;
                                else                                         //之后灯灭
                                {       
                                        if(tt_js<10)                //500ms时间段内亮200ms,灭300ms实现闪亮效果。
                                                deng=0;
                                        else
                                        {       
                                                tt_js=0;
                                               
                                                if(temp1==0)           //充电时间在1小时内闪亮1次,同理5小时内闪亮5次。
                                                        tt_led=0;
                                                else
                                                        temp1--;
                                        }
                                }
                        }
                }
        }
        else
        {
                if(tt_sp2<200)
                        tt_sp2++;
        }

}

46

主题

2

好友

1291

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
593256
帖子
1352
精华
0
经验
1291 点
金钱
1205 ¥
注册时间
2013-5-25
发表于 2014-8-15 19:09 | 显示全部楼层
很有创意的东西,不错。

0

主题

0

好友

70

积分
     

论坛游民 当前离线

Rank: 3Rank: 3

UID
288741
帖子
155
精华
0
经验
70 点
金钱
68 ¥
注册时间
2011-2-3
发表于 2014-8-15 20:39 | 显示全部楼层
太方便了,太有才了.

58

主题

3

好友

2305

积分
     

罗宾汉 当前离线

生活态度

Rank: 7Rank: 7Rank: 7

UID
43921
帖子
4072
精华
0
经验
2305 点
金钱
1905 ¥
注册时间
2008-5-24

新人进步

发表于 2014-8-16 11:02 | 显示全部楼层
A版将STC15F104E发挥得淋漓尽致!赞赞赞
STCF104E待机的功耗是多少?如果是几十uA,那么用一块电池作为动作电池,启动后给电池补电即可。哈哈!

424

主题

3

好友

1万

积分
     

超级版主 当前离线

Rank: 8Rank: 8

UID
13663
帖子
13726
精华
6
经验
10608 点
金钱
8449 ¥
注册时间
2006-10-21

论坛版主 优秀版主 乐于助人 DIY大赛获奖

 楼主| 发表于 2014-8-16 17:34 来自手机端 | 显示全部楼层
chenyh98 发表于 2014-8-16 11:02
A版将STC15F104E发挥得淋漓尽致!赞赞赞
STCF104E待机的功耗是多少?如果是几十uA,那么用一块电池作为动作 ...

马上就不能发挥了,只剩两三个了。以后该204登场了,这个有几十个。

6

主题

0

好友

495

积分

业余侠客 当前离线

Rank: 4

UID
198247
帖子
508
精华
0
经验
495 点
金钱
296 ¥
注册时间
2010-5-5
发表于 2014-8-16 20:33 | 显示全部楼层
有了单片机,建议,
将充电时间改为:
4小时+3小时+2小时+1小时+0。5小时+0。5小时
加号表示强制断电一次,几秒即可。
减大大减少电池后期被充鼓的机会。。。。

221

主题

1

好友

4526

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
41872
帖子
8349
精华
0
经验
4526 点
金钱
4300 ¥
注册时间
2008-4-29
发表于 2014-8-17 00:18 | 显示全部楼层
请教A版我有个坏的充电器,充电的时候连同同一个插座引出的节能灯一起烧掉了,更换了整流,高压滤波,3842和几欧的电阻,串灯泡还是大亮,还有哪里可能坏的?

674

主题

24

好友

6628

积分

版主 当前离线

Rank: 7Rank: 7Rank: 7

UID
35165
帖子
23773
精华
0
经验
6628 点
金钱
5628 ¥
注册时间
2008-2-4

社区贡献 论坛版主

发表于 2014-8-17 10:50 | 显示全部楼层
gtray520 发表于 2014-8-17 00:18
请教A版我有个坏的充电器,充电的时候连同同一个插座引出的节能灯一起烧掉了,更换了整流,高压滤波,3842和 ...

开关管检查或换了吗?

221

主题

1

好友

4526

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
41872
帖子
8349
精华
0
经验
4526 点
金钱
4300 ¥
注册时间
2008-4-29
发表于 2014-8-17 11:09 | 显示全部楼层
一个好人 发表于 2014-8-17 10:50
开关管检查或换了吗?

好像是2N60什么的也换了

674

主题

24

好友

6628

积分

版主 当前离线

Rank: 7Rank: 7Rank: 7

UID
35165
帖子
23773
精华
0
经验
6628 点
金钱
5628 ¥
注册时间
2008-2-4

社区贡献 论坛版主

发表于 2014-8-17 12:22 | 显示全部楼层
gtray520 发表于 2014-8-17 11:09
好像是2N60什么的也换了

2N,你确定是这个数?

367

主题

25

好友

4000

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
114
帖子
3654
精华
1
经验
4000 点
金钱
1902 ¥
注册时间
2004-3-24
发表于 2014-8-17 14:15 | 显示全部楼层
ahao 发表于 2014-8-15 17:52
制作过程

记号

7

主题

1

好友

64

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
641881
帖子
91
精华
0
经验
64 点
金钱
50 ¥
注册时间
2013-11-22
发表于 2014-8-17 14:52 | 显示全部楼层
嗯.很时用的制作.这个好.

1

主题

0

好友

7

积分

注册会员 当前离线

Rank: 2

UID
641100
帖子
39
精华
0
经验
7 点
金钱
5 ¥
注册时间
2013-11-20
发表于 2014-8-17 16:26 | 显示全部楼层
有做好的成品卖吗?

221

主题

1

好友

4526

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
41872
帖子
8349
精华
0
经验
4526 点
金钱
4300 ¥
注册时间
2008-4-29
发表于 2014-8-17 22:40 | 显示全部楼层
一个好人 发表于 2014-8-17 12:22
2N,你确定是这个数?

6N

13

主题

0

好友

104

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
582097
帖子
129
精华
0
经验
104 点
金钱
91 ¥
注册时间
2013-4-8
发表于 2014-8-18 15:43 | 显示全部楼层
我有一电动车电池接近要坏了  充电的时候  不变绿灯了  我只在充电器前面加了一个冰箱知音    结果电池又用了两年多了  也没有冲胀肚子  很实用

39

主题

0

好友

6746

积分
     

青铜剑侠 当前离线

Rank: 8Rank: 8

UID
13931
帖子
9617
精华
0
经验
6746 点
金钱
6615 ¥
注册时间
2006-10-28
发表于 2014-8-18 22:27 | 显示全部楼层
杨六郎 发表于 2014-8-18 15:43
我有一电动车电池接近要坏了  充电的时候  不变绿灯了  我只在充电器前面加了一个冰箱知音    结果电池又用 ...

这个“冰箱知音 ”是什么???

13

主题

0

好友

104

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
582097
帖子
129
精华
0
经验
104 点
金钱
91 ¥
注册时间
2013-4-8
发表于 2014-8-19 11:07 | 显示全部楼层
tsh 发表于 2014-8-18 22:27
这个“冰箱知音 ”是什么???

就是控制开机时间和停机时间的一种控制器  卖制冷配件的都有卖的  大约10元一个

16

主题

1

好友

156

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
581936
帖子
1185
精华
0
经验
156 点
金钱
151 ¥
注册时间
2013-4-7
发表于 2014-8-21 13:57 来自手机端 | 显示全部楼层
高手
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部