找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8798|回复: 27
收起左侧

单片机控制继电器通断电设计

  [复制链接]
ID:182910 发表于 2017-3-24 21:39 | 显示全部楼层 |阅读模式
题目是通过单片机来控制继电器从而达到通断电的效果,通过DC12V电压或者DC5V电压来控制AC220V的通断。然后达到的效果是类似5s5s断,之后每1s累加一次,即下一次6s5s断,再下一次7s通,5s...... 直至40s通,5s断,持续循环这样的
附有我画的一部分原理图,因为刚接触,想知道一个继电器能实现吗?然后就是通过c语言编程实现功能呢还是需要怎么搞原理图 QQ图片20170324213653.png
回复

使用道具 举报

ID:123289 发表于 2017-3-25 01:12 | 显示全部楼层
基本正确,可以实现。
但复按钮,接法不当,复位一次后,C3上的电放不掉。就不能再复位了。要等电容自放电结束,这需要很长时间。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:111634 发表于 2017-3-25 09:05 | 显示全部楼层
2003驱动电路7路用了一路,真可惜。没有性价比更好的方案吗?
回复

使用道具 举报

ID:151348 发表于 2017-3-26 11:13 | 显示全部楼层
用三极管驱动继电器就行了,给继电器线圈并联一个二极管来保护继电器线圈。如果你要做调光建议用光耦+可控硅硬件电路,PWM控制方式

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:162841 发表于 2017-3-26 14:31 来自手机 | 显示全部楼层
原理图正确,就看你编程能不能实现了
回复

使用道具 举报

ID:68468 发表于 2017-3-26 14:42 | 显示全部楼层
三极管驱动继电器会省点,继电器触点处应并上一个消火花电容

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:182910 发表于 2017-3-26 18:00 | 显示全部楼层
zl2168 发表于 2017-3-25 09:05
2003驱动电路7路用了一路,真可惜。没有性价比更好的方案吗?

三极管接法查的比较容易坏,正在考虑要不要用2003驱动数码管
回复

使用道具 举报

ID:182910 发表于 2017-3-26 18:01 | 显示全部楼层
imxuheng 发表于 2017-3-26 11:13
用三极管驱动继电器就行了,给继电器线圈并联一个二极管来保护继电器线圈。如果你要做调光建议用光耦+可控 ...

调光是什么呢
回复

使用道具 举报

ID:182910 发表于 2017-3-26 18:01 | 显示全部楼层
199419zzq 发表于 2017-3-26 14:31
原理图正确,就看你编程能不能实现了

正在往出憋程序
回复

使用道具 举报

ID:182910 发表于 2017-3-26 18:02 | 显示全部楼层
yzwzfyz 发表于 2017-3-25 01:12
基本正确,可以实现。
但复按钮,接法不当,复位一次后,C3上的电放不掉。就不能再复位了。要等电容自放电 ...

能给个建议改正吗,有点不太懂,谢谢
回复

使用道具 举报

ID:182910 发表于 2017-3-26 19:13 | 显示全部楼层
yzwzfyz 发表于 2017-3-25 01:12
基本正确,可以实现。
但复按钮,接法不当,复位一次后,C3上的电放不掉。就不能再复位了。要等电容自放电 ...

那应该怎么改呢?
回复

使用道具 举报

ID:183604 发表于 2017-3-26 19:14 | 显示全部楼层
用个8050驱动继电器

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:99130 发表于 2017-3-26 21:09 | 显示全部楼层
直接用三极管驱动继电器,加一个保护继电器的二极管就好了,用ULN2003太浪费了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:182910 发表于 2017-3-26 22:14 | 显示全部楼层
越快乐越堕落 发表于 2017-3-26 21:09
直接用三极管驱动继电器,加一个保护继电器的二极管就好了,用ULN2003太浪费了

已经改成三极管的了
回复

使用道具 举报

ID:111634 发表于 2017-3-26 22:15 | 显示全部楼层
Vanessa 发表于 2017-3-26 18:00
三极管接法查的比较容易坏,正在考虑要不要用2003驱动数码管

只要在继电器驱动线圈两端并联二极管就可。
回复

使用道具 举报

ID:151348 发表于 2017-3-27 08:31 | 显示全部楼层

不是用来做调光啊,看来我猜错了。调光把灯的亮度进行调节

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:165180 发表于 2017-3-29 16:42 | 显示全部楼层
用三极管驱动,继电器。也可以用可控硅控制。
回复

使用道具 举报

ID:186936 发表于 2017-4-11 23:09 | 显示全部楼层
原理图基本没错误,程序中如果能达到设计的那样,完全可以实现。加油

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:47286 发表于 2017-4-11 23:41 | 显示全部楼层
我写了一个 不知道对不对 一起学习吧

