单片机检测220V交流电通断电路

我们在topemic网站上分享过一篇题为"单片机检测220V交流电通断电路"的文章,目前有近万次阅读,在这里做个总结分享给没有读过该文的公众号朋友。

废话不多说,直接上图:

该电路工作原理如下:

  1. 当220V断开时,光耦不导通,SIG_IN1为高电平

  2. 当220V导通时,在交流电的正半周期,光耦导通,3和4脚近似短路,SIG_IN1为低电平;在交流电的负半周期,光耦不导通,此时SIG_IN1电压为多少呢? 注意并不是高电平,原因是电容要充电,需要一定的时间,时间常数约为t=R30 * C17=100K * 2.2uF=0.22s。而220V交流电频率为50Hz,周期为0.02s,负半周时间只有0.01s,在这个时间内,电容远远没有充满电,所有对单片机来说还是低电平。这样就实现了在220V断开时单片机检测为高电平,在220V导通时单片机检测为低电平的逻辑。

附上实际测量的波形:光耦1脚和SIG_IN1波形图

可以看到在220V导通期间,由于C17不断的充电、放电,电压是一个较低的值,对单片机IO来说是低电平。

针对该电路,有很多网友提出了非常好的问题,在这里把问题和解答也分享给大家。

问题1:图中已经有了D5( 1N4007),反向等于是截止的,那么D8(1N4148)是否多余呢?

回答:反向电压时,理论是截止,完全关断的,但是实际总会有漏电流,加上D8,可以保证落在光耦反向压降不大于1N4148导通压降,防止反向击穿。


问题2:使用PC817的时候,“IN4148的作用是保护光耦不被反向电压击穿”,这个IN4148一定需要吗???

回答:可以不加。理论上1N4007在加反向电压时应该马上截止,但实际上它并不是马上截止的,而是需要一个很短的时间 (反向恢复时间),虽然这个时间很短(1-2us), 但在这个时间会有反方向电压加到光耦输入端,我没有测试过会不会造成损坏,但毕竟是隐患。快速导通二极管1N4148可以防止反向电压引起的损坏。


问题3:保留D8,去掉D5是否可以?

回答:正常是可以的,但是有D5肯定保险一些。反向电压会使D8导通,但毕竟需要压差和时间。有可能会把光耦反向击穿。


问题4:R30,C17可以去掉吗?不接VCC,直接进MCU?

回答:直接进MCU,利用MCU里面的上拉电阻是可以的,如果还是用上面的检测原理,那么外面加一个电容即可。如果把电容也去掉,需要MCU通过软件去判断50Hz的高低电平来判断220V是否通断。


问题5:2.2uf的贴片电容,在持续的充放电,一直在不停的充放电,会导致使用寿命很短吗?

回答:充放电不会影响电容寿命。比较常见的是电解电容在高温下失效。


问题6:如果不用PC817,而是用PC814双向光耦,是否可以?是否能简化电路?

回答:可以,就是成本上会稍高一些。


问题7:R33(100K)和R39(100K)分别置于L,N上,跟一个电阻200K至于一个交流线上,这样有什么好处吗?在安全距离满足的情况下,我觉得是一样的效果,不知,这样的理解是否正确。

回答:2个电阻,每个电阻的功率是1个电阻的一半,电阻选型时就不需要那么大的额定功率了。用两个100K还有一个好处是,把弱电和强电部分隔离开,安全性增强了。


问题8:想请问,电容充满后,往哪放电,如果把电容放在接入220V之后,光耦之前呢?效果会如何?

回答:在交流电的正半周,PC817内部的LED发光,此时充满电的电容就会通过PC817内部的光敏三极管放电。放电电流从PC817的4脚,经光敏三极管,流到3脚,也就是地(同时也是电容另一极)。电容放到光耦前面理论上应该也是可以的,但对电容耐压要求会高好多,成本更高一些。


问题9:这个电路可以用于检测220V直流电的通断吗

