基于PIC16F877微控制器觸摸式調(diào)光臺燈智能化控制的實現(xiàn)
本文系統(tǒng)講述如何利用PIC16F877微控制器實現(xiàn)觸摸式調(diào)光臺燈的智能化控制,實現(xiàn)(1)觸摸調(diào)光;(2)燈絲預(yù)熱;(3)自動消除眩光、頻閃;(4)定時鬧鐘;(5)特色鈴音;(6)整點報時;(7)事件提醒;(8)日歷功能;(9)中文液晶顯示等功能,滿足安全、高效、無眩光、無頻閃、功能齊全等質(zhì)量標(biāo)準(zhǔn)。
硬件設(shè)計
1.PIC16F877徵控制器
PIC16F877微控制器為MicroChip公司FLASH型CPU,片內(nèi)含8K的FLASH程序存儲區(qū),368字節(jié)RAM,256字節(jié)的EEPROM,35個獨立I/0口,一個16位計數(shù)器/定時器,兩個8位計數(shù)器/定時器,14個可獨立使用也可嵌套使用的中斷源,2個捕捉器、比較器、PWM模塊,,白帶8路10位A/D,內(nèi)帶看門狗WDT及電源監(jiān)視,具有休眠、等待等多種節(jié)電方式,I/0口可以直接驅(qū)動LCD。
2.硬件電路設(shè)計
觸摸式調(diào)光臺燈硬件框圖如上圖所示,硬件原理圖如下圖所示。
上圖中C1和T1組成EMI濾波器,一方面可以減少鎮(zhèn)流器對電網(wǎng)的干擾,另一方面可以防止其它電器設(shè)備對鎮(zhèn)流器的干擾;V1-V4組成橋式整流器;C3、C4、V5、V6和R21組成無源功率因數(shù)校正電路,使功率因數(shù)達到0.9以上,為保證功率燈管使用壽命,電路的功率峰值因數(shù)應(yīng)小于1.7,本文采用PIC16F877單片機的捕捉功能對頻率進行反饋回讀,根據(jù)頻率的變化采取相應(yīng)的措施,改變IR2151的輸入,從而控制IR2151的輸出頻率,達到控制輸出功率的目的。該方法可以使光源更穩(wěn)定,消除眩光、頻閃,達到護眼燈的效果。
觸摸式調(diào)光燈工作時通過觸摸金屬片A(亮鍵)、B(暗鍵),將人體雜波信號通過耦合電容加到MCU的I/0口進行檢測,同時,耦合電容還可以防止因個別器件損壞而造成麻電現(xiàn)象;MCU根據(jù)檢測到的信號通過程序分析、運算,將PWM信號從17腳輸出到IR2151,控制振蕩頻率;振蕩器經(jīng)高端(HO)和低端(LO)引腳輸出,驅(qū)動兩個場效應(yīng)管IRF830交替導(dǎo)逼和截止,達到控制燈管的目的。
燈絲的預(yù)熱由熱敏電阻控制,上電后,IR2151的6腳、電感L1、電容C1O、Cl3組成串聯(lián)諧振電路,在Cl3上產(chǎn)生高壓加到燈管兩端,將燈點亮。其中,RT為正溫度系數(shù)的熱敏電阻,起到對燈絲預(yù)熱的作用;電源接通后燈絲電流幾乎全部加載到C1O和RT上,由于C1O電容較大,LC串聯(lián)電路不發(fā)生諧振,隨著溫度升高,RT阻值迅速增大,RT支路相當(dāng)于開路)使LC串聯(lián)電路發(fā)生諧振,即達到對燈絲進行預(yù)熱及軟啟動的作用,延長了燈管的使用壽命,整個過程MCU時刻進行監(jiān)控及調(diào)整,實現(xiàn)真正的智能化控制。
軟件設(shè)計
軟件設(shè)計由MCU初始化、裝置自檢、定時采樣、中斷處理、液晶顯示、按鍵處理六部分,軟件流程如下圖所示。
定時器中斷子程序為軟件設(shè)計的核心,包含濕度、濕度采樣、調(diào)光,除眩等控制,本文對溫度、濕度的精度要求不是非常的嚴(yán)格,采樣周期設(shè)為1min,通過采樣5個點求平均值,且精度滿足采樣要求。
定時器初始化子程序如下;
/***********定時器初始化*******/
void tmint(void)
{
INTCON=0X00;
/********關(guān)閉中斷**********/
GIE=1;
?。?**********總中斷使能INTCON.7**********/
PEIE=1;
/*********外圍接口中斷使能位,必須置1否則TMR1中
斷不好用***********/
TMR1IE=1;
/**********TMR1溢出中斷使能位**********/
T1 CON=0X24;
?。?*****************預(yù)分頻器1:4暫時不打開TMR1***********/
TMR1 L=0X77;
TMR1 H=0XEC;
?。?*************定時器賦初值20mS中斷1次***************/
TMR1ON=1;
/***********啟動TMR1開始計數(shù)。T1CON.0**************/
}
定時器中斷子程序如下:
/************定時器中斷***********/
void interrupt clkint(void)
{
int i,j,k:
for(i=1:i<5:i++)
{
adwd_h[i]=adwd_h[i+1];
adwd_I[i]=adwd_I[i+1];
/**溫度采樣值移位,頂出第1位,新值存在5位***/
}
int m,n,t;
for(m=1;m<5;m++)
{
adsd_h[m]=adsd_h(m+1];
adsd_I[m]=adsd_I[m+1];
?。?**溫度采樣值移位,頂出第1位,新值存在5位*****/
}
ADCONO=Ox41;
?。?****時鐘源F/8,AO通道,允許A/D工作**********/
ADCON 1=0x82;
/********結(jié)果右對齊**********/
delayms(1);
?。?**************等待采樣,采樣電容充電時間提高精度**************/
ADCONOㄧ=Ox04;
/**********啟動A/D轉(zhuǎn)換GO.ADCON0.2***********/
while(ADIF==1)
/***********等轉(zhuǎn)換結(jié)束位ADIF置1,PIR1.6**********/
{
adwd_h[5]=ADRESH;
adwd_I[5]=ADRESL;
?。?*********存溫度采樣結(jié)果**********/
}
ADCON0=0x51;
?。?*********時鐘源F/8,A1通道,允許A/D工作**********/
ADCON1=0x82;
/*****結(jié)果右對齊**********/
delayms(1);
/**************等待采樣,采樣電容充電時間——提高精度************/
ADCON0ㄧ=0×04;
?。?*******啟動A/D轉(zhuǎn)換GO,ADCON0.2********/
while(ADIF==1)
/*******等待轉(zhuǎn)換結(jié)束位ADIF置1,PIR1.6***********/
{
adsd_h[5]=ADRESH;
adsd_1[5]=ADRESL;
/**********存溫度采樣結(jié)果**********/
}
TMR1 IF=O;
?。?******清中斷標(biāo)志位********/
TMR1 L=0X77;
TMR1 H=0XEC;
/********定時器重新賦初值20mS中斷1次***********/
}
功能說明
為使臺燈亮度調(diào)節(jié)平穩(wěn)過渡,本文設(shè)置8檔調(diào)光:輕觸金屬片A亮鍵,燈由滅點亮,然后每觸摸一下亮鍵,臺燈亮度增加一檔,至第8檔時臺燈達到最亮,此后再按亮鍵亮度也不會增加金屬片B暗鍵功能和亮鍵相反,每按一次亮度減小~檔,直至熄滅,同時通過液晶顯示相應(yīng)的狀態(tài)。
其它功能通過不同按鍵進入相應(yīng)的功能菜單進行設(shè)置,同時通過純中文液晶菜單顯示。另外,還可設(shè)置整點語音報時、3個定日寸鬧鈴以及事件提醒功能,每個鬧鈴周期還可以分別設(shè)定,事件提醒功能包括會議、約會、參加婚禮、運動、業(yè)余學(xué)習(xí)、其它等幾種事件,提醒包括提前1天、提前1小時、提前10分鐘三種選擇。
由于MCU存儲容量有限,鬧鈴鈴音除了固定的鈴音外,還有以下4個比較有特色的語音鈴音供選擇:(1)懶豬起床了,不然把你抬出去了;(2)寶貝起床,太陽都照到屁股了;(3)快點起床、快點起床,一會遲到了;(4)你的定時時間到,快去辦事吧。