郝沛,,黃魯
(中國科學(xué)技術(shù)大學(xué) 信息科學(xué)技術(shù)學(xué)院,,安徽 合肥 230026)
摘要:傳統(tǒng)市電開關(guān)需要人為干預(yù),,在某些重復(fù)定時開關(guān)場景下使用不方便,且需要人為判斷通斷的條件,。設(shè)計了一種智能開關(guān),,可以實現(xiàn)設(shè)置時間段內(nèi)開關(guān)的自動通斷,并且能夠借助傳感器數(shù)據(jù)輔助判斷通斷條件,。實測結(jié)果表明,,該系統(tǒng)工作穩(wěn)定,控制界面簡潔友好,。
關(guān)鍵詞:市電定時開關(guān),;時鐘芯片;傳感器,;繼電器
0引言
隨著家用電器的普及,,傳統(tǒng)的手動開關(guān)已經(jīng)無法滿足日益復(fù)雜的應(yīng)用場景。比如定時照明系統(tǒng),,人為地去控制照明開關(guān),,不但不方便,而且很難精確掌控開啟與停止時間,。如果在市電與照明系統(tǒng)之間增加一級控制系統(tǒng),,在設(shè)定好開關(guān)時間后,,由系統(tǒng)執(zhí)行開關(guān)操作,,并且可以根據(jù)環(huán)境光照度來選擇是否照明,則會帶來極大的方便[1],。推而廣之,,定時抽水系統(tǒng)、定時充電系統(tǒng),、定時加熱系統(tǒng)都可以采用此種控制方案,,從而給市電應(yīng)用場景帶來極大便利。
1系統(tǒng)簡介
本系統(tǒng)設(shè)計的核心思路是“以弱控強,,用戶定制,;控時為主,傳感為輔”,。硬件上,,系統(tǒng)需要實現(xiàn)對傳感器以及外圍模塊的驅(qū)動,;軟件上,系統(tǒng)需要實現(xiàn)人機交互界面的繪制,、時間檢測以及傳感器數(shù)據(jù)的處理,。
1.1系統(tǒng)功能框圖
如圖1所示,系統(tǒng)輸入為220 V的市電,,通過繼電器后,,輸出到被控電器,從而控制被控電器的開關(guān),。繼電器的作用為隔離強弱電,,同時控制市電的通斷,其控制信號由控制系統(tǒng)提供,??刂葡到y(tǒng)輸入電壓為9 V,由電源適配器提供,。傳感器提供判斷通斷的輔助信號,,如光照度、水位,、溫濕度等[2],。
1.2系統(tǒng)主要模塊
1.2.1主控制器STM32
STM32是基于ARM Cortex-M3內(nèi)核的32位微處理器,主頻最高為72 MHz,。它包含豐富的接口,,且其內(nèi)部時鐘頻率可由用戶自主定制,能夠方便地開發(fā)出PWM輸出,、頻率捕獲,、脈寬捕獲等功能[3]。其GPIO口可自由配置為輸入/輸出模式,、中斷模式,、復(fù)用模式[4]。
1.2.2定時器DS1302
DS1302是DALLAS公司設(shè)計的一款低功耗時鐘芯片,,具有涓流充電,、閏年補償功能。芯片采用32.768 kHz晶振,,且內(nèi)部集成了31 B的用于臨時數(shù)據(jù)存放的RAM寄存器,。其采用3線I/O口與控制器通信:SCLK時鐘引腳,由主控芯片提供,,用以實現(xiàn)數(shù)據(jù)的同步交互,;I/O數(shù)據(jù)輸入/輸出引腳,用以串行數(shù)據(jù)傳輸,;RST復(fù)位引腳,,需在數(shù)據(jù)傳輸時強制拉高,,在數(shù)據(jù)傳輸結(jié)束后強制拉低。
1.2.3液晶顯示模塊LPH7366
LPH7366是一款分辨率為84×48的單色液晶顯示模塊,,具有功耗低,、操作簡便等優(yōu)點,廣泛應(yīng)用于手機顯示屏,、便攜式設(shè)備中,,如NOKIA5110的液晶屏。
LPH7366模塊采用四線I/O口與主機通信:CE使能引腳,,低有效,;SCK時鐘引腳;DATA串行數(shù)據(jù)傳輸引腳,; CD命令/數(shù)據(jù)選擇引腳(低電平代表傳輸命令,,高電平代表傳輸數(shù)據(jù))。
由于LPH7366沒有集成字庫,,所以需要把ASICII字庫嵌入到代碼中去,。
2系統(tǒng)硬件
根據(jù)硬件功能,系統(tǒng)被劃分為以下幾個子系統(tǒng):電源系統(tǒng),、STM32主控系統(tǒng),、人機交互系統(tǒng)、時鐘系統(tǒng),、繼電器系統(tǒng),。各系統(tǒng)功能如下:
(1)電源系統(tǒng):為整個定時開關(guān)系統(tǒng)提供工作電平,。系統(tǒng)工作電平有兩種:9 V和3.3 V,;
(2)主控系統(tǒng):完成對整個系統(tǒng)的控制以及數(shù)據(jù)的采集處理,;
?。?)人機交互系統(tǒng):提供人機交互接口,實現(xiàn)數(shù)據(jù)的反饋以及控制參數(shù)的配置,;
?。?)時鐘系統(tǒng):提供實時時鐘數(shù)據(jù),供主控系統(tǒng)使用,;
(5)繼電器系統(tǒng):隔離強弱電系統(tǒng),,并實現(xiàn)3.3 V電平對9 V電平的驅(qū)動,。
2.1系統(tǒng)硬件框圖
系統(tǒng)硬件框圖如圖2所示。
2.2系統(tǒng)電路圖
2.2.1STM32最小系統(tǒng)電路
STM32能夠工作的最小系統(tǒng)電路包含電源輸入,、復(fù)位電路,、晶振電路,。如圖3所示。
2.2.2外圍設(shè)備電路
外設(shè)電路包括電源電路,、液晶+按鍵電路,、實時時鐘電路和繼電器驅(qū)動電路。
?。?)電源電路,,如圖4所示。
其輸出電壓由以下公式得到:
VOUT=1.221×R1-R2R2(1)
當(dāng)R1=10 kΩ,,R2 =2.7 kΩ時,,VOUT=3.301 V。
?。?)時鐘電路
時鐘電路采用DS1302方案,。芯片有兩組供電電源Vcc1和Vcc2。Vcc2為主電源,,Vcc1為備用電源,。芯片會以電平較高的一端作為電源輸入,所以,,為確保在系統(tǒng)掉電時時鐘芯片能夠正常工作,,需要在Vcc1引腳處外加3 V蓄電池。
?。?)液晶驅(qū)動電路
由于LPH7366液晶模塊的邏輯驅(qū)動電平為3 V,,所以可直接將其引腳連接到STM32上。按鍵系統(tǒng)采用自彈式輕觸按鍵,,連接到STM32的GPIO上,,以中斷方式輸入。
?。?)繼電器驅(qū)動電路
由于繼電器線圈的工作電平為9 V,,而STM32的邏輯電平為3.3 V,所以需要驅(qū)動電路才能夠用STM32的驅(qū)動電平來控制繼電器,。此處使用晶體管SS8050作為驅(qū)動電路,,且將其設(shè)定為工作在飽和區(qū)內(nèi)。如圖5所示,,假設(shè)晶體管BJT1的β=100,,Vbe=0.7 V;繼電器線圈電阻Rk=70 Ω,,繼電器工作電壓VIN=9 V,。設(shè)STM32的PB.9腳輸出到R4上的電壓為Vin,三極管基極電流為Ib,集電極電流為Ic,。假設(shè)三極管工作在臨界飽和區(qū),則:
Ic=VIN/(R3+Rk)(2)
Ib=Ic/β(3)
Vin=Ib×R4+Vbe(4)
可以得到三極管達到飽和狀態(tài)的最小輸入電壓Vin=0.75 V,。即輸入電平超過0.75 V,三極管便會導(dǎo)通,,從而繼電器吸合,。由于在默認(rèn)條件下繼電器應(yīng)處于斷開狀態(tài),所以在三極管輸入端增加下拉電阻R5=10 kΩ,。
3系統(tǒng)軟件
3.1程序流程圖
主程序的思路是,,實時讀取時鐘芯片DS1302的時間,并顯示在液晶顯示屏上,;同時檢測當(dāng)前時間是否進入了用戶設(shè)定的繼電器吸合時間,。如果進入了設(shè)定時間,則吸合繼電器,;如果在設(shè)定時間外,,則斷開繼電器。主程序流程圖如圖6,?!?/p>
本系統(tǒng)中,按鍵的檢測是在中斷程序中實現(xiàn)的,。由于在處理某一個中斷函數(shù)時,,其他同級或者更低級的中斷是被屏蔽的,所以中斷函數(shù)應(yīng)盡可能簡短,。本系統(tǒng)的按鍵中斷函數(shù)僅實現(xiàn)檢測哪個按鍵被按下,,而按鍵消息處理函數(shù)是在中斷函數(shù)外實現(xiàn)的。按鍵中斷處理程序流程圖如圖7,。
3.2人機交互界面設(shè)計
人機交互界面是本系統(tǒng)軟件的主要構(gòu)成部分,。其完成的功能有:顯示當(dāng)前時間與定時時間段,繪制菜單以配合按鍵進行設(shè)置,,響應(yīng)按鍵信號并完成對應(yīng)功能,。
3.2.1菜單的繪制
本系統(tǒng)菜單共有兩級,采用鏈表結(jié)構(gòu)設(shè)計,,其結(jié)構(gòu)如圖8所示,。
鏈表中,每個節(jié)點的結(jié)構(gòu)如下:
typedef struct
{
intLocation_Level[3];
char*Item_Name;
Menu_Item* Next;
} Menu_Item;
其中,,Location_Level[3]表示當(dāng)前節(jié)點的位置,。Location_Level[0]的值代表此節(jié)點在主菜單的第幾項;Location_Level[1]的值代表此節(jié)點在二級子菜單的第幾項,;Location_Level[2]代表此節(jié)點在三級子菜單的第幾項,。
Item_Name表示當(dāng)前節(jié)點名稱。在顯示時會根據(jù)對應(yīng)節(jié)點打印出此字符串,。
Next指向下一節(jié)點的指針,。
比如,圖8中的二級子菜單中的項目“年設(shè)置”,,其Location_Level[0]=1,,代表其隸屬于主菜單的“設(shè)定時間”項;Location_Level[1]=1,,代表其隸屬于二級菜單的“年設(shè)置”項,;Location_Level[2]=0,代表其止于二級菜單,,沒有進入三級菜單,。其Item_Name=“年設(shè)置”;Next指向“年設(shè)置”節(jié)點的下一個節(jié)點,。
用鏈表設(shè)計菜單的優(yōu)點在于,,無論在菜單的什么位置添加項,都可以直接添加在鏈表的尾部,。因為定位當(dāng)前節(jié)點位置靠的是當(dāng)前節(jié)點的Location_Level[3]中的3個變量,,在菜單級數(shù)較少時,靠鏈表遍歷就足夠了,。
3.2.2按鍵的響應(yīng)
按鍵的檢測是在中斷函數(shù)中完成的,。中斷處理函數(shù)僅完成按鍵序號的確認(rèn),而按鍵處理函數(shù)是在中斷外實現(xiàn)的,。本系統(tǒng)的按鍵有4個,,分別為“向前”,“向后”,,“確認(rèn)”,,“返回”,對應(yīng)標(biāo)識號依次為1,、2,、3、4,。
按鍵處理的思路是:中斷檢測出當(dāng)前按下的是哪個按鍵,,然后根據(jù)當(dāng)前指針指向的節(jié)點來確定要完成的動作。如圖9所示,。
假設(shè)當(dāng)前指針指向菜單項“設(shè)定時間”,,則Location_Level[3]={1,0,0},說明當(dāng)前節(jié)點處于主菜單的第一項,。如果此時“確認(rèn)”按鍵被按下,,那么按鍵處理函數(shù)從表中找到此時位置對應(yīng)動作。假設(shè)此動作為“進入二級菜單”,則指針會跳轉(zhuǎn)到Location_Level[3]={1,1,0}的位置,,同時在屏幕上刷新出二級菜單,。其他3個按鍵的響應(yīng)與此類似。
3.3定時時間的設(shè)定
定時時間設(shè)定是在按鍵響應(yīng)函數(shù)中實現(xiàn)的,。程序流程圖如圖10所示,。
1.2.2節(jié)介紹過,DS1302時鐘芯片內(nèi)部有31 B的RAM寄存器,,可用于存放臨時數(shù)據(jù),。由于市電定時開關(guān)系統(tǒng)需要保證在系統(tǒng)掉電后,配置數(shù)據(jù)不會丟失,,從而在再次上電時依舊可用,。所以,本系統(tǒng)使用了DS1302的臨時數(shù)據(jù)寄存器作為配置數(shù)據(jù)的保存位置,。由于DS1302有備用電源,,配置數(shù)據(jù)不會因掉電而丟失。
3.4傳感器的數(shù)據(jù)處理
考慮到應(yīng)用場景的不同,,系統(tǒng)給出了8位GPIO擴展接口,,可用于各種數(shù)字傳感器的擴展,如溫濕度傳感器,、液位圖11傳感器數(shù)據(jù)處理流程圖傳感器,、光強傳感器等。傳感器數(shù)據(jù)處理流程圖如圖11所示,。
以光強傳感器為例,。設(shè)光照強度標(biāo)志為Light_Flag,定時器的標(biāo)志為Time_Flag,,則傳感器與定時時間標(biāo)志變量關(guān)系表如表1,。 表1傳感器與定時時間標(biāo)志變量表 01Light_Flag環(huán)境光照度低于某閾值環(huán)境光照度高于某閾值Time_Flag當(dāng)前時間處于設(shè)定時間內(nèi)當(dāng)前時間處于設(shè)定時間外
如果被控電器為照明電路,要求“在設(shè)定時間段內(nèi),,當(dāng)光照度低于某閾值時,,照明電路被開啟”,則偽代碼如下:
if((Light_Flag&& Time_Flag)==1)
{打開繼電器;}
else
{關(guān)閉繼電器;}
同理,,液位傳感器,、溫度傳感器等的數(shù)據(jù)都可以采用這種處理思路。
4測試效果
測試中使用了3個定時時間段,,并觀察繼電器的通斷狀態(tài),。
如圖12中主菜單界面所示,共有3個選項,,可通過屏幕下方的按鍵實現(xiàn)光標(biāo)的上下移動以及選擇,、取消等功能,;右圖為實時時鐘設(shè)置界面,通過按鍵實現(xiàn)從年到秒的選擇,。
圖13左為定時時間設(shè)置界面,。共有四個時間段可以配置。當(dāng)配置完畢后,,回到主菜單,,進入“TIME DISPLAY”子菜單,,便可看到右圖的效果,。可以看到,,時間顯示界面除了顯示當(dāng)前時間外,,還用不同的箭頭表示出了定時時間段。舉例來說,,對于定時時間1(7:40~9:00),,對應(yīng)右圖的純黑色箭頭(黑框之內(nèi))所指時間段,可以從時間軸上非常清晰地顯示出來,。
當(dāng)前時間如果落在任何一段設(shè)定時間內(nèi),,則繼電器吸合,其指示燈亮起,。
5結(jié)束語
本系統(tǒng)界面簡潔,,操作方便,可適用于大多數(shù)家用電器,。經(jīng)實際測試,,系統(tǒng)用于定時照明場景,持續(xù)工作兩周未出現(xiàn)異常,。
參考文獻
?。?] 陳致遠,朱葉承,周卓泉,等.一種基于STM32的智能家居控制系統(tǒng)[J].電子技術(shù)應(yīng)用,2012,38(9):138140.[2] 張逢雪,王香婷,王通生,,等.基于STM32單片機的無線智能家居控制系統(tǒng)[J].自動化技術(shù)與應(yīng)用,2011,,30(8):98101.
[3] 徐端全.嵌入式系統(tǒng)原理與設(shè)計[M].北京: 北京航空航天大學(xué)出版社,2009.
?。?] 李寧.基于MDK的STM32處理器開發(fā)應(yīng)用[M].北京: 北京航空航天大學(xué)出版社,2008.