羅 江
(四川文理學院 物理與機電工程學院,達州 635000)
?
羅江
(四川文理學院 物理與機電工程學院,達州 635000)
摘要:以AT89S51單片機為例,使用分時共享的方法實現系統多任務控制,使用PCF8591實現A/D和D/A轉換,通過采集的環境變量與預存數據比較,確定主照明燈的工作狀態,同時設計了副照明燈控制電路輔助系統。此系統應用于路燈燈光控制,達到了智能處理、節能控制的目的。
關鍵詞:微控制器;多任務;時間片;節能控制
引言
在智能燈光控制系統中,來自外界聲、光、溫度等多種信息,反映了當時的環境狀態,系統捕捉到這些數據后進行分析,根據預設的規則進行實時處理,達到對燈光節能控制的目的。環境信息隨機性強,可能同時產生,也可能順序產生和變化,這就要求系統能夠及時處理數據并產生準確判斷,控制燈光的亮滅和明暗,以適應環境要求。
1單片機多路多任務控制的原理
單片機一般都有多個外部中斷源和并行I/O端口,可以通過外部中斷(或擴充的多級外部中斷)來感知外界多路傳感器的信息,經CPU處理后,通過并行I/O口驅動效應器,以實時感知和處理外部事件,實現多路控制。若能合理地配合使用定時器,就可以實現多路多任務控制。
2多任務控制調度算法設計
分時多任務控制的關鍵在于時間片的選取和調度算法的設計[4-5]。假設一個智能控制系統,有n路設備需要實時控制,系統輪詢時間在tmin~tmax之間變化。設n個設備的管理程序對應優先級分別為P1,P2,…,Pn,則設計如下時間片分配和任務調度算法。
2.1平均分配、順序調度
這種方法計算時間片和任務調度算法都最簡單,每個設備獲得CPU的機會均等,比較適合設備單一、任務相近的簡單控制系統。
2.2平均分配、優先調度
時間片長度平均分配,按設備運行時的優先級來確定調度任務的先后順序,任務調度與優先級處理遵照規則進行處理(具體規則略——編者注)。
該方法比較好地體現設備運行的緊急程度,算法也比較簡單,但是增加了系統訪問設備的開銷,降低了系統效率。
2.3變長分配、優先調度
這種算法設備在處理緊急情況時可以充分占有CPU,執行效率較高,實時性較強,但是調度算法設計較為復雜,還需占用大量空間來存儲時間表、臨時數據。
3智能燈光控制系統的硬件設計
照明燈光的強弱由環境決定,外界諸多因素都是控制所需的信息,其中環境光強弱、聲音(噪聲)大小和溫度等是主要因素[6]。環境光強,則照明燈照度減弱或熄滅;噪聲強而持久說明人員較多,則照明燈光照度適當增強或照明時間延長;溫度高,則應適當降低照度以減少發熱,保護燈具。
3.1系統工作流程
來自外界光(W)、聲(S)、溫度(T)等多種數據反映了當時的環境狀態,系統捕捉到這些數據進行分析,根據設計的規則進行處理并實時控制照明驅動電路,達到對燈光節能控制的目的。控制系統結構框圖如圖1所示。

