基于单片机的智能照明控制系统设计 下载本文

所有标志位清零。

AF:定闹中断标志位,只读,AF为1表明现在时间与定闹时间匹配。 UF:更新周期结束标志位。UF为1表明更新周期结束。 BIAT0~BIT3:寄存器C未用状态位,读出总为0,不能写入。 (4)寄存器D

表2-6 寄存器D功能表

BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 VRT 0 0 0 0 0 0 0 VRT:内部锂电池状态位,平时应总读出1,如出现0,表明内部锂电池耗尽。 BIT0~BIT6:寄存器D未用状态位,读出总为0,不能写入。 2.8.4 DS12887初始化程序 #define uchar unsigned char #define uint unsigned int #include #include #include #include #include #include #include

#define P128870 XBYTE[0x4000] #define P128871 XBYTE[0x4001] #define P128872 XBYTE[0x4002] #define P128873 XBYTE[0x4003] #define P128874 XBYTE[0x4004] #define P128875 XBYTE[0x4005] #define P128876 XBYTE[0x4006] #define P128877 XBYTE[0x4007] #define P128878 XBYTE[0x4008]

#define P128879 XBYTE[0x4009] #define P12887a XBYTE[0x400a] #define P12887b XBYTE[0x400b] #define P12887c XBYTE[0x400c] #define P12887d XBYTE[0x400d] #define P12887e XBYTE[0x400e] #define P12887f XBYTE[0x400f] void setup12887(uchar *p); void read12887(uchar *p); void start12887(void);

void setup12887(uchar *p) //设置系统时间 { uchar i; i=P12887d;

P12887a=0x70; P12887b=0xa2; P128870=*p++; P128871=0xff; P128872=*p++; P128873=0xff; P128874=*p++; P128875=0xff; P128876=*p++; P128877=*p++; P128878=*p++; P128879=*p++; P12887b=0x22; P12887a=0x20; i=P12887c; }

void read12887(uchar *p) //读取系统时间 { uchar a;

do{ a=P12887a; } while((a&0x80)==0x80);

*p++=P128870; *p++=P128872; *p++=P128874; *p++=P128876; *p++=P128877; *p++=P128878; *p++=P128879; }

void start12887(void) //启动时钟 { uchar i;

i=P12887d;

P12887a=0x70; P12887b=0xa2; P128871=0xff; P128873=0xff; P128875=0xff; P12887b=0x22; P12887a=0x20; i=P12887c; }

void Stop_calendar(void) {

REG_A=0x70; }

2.9 输出驱动电路设计

单片机输出控制信号电路如图2-20所示,由P2.0和P2.1口输出的控制信号来实现室内灯光的控制功能。

当P2.0口输出的是“0”电平时,则由Q1、Q2两个三极管组成的信号放大电路就被截止,则继电器回路中无电流,所以,继电器线圈无法工作,使得继电器开关触点断开,电灯回路不通,电灯不亮,反之,当P2.0口输出的是“0”信号时,则由Q1、Q2两个三极管组成的信号放大电路就导通了,则继电器线圈工作,使得继电器触点闭合,电灯回路导通,电灯亮了。

图2-20 输出控制电路

当P2.1口输出的是“0“电平时,三极管Q3截止,发光LED管电路不导通,发光LED管不亮,反之,发光LED管则亮。该发光LED管作为系统的故障提示灯来使用。该P2.1口有四种信号状态并对应不同的用户提示信息,即常“1”(正常):开启室内照明电器。常“0”(正常):关闭室内照明电器。

间隙1秒“0”、“1”信号交替(故障):系统密码不对,重新输入密码。 间隙2秒“0”、“1”信号交替(故障):控制器硬件有故障,请更换控制器。 2.10 延时时间选择电路

系统在A T89C51 的P1 中设置了延时时间选择电路,其目的是在环境光照较弱时,照明设备延时一段时间后自动熄灭。电路通过P1. 0~ P1. 3 设置4 个延时时间,当P1. 0~ P3. 0 无开关闭合时,系统按初始值进行延时;当P1. 0~P1. 3 有开关闭合时,程序从P1. 3~P1. 0 进行检测,若检测到某一端口为低电平时,则系统按当前端口设置的值进行延时。设置时间关系值如表2-7所示

表2-7 端口时间设置表

2.11 零点检测与可控硅控制电路的设计

这部分电路的设计采用单片机的I/O口灌电流的方法控制可控硅实现开关与调光控制,用光电耦合器M0C3021作为可控硅的驱动器,同时实现强、弱电的隔离。光电耦合器M0C3021通过一个非门与89C2051的P3.7口连接,当此脚输出高电平时,将会封锁住MOC3021,使双向可控硅BT131不导通,这样就会使照明灯关闭;当P3.7脚输出低电平时,使光电耦合器MOC3021打开驱动双向可控硅,从而将双向可控硅触发导通,这样就开启了所要控制的照明灯。对于照明灯的亮度调节,这里采用PWM(Pulse Width Modulation)方式,即脉冲宽度调制的简称,PWM是一种周期一定而高低电平的占空比可以调制的方波信号,当输出脉冲周期一定时,输出脉冲的占空比越大相对应的输出有效电压越大。在一个周期内的脉冲宽度(导通时间)为T1,周期为T,波形如图2-21所示。

T1TT2图2-21 脉冲波形图

则输出电压的平均值为: U=VCC3T1/T=αVCC

其中α=T1/T(正脉冲的持续时间与脉冲周期的比值)称为占空比,α的变化范围为0≤α≤1,VCC为电源电压。

当电源电压VCC不变的情况下,输出电压的平均值U取决与占空比α的大小,改变α的大小就可以改变输出电压的平均值,这就是PWM的工作原理。灯泡的亮度与加在灯泡两端的电压成比例,而灯泡两端的电压与可控硅的导通角成比例,这样通过调节PWM信号的占空比来控制可控硅的导通角。因此占空比越大,灯泡就越亮,当占空比α=1时,灯泡的亮度最高。

由于89C2051单片机没有PWM信号输出功能,所以在这里采用单片机定时器配合软件的方法来实现PWM信号的输出。

使用PWM方法进行可控硅控制时,调制频率不能低于市电频率,因为当频率低于50Hz时,超过了人眼视觉暂留效应,用于调光将产生闪烁的现象。当调制频率大于市电频率,可控硅将处于连续导通状态而不能达到调压的目的,因此必须使用过零检测作为触发可控硅的基点。在本系统中所使用的过零检测电路如图3.2所示,先由一个变压器将市电电压转换成10V左右的电压,经过整流、稳压后可作为系统工作电源,同时将变压器次级的同名端引出一根线连接到比较器LM311的正输入端,用以检测交流电的过零点,然后将过零信号送给单片机的P1.3口上。当检测到交流电的过零点时,就去触发双向可控硅,同时通过PWM信号的输出控制双向可控硅的导通时间,最终达到控制灯泡亮度的目的。

2.12 数字可调光电子镇流器

由于荧光灯既不能调节功率,也不能自动点亮,所以荧光灯不能直接与电源连接,镇流器可确保灯管预热后产生足够的电压点亮灯管,并保证放电电流得以控制