崔 涵 魏立明
(吉林建筑大學(xué) 長(zhǎng)春 130118)
隨著科學(xué)技術(shù)水平的發(fā)展,人們對(duì)于光照質(zhì)量的要求也在逐漸上升,為了適應(yīng)不同的生產(chǎn)環(huán)境,對(duì)于光照的多少也出現(xiàn)了不同的需求[1],為了衡量各種光源的質(zhì)量水平,就需要通過(guò)照度計(jì)對(duì)光照進(jìn)行測(cè)量[2]。目前大部分的照度計(jì)多以光敏二極管作為探測(cè)裝置,本文使用BH1750 芯片代替作為光照探頭,通過(guò)芯片內(nèi)部對(duì)數(shù)據(jù)做的線性處理,使得照度測(cè)量更加準(zhǔn)確且方便,可以更好滿足實(shí)際的需要。
本照度測(cè)量系統(tǒng)主要硬件包括主控器、顯示器和測(cè)量芯片。其中主控器選用STC89C52 單片機(jī),該單片機(jī)擁有32 個(gè)I/O 口,滿足本設(shè)計(jì)需要,并且編程簡(jiǎn)單,易于使用,加之檢測(cè)電路、顯示電路、報(bào)警電路以及鍵盤電路,實(shí)現(xiàn)光信號(hào)的采集轉(zhuǎn)換及運(yùn)算照度。顯示器選用LCD1602 液晶顯示屏,該液晶屏體積小,功耗低,其所能顯示的字符滿足本設(shè)計(jì)需求,同時(shí)其調(diào)用時(shí)序相對(duì)容易理解,可以降低編程難度;測(cè)量芯片選用BH1750 芯片,其內(nèi)部具有光敏二管,放大器,數(shù)模轉(zhuǎn)換電路以及IIC 總線模塊,其可以實(shí)現(xiàn)在IIC 上的通信,方便單片機(jī)的讀取和運(yùn)算,這樣與直接采用光敏二極管測(cè)量照度相比,芯片測(cè)量更加穩(wěn)定,結(jié)果也更加準(zhǔn)確。其余硬件包括按鈕、晶振芯片、電阻電容等將按照實(shí)際需要選用合適大小,硬件電路結(jié)構(gòu)如圖1 所示。
圖1 系統(tǒng)方案結(jié)構(gòu)框圖
本文對(duì)硬件電路設(shè)計(jì)進(jìn)行介紹,基于立創(chuàng)EDA 繪圖軟件繪制硬件電路圖,主要包括單片機(jī)最小系統(tǒng)、照度測(cè)量模塊、顯示模塊和報(bào)警模塊,主要硬件選擇如表1所示。
表1 主要硬件列表
單片機(jī)最小系統(tǒng)是指用最少的元件所組成的可以工作的單片機(jī)系統(tǒng),也是其他硬件電路搭建的基礎(chǔ)。主控制器選擇STC89C52 單片機(jī),該單片機(jī)每次可處理8 位數(shù)據(jù),內(nèi)部具有8 K 字節(jié)儲(chǔ)存器,包括閃存以及可編程可擦寫只讀存貯器的單片機(jī)[3]。STC89C52 單片機(jī)最小系統(tǒng)包括晶振電路、復(fù)位電路。通常情況下,STC89C52 單片機(jī)的晶振選用11.059 2 MHz,晶振電路還需要兩個(gè)起振電容用于幫助晶振起振,大小在(5 ~30)pF 之間,一般選取22 pF 或30 pF。單片機(jī)中的XTAL1 和XTAL2 接口便是用于接晶振電路的。
檢測(cè)電路依靠BH1750 光檢測(cè)芯片及其外圍電路完成。其中,ADDR 是其選址端,高低電平影響其地址,通過(guò)機(jī)械開關(guān)可以進(jìn)行手動(dòng)選取地址,SCL,SDA 是IIC總線接口,與單片機(jī)上的IIC 總線相連[4]。將外圍電路引出的線引給排針,最后與主電路板的預(yù)留排針相連進(jìn)行使用。值得注意的是,其內(nèi)部的光敏二極管的光電轉(zhuǎn)換數(shù)據(jù)雖然是一一對(duì)應(yīng)的,但這些數(shù)據(jù)并不是線性的,而BH1750 內(nèi)部對(duì)數(shù)據(jù)做了線性處理,這也是不直接采用光敏二極管測(cè)量的原因,照度測(cè)量模塊硬件電路如圖2 所示。
圖2 照度測(cè)量模塊
顯示電路主要用于顯示測(cè)量值以及閾值,通過(guò)LCD1602 液晶屏來(lái)實(shí)現(xiàn),這種顯示屏只有三個(gè)控制端,使得源碼易于編寫,在編程過(guò)程中,該函數(shù)的調(diào)用也比較簡(jiǎn)單,減少編程的工作量。顯示屏連接在單片機(jī)的P0口,并且外加上拉電阻來(lái)LCD 提高信號(hào)穩(wěn)定程度,增加抵抗外界干擾能力,顯示模塊硬件電路如圖3 所示。
圖3 顯示模塊
當(dāng)所測(cè)的地方的光照值超過(guò)某一范圍時(shí),需要將這個(gè)信號(hào)傳遞給使用者,因而設(shè)計(jì)了報(bào)警模塊。報(bào)警主要分為兩個(gè)部分,一部分是通過(guò)發(fā)光二極管進(jìn)行報(bào)警顯示,并且數(shù)值超過(guò)上下限顯示的顏色也不一樣;另一部分體現(xiàn)在液晶顯示屏幕上,當(dāng)使用者通過(guò)顯示屏觀察照度值時(shí),如果數(shù)值不在范圍內(nèi),屏幕會(huì)顯示“?。?!”來(lái)進(jìn)行提示,以此來(lái)提醒使用者當(dāng)前環(huán)境的照度水平是否合乎標(biāo)準(zhǔn),報(bào)警模塊硬件電路如圖4 所示。
圖4 報(bào)警模塊
本章根據(jù)上述硬件電路以及設(shè)計(jì)要求進(jìn)行模塊化軟件設(shè)計(jì)。采用模塊化編程,這樣可以為后續(xù)的功能拓展帶來(lái)方便,程序主要分為主函數(shù)、顯示及報(bào)警、模擬IIC協(xié)議以及LCD1602 調(diào)用程序,如圖5 所示。
圖5 軟件程序設(shè)計(jì)流程圖
本文所用的BH1750 芯片通過(guò)IIC 協(xié)議進(jìn)行數(shù)據(jù)的傳輸,而STC89C52 單片機(jī)并不具有IIC 通信協(xié)議的串口,因而需要通過(guò)程序進(jìn)行模擬。IIC 協(xié)議的通信共有兩根線,為保證數(shù)據(jù)傳輸?shù)姆€(wěn)定,避免誤傳或丟失,IIC 對(duì)于傳輸過(guò)程中的數(shù)據(jù)做了一些規(guī)定:數(shù)據(jù)只能在 SCL 處于低電平的情況下發(fā)生變化,并且在 SCL 電平被拉高的情況下,數(shù)據(jù)必須是穩(wěn)定的,也就是有效數(shù)據(jù)[5]。
1)硬件初始化
IIC 具有兩根傳輸線SDA 和SCL,當(dāng)沒有數(shù)據(jù)傳輸時(shí),IIC 處于不工作狀態(tài),此時(shí)SDA 與SCL 均處于高電平,因此,在程序開始前需要將SDA 和SCL 電平拉高,以保證處在非工作狀態(tài)。
2)開始停止信號(hào)
在需要進(jìn)行數(shù)據(jù)傳輸?shù)臅r(shí)候,需要一個(gè)開始信號(hào)使電平產(chǎn)生變化,同樣,在數(shù)據(jù)傳輸完畢后也需要一個(gè)停止信號(hào)將電平拉回停止工作狀態(tài)。開始信號(hào)中SCL 在保持高電平時(shí)SDA 由高電平變?yōu)榈碗娖?,間隔一段時(shí)間后SCL 也變?yōu)榈碗娖?;停止信?hào)中SCL 變?yōu)楦唠娖?,并且SCL 保持高電平后SDA 由低電平變?yōu)楦唠娖絒6],開始停止信號(hào)時(shí)序圖如圖6 所示。
圖6 IIC 啟停時(shí)序圖
3)應(yīng)答信號(hào)
在進(jìn)行讀寫操作時(shí),每次數(shù)據(jù)傳輸之后,都需要產(chǎn)生應(yīng)答信號(hào),一般由接收數(shù)據(jù)的一方發(fā)出可以發(fā)送數(shù)據(jù),總的來(lái)說(shuō),就是在數(shù)據(jù)傳輸后,在傳輸下8 bit 數(shù)據(jù)前需要做出響應(yīng)。應(yīng)答信號(hào)是指在一次8 bit 數(shù)據(jù)傳輸后,也就是8 個(gè)時(shí)鐘周期過(guò)去后,在SCL 第9 個(gè)高電平時(shí)將SDA 電平拉低,視為一次ACK 信號(hào)[7],應(yīng)答信號(hào)時(shí)許如圖7 所示。
圖7 IIC 應(yīng)答時(shí)序圖
4)讀寫數(shù)據(jù)
首先由單片機(jī)發(fā)送開始信號(hào),緊接著發(fā)送從機(jī)地址并確定讀寫功能(0×46),之后等待從機(jī)的應(yīng)答信號(hào),之后給從機(jī)發(fā)送指令(0×10),最后發(fā)出停止信號(hào),完成一次數(shù)據(jù)傳輸;隨后開始讀取BH1750 測(cè)量結(jié)果。先由主機(jī)發(fā)送開始信號(hào),并發(fā)送從機(jī)地址并確定讀寫功能(0×47),然后等待從機(jī)應(yīng)答信號(hào),BH1750 內(nèi)自帶的ADC 是16 位數(shù)據(jù)轉(zhuǎn)換,也就是兩個(gè)字節(jié),在讀取數(shù)據(jù)時(shí)先讀高8 位,即接收一個(gè)字節(jié),并向從機(jī)發(fā)送應(yīng)答信號(hào),再讀低8 位,接收第二個(gè)字節(jié),最后給從機(jī)應(yīng)答信號(hào),停止信號(hào),讀取完畢,數(shù)據(jù)傳輸時(shí)序圖如圖8 所示。
圖8 IIC 數(shù)據(jù)傳輸時(shí)序圖
本文基于Peoteus 8 仿真軟件,來(lái)對(duì)測(cè)量結(jié)果進(jìn)行演示。當(dāng)閾值設(shè)置完成后,可以進(jìn)行測(cè)量,可以看到,當(dāng)照度值低于閾值設(shè)置的范圍時(shí),屏幕會(huì)出現(xiàn)“?。?!”的警告提示,如圖9 所示,而當(dāng)測(cè)量值在閾值范圍內(nèi)時(shí),不會(huì)出現(xiàn)警告提示,如圖10 所示。
圖9 報(bào)警仿真圖
圖10 正常測(cè)量仿真圖
根據(jù)所繪制的硬件電路圖,基于Altium Designer 軟件對(duì)PCB 板進(jìn)行繪制,采用雙面布線方式,雙面鋪銅,PCB 板圖如圖11 所示。
圖11 PCB 板設(shè)計(jì)圖
本文主要針對(duì)便攜式照度測(cè)量計(jì)進(jìn)行設(shè)計(jì),基于STC89C52 單片機(jī),采用光強(qiáng)檢測(cè)芯片BH1750 作為探測(cè)模塊,將采集的信息通過(guò)LCD1602 液晶顯示屏顯示出來(lái)。通過(guò)按鍵實(shí)現(xiàn)對(duì)閾值的自主選擇,當(dāng)測(cè)量數(shù)據(jù)超過(guò)或低于閾值的情況下,通過(guò)報(bào)警模塊以及屏幕顯示報(bào)警,達(dá)到對(duì)某一區(qū)域照度水平進(jìn)行測(cè)量的效果,本文所提方案和方法為照度測(cè)量系統(tǒng)提供理論借。