bit flag_one=0;                //第一次工作标记
uchar num1s=0;                //1s计数器
uchar n=5;                        //总秒数计数器

void mast()        //主控
{
        if(flag_one==0)                //如果 第一次工作标记为0 这里是你要求的第一次5s开5s关
        {
                jk=1;                                //继电器吸合
                num1s=0;                        //延时5s
                while(num1s<n);
                jk=0;                                //继电器关闭
                num1s=0;                        //延时5s
                while(num1s<n);
                flag_one=1;                        //第一次工作标记置1 不再运行5s间隔的状态
                n++;                                //总秒数计数器自加
        }

        jk=1;                                //继电器吸合
        num1s=0;                        //延时5+n秒 每次+1S
        while(num1s<n);
        n++;                                //总秒计数器自加
        jk=0;                                //继电器关闭
        num1s=0;                        //延时5s 你要求开时间每次+1S 关时间不变
        while(n<5);
}

void Server_Time0() interrupt 1        //定时器服务程序
{
        TH0 = xx;                        //重装定时初值 1s
        TL0 = xx;                        //重装定时初值 1s
       
        num1s++;                        //1s计数器自加       
}

void main()
{
        Init_Time();        //定时器初始化 没给你写 基础程序了

        while(1)
        {
                mast();                        //调用 主控程序
        }
}

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:47286 发表于 2017-4-11 23:47 | 显示全部楼层
Vanessa 发表于 2017-3-26 18:00
三极管接法查的比较容易坏,正在考虑要不要用2003驱动数码管

三极管没有很容易坏 现在有很多集成片子 有UN2008 当年没这些片子的时候 还不都是三极管干 也没见几个坏的

我喜欢用N-MOS 比三极管好用 不需要电流 51的准双向端口直接就能驱动了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:47286 发表于 2017-4-11 23:52 | 显示全部楼层
刚才少看最后一句了 补上

bit flag_one=0;                //第一次工作标记
uchar num1s=0;                //1s计数器
uchar n=5;                        //总秒数计数器

void mast()        //主控
{
        if(flag_one==0)                //如果 第一次工作标记为0 这里是你要求的第一次5s开5s关
        {
                jk=1;                                //继电器吸合
                num1s=0;                        //延时5s
                while(num1s<n);
                jk=0;                                //继电器关闭
                num1s=0;                        //延时5s
                while(num1s<n);
                flag_one=1;                        //第一次工作标记置1 不再运行5s间隔的状态
                n++;                                //总秒数计数器自加
        }

        jk=1;                                //继电器吸合
        num1s=0;                        //延时5+n秒 每次+1S
        while(num1s<n);
        n++;                                //总秒计数器自加
        jk=0;                                //继电器关闭
        num1s=0;                        //延时5s 你要求开时间每次+1S 关时间不变
        while(n<5);
//刚才没看见你最后一句话没写这段
        if(n==40)                        //判断总次数 如果总次数是40
        {
                flag_one=0;                        //第一次工作标记清零                       
                n=5;                                //总秒数计数器置5
        }
}

void Server_Time0() interrupt 1        //定时器服务程序
{
        TH0 = xx;                        //重装定时初值 1s
        TL0 = xx;                        //重装定时初值 1s
       
        num1s++;                        //1s计数器自加       
}

void main()
{
        Init_Time();        //定时器初始化 没给你写 基础程序了

        while(1)
        {
                mast();                        //调用 主控程序
        }
}
回复

使用道具 举报

ID:158774 发表于 2017-4-12 16:22 | 显示全部楼层
三极管驱动继电器
回复

使用道具 举报

ID:196701 发表于 2017-5-5 10:01 | 显示全部楼层
dzbj 发表于 2017-4-11 23:52
刚才少看最后一句了 补上

bit flag_one=0;                //第一次工作标记

请问,用单片机控制固态继电器,再控制高频电磁阀每秒钟开关50次,请问这个程序应该怎么写
回复

使用道具 举报

ID:182910 发表于 2017-5-10 20:24 | 显示全部楼层
dzbj 发表于 2017-4-11 23:52
刚才少看最后一句了 补上

bit flag_one=0;                //第一次工作标记

谢谢,我已经编出来了
回复

使用道具 举报

ID:192243 发表于 2017-5-10 21:32 | 显示全部楼层
原理图正确,带上计时器按时间输出基本就行了
回复

使用道具 举报

ID:402168 发表于 2018-10-20 14:21 | 显示全部楼层
想要楼主的程序
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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