三相电源断相与相序保护器设计说明书要点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三相电源断相与相序保护器设计
摘要
三相电源在我们的生活中扮演着一个极其重要的角色,并且运用的地方多于大功率仪器设备上,在原来的传统工业控制中,是由外部电源相序接线的准确性来控制,这样对操作者有较高的要求。
为了降低操作者的要求,因此一个缺相与相序保护继电器对于三相电源来说作用是相当大的,三相电源保护继电器的核心是通过单片机编程对三相电检测是否有缺相、错相问题来对电机进行及时的保护。
首先要对三相电源的断相、错相问题故障进行分析,并结合PIC12F675单片机编程的功能,找出可靠性高、实施性强的保护方案,同时通过发光二级管来反馈给使用者所需要的信息。
有了保护继电器就可以避免三相电源一些不必要的损失,不仅降低了操作者的要求,同时也减少了很多的物力人力,具有十分重要的意义!
关键词:三相电源,断相检测,错相检测,继电器
目录
摘要 (I)
第1章绪论 (1)
1.1 三相电源简介 (1)
1.2 本课题的主要内容 (2)
1.3 工作原理图 (2)
第2章硬件电路设计与实现 (3)
2.1 方案的设计 (3)
2.2 电源模块设计 (5)
2.3电压采样及其电路设计 (6)
2.4 PIC12F675单片机的介绍 (7)
第3章软件设计 (10)
3.1 主程序设计 (10)
3.2 断相检测部分 (11)
3.3 相序检测部分 (12)
第4章系统制作与调试 (13)
4.1 元器件清单 (13)
4.2 硬件与软件调试 (14)
第5章总结与体会 (15)
致谢 (16)
参考文献 (17)
附录 (18)
附录A 原理图 (18)
附录B 程序 (18)
附录C PCB图 (33)
附录D 实物图 (34)
第1章绪论
1.1 三相电源简介
三相交流电是电能的一种输送形式,简称为三相电。
三相交流电源,是由三个频率相同、振幅相等、相位依次互差120°的交流电势组成的电源。
三相交流电的用途很多,工业中大部分的交流用电设备,例如电动机,都采用三相交流电,也就是经常提到的三相四线制。
而在日常生活中,多使用单相电源,也称为照明电。
当采用照明电供电时,使用三相电其中的一相对用电设备供电,例如家用电器,而另外一根线是三相四线之中的第四根线,也就是其中的零线,该零线从三相电的中性点引出。
“三相电”的概念是:线圈在磁场中旋转时,导线切割磁场线会产生感应电动势,它的变化规律可用正弦曲线表示。
如果我们取三个线圈,将它们在空间位置上相差点120度角,三个线圈仍旧在磁场中以相同速度旋转,一定会感应出三个频率相同的感应电动势。
由于三个线圈在空间位置相差点120度角,故产生的电流亦是三相正弦变化,称为三相正弦交流电。
工业用电采用三相电,如三相交流电动机等。
任两相之间的电压都是380V AC,任一相的对地电压都是220V AC。
分为A相,B相,C相,线路上用L1,L2,L3来表示。
能产生幅值相等、频率相等、相位互差120°电势的发电机称为三相发电机;以三相发电机作为电源,称为三相电源;以三相电源供电的电路,称为三相电路。
U、V、W称为三相,相与相之间的电压是线电压,电压为380V。
相与中线之间称为相电压,电压是220V。
三相电的相位关系图如图1-1所示:
图1-1 三相电的相位关系图
1.2 本课题的主要内容
本课题的主要任务是设计一个三相电保护继电器,该保护继电器能够起到对缺相、错相等主要电气故障进行保护的功能,具有故障检测、故障识别、故障指示等,当检测发现缺相故障、相序错误时,继电器工作。
由于采用了多种软件、硬件的抗干扰措施,该新型的保护继电器工作非常可靠。
1.3 工作原理图
虽然三相电源断相与相序保护器就有好多不同的设计方案,如何选择就是根据不同的工作电路图来确定不同的设计方案,而本课题选择的是当电路中出现缺相或错相时,保护继电器能识别和指示。
其工作原理图如图1-2所示:
图1-2 三相电保护继电器工作原理图
第2章硬件电路设计与实现
2.1 方案的设计
设计的三相电保护继电器整个系统是由硬件和软件组成,硬件是整个系统的载体,而软件是系统的控制中心。
根据工作原理图可以设计出不同的方案,如方案一:来自三相交流电源的三相交流信号经过采样电路降压处理后,变为直流电压送给断相与相序鉴别电路。
方案二:来自三相交流电源的三相交流信号经过采样电路降压处理,输出三相电分别经过三组比较器后送给断相与相序鉴别电路。
方案三:来自三相交流电源的三相交流信号经过采样电路降压处理后,电压电流同时送给断相与相序鉴别电路,这是最保险的但也是不好操作的方案。
而我用的方案系统的基本组成如图2-1所示:
图2-1 系统的基本组成图
从系统的基本组成图就可看出电压/电流采样是整个系统的关键,只有采样出的数据才能让单片机PIC12F675芯片识别处理。
不然就无法进行下去,不能判断出是断相还是错相引起的问题。
怎么知道电路中是否出现了断相和相序的问题?这个问题牵扯着一个方案的设计,选择不同的方案就有不同的解决办法,而我所用的方案是当电压/电流
采样过后,根据所给的一组数据(由‘0’和‘1’组成)比较,如果得到的数据与设定的数据一样,说明相序正确;如果得到的数据与设定的数据不同,就判断是断相引起的还是缺相引起的问题。
如何准确无误的判断出是断相还是错相呢?当三相交流电源A、B、C 经降压模块处理后输出三相交流电a、b、c,分别经过三组比较器后,在输出端a、b、c三点可以得到对应于交流电源的三组方波,各点波形如图2-2所示:
图2-2 波形图
同一时刻读取a 、b、c 三点的状态,就可获得一组数据;同样,把三组交
流电源A、B、C 作各种不同状态组合,同时读取各点的状态,也能得到一组组编码,把这些编码列成表,如表1所示:
表1 各组编码列表
通过上述的分析过程,对各种状态下的编码进行组合、比较,可以发现它们之间的规律:相序正常(为ABC)时,编码110011101 重复出现;错相时, 编码为110101011;若断相时,既不能得到110011101的编码,也不能得到110101011 的编码,这就为我们正确处理断相与错相提供了理论依据。
2.2 电源模块设计
保护系统是否稳定、可靠的工作,电源的设计是非常重要的,其实质是为
单片机系统提供稳定的直流供电电压,本设计所需芯片PIC12F675的电源为+5V,因此设计了由集成稳压块7805组成的供电电路。
在电路中使用的7805稳压块有输入端、输出端和公共端,在芯片内部有过流、过热保护以及调整管安全保护电路。
其所需的外部元件少、不需外接元件调整,使用方便、安全可靠,输出稳定性高而广泛用于各种电子设备中,可以作为电压稳定器。
这个电路给系统提供稳定的直流电压,集成稳压块的作用是把非稳定的直流电压变换成稳定的直流电压。
该电源电路有变压器,桥式整流器,滤波电容和三端稳压管7805组成,其工作原理是先通过变压器降压把原来的380V降为9V,然后通过桥式电路整流再通过滤波电容输入到三端稳压管7805,然后在通过滤波输出+5V电压提供芯片使用。
电容主要起到滤波和减少脉动成分的作用。
该电路经实验证明,具有结构简单、经济、实用等特点。
该电源电路如图2-3所示:
图2-3 电源电路图
2.3电压采样及其电路设计
根据三相电的特性得知三相电压的相位差为120度。
三相电的顺序是UV—VW—WU的顺序,当U相电压最大,由下图可知UV导通,最上面的光耦导通,这样芯片就可以采集到这个时候的信号,同理,当V相电压U相电压最高时,芯片采集到相应的信号。
电压采样电路图如图2-4所示:
图2-4 电压采样电路图
2.4 PIC12F675单片机的介绍
PIC12F675是一款只有8个引脚的CMOS单片机如图2-5所示:
图2-5 CMOS单片机引脚图
它具有的功能是:CPU的特殊功能
单片机内部集成了某些处理实时应用所需的特殊电路,使之区别于其他处理器。
PIC12F675系列具有许多这样的功能部件,它们旨在:最大限度地提高系统可靠性;通过减少外部元器件将成本降到最低;提供节能运行模式和代码保护。
这些功能部件是:1.振荡器选择;2.复位:包括上电复位(POR),上电延时定时器(PWRT),振荡器起振定时器(OST),欠压检测(BOD);3.中断:看门狗定时器(WDT),引脚电平变化可触发中断;4.可编程代码保护。
PIC12F675配备了一个看门狗定时器,可由配置位来控制。
该定时器依靠自带的RC振荡器来运行,提高了可靠性。
有两个定时器提供必要的上电延时。
一个是振荡器起振定时器(OST),旨在确保芯片在晶振达到稳定之前始终处于复位状态。
另一个是上电延时定时器(PWRT),仅在上电时提供72ms(标称值)的固定延时,用来确保器件在供电电压稳定之前处于复位状态。
还有当器件发生欠压时使器件复位的电路,该电路可提供至少72ms 的复位延时。
片上具有了这三种功能,使绝大多数应用无需再外接复位电路。
休眠模式的设计是为了提供电流极低的掉电模式。
用户可通过以下方法将器件从休眠模式唤醒:外部复位:1.看门狗定时器唤醒;2.中断有几种振荡模式可供选择,可使器件适应各种应用。
选择INTOSC 可节约系统成本,而选择LP晶振可以节能。
本设计中的单片机采用5V电源电压,一个引脚接地,一个引脚接电源,GP3—GP5接三相电的信号输入,GP0接电位器,GP1接继电器,GP2接发光二级管。
PIC12F675单片机的各个管脚的功能说明如表2所示:
表2 管脚说明(TTL=TTL输入缓冲器,ST=施密特触发器缓冲器)
第3章软件设计
有了硬件运行平台,必须设计相应的软件才能发挥其应有的功效。
由于软件的灵活性,可以根据系统的要求随意的更改、增减,所以一个应用系统的智能化程度很大部分取决于软件的结构是否合理,功能是否全面。
本系统中的软件主要完成了系统的初始化,故障处理,中断等功能。
各功能模块主要完成对供电线路电流信号进行采样、计算输出控制信号等功能主程序的设计。
3.1 主程序设计
主程序主要完成程序初始化、参数设置、响应中断等功能。
主程序示意图如图所示,启动主程序,先进行初始化,包括定义各个引脚的输入输出方向,设置各计数器的初始值,读上次运行期间的故障整定值等。
主程序流程图如图3-1所示:
图3-1 主程序示意图
3.2 断相检测部分
缺相保护是通过检测缺相保护电路输出信号的频率来实现的。
而在实际的处理上,当进入到工作状态后,软件会对采集到的信号进行分析,计算得出三相电是否存在缺相的情况,然后对缺相故障进行分析,作出相对应的分析处理。
断相检测流程图如图3-2所示:
图3-2 断相检测流程图
3.3 相序检测部分
相序检测可通过对采集来的信号与预期值作比较,如果相符则相序正确,执行后续程序;如果不相符则设置数据无效标志,不执行后续程序。
相序检测流程图如图3-3所示:
图3-3 相序检测流程图
第4章系统制作与调试
因为是在学校做的毕业设计,所以工具和材料都比较好找,但在焊接前不仅要考虑用到的元器件,还要考虑到元器件与元器件焊在一起所发生的变化,同时还考虑布局的美观。
在焊接时把元器件按照事先画好的原理图一一焊接在电路板上,因为在此之前已经焊过很多次电路板,这次焊接对我来讲比较容易的,但也要注意是否有虚焊、漏焊及短路等问题。
4.1 元器件清单
在焊接电路板时不仅要考虑元器件的功能,还要考虑到元器件的价格,本着节约和实用的原则,我使用到的元器件清单如表3所示:
表3 元器件清单
4.2 硬件与软件调试
整个系统调试的主要思想是:先一个模块进行调试,然后整个系统一起调试。
先软硬件分开调试,然后一起调试。
遵循先部分后整体的原则。
系统在调试过程中要注意以下几点:
(1)硬件电路焊完之后,在上电之前一定要先用万用表检测电源和地之间是否短路。
(2)上电之后要用示波器观察信号在电路中变化的情况,与设计当初的情况相比较,找出差别,并进行分析。
(3)软件调试过程中可以使用断点、单步执行等常用的方法。
(4)软硬件联调时,要注意软件部分要一个功能一个功能地调试。
第5章总结与体会
当我的研究课题——三相电源断相与相序保护器设计定下来的时候,首先与指导老师进行了沟通,告诉我课题的基本要求、重难点及相关的资料。
然后着手于资料的收集工作,当面对浩瀚的书海时真是有些茫然,不知如何下手。
不过,在指导老师的多次介绍下,终于使我对自己研究的课题有了思路在搜集资料的过程中,我也同时工作了,因为做论文的时间更加少了。
搜集资料的过程中还是比较艰辛的,还在网上查找各类相关资料,将这些宝贵的资料全部记在笔记本上,尽量使我的资料完整、精确、数量多,这有利于论文的撰写。
然后我将收集到的资料仔细整理分类,及时拿给导师进行沟通,再结合之前学过的一些单片机的相关知识,我相信能够很好的完成这篇论文。
在研究设计论文中,不仅使我增长了很多课堂上所学不到的知识,而且还让我对单片机的各类芯片、三相电源的控制方式有了更深入的了解。
毕业设计收获很多,比如学会了查找相关资料相关标准,分析数据,提高了自己的绘图能力,懂得了许多经验公式的获得是前人不懈努力的结果,更让我体会到做什么事情都应该仔细认真,碰到问题的时候应该及时找资料或者找老师把问题弄清楚,这对我以后的人生阅历也是一个无比的财富!
但是毕业设计也暴露出自己专业基础的很多不足之处。
比如缺乏综合应用专业知识的能力,对各种控制器件的不了解等等。
这次设计是对自己大学三年所学的一次大检阅,使我明白自己知识还很浅薄,虽然马上要毕业了,但是自己的求学之路还很长,以后更应该在工作中学习,努力使自己成为一个对社会有所贡献的人。
通过实际应用显示,该继电器的可靠性和抗干扰都有所提高,对于电网质量较差、电源干扰严重的场合使用效果尤为明显,同时也简化了电路,降低了继电器的体积和成本。
通过验证和测试,本设计是成功的。
本次毕业设计完成了三相电保护继电器的硬件设计研发,系统达到了预期性能的要求,并对软件编程有了一定的了解,同时学到了很多新的知识,边学习边实践,使接受新知识的速度更快了,更容易接受了。
更重要的是,让我体会到了无数次的失败,无数次的步入误区,但在指导老师和同学们的帮助下又一次次的重树信心,一次次的走出误区,让我成长不少。
这些为我将来的工作都提供了宝贵的经验。
致谢
大学三年的学习生活时光已经接近尾声,在此我想对我的母校、老师和同学们表达我由衷的谢意,感谢母校浙江机电职业技术学院给了我在大学三年深造的机会,让我有机会继续学习和提高;感谢电子1034班的老师和同学们三年来的关心和鼓励。
老师们不仅在课堂上讲的激情洋溢,而且在课堂下也会教我们许多待人接物与为人处世的道理;同学们在学习中的认真热情和生活上的热心主动,所有的这些都让我充满了感动。
大学三年的求学生涯在老师同学、亲朋好友的大力支持下,走得艰辛却也收获颇多。
在论文即将完成之际,我思绪万千,心情久久不能平静。
从开始选择课题到论文的顺利完成,一直都离不开老师、同学、朋友对我的帮助,在这里请接受我诚挚的谢意!说心里话,作为一个大专生,学习到的知识和技能都是有限的,所以毕业论文是在我的指导老师---朱荔老师的亲切关怀与细心指导下完成的。
从课题的选择到论文的最终完成,朱老师始终都给予了细心的指导,希望借此机会向朱老师表示最衷心的感谢!此外,本文最终得以顺利完成,也与其他老师的帮助分不开的,虽然他们没有直接参与我的论文指导,但是给我提供了不少的意见和一系列可行性的建议,在此向他们表示深深的感谢!最后要感谢的是我的父母,他们为我能够顺利的完成学业和毕业论文都提供了巨大的支持与帮助。
在未来的日子里,我会更加努力的学习和工作,不辜负父母对我的期望!
最后再一次感谢所有在毕业设计中曾经帮助过我的良师益友和同学,以及在论文中被我引用或参考论著的作者。
历时将近两个月的时间终于将这篇论文写完,在论文的写作过程中遇到了无数的困难和障碍,都在老师和同学的帮助下度过了。
参考文献
[1]李海涛.PIC单片机应用开发典型模块[M].人民邮电出版社.2007年11月.
[2]夏敏磊.电子电路分析制作与调试[M].北京:电子工业出版社.2010年10月.
[3]鲍小南.单片微型计算机原理及应用[M].浙江大学出版社.2007年8月.
[4]张皆喜.PIC系列单片机C语言编程与应用实例[M].电子工业出版社.2008年6月.
[5]康华光.电子技术基础[M].高等教育出版社.2000年.
[6]何立民.单片机应用系统设计[M].北京航空航天大学出版社.1990年7月.
[7]江思敏姚鹏翼胡荣.Protel电路设计教程[M].清华大学出版社.2002年5月.
[8]欧伟明瞿遂春.三相交流电源相序指示与控制器[J].高压电器,2006,(1):75-76.
[9]陈代全.多功能电机保护电路[M].成都:科大出版社,2006:50.
[10]欧阳三泰欧阳希周琴.三相异步电动机电源缺相错相保护电路[J].电器应用,2005,(3):52-54.
附录
附录A原理图
附录B 程序
#define PIC12f675
#include <PIC.H>
#include "D:\Picmate\MYLIB\MYPIC.H"
#include "D:\Picmate\MYLIB\AD_ANSEL.C" //AD转换(10位)
#include "D:\Picmate\MYLIB\AD10.C" //AD转换(10位)
#include "D:\Picmate\MYLIB\DELAY.C" //AD转换(10位) __CONFIG (INTIO & CPD & PROTECT & BOREN & MCLRDIS & PWRTEN & WDTDIS);
//__CONFIG (XT & PROTECT & PWRTEN & WDTDIS);
#define JC_A GPIO5 //A,B,C三相
#define JC_B GPIO4
#define JC_C GPIO3
#define JC_AD GPIO0 //AD检测端口
(10位ad)
#define LAMP GPIO1 //灯输出
#define OUTKM GPIO2 //继电器输出
union
{
unsigned char all;
struct
{
unsigned b0: 1;
unsigned b1: 1;
unsigned b2: 1;
unsigned b3: 1;
unsigned b4: 1;
unsigned b5: 1;
unsigned b6: 1;
unsigned b7: 1;
}onebit;
}rain,flag,raout;
#define flagall flag.all
#define flaga flag.onebit.b7 //A相
#define flagb flag.onebit.b6 //B相
#define flagc flag.onebit.b5 //C相
#define flagok flag.onebit.b4 //相序正确
#define flagdx flag.onebit.b3 //B相
#define flagcx flag.onebit.b2 //C相
#define rainall rain.all
#define raoutall raout.all
#define in_a rain.onebit.b5 //A相
#define in_b rain.onebit.b4 //B相
#define in_c rain.onebit.b3 //C相
#define out_lamp raout.onebit.b1 //灯输出
#define out_km raout.onebit.b2 //继电器输出
unsigned int adval,zadval,aver,count; //AD转换次数unsigned int adbuf[8];
unsigned char COU,bc1,bc2;
unsigned char time,flagABC,lampcount; unsigned char dxcount,cxcount,lowcount,highcount;
//中断中使用unsigned int time_a;
unsigned char time_b; //刷新显示unsigned char time_1ms;
unsigned int time_sec; //一秒计时unsigned int time_sec02; //一秒计时unsigned char time_in1; //中断计时in1时间unsigned char time_in2; //中断计时in2时间unsigned char time_in3; //中断计时in3时间unsigned char time_dx;
bit secflag; //一秒标志
bit flagks; //延时开始标志
bit flagks1; //延时开始标志
bit sec05s; //0.5秒标志
bit sec02s; //0.2秒标志
bit zqflag; //周期标志
void initial (void); //初始化程序
//uint AD(unsigned char ,unsigned char);
void t100us(unsigned int);
void deal_low (void);
void lamprun (void);
void initial (void)
{
GPIO=0;
TRISIO=0X39;
VRCON=0;
CMCON=0X02;
ANSEL=0;
OPTION=0X80; //0X80
INTCON=0;
GIE=1;
ADCON0=0; //AD设置
PORTA=0; //A,B,C口初始化输出低
PORTB=0;
PORTC=0;
TRISA=0B00111001; //A,B,C口的输入输出设置 TRISB=0B11100000;
TRISC=0B00000000;
ADCON1=0X07;
INTCON=0xC0; //中断使能
PEIE=1;
GIE=1; //开中断
void tmr0set (void)
{
OPTION=0b10000001; //TMR0 1:4 分频
T0IE=1;
T0IF=0;
}
void deal_cx (void) {
unsigned char i,j; out_km=0;
if(sec02s==1)
{
sec02s=0;
if(out_lamp==0) out_lamp=1; else
out_lamp=0; }
}
void deal_dx (void) {
unsigned char i,j; out_km=0;
out_lamp=0;
t100us(2000);
}
void deal_ok (void)
{
unsigned char i,j; cxcount=0;
deal_low();
}
void deal_abc (void) {
unsigned char i,j; flagok=1;
if(flagcx==1)
{
deal_cx();
}
else if(flagok==1)
deal_ok();
}
void deal_low (void)
{
unsigned char i,j;
if(out_km==1)
{
out_km=1;
if(aver<614)
{
lowcount++;
if(lowcount>=100) {
lowcount=100;
out_km=0;
}
lamprun();
}
}
else if(out_km==0)
{
if(aver>=737)
{
highcount++;
if(highcount>=100) {
highcount=100; out_km=1;
out_lamp=1; }
}
else
{
if(out_km==1) {
out_km=1; out_lamp=1; }
else
lamprun(); }
}
}
void cx_flag (void)
{
flagcx=1;
flagok=0;
}
void dx_flag (void)
{
flagdx=1;
flagok=0;
flagcx=0;
}
void ok_flag (void)
{
flagok=1;
flagcx=0;
}
void t100us(unsigned int k) {
unsigned char i;
do
{
i=29;
t50us_1:
--i;
if(i>0) goto t50us_1;
k--;
}
while(k>0);
NOP();
}
void sort_n(uchar N)
{
unsigned int TMP=0;
uchar CYJ,CYI;
for(CYJ=N-1;CYJ>0;CYJ--)
for(CYI=1;CYI<=CYJ;CYI++)
{
NOP();
if(adbuf[CYI]>adbuf[CYI-1])
{
TMP=adbuf[CYI];
adbuf[CYI]=adbuf[CYI-1];
adbuf[CYI-1]=TMP;
}
NOP();
}
}
void AD_16()
{
//adval=AD(0X80,4); //检测AD值(RA0)
//adval=adval>>6;
adval=AD(0X81,0);
adbuf[count]=adval;
count++;
if(count>=8)
{
count=0;
sort_n(8);
zadval=adbuf[3]+adbuf[4];
aver=zadval>>1;
}
}
void lamprun (void)
{
if(sec05s==1)
{
sec05s=0;
if(out_lamp==1)
{
out_lamp=0;
}
else if(out_lamp==0)
{
out_lamp=1;
}
}
}
void main()
{
initial();
tmr0set();
flagdx=0;
raoutall=0;
for(count=10;count>0;count--) {
t100us(1000);
CLRWDT();
}
while(1)
{
AD_16();
if(aver>696)
{
highcount++;
lowcount=0;
}
else
{
lowcount++;
highcount=0;
}
if(flagdx==1)
break;
if(flagcx==1)
{
deal_cx();
}
else if(flagok==1)
{
if(highcount>=20)
{
out_km=1;
out_lamp=1;
GPIO=raoutall;
break;
}
else if(lowcount>=20) {
out_km=0;
GPIO=raoutall;
break;
}
}
//lamprun();
GPIO=raoutall;
t100us(100);
}
while(1)
{
if(flagdx==1)
{
break;
}
if(zqflag==1)
{
zqflag=0;
AD_16();
}
if(flagcx==1)
{
deal_cx();
}
else if(flagok==1)
{
cxcount=0;
deal_low();
}
GPIO=raoutall;
}
}
void interrupt isr (void)
{
if(T0IE && T0IF) //1ms delay {
T0IF=0;
TMR0=TMR0+131;
//rainall =PORTB & 0b11100000;
rainall =GPIO & 0b00111000;
nop();
COU++;
if(COU>=20)
{
COU=0;
zqflag=1;
}
if(in_a)
{
flaga=1;
time_in1++;
}
if(in_b)
{
flagb=1;
time_in2++;
}
if(in_c)
{
flagc=1;
time_in3++;
}
if(!in_a && !in_b && !in_c)
{
time_dx++;
if(time_dx>=40)
{
time_dx=40;
dx_flag();
}
}
if(time_in1>20 || time_in2>20 || time_in3>20)
{
dxcount++;
if(dxcount>=50)
{
dxcount=50;
dx_flag();
}
time_in1=time_in2=time_in3=0;
}
if(rainall!=bc2 && ((in_a && !in_b && !in_c) || (!in_a && in_b && !in_c) || (!in_a && !in_b && in_c)))
{
bc1=bc2;
bc2=rainall;
if(!in_a && in_b && !in_c)
{
if(time_in1>13 || time_in2>13 || time_in3>13)
{
dxcount++;
if(dxcount>=50)
{
dxcount=50;
dx_flag();
}
}
//else if((bc1==0X20 && bc2==0x10) || (bc1==0X10 && bc2==0x08) ||(bc1==0X08 && bc2==0x20))
else if(bc1==0X08 && bc2==0x10)
{
dxcount=0;
cxcount++;
if(cxcount>=200)
{
cxcount=200;
cx_flag();
}
}
else
{
dxcount=0;
ok_flag();
}
time_in1=0;
time_in2=0;
time_in3=0;
}
}
time_a= time_a+1024;
if(time_a>=1000)
{
time_a=time_a-1000;
time_1ms=1;
if(time_a>=1000)
{
time_a=time_a-1000;
time_1ms++;
}
time_b=time_b+time_1ms;
time_sec++;
time_sec02++;
if(time_sec>=1000)
{
time_sec=time_sec-1000;
sec05s=1;
}
if(time_sec02>=200)
{
time_sec02=time_sec02-200; sec02s=1;
}
附录C PCB图
附录D 实物图。