回答:当然是可以的。


问题10:你好,我按这个电路连接后,电路中的电流只有零点几毫安,PC817没工作呀

回答:现在的电流大约0.5mA,不过在我这边使用的PC817是可以正常工作的。你的没法工作,那你尝试减小电阻使其电流工作在20mA左右,具体参考你选用的PC817的芯片手册。这个电流同时会影响后端C17电容的放电速度。另外要考虑电阻封装,由于电阻的电压和功率较大,要保证不超过额定值,防止爆了。

推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uC/OS-II源码分析(二)

在真正开始分析源代码前,先来看使用uC/OS-II的三个例子 1)使用信号量 #define TASK_STK_SIZE 512 /* 每个任务堆栈的大小(以字计算)*/#define N_TASKS 10 /* 任务数*/OS_STK TaskStk[N_TAS…

TRACE (VC)

TRACE 1、TRACE和TRACK是用来调试web服务器连接的HTTP方式。 2、TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能。 3、MATLAB函数,用于求二维方阵的迹,即该方阵对角线上元素之和。4、Flex中的调试信息显示函数,…

你的年终奖有多少?

辛苦一年,最期待的就是发年终奖了。我哥在我们老家工厂上班,过年的时候,瞄了一眼他手下那些人的年终福利,很多人都是几千几千的奖金。小云嘲笑我说,你们码农真差劲,都没有年终奖,我说&#xff0…

Linux下打印调试管理

#ifndef _DEBUG_MANAGE_H_ #define _DEBUG_MANAGE_H_/* 信息的调试级别,数值起小级别越高 */ #define APP_EMERG "<0>" /* system is unusable */ #define APP_ALERT "<1>" /* action must be taken immediately */ #define APP_CRIT …

未来十大技能职场吃香

一个人掌握何种技能取决于他的兴趣、能力和聪明程度&#xff0c;也取决于他所能支配的资源以及制定的事业目标&#xff0c;拥有过硬技能的人有更多的工作机会。但是&#xff0c;由于经济发展前景不确定&#xff0c;掌握对你的事业有所帮助的技能显得尤为重要。相关网站通过多年…

linux学习一个服务(未完)

学习一个服务的过程 1.了解服务的作用&#xff1a;名字 功能&#xff0c;特点 2.安装 3.配置文件位置&#xff0c;端口 4.服务启动关闭的脚本 5.此服务的使用方法 6.修改配置文件&#xff0c;实战举例 7.排错&#xff08;从下到上&#xff0c;从内到外&#xff09; 转载于:http…

ReverseFind

函数原型&#xff1a;int ReverseFind( TCHAR ch ) const;   返回值: 返回此CString 对象中与要求的字符匹配的最后一个字符的索引&#xff1b;如果没有找到需要的字符则返回-1。   参数: ch 要搜索的字符。   说明:此成员函数在此CString 对象中搜索与一个子串匹配的最后…

Qt值得学习吗?详解Qt的几种开发方式

qt值得学习吗&#xff1f;嵌入式要学的东西真的很多&#xff0c;我们可能会说不写界面的话就不用学qt了&#xff1f;我不赞同。Qt的实现主要是采用p-impl手法&#xff0c;实现接口与实现分离&#xff0c;它有很好的消息循环机制&#xff0c;有的对象与线程的相关性&#xff0c;…

技术QA:如何安装并启用BITS和WebDAV?

引子&#xff1a; 在安装SCCM 2007 SP1时&#xff0c;必须要安装并启用BITS和WebDAV&#xff0c;否则在SCCM 2007 SP1安装先决条件检查时将会报错。它们以前都是IIS的功能组件&#xff0c;但是在IIS 7中变动很大&#xff0c;特别是在 Windows Server 2008 操作系统中现在已经不…

Linux下XPath对xml解析

#ifndef CONF_XML_H #define CONF_XML_H // xml文件Z在《Linux下获取xml调试信息等级》里有 #include <stdio.h> #include <string.h> #include <unistd.h> #include <assert.h>#include <libxml/parser.h> #include <libxml/tree.h> #inc…

