鄭洪慶,程 蔚
(閩南理工學院,工業自動化控制技術與信息處理福建省高校重點實驗室,福建 石獅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燈亮度值。