摘 要:文中提出了采用單片機(jī)STC15F2K60S2和以太網(wǎng)控制芯片W5500的繼電器遠(yuǎn)程控制方案,并給出了各模塊的詳細(xì)電路圖以及單片機(jī)主程序流程圖。該方案工作可靠、網(wǎng)絡(luò)安全性高、性價(jià)比高,在智能樓宇、智能家居等領(lǐng)域有著良好的應(yīng)用前景。
關(guān)鍵詞:遠(yuǎn)程控制;W5500;單片機(jī);繼電器
中圖分類號(hào):TP39 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2016)05-00-04
0 引 言
繼電器遠(yuǎn)程控制的實(shí)現(xiàn)不僅方便了操作并且提高了效率。只要有網(wǎng)絡(luò)的地方就可以對(duì)繼電器進(jìn)行控制,再由繼電器控制其他設(shè)備,從而實(shí)現(xiàn)設(shè)備的遠(yuǎn)程控制。通過使用以太網(wǎng)控制芯片W5500,利用TCP協(xié)議,便可實(shí)現(xiàn)繼電器的遠(yuǎn)程控制。
1 系統(tǒng)總體結(jié)構(gòu)
系統(tǒng)總體結(jié)構(gòu)如圖1所示。計(jì)算機(jī)作為客戶端,W5500作為服務(wù)器,利用TCP協(xié)議實(shí)現(xiàn)客戶端到服務(wù)器的連接。計(jì)算機(jī)端使用廣州致遠(yuǎn)電子有限公司開發(fā)的免費(fèi)軟件“TCP&UDP測試工具”發(fā)送繼電器控制命令;控制命令經(jīng)網(wǎng)絡(luò)傳送到W5500;單片機(jī)通過讀取W5500的接收數(shù)據(jù)存儲(chǔ)器接收控制命令,并根據(jù)命令對(duì)繼電器進(jìn)行開關(guān)控制。系統(tǒng)所需的主要工作包括W5500網(wǎng)絡(luò)控制模塊電路的設(shè)計(jì)、單片機(jī)及繼電器控制模塊電路的設(shè)計(jì)和單片機(jī)控制程序的設(shè)計(jì)。
圖1 系統(tǒng)總體結(jié)構(gòu)
2 硬件設(shè)計(jì)
2.1 W5500網(wǎng)絡(luò)控制模塊
系統(tǒng)以W5500芯片為核心組成網(wǎng)絡(luò)控制模塊,采用TCP協(xié)議與計(jì)算機(jī)端進(jìn)行通信,接收計(jì)算機(jī)端發(fā)送來的繼電器控制命令。
2.1.1 W5500簡介
由于OSI(Open System Interconnection,開放式系統(tǒng)互聯(lián))七層協(xié)議的網(wǎng)絡(luò)體系結(jié)構(gòu)模型與TCP/IP四層協(xié)議的網(wǎng)絡(luò)體系結(jié)構(gòu)模型都有各自的優(yōu)缺點(diǎn),因此在分析、研究計(jì)算機(jī)網(wǎng)絡(luò)時(shí)往往采用Andrew S.Tanenbaum教授建議的綜合以上兩種模型優(yōu)點(diǎn)的五層協(xié)議的網(wǎng)絡(luò)體系結(jié)構(gòu)模型,它包括物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層以及應(yīng)用層。
W5500是韓國WIZnet公司于2013年推出的一款以太網(wǎng)控制芯片,它整合了五層計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)中的前四層,即物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層和傳輸層,并在內(nèi)部利用硬件實(shí)現(xiàn)了TCP/IP協(xié)議棧。全硬件TCP/IP協(xié)議棧完全獨(dú)立于主控芯片,可降低主芯片負(fù)載且無需移植繁瑣的TCP/IP協(xié)議棧;可有效應(yīng)對(duì)網(wǎng)絡(luò)攻擊和病毒,安全性高[1]。W5500為用戶提供了一個(gè)簡易的互聯(lián)網(wǎng)連接方案。W5500功能框圖如圖2所示。
圖2 W5500的功能框圖
W5500集成了硬件TCP/IP協(xié)議,包括TCP,UDP,IPv4,ICMP,ARP,IGMP以及PPPoE協(xié)議和以太網(wǎng)的PHY和MAC層。W5500內(nèi)嵌32 K字節(jié)收發(fā)緩存以供以太網(wǎng)包處理。用戶使用W5500,只需要一些簡單的Socket編程就能實(shí)現(xiàn)以太網(wǎng)應(yīng)用。這將會(huì)比采用軟件實(shí)現(xiàn)TCP/IP協(xié)議棧的傳統(tǒng)以太網(wǎng)方案更加快捷、簡便。用戶可以同時(shí)使用8個(gè)硬件Socket獨(dú)立通訊。W5500提供了串行外設(shè)接口(Serial Peripheral Interface,SPI),從而能夠更加容易地與外設(shè)MCU整合。而且W5500使用了新的高效SPI協(xié)議支持80 MHz速率,從而能夠更好地實(shí)現(xiàn)高速網(wǎng)絡(luò)通訊。為了減少系統(tǒng)能耗,W5500提供了網(wǎng)絡(luò)喚醒模式(Wake on LAN,WoL)及掉電模式供用戶選擇使用[2]。
2.1.2 W5500網(wǎng)絡(luò)控制模塊電路設(shè)計(jì)
W5500網(wǎng)絡(luò)控制模塊電路如圖3所示。其中,P1為帶網(wǎng)絡(luò)變壓器的RJ45插座,通過網(wǎng)線與網(wǎng)絡(luò)連接;P2插針用于模塊供電以及和單片機(jī)連接。W5500正常工作時(shí),需提供3.3 V數(shù)字電源,VDD(28腳)對(duì)GND(29腳);3.3 V模擬電源,AVDD(4/8/11/15/17/21腳)對(duì)AGND(3/9/14/16/19/48腳)。為方便與外部不同工作電壓的單片機(jī)控制系統(tǒng)配合工作,本模塊可通過P2插針輸入+5 V或3.3 V電壓供電。當(dāng)外部輸入電壓為+5 V時(shí),+5 V電源經(jīng)低壓差電壓調(diào)節(jié)器U1 LM1117-3.3轉(zhuǎn)換為+3.3 V電壓輸出,對(duì)整個(gè)模塊供電,并可通過P2插針的+3 V 3D引腳給其它模塊提供3.3 V電源。
W5500的XI(30腳)、XO(31腳)為時(shí)鐘引腳,共外接25 MHz石英晶體振蕩電路;RSTn(37腳)為復(fù)位引腳,低電平有效,和單片機(jī)I/O引腳連接,由單片機(jī)控制W5500進(jìn)行復(fù)位;PMODE2(43腳)、PMODE1(44腳)、PMOD0(45腳)為網(wǎng)絡(luò)工作模式選擇引腳,設(shè)置為“所有功能,啟動(dòng)自動(dòng)協(xié)商”;EXRES1(10腳)為外部參考電阻引腳,外接一個(gè)精度為1%的12.4 kΩ外部參考電阻,為內(nèi)部模擬電路提供偏壓;TOCAP(20腳)為外部參考電容引腳,外接一個(gè)4.7 μF電容,而且到該電容的走線要盡量短一些,以保證內(nèi)部信號(hào)的穩(wěn)定;1V2O為內(nèi)部穩(wěn)壓器1.2 V電壓輸出引腳,外接一個(gè)10 nF電容;TXN(1腳)、TXP(2腳)為差分信號(hào)發(fā)送引腳;RXN(5腳)、RXP(6腳)為差分信號(hào)接收引腳;SCSn(32腳)為W5500的SPI接口片選引腳,低電平有效;SCLK(33腳)為SPI時(shí)鐘輸入引腳;MISO(34腳)為SPI主機(jī)輸入從機(jī)(W5500)輸出引腳;MOSI(35腳)為SPI主機(jī)輸出從機(jī)(W5500)輸入引腳;INTn(36腳)為W5500中斷輸出引腳,低電平有效。
2.2 單片機(jī)及繼電器控制模塊
W5500利用硬件實(shí)現(xiàn)了TCP/IP協(xié)議棧,大大降低了主控芯片負(fù)載,使得應(yīng)用廣泛的8位單片機(jī)也能順利完成以太網(wǎng)接入。本方案采用我國宏晶科技公司最新推出的內(nèi)置高速SPI接口的增強(qiáng)型8051單片機(jī)STC15F2K60S2作為主控芯片。
2.2.1 STC15F2K60S2簡介
STC15F2K60S2 單片機(jī)采用1T(1時(shí)鐘周期/機(jī)器周期)增強(qiáng)型8051內(nèi)核,速度比傳統(tǒng)8051單片機(jī)快7~12倍,也比STC早期的1T系列單片機(jī)(如STC12/11/10系列)快20%;內(nèi)置大容量2 KB的RAM數(shù)據(jù)存儲(chǔ)器,1 KB的Flash數(shù)據(jù)存儲(chǔ)器,60 KB的Flash程序存儲(chǔ)器;具有3個(gè)16位可自動(dòng)重裝的定時(shí)/計(jì)數(shù)器(T0/T1/T2),1個(gè)高速SPI,8通道10位ADC等資源。并且,它內(nèi)部集成高精度R/C時(shí)鐘(±0.3%),頻率從5 MHz~35 MHz可選(相當(dāng)于傳統(tǒng)8051:60 MHz~420 MHz),可徹底省掉外部昂貴的晶振;內(nèi)部集成高可靠復(fù)位電路,ISP編程時(shí)8級(jí)復(fù)位門檻電壓可選,可徹底省掉外部復(fù)位電路;具有在系統(tǒng)編程(In System Programming,ISP)功能,無需專用編程器[3]。
2.2.2 單片機(jī)及繼電器控制模塊電路設(shè)計(jì)
單片機(jī)及繼電器控制模塊電路如圖4所示。STC15F2K60S2單片機(jī)控制電路省略了傳統(tǒng)8051單片機(jī)最小應(yīng)用系統(tǒng)中所必需的外部晶振、外部復(fù)位電路,提供+5 V電源單片機(jī)即可工作,外圍電路非常簡潔。在電源+5 V和GND之間就近加上電源去耦電容C21(10μF)、C22(0.1μF),可去除電源線噪聲,提高抗干擾能力。P3為單片機(jī)ISP接口,便于采用USB轉(zhuǎn)TTL電平的串口下載線進(jìn)行系統(tǒng)軟件的升級(jí);P4為單片機(jī)SPI接口,用于和W5500芯片通信。
系統(tǒng)中設(shè)計(jì)了兩路繼電器控制電路,可用于控制外部開關(guān)量。繼電器的驅(qū)動(dòng)電路由三極管Q1、Q2組成,Q1、Q2起功率放大作用。繼電器K1、K2分別由單片機(jī)的P2.7、P2.6引腳控制。繼電器K1、K2的常開、常閉觸點(diǎn)分別經(jīng)接線端子P5、P6引出。
3 軟件設(shè)計(jì)
通過W5500利用TCP協(xié)議實(shí)現(xiàn)繼電器遠(yuǎn)程控制的單片機(jī)程序采用C語言編寫,主程序流程圖如圖5所示。
在主程序中,首先進(jìn)行單片機(jī)的SPI接口和W5500模塊的初始化,然后檢查W5500是否接收到數(shù)據(jù)。若接收到數(shù)據(jù),則單片機(jī)讀取W5500的數(shù)據(jù)接收存儲(chǔ)器,并根據(jù)讀取到的命令對(duì)繼電器進(jìn)行控制。在計(jì)算機(jī)端發(fā)送命令“open+RLY_K1”或者“open+RLY_K2”打開繼電器K1和K2,發(fā)送命令“close+RLY_K1”或者“close+RLY_K2”則關(guān)閉繼電器K1和K2。各程序模塊主要工作包括以下幾項(xiàng)內(nèi)容。
3.1 SPI接口初始化
STC15F2K60S2單片機(jī)通過SPI接口與W5500進(jìn)行通信,對(duì)W5500所有的操作都需要通過SPI接口進(jìn)行數(shù)據(jù)傳輸。在對(duì)W5500進(jìn)行數(shù)據(jù)傳輸之前,要先對(duì)STC15F2K60S2的SPI接口的相關(guān)寄存器進(jìn)行設(shè)置,即SPI接口的初始化。STC15F2K60S2單片機(jī)SPI接口的初始化包括以下幾點(diǎn):
通過SPI控制寄存器SPCTL設(shè)置:忽略引腳,SPI使能,數(shù)據(jù)字的最低位(LSB)最先傳送,設(shè)置為主機(jī),SPI空閑時(shí)SCK=1,數(shù)據(jù)在SCK的前時(shí)鐘沿驅(qū)動(dòng)到SPI口線,SPI模塊在后時(shí)鐘沿采樣。
清0寄存器SPSTAT中的標(biāo)志位SPIF和WCOL(向這兩個(gè)標(biāo)志位寫1即可清0)。
開放SPI中斷(IE2中的ESPI=1,IE2寄存器不能位尋址,可使用“或”指令進(jìn)行設(shè)置)。
開放總中斷(IE中的EA=1)。
3.2 W5500初始化
在使用W5500之前,首先應(yīng)對(duì)其進(jìn)行初始化,正確設(shè)置以下寄存器:模式寄存器(MR)、中斷屏蔽寄存器(IMR)、重發(fā)時(shí)間寄存器(RTR)、重發(fā)次數(shù)寄存器(RCR)、本機(jī)硬件地址寄存器(SHAR)、網(wǎng)關(guān)地址寄存器(GAR)、子網(wǎng)掩碼寄存器(SUBR)、本機(jī)IP地址寄存器(SIPR)以及設(shè)置Socket存儲(chǔ)器信息。初始化過程結(jié)束后,W5500可以以TCP、UDP、IPRAW和MACRAW的模式打開Socket,以進(jìn)行數(shù)據(jù)的發(fā)送和接收。
3.3 接收數(shù)據(jù)
接收數(shù)據(jù)時(shí),需要檢查寄存器Sn_RX_RSR,檢查數(shù)據(jù)是否已經(jīng)被接收到:如果Sn_RX_RSR的值大于0,則說明接收到的數(shù)據(jù)在接收存儲(chǔ)器(RX buffer)中,然后通過讀取RX讀指針寄存器(Sn_RX_RD0)獲取數(shù)據(jù)地址,然后將數(shù)據(jù)從W5500接收存儲(chǔ)器中讀出,并存放到單片機(jī)端的接收緩沖區(qū)RX_BUF數(shù)組中。
圖5 單片機(jī)主程序流程圖
3.4 讀取命令,控制繼電器
通過查找RX_BUF數(shù)組中是否包含有“open+RLY_K1”、“open+RLY_K2”、“close+RLY_K1”或者“close+RLY_K2”命令,并根據(jù)讀取到的命令,通過控制單片機(jī)P2.7、P2.6引腳電平的高低對(duì)繼電器K1、K2進(jìn)行開關(guān)控制。
3.5 清空接收緩沖區(qū)
清空單片機(jī)端的接收緩沖區(qū)RX_BUF數(shù)組,為接收下一個(gè)控制命令做好準(zhǔn)備。
4 實(shí)驗(yàn)結(jié)果
在計(jì)算機(jī)端打開 “TCP&UDP測試工具”,點(diǎn)擊“創(chuàng)建連接”,選擇類型為“TCP”,目標(biāo)IP為W5500的本機(jī)IP地址,端口為W5500的Socket0的端口號(hào),本機(jī)端口設(shè)置為“隨機(jī)選擇端口”,完成客戶端的創(chuàng)建;連接好網(wǎng)線,給單片機(jī)控制模塊、W5500網(wǎng)絡(luò)控制模塊上電,點(diǎn)擊“TCP&UDP測試工具”上的“連接”,客戶端(計(jì)算機(jī)端)與服務(wù)端(W5500模塊)連接成功;通過“TCP&UDP測試工具”分別發(fā)送“open+RLY_K1”、“open+RLY_K2”、“close+RLY_K1”、“close+RLY_K2”等命令,能正確控制對(duì)應(yīng)的繼電器接通斷。
5 結(jié) 語
本文提出了基于STC15F2K60S2+W5500的繼電器遠(yuǎn)程控制方案,并給出了各電路模塊詳細(xì)的電路圖和單片機(jī)主程序流程圖。通過網(wǎng)絡(luò),對(duì)繼電器進(jìn)行遠(yuǎn)程控制,再由繼電器控制其他設(shè)備,便可實(shí)現(xiàn)設(shè)備的遠(yuǎn)程控制。在需要遠(yuǎn)程控制的設(shè)備數(shù)量較多的應(yīng)用場合中,還可以根據(jù)以上設(shè)計(jì)方案增加繼電器的路數(shù)來實(shí)現(xiàn)。該方案工作可靠、網(wǎng)絡(luò)安全性高、性價(jià)比高,在智能樓宇、智能家居等領(lǐng)域有著良好的應(yīng)用前景。
參考文獻(xiàn)
[1] 陳桂友,陳海峰,賀紅.物聯(lián)網(wǎng)智能網(wǎng)關(guān)設(shè)計(jì)與應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2013:222-224.
[2] WIZnet.W5500 Datasheet Version 1.0.6[EB/OL].(2014-12-30)[2015-12-18]. http://wizwiki.net/wiki/lib/exe/fetch.php?media=products:w5500:w5500_ds_v106e_141230.pdf
[3] 吳永德,羅萍.基于STC15F2K60S2單片機(jī)的LED光立方設(shè)計(jì)[J].電腦編程技巧與維護(hù),2015(11):81-84.