搜索
bottom↓
回复: 17

用AT89C2051做的保护电路(含源码)

[复制链接]

出0入0汤圆

发表于 2010-8-17 16:21:00 | 显示全部楼层 |阅读模式
现在的AT89C2051单片机极其便宜,淘宝上不到2元钱,里面带一个比较器,因此利用它来做保护电路性价比不错

保护电路实现如下功能
1.直流检测
  保护电路要检测正负窗口电压,但现在是在单电源下,如果要另外加DC检测,就失去了电路的简洁性,所以设计了如下单电源下的DC检测电路,只需一只单电源的比较器即可

单电源 正负窗口电压比较器 (原文件名:1.png)

AT89C2051里面的比较器也是单电源的比较器,其输入电压可以等于地电平,因此用在这里很合适。
  当输入电压为0时,两个二极管都不通,比较器负输入端电压为820K/39K分压,大概为0.22V,正输入端为0,因此比较器出0
  正电平检测闸值为二极管导通电压+0.22V,仿真大约是0.75V
  而负电平检测时,此时D1不通,比较器+输入端电压约为0,但-输入端为+0.22V,此时只要输入端电压小于一定程度,D2会导通,会将-输入端的电压拉低,直到为负的电压,此时比较器反转。仿真大约是-0.55V触发。

2.交流断电检测
这里交流检测是检测交流过零脉冲,检测电路由光耦组成,交流电是50Hz,因此光耦每20mS会导通,产生一个中断脉冲,MCU用这个脉冲复位定时器。
一旦在50mS内检测不到交流的脉冲,程序就认为是掉电了,就将继电器断开。

3.延时
任何故障排除后,都延时9秒左右时间才将继电器吸合。

4.外接扩充信号控制
用于扩展其功能,例如过流保护等等。。。

5.报警显示
在故障状态(交流断电、DC保护、外接信号有效)时,故障灯闪烁
在排除了故障后,正常灯会闪烁一段时间,然后才将继电器吸合,并正常灯常亮。

电路图如下:

原理图 (原文件名:2.gif)

源码如下,
#include <AT89X51.h>
#define FLASHTIME                6000                //闪烁计时
#define DELAYTIME                100000L          //延时时间
#define H_50mS                22                  //看门狗定时时间,时钟14.318M,大约延时50mS,即超过2个50HZ交流周期。
#define L_50mS                0                                
//(65535-22*256)*12/14.318MHz=50.2ms   

#define OK_STATE                0                     //正常状态
#define DELAY_STATE                1                   //正常,但在延时状态
#define FAULT_STATE                2             //故障状态

#define RELAY                P1_5               //驱动继电器,0--》继电器吸合           
#define RLED                P1_6               //故障灯   0-》亮
#define GLED                P1_7                //正常灯  0--》亮

#define ProtectLine                P3_5      //外接其他信号
#define AC_LINE                P3_2        //交流信号检测,接在int0端子
#define DCProtect                P3_6     //AT2051内部比较器接在P3.6口的。


unsigned char state;            
long DelayCount;                           //延时计数器
unsigned int FlashCount;           //闪烁计数器
bit AC_OK;                                //交流电正常标志

//市电交流过零时触发int0,中断程序重新初始化定时器0,
//因为定时器0是50ms才中断,但50Hz交流电周期是20mS,如果市电正常的话,那么定时器0永远不会产生计数溢出。
void Int0_int(void) interrupt 0
{
  EA=0;
  AC_OK=1;
  TH0=H_50mS;
TL0=L_50mS;
EA=1;
}
//定时器0溢出中断,用于设置交流断电标志。
void Time0_int(void) interrupt 1
{
  AC_OK=0;
  TH0=H_50mS;
TL0=L_50mS;
}