圖1 智能燈光控制系統結構框圖
其中,傳感器用于感知和采集環境數據,它們是多路同時工作的。
多路A/D轉換將傳感器采集到的環境信號轉換的數字信號供單片機(MCU)處理。
MCU是系統的核心,執行分時復用的多任務調度算法,讀取各路A/D轉換器的值并存儲,然后與內存中預設的各參數的臨界值進行比較,決定輸出的控制數據。
D/ A轉換及控制器將MCU處理結果轉換為輸出電壓的大小,從而控制照明燈的狀態。
看門狗復位電路防止程序運行時可能進入混亂或死循環狀態,在異常情況下,發出系統復位信號并記錄當時的照明燈狀態數據,使系統恢復工作。
時鐘發生器用于預設控制的時間,與預存的季節和正常天氣下亮暗的時間數據對比,供MCU參考[7]。為了時鐘能正常運行和校準,需要安裝電池供電和增設一個簡單的鍵盤,以供時鐘消耗和設置當前時間。
主照明燈需要一個調壓電路,副照明燈使用繼電器控制工作,以便深夜人員稀少、主燈停止工作時開啟。照明燈的亮滅和功率輸出大小,均由MCU控制。
3.2系統硬件選擇
由于路燈照明控制并不需要太高的精度和速度,控制系統應小巧、功耗少、成本低、穩定性好。因此,可以選用以下2種方案:
① A/D 轉換采用帶有高阻抗緩沖輸入的低功耗4路8位串行數/模轉換器TLC5620,實現4路模擬信號獨立采集。D/A轉換采用經典8位并行的DAC0832芯片,或者精度較高的12位串行數/模轉換芯片AD7543。
② 直接使用單電源、低功耗8位CMOS型A/D、D/A轉換芯片PCF8591,其有4路模擬量輸入通道、1路模擬量輸出通道以及1個I2C總線接口[8]。
環境因素中光和溫度隨季節、天氣和時間變化,聲音在白天(除了陰雨天外)對系統沒太大影響,夜晚隨機產生噪聲可能激發路燈照明。這些因素若能夠獨立采集,則可以使用功能特有、參數不同的傳感器來探知。但實際情況是,路燈照明的控制并不需要太精確,各路信號也不必同時采集,只要選用工作電壓一致的傳感器,用程序對采集的各路數據進行修正處理,再利用中斷即可實時采集各路數據。因此選用第2種方案,使用芯片少,電路簡單,功耗和成本較低。
3.3控制系統的硬件設計
根據以上分析,照明燈智能控制系統的硬件原理如圖2所示。
系統初始化后,AT89S51即分時對PCF8591的3路輸入AIN0~2采集數據,并將數據轉換成環境變量W、S、T進行存儲。采集一定時間后,統計數據得到較為準確的環境變量值,然后通過控制算法判斷環境狀態和變化趨勢,從而確定對照明燈的控制。若需開啟主照明燈,則啟動PCF8591的D/A模式,根據計算出的數據按8位精度步進調整輸出電壓,再通過調壓模塊控制主照明燈開關和亮度增減。如在深夜無人時只需開啟副照明燈,則將AT89S51的P1.0清0,繼電器吸合,副照明燈工作,此時系統按一個較長周期探測AIN1端(聲音輸入端),以減少系統開銷,最大限度降低能耗。
PCF8591作為A/D轉換元件,體積小、耗電低,很適合微型化批量生產。傳感器采用常見的光敏電路、熱敏電阻和拾音器,外圍電路簡單,成本較低。電源由市電直接提供,方便統一控制。
4系統軟件設計

圖2 系統原理圖
系統采用模塊化設計,由主程序和采集模塊、控制模塊、保護模塊等構成。系統初始化后,調度時間片分配程序,分別為數據采集端和控制端分配時間片,然后等待響應。由于系統所處環境因素隨機性較強,為簡化程序,采用“平均分配、順序調度”的多任務調度算法。響應后調用處理模塊進行數據處理和系統控制。系統可以使用Keil μVision編程,利用Proteus設計硬件和仿真。
4.1主程序流程
主程序的流程圖如圖3所示。首先進行系統初始化,完成內部環境變量存儲單元清0,定時器T、PCF8591的初始值設置等;然后啟動定時器T1定時(如50 ms),依次采集光、聲、溫度等外界環境變量,將多次采集數據的平均值計算出來,存儲在對應單元中。一輪時間調度完成后,調用數據分析與處理模塊,根據反饋的數據判定系統有沒有故障,進而調用照明燈控制模塊或進行故障處理。
以下是通過時間片順序輪換算法實現多路多任務控制的部分C源程序:
#include
#define uchar unsigned char
ucharmode=0; //設備編號,初始值為0,表示從第1號設備
//開始分配時間片
uchar s[3];//存儲環境采集到的光W、聲音S、溫度T數據
voidA2D8591 (uchar mode);//采集處理函數
uchar analysis (uchar s[]);
//數據分析函數,返回值是照明燈控制數據
void ligcontrol(uchar k);
//照明燈控制函數(含D/A轉換),k為主、副燈控制標志

