郑洪庆,程 蔚
(闽南理工学院,工业自动化控制技术与信息处理福建省高校重点实验室,福建 石狮362700)
随着经济的高速发展,造就了我国许多大型公共场所例如地下室、停车场等。出于对安全考虑,一般采取全天候照明模式。然而以这样的方式工作,在一定程度上造成了能源方面的极度浪费。降低照明用电是节约能源的重要途径[1]。
目前大部分地下车库的照明都是使用人工非自动化控制。这种控制方式不仅会给人们的生活带来不便,而且还会在一定程度上造成能源的损耗,尤其是在地下车库等公共场所。现研究一种基于微波感应的地下车库节能照明系统。通过控制系统对信号的一系列处理,从而实现对LED灯进行准确和及时的亮度控制[2-3]。
本系统应用在地下车库,由微波感应电路、单片机、光强感应电路、电源模块、显示模块、调试接口及LED驱动电路构成。系统方案如图1所示。
图1 系统总体设计方案图
光强度传感器置放于车库入口处,并在车库入口安装微波感应传感器,以启动该传感器检测外部光照强度。其余位置微波传感器与LED一起放置,当检测到相应的物体移动时,启动相应位置的LED灯。地下车库模拟示意图如图2所示。
系统以IAP15F2K61S2单片机作为核心控制处理器,主要由核心控制模块、电源管理模块、微波感应模块、光强感应模块、显示模块、调试模块以及LED驱动模块等组成。
微波传感器为多普勒效应自动感应技术传感器,采用平面天线发射及接收回波。该传感器探测回波内微小的移动,触发微处理器,执行指令。传感器抗干扰能力强,几乎不受风、热等外界环境因素的干扰。可以透过门、玻璃板及薄的墙壁探测到人或物体移动,探测效果好[4]。传感器探测范围内物体移动,并以电压形式输出,经由LM324集成运放放大后,再由电压比较器比较输出。微波传感器处理电路图如图3所示。
图3 微波传感器处理电路图
光强度传感器(BH1750)模块是一种数字型光强度传感器,采用双线串行总线接口(IIC)。光强度传感器的分辨率高,可以探测较大范围(1-65535)的光强度变化。该传感器拥有接近视觉灵敏度的光谱灵敏度特性(峰值灵敏度波长典型值为560 nm),无需其他部件,通过50 Hz/60 Hz除光噪音功能实现稳定的测定输出对应亮度的数字值[5]。数字光强度传感器处理电路图如图4所示。
图4 数字光强度传感器电路图
如果将LED灯直接接入电路进行脉宽调制,在高速的PWM频率下,容易产生频闪现象,因此驱动LED灯需要恒流恒压条件,才不会在控制亮度的同时产生闪烁现象[6]。驱动电路中直流电压经无频闪电路二次稳压,供给LED灯珠,通过PWM信号控制最终输出稳定的直流电压供给灯珠,以保证其稳定正常工作。LED驱动电路如图5所示。
图5 LED驱动电路
为了更好地监测系统运行状态,以便对系统运行进行判别与监测,设计时引入1602液晶以便于显示。LCD1602以其精简易用,驱动简单,能够在器件上以两行每行十六个字符的形式显示出所有包括英文字母以及数字在内的信息,方便对系统进行监测。LCD1602液晶显示电路如图6所示。
图61602 液晶显示驱动电路
主控模块实物图如图7所示。
图7 主控模块实物图
采用结构化思想,将程序模块化进行编程,以便于后续维护和调试。主程序流程图如图8所示。系统程序主要包括主程序入口、各模块初始化程序、中断程序、脉宽调制程序等。
图8 主程序设计流程图
微波传感器硬件电路与微控制器接口以中断方式实现,在其正常模式下,该引脚输出并保持高电平直至物体移动引起传感器产生外部中断,出现下降沿时,向微控制器发出中断请求。外部中断0的优先级默认为系统最高级,当微控制器响应中断后,CPU当即放下手头上正在执行的其他程序(除中断子程序之外),转而进入外部中断0的中断服务程序中去。在外部中断0中断服务子程序中,先令其向液晶写入新的工作状态提示符,并启动数字光强度传感器采集数据。相应外部中断服务程序如下:
void MicroWaveInterrupt()interrupt 0//微波中断函数
{
uint8 count,Buf[N],Tip[16]={"Mode :Working"};
w_string(0x80,Tip);//更改液晶显示的工作状态
for(count=0;count<N;count++)
Buf[count]=ReadSensorValue();
CountDutyFactor(filter_valve(Buf));//计算占空比【实参为传感器数值】
}
IAP15F2K61S2单片机未集成硬件IIC通信接口,本文采用普通I/O口模拟IIC通信时序,进行数据读写。BH1750FVI通信时序图如图9所示。
图9 BH1750FVI通信时序图
读取光强度传感器的数据程序如下:
uint16 ReadSensorValue()
{
intdis_data;//变量
float SensValue;
Single_Write_BH1750(0x01); //power on
Single_Write_BH1750(0x10); //H-resolution mode
delay_nms(180);//延时 180ms
Multiple_Read_BH1750();//连续读出数据,存储在BUF中
dis_data=BUF[0];
dis_data=( dis_data << 8)+BUF[1];//合成数据
SensValue=(float)dis_data/1.2;
conversion(SensValue);//计算数据和显示
w_string(0xC0,word);
return SensValue;
}
本文采用增量式PID控制算法,其简化示意图如图10所示。
图10 增量式PID控制算法简化示意图
在PWM驱动LED应用中,根据原先的PWM脉冲宽度值,求出当前的误差增量,经过计算后,可以得出当前PWM脉宽,以动态调节PWM,使LED亮度稳定[7]。根据PID算数特性,定义以下结构体:
typedef struct PID{//结构体定义
int SetPoint//设定值
int Proportion;//Proportion比例系数
int Integral;//Integral积分系数
int Derivative;//Derivative 微分系数
int LastError;//Error[-1]前一拍误差
int PreError;//Error[-2]前两拍误差
}PID;
增量PID算法函数如下:
/*PID算法函数,返回误差增量*/
unsigned int PIDcal(PID*pp,int thisError)
{
unsigned int pError,dError,iError;
unsigned int templ;
pError=thisError-pp->lasterror;
iError=thisError;
dError=thisError-2*(pp->lasterror)+pp->preerror;
/*增量计算*/
templ=pp->proportion*pError+pp->integral*iError+pp->derivative*dError;
pp->preerror=pp->lasterror; /* 存放误差用于下次运算*/
pp->lasterror=thisError;
return((int)(templ>>8));
}
设定PWM频率为10 kHz.定时器初始化时设置TMOD寄存器,使其定时器1工作于16位定时器功能状态,并且开启定时器中断和全局中断。当外部产生中断信号时,CPU响应中断并载入初值,之后调用PWM算法程序,对LED亮度进行调控,程序如下:
void Timer1_Init(void)/*PWM使用定时器1*/
{
TMOD=0x10;
ET1=1;
TR1=1;
TL1=(uint8)(( 65535-SYS_MCLK/Freq)+18);
TH1=(uint8)(((65535-SYS_MCLK/Freq)+18)>> 8);
}
void Timer1_ISR()interrupt 3/*中断服务子程序*/
{
TL1= (uint8)((65535-SYS_MCLK/Freq)+18);//载入定时初值
TH1= (uint8)(((65535-SYS_MCLK/Freq)+18)>> 8); //载入定时初值
LightModulation( TimeScale);
//光线调制
}
本系统设计了以微波感应为基础的地下车库节能照明系统,该系统采用STC公司的IAP15F2K61S2作为整个系统的核心控制模块,配合以微波传感器与光强度传感器对LED灯进行脉冲宽度调制,使其发出不同等级的光亮,适合于地下车库等公共场所使用。LED灯可以在微波传感器的干预下,从其静态时保持百分之十的亮度转变为与外界光亮强度相关的不同等级层次的亮度级别。此外,本文设计的有物体移动与无物体移动所对应的两个LED灯亮度是固定,下一步考虑采用无线通信控制方式,并设计一个上位机,由值班室人员根据实际情况设定LED灯亮度值。