void main(void)
{
TMOD|=0x1;
TH0=H_50mS;
TL0=L_50mS;
state=DELAY_STATE;
DelayCount=0;
AC_OK=1;
RELAY=1;
TR0=1;
ET0=1;
IT0=1;
EX0=1;
EA=1;
for(; ;)
        {
         if (AC_OK==0 || ProtectLine==0 || DCProtect ==1)
                {state=FAULT_STATE;             //故障状态
                 RELAY=1;                 //继电器释放
                 GLED=1;                 //绿色LED灭
                 FlashCount++;     //红色LED闪烁
                 if (FlashCount>FLASHTIME)
                         {RLED=!RLED;
                         FlashCount=0;
                        }
                }
         else
                 {if (state==FAULT_STATE)                   //如果刚才是故障状态,但现在已正常,那么进入延时状态
                         {state=DELAY_STATE;
                          DelayCount=0;
                         }
                 if (state==DELAY_STATE)
                         {DelayCount++;                 //延时计数器计数,计数结束才进入正常状态
                         if (DelayCount>DELAYTIME)
                                 state=OK_STATE;
                        }
                 if (state==OK_STATE)
                         {RELAY=0;                      //正常状态 ,继电器吸合
                         GLED=0;                //绿色亮
                         RLED=1;             //红色灭
                        }
                else
                        {RELAY=1;                    //延时状态  继电器释放
                         RLED=1;                 //红色灭
                         FlashCount++;               //绿色闪
                         if (FlashCount>FLASHTIME)
                                 {GLED=!GLED;
                                 FlashCount=0;
                                }
                        }
                }
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-7-29 21:09:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-29 21:25:25 | 显示全部楼层
zuo ge ji hao.

出0入0汤圆

发表于 2011-7-29 22:53:51 | 显示全部楼层
我对这个东东不是太了解。。。。

出0入0汤圆

发表于 2011-7-30 09:17:40 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2011-8-16 13:11:12 | 显示全部楼层
喇叭保护电路的功能包括
1.直流电平检测,核心就是一个窗口检测电路,检测输入电压大于+0.6V或者小于-0.6V,
2.开机延时




我这个帖子主要新颖之处充分利用at2051内部资源。
因为一般窗口检测电路需要2个比较器、并且需要正负双电源供电,我这电路直接使用at2051内部单电源比较器,通过外接一些二极管构成正负0.6V的窗口比较器,并且无需双电源供电。

开机延时保护则利用光耦检测交流信号,如果存在交流信号说明通电中,并且利用mcu内部定时器进行延时保护。

出0入0汤圆

发表于 2011-8-16 19:54:33 | 显示全部楼层
那么夸张啊!弄个简单的保护电路还搞个单片机出来!

模拟电路完全可以代替了啊!成本还更低呢/

不过这个用来学习还是不错的。

出0入0汤圆

发表于 2011-8-16 22:05:40 | 显示全部楼层
单电源正负窗口电压比较器,交流检测.MARK!

出0入0汤圆

 楼主| 发表于 2011-8-17 23:25:30 | 显示全部楼层
其实这帖子放到"零件线路"好一点,
因为这贴子的主要特点就是7楼说的"单电源正负窗口电压比较器,交流检测"
而程序部分,稍稍熟悉单片机资源的人都可以写出来。

出0入0汤圆

发表于 2011-8-19 23:22:41 | 显示全部楼层
不错好东西!

出0入0汤圆

发表于 2012-12-25 11:06:25 | 显示全部楼层
用来学习还是不错的

出0入0汤圆

发表于 2012-12-25 11:42:19 | 显示全部楼层
学学更健康~~

出0入0汤圆

发表于 2012-12-25 21:51:13 | 显示全部楼层
不错,好东西

出0入0汤圆

发表于 2013-11-2 22:43:16 | 显示全部楼层

出0入0汤圆

发表于 2013-11-3 07:30:07 | 显示全部楼层
hao,mark...

出0入0汤圆

发表于 2013-11-4 21:37:41 | 显示全部楼层
输入端能采用线性光耦隔离吗,想用于交流电的过流

出0入0汤圆

发表于 2015-7-3 11:08:24 | 显示全部楼层
也来试试,谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-11 10:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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