智能实用可编程光控器

🏠 首页 《无线电》杂志 2004年 🔗 第11期 🔗 第39页 分类:电脑与单片机 🔗 张春峰 🔗

光控有很多长处,就对照明的开关控制而言(如楼道灯,厂矿区、市区的路灯等),周围环境的光照度一旦低于或高于所设定的界限,光控就起作用。但是,也正因为其简捷灵敏,致使大多光控开关抗干扰性能差(即可靠性不高),白天偶尔一遮暗就起跳开灯、晚上偶尔一光照就起控关灯——这就使光控开关的应用大打折扣。本文介绍的是一种用单片机制作的可编程光控器,也正因为引入了单片机,使光控装置有了智能化的因素,弥补了抗干扰性能差等缺陷,提高了其功能的延展性和使用的可靠性。

电路结构

本控制装置的电路结构如图1所示。变压器TB、二极管VD3~VD6、电容C3、稳压块IC3等构成了电源电路,以输出12V及5V的稳压电源供整机用;单片机IC1和数字拨盘开关SW构成智能化的可编程控制电路;三极管VT1、VT2及继电器K1、K2构成控制执行电路;光电池LD-025作为光敏探头与电阻R6、R5、R4、电容C1、二极管VD1以及单片机内部的模拟比较器构成光照度检测比较电路。

工作原理

电路中单片机IC1是控制核心,它通过智能化的运算将检测、控制等各部分电路有机地结合起来。其中二极管VD1起钳位作用,+5V电源电压Vcc经R4、VD1使a点电位被钳位在0.5V左右,并通过R5加到IC1的P1.1端口,即单片机AT89C2051内部模拟比较器的反相输入端。光电池在不同的光照度下会产生不同的电势(强光下能产生理想值为0.7V的高电势),经电容C1缓冲后加到IC1的P1.0端口,即AT89C2051内部比较器的正相输入端,与P1.1反相输入端的电位进行模拟比较,比较的结果经单片机运算判断是开灯还是关灯。当然,单片机不会轻率地发出开灯或关灯指令,它需要经过一段时间的检测,即需要一段时间的延时(延时时间的长短可由软件程序设定,本文用中断处理设定延时时间约为35秒)才作决定。比如,由于光照变暗,P1.0端的电位低于P1.1端口的电位时,单片机内部比较器输出逻辑“0”(AT89C2051 芯片内部比较器的输出端是P3.6。P3.6端口隐藏在芯片内部,其位地址为B6,是该单片机中惟一的没有外部对应引脚的端口),单片机软件程序不断检测的这段时间里,若内部比较器输出始终保持逻辑“0”,则单片机软件程序发出开灯指令,置位端口P1.2、P1.3,使三极管VT1、VT2导通,驱动继电器动作开灯。若在一段时间里内部比较器输出并不是保持逻辑“0”,而其间有逻辑“1”输出,则说明外部连接光电池的P1.0端口上的电位有变化,那么软件将取消逻辑“1”出现前的检测累计时间,直到逻辑“0”输出后才重新开始延时检测,这样就提高了抗干扰能力,保证了只有在光照度确实很低时(而不是因偶尔遮暗)控制器才启动开灯。反之,要使控制器关灯也同样需要一番延时检测,以避免偶尔的光照(如晚上汽车开过车灯光的照射)引起误动作而关灯。

图1
图1 🔍原图 (510×653)

其实,端口P1.2和P1.3关灯信号的输出,还可由外部数字拨盘开关SW的编程来控制,通过编程可在半夜关灯,还可由软件设置天亮前再开灯。这里数字拨盘开关SW的“0”定义为无控挡,即光控启动开灯后不受编程延时控制,但仍受控于“光探头”。而“1~9”位数字定义为9个挡,每相邻两挡的编程时间间隔在本文程序中设定为1小时。当数字拨盘开关SW拨为“1”时,从开灯计时起1小时后就要关灯了(本文程序中设定P1.3口可受外部数字拨盘开关SW编程控制,而P1.2口不受外部编程控制,只有到天明光控关灯);当数字拨盘开关SW拨为“2”时,从开灯计时起2小时后就将关灯;当数字拨盘开关SW-P拨为“3”时,从开灯计时起3小时后才关灯;其他“4、5、6、7、8、9”依次类推。

附图中,与电阻R5并联的电位器RP是用来调节光控“灵敏度”的。由图可见,加到IC1单片机端口P1.1处b点的电位,实际上是VD1钳位后的a点电位经R5并联RP和P1.1端的输入阻抗分压后的电位,因此,调节电位器RP改变a、b两端的总阻值,也就可调节b点的电位,即AT89C2051内部比较器反相输入端P1.1的电位,从而调节光控起控的“灵敏度”。另外,附图中的IC2“看门狗”专用芯片X5045是为了使单片机的运行更为可靠而设置的。

软件编程

本光控装置软件设计共分3个“模块”:(1)主循环程序;(2)定时器中断服务程序;(3)“看门狗”运行程序。主循环程序主要是维持单片机的正常运行,当启动开灯后将读取拨盘开关的数据,并进行相关的运算,然后判断是否关灯。定时器中断服务子程序主要用于计时,及单片机内部比较器输出变化的延时处理——即光控信号变化的抗干扰处理。“看门狗”程序主要是使单片机自身的运行更为可靠。

本文的源程序见本期配刊光盘的“本期程序”文件夹。

(张春峰)