圖3 主程序流程圖
定時器/中斷服務函數略——編者注。
4.2A/D和D/A處理模塊
PCF8591采用典型的I2C總線接口,由內部地址選擇字和轉換控制字來設置,且高4位地址規定為1001,低3位A2、A1、A0為引腳地址。由于PCF8591同時承擔A/D、D/A轉換,因此必須對其工作方式(即讀/寫操作)進行選擇,將其地址選擇字最低位D0設置成1或0(即讀與寫)。在總線操作時,MCU先發送由器件地址、引腳地址和方向位組成的第1字節,然后發出第二個字節即控制字,其中:D1、D0是A/D通道編號,D2是自動增益選擇(設為1,不自動轉換通道),D4、D5是模擬量輸入方式(設為00,4路單端輸入),D6是模擬輸出允許位(A/D和D/A轉換時分別設置為0和1)。
A/D和D/A處理模塊主要是對PCF8591進行初始化、啟動、傳送數據等操作。A/D的通道由定時中斷來切換,D/A轉換在數據分析后啟動。A/D和D/A轉換模塊的程序流程圖分別如圖4和圖5所示。需注意的是,A/D轉換結束后,需要先發送一個非應答信號位A后,再發送結束信號位P。A/D轉換的輸出是上一次的轉換結果,因此需兩次讀取,第二次讀出的數據即為當前轉換的數據[8]。由于本系統僅對時間片內多次轉換的數據進行平均處理,因此并不需要讀取第二次。

圖4 A/D轉換流程圖

圖5 D/A轉換流程圖
4.3照明燈控制模塊
系統分為主照明燈與副照明燈兩個控制子系統,程序由3個主要判斷構成:
① 環境亮度超過高臨界值wmax時,說明環境光照環境好,關閉所有照明燈以節省電力,小于低臨界值wmin時啟動主照明燈。
② 接著判斷環境溫度,超過某個臨界值tmax時說明溫度過高,MCU將通過D/A轉換輸出值0,關閉主照明電路,防止消耗過大、溫度過高損壞設備。
③ 最后判斷環境亮度w在基一個區間內時,或者環境噪聲低于某個值smin時,則說明當時是凌晨(黃昏)光線較好,或者是深夜人車稀少時,僅需要輔助燈光即可,此時關閉主照明燈,啟動副照明燈(讓MCU的P1.0清0)。
這里的臨界值需要在實際環境下通過測試系統測試,然后寫入系統ROM中。
4.4其他程序
看門狗使用典型的AT89S51片內看門狗程序。數據處理程序采集數據平均值,算出即時的環境變量值,程序比較簡單。系統預先設計了實時時鐘為系統提供時間,以便處理季節變換對4.3節提及的各數據臨界值的影響。
結語
本文設計了燈光控制系統,用單片機時間片輪換算法,實現了多任務控制,應用在燈光控制中達到智能、節能控制的目的。如果再設計出單片機與單片機之間、單片機與PC之間的通信協議,即可通過串口實現對單片機的遠距離通信與控制,系統在實際控制應用中將具有更高的實用價值。
編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。
參考文獻
[1] 羅江,戶永清.51單片機多任務機制的實現策略研究[J].四川文理學院學報,2008,18(2):447-448.
[2] 肖建明,張向利.一種改進的時間片輪轉調度算法[J].計算機應用,2005,25(12):447-448.
[3] 胡賽,趙碧海,熊慧軍.一種公平的動態輪轉算法[J].湖南師范大學:自然科學學報,2012,35(5):30-36.
[4] 陳宏偉,黃永明,章國寶.單片機多任務的時間片方式實現[J].單片機與嵌入式系統應用,2012,12(8):73-75.
[5] 莫國民,王艷.分時操作系統在多單片機系統中的應用[J].計算機應用,2012,32(s1):161-163.
[6] 張運詩,仲兆準,鐘勝奎,等.霧化干燥儀溫度檢測與控制系統[J].儀表技術與傳感器,2014(9):19-22.
[7] 李雪峰.簡易環境測試儀[J].微型機與應用,2014,33(9):85-88.
[8] 陳柱峰,沈治國.基于PCF8591的I2C總線A/D、D/A轉換[J].企業技術開發,2009,28(5):18-21.

Luo Jiang
(Department of Physics and Engineering,Sichuan University of Arts and Science,Dazhou 635000,China)
Abstract:Taking the AT89S51 as an example,the system realizes multi-task control by using the method of time-sharing.The PCF8591 is used to achieve the A/D and D/A conversion.The working state of the main lighting lamp is determined by comparing the environmental variables with the pre stored data,at the same time,the assistant lighting control system is designed.The system is applied to control the light of street lamp,which can achieve the purpose of intelligent processing and energy-saving control.
Key words:microcontroller;multi-task;time slice;energy-saving control
收稿日期:(責任編輯:楊迪娜2015-10-03)
中圖分類號:TP368.1
文獻標識碼:A
* 基金項目:四川省教育廳自然科學項目(項目編號:15ZB0315、13ZA0102)階段性成果之一。