LEFT函数

LEFT函数 函数执行成功时返回string字符串左边n个字符&#xff0c;发生错误时返回空字符串&#xff08;""&#xff09;。如果任何参数的值为NULL&#xff0c;Left()函数返回NULL。如果n的值大于string字符串的长度&#xff0c;那么Left()函数返回整个string字符串&a…

一个操作系统的实现(3)

文件系统 文件系统是建立在硬盘上的一个程序&#xff0c;所以由2部分组成&#xff1a;驱动和管理文件系统的进程FS。 首先看一下驱动是如何工作的&#xff1a; 通常&#xff0c;主板上面有2个IDE插槽&#xff0c;分别叫做IDE0/IDE1。每个IDE通道又可以接2个设备。驱动进程的目的…

C语言,谁都能看得懂的归并排序

喜欢看排序算法动态效果的&#xff0c;可以看看这个网站https://visualgo.net/zh/sorting里面很多算法的动画解释&#xff0c;可以看到算法的排序效果&#xff0c;而且还附带了伪代码的实现过程。本来想录制几张动图放上来&#xff0c;但是因为图片较大&#xff0c;传不上来&am…

一份详细的服务器安全解决方案

一、操作系统配置 1.安装操作系统(NTFS分区)后&#xff0c;装杀毒软件&#xff0c;我选用的是卡巴。 2.安装系统补丁。扫描漏洞全面杀毒 3.删除Windows Server 2003默认共享 首先编写如下内容的批处理文件&#xff1a; echo off net share C$ /del net share D$ /del net …

GetModuleFileName

GetModuleFileName 获取当前进程已加载模块的文件的完整路径&#xff0c;该模块必须由当前进程加载。如果想要获取另一个已加载模块的文件路径&#xff0c;可以使用GetModuleFileNameEx函数。 声明GetModuleFileName(VB) Declare Function GetModuleFileName Lib “kernel32”…

jQuery load() 中文乱码

1、使用editplus创建了demo.txt (ANSI保存的)&#xff0c; $("#div1").load("demo.txt");//div显示中文乱码--->html5中定义<meta charset"utf-8"/>,编码解码不一致造成中文乱码&#xff0c;将文本文件demo.txt另存为utf-8格式&#xf…

内核链表list.h文件剖析

内核链表list.h文件剖析 一、内核链表的结构【双向循环链表】 内核链表的好主要体现为两点&#xff0c;1是可扩展性&#xff0c;2是封装。可以将内核链表复用到用户态编程中&#xff0c;以后在用户态下编程就不需要写一些关于链表的代码了&#xff0c;直接将内核中list.h中的代…

CAN总线很难吗?CAN总线看不懂是不可能的!

CAN&#xff08;Controller Area Network&#xff09;即控制器局域网&#xff0c;是一种能够实现分布式实时控制的串行通信网络。想到CAN就要想到德国的Bosch公司&#xff0c;因为CAN就是这个公司开发的&#xff08;和Intel&#xff09;CAN有很多优秀的特点&#xff0c;使得它能…

GetDlgItem

GetDlgItemText() GetDlgItemText是C中的函数&#xff0c;调用这个函数以获得与对话框中的控件相关的标题或文本。GetDlgItemText成员函数将文本拷贝到lpStr指向的位置并返回拷贝的字节的数目。 函数说明 CWnd类的成员函数。 函数原型 int GetDlgItemText( HWND hDlg , int n…

开放课程管理系统(Moodle)的介绍(转)

一、虚拟学习环境 关于虚拟学习环境&#xff0c;很难用一个简单的定义来描述。可以说是&#xff0c;支持和管理教与学的各项活动的基于网络的环境。也可以认为是学习管理系统的组成部分。当应用于远程教育时&#xff0c;通常认为它包括“任何用于创造一个统一的、类似于面对面的…