基于AT89C2051单片机三路分段开关的设计与制作
扫描二维码
随时随地手机看文章
分段开关是一种节能电子产品,在只有两根电源线的情况应用它可对具有多盏灯泡、日光灯、节能灯的灯具进行分组控制,避免照明电路重新布线之苦。常见的分段开关用—位开关控制,通过开关不同的次数产生不同的亮灯状态。这种控制方式有两个缺陷:一是控制过程中灯泡被不断的开关,由于灯泡、日光灯、节能灯的使用寿命跟开关次数有很大的关系,这种方式很容易造成损坏;二是使用比较麻烦,假如灯具中有三组灯,必须开关四次才能打开所有的灯。下面介绍一种用单片机设计的三路分段开关,控制面板上使用一只开关和三只按钮,打开开关后只要按动不同的按钮就能控制不同的灯组,三组灯具独立控制,具有使用直观方便的特点。
一、电路工作原理
分段开关由控制面板和接收控制器两部分组成,控制面板装在开关盒上,接收控制器装在灯具上。控制面板和接收控制器用两根电源线连接。’控制信号采用电力载波的方式,通过电源线传输,为了防止50Hz交流电源的干扰,便于分离,使用100kHz高频脉冲信号作为控制信号。为了简化电路,采用对脉冲计数的方式区分不同的控制信号。
1、控制面板电路
控制面板主要产生不同的控制信号以控制不同的灯组。
电路见下图。IC1中的与非门A1、A2及电阻R1~R4、电容C1~C3等组成延时电路。下面以按下S1为例说明其工作原理:当S1没有按下时,A1的输入端为低电平,所以经两次反相后A2也输出低电平;当S1按下时,由于C1上的电压不能突变,A1的输入端为高电平,A2也输出高电平,此后C1经R4充电两端的电压逐渐上升,A1输入端的电位逐渐下降,当电位下降到VDD/2即4.5V以下时,A2的输出由高电平转换为低电平。这样当分别按下按钮S1NS3时,A2输出端分别产生脉冲宽度为15mS、23mS、34mS三种不同的单次正脉冲信号,分别作为多谐振荡器的控制信号。与非门A1、A2、电阻R5、R6、电容C5等组成多谐振荡器,振荡频率约100kHz,当A2输出高电平时多谐振荡器工作,A4输出100kHz的脉冲信号。由于其输出脉冲信号的个数受A2输出的高电平的时间控制,因此按下S1~S3中不同的按钮,A4就能输出不同的脉冲个数,对应的脉冲个数分别约为1500、2300、3400。三极管VTl、高频变压器T1等组成输出电路,把A4输出的脉冲信号经VT1放大后通过C8输送到电源线上。L1是高频扼流电感器,它可以防止100kHz的脉冲信号被其它用电设备短路,也能防止其对外产生干扰信号。
C7、VD2、VD3、C6等组成电容降压式电源电路,其中经稳压二极管VD1稳压的9V电源供IC1使用。
2、接收控制器电路
接收控制器电路见图2。电路由接收电路、单片机电路和电源电路等部分组成。
R1、C1组成单片机的复位电路,接通电源后单片机AT89C2051的复位端1脚获得一个高电平复位脉冲,使得单片机进入程序所设定的初始状态,其引脚P1.0输出高电平,P1~1、P1.2输出低电平,三极管VTl导通,VT2、VT3截止,使得继电器K1吸合,K2、K3处于释放状态,这样当打开控制面板上开关S4后第一组灯点亮,其它两组灯均熄灭。使用时一般将常用的一组灯接在K1的控制触点上。
C4、T1、\/T1等组成输入信号处理电路,C4.起到隔离50Hz交流信号的作用,为了提高抗干扰能力,VT1没有加直流偏置电压,其集电极输出的幅度为5V的脉冲信号通过单片机P3.4脚输入给单片机进行处理。单片机根据输入的脉冲信号的个数决定改变引脚P1.0~P1.2的工作状态,具体的说就是1500个左右的脉冲信号对应P1.0,2300个左右的脉冲信号对应P1.1,3400个左右的脉冲信号对应P1.2。
下面以第二路为例说明电路的工作过程,接通电源后,按一下按钮S2,则单片机的P1.1端由低电平转换为高电平,继电器K2吸合,对应的常开触点k2闭合接通相应的灯组,再按一下S2则单片机的P1.1端由高电平转换为低电平,关闭对应的灯组。其余两路的工作过程以此类推。当控制某一路的工作状态时,其它两路的工作状态不受影响,即每一路均可独立控制。
C5、VD4~VD8、IC2等组成电容降压式电源电路,提供+12V和+5V电源。电路中L1的作用和控制面板电路中的L1相同。
二、程序介绍
程序采用C语言编写,将定时器TO设定为计数器,P3.4脚作计数脉冲的输入端。定时器T0对输入的脉冲信号进行计数,通过对脉冲数量的判断就能知道控制面板上按下了那一个开关,从而改变相应的继电器的工作状态。
程序清单如下:
#include
unsignedchari,DelayTime;
unsignedintn:
sbitP1_O=p1^0;
sbitP1_1=P1^1;
sbitP1_2=P1^2;
sbitP3_4=P3^4;
voiddelay(DdayTime)//延时子程序
{
for(;DelayTime>0;DelayTime——)
{
for(i=0;i<250;i++);
}
}
voiDMAin(void)//主程序
{
P1_0=1;
P1_1=O;
P1_2=0;
TMOD=0x05;
//定时器TO工作于方式1计数
TH0=0;
TL0=O:
TRO=1://开定时器TO
for(;;)
{
while(P3_4=1);//判断有没有
输入脉冲
TR0=1://开定时器TO
delay(50);
//延时50mS,让定时器TO计数
TRO=O://关定时器TO
n=TL0ㄧ(TH0<<8);//取计数值
TH0=0;
TLO=O:
if(n>1300&&n<1700)//若脉
中个数为1500左右
P10=!P10://P1.O输
出电平取反
elseif(n>2000&&n<2600)//若
脉冲个数为2300左右
P1_1=!P1_1;//P1.1输
出电平取反
elseif(n>3000&&n<3800)//若
脉冲个数为3400左右
P1_2=!P1_2;//P1.2输
出电平取反
}
}
程序中“while(P3_4==1):”检测P3.4脚是否为高电平,在控制面板没有发出脉冲信号时P3.4脚始终为高电平,程序处于等待状态;一旦发出脉冲信号后P3.4.脚就会出现低电平,程序检测到后即向下执行,定时器T0对P3.4脚输入的脉冲信号进行计数。由于控制面板发送控制信号最长的持续时间为34mS,因此这里选用50mS的时间让定时器TO进行计数,保证脉冲信号不丢失。计数结束后程序对计数值进行筛选,由于控制面板采用了RC振荡器,其频率稳定性较差,为了提高电路工作的可靠性,在筛选时允许脉冲信号的个数有一定的误差。
三、安装和调试
控制面板中IC1选用CMOS与非门集成电路CD4011,电容C1、C2、C3、C5选用稳定性较好的涤纶电容器,以保证电路的稳定性。S1~S4选用轻触按钮开关。电感器L1磁芯使用E16的铁氧体磁芯,用巾φ0.41的漆包线绕100T,高频变压器T1使用E1 3的铁氧体磁芯,用φ0.19的漆包线初级绕200T,次级绕50T。
接收控制器中IC1用ATMEL公司的AT89C2051单片机集成电路,IC2用小功率三端稳压集成电路78L05。X1用12MHz的石英晶体。VD1~VD7用整流二极管1N4004,VT1用三极管2SC945,VT2~VT4用三极管2SCl815。继电器K1~K3用型号为HRS1-S、12VDC的继电器,其触点负荷为3A120/220VAC。
电感器L1控制面板中的L1参数一样,高频变压器T1使用E13的铁氧体磁芯,用φ0.19的漆包线初、次级均绕100T。。
安装前用编程器将编译好的目标文件switch.hex写入AT89C2051芯片。
安装完成后的调试工作主要是调整控制面板的延时时间和多谐振荡器的振荡频率,调试时打开控制面板的电源开关S4,然后依次按动按钮开关S1、S2、S3,看接收控制器中相应的继电器有没有的动作,如果都没有反映,在电路没有问题的情况下,可能是控制面板的输出频率误差较大,适当整电路中R6或C5的参数即可解决问题,有条件的话可用频率计测量A4的输出频率,把A1的输入端和+9V用导线连接即可进行测量。在这之后如果有某一个按钮开关按下没有反映,说明这一路延时误差较大,可改变其相应的延时电容器的容量。最后依次按动发射机的三个按钮S1~S3,如果对应的三路继电器的工作状态均能发生变化的话,调试工作就完成了。