作者 / 張瑞增、顏丙波、陳紀旸,山東大學控制科學與工程學院
?
多功能天數(shù)計時器的設(shè)計與應(yīng)用
作者 / 張瑞增、顏丙波、陳紀旸,山東大學控制科學與工程學院
針對人們對天數(shù)正計時、倒計時產(chǎn)品的需要,設(shè)計了多功能天數(shù)計時器。本文介紹了該天數(shù)計時器硬件接口電路及其軟件編程思路,提出了正計時/倒計時模式自動轉(zhuǎn)換的簡易方法。該系統(tǒng)能夠進行天數(shù)正計時、倒計時,記錄計時開始時間及截止時間,相關(guān)信息保存到STC15內(nèi)部EEPROM中,使其在系統(tǒng)斷電后不丟失,解決了現(xiàn)有產(chǎn)品中數(shù)據(jù)在掉電后不能保存的問題。采用低功耗日歷時鐘芯片PCF8563 作為實時時鐘,并設(shè)計了雙電源電路向PCF8563供電,使實時時鐘在主電路斷電后仍可以繼續(xù)運行,保證系統(tǒng)的穩(wěn)定性。LED數(shù)字屏亮度高,室內(nèi)室外都可使用,且大小可根據(jù)需要選擇,提高了系統(tǒng)的通用性。
單片機;正計時;倒計時;EEPROM;PCF8563;LED屏
在企業(yè)安全生產(chǎn)中,人們對生產(chǎn)線安全運行天數(shù)進行記錄并顯示。在舉辦重大活動時,為了提高對活動的關(guān)注度和緊迫感,人們開始研發(fā)各種倒計時系統(tǒng)[1]。比如高考倒計時、運動會倒計時、比賽時間計時等等。
本文提出一種基于STC15F2K56S2的多功能天數(shù)計時系統(tǒng)設(shè)計方案,使正計時/倒計時模式可自由轉(zhuǎn)換,并通過實驗驗證了其可行性、實用性。利用STC15F2K56S2內(nèi)部EEPROM保存人們設(shè)置的計時時間基準,確保系統(tǒng)掉電后設(shè)置的參數(shù)不會丟失。
系統(tǒng)主要功能是計算當前時間與截止日期間的天數(shù)并在LED數(shù)字屏顯示。在設(shè)計上,將系統(tǒng)分為6個子模塊:控制器STC15F2K56S2、時鐘芯片PCF8563、設(shè)定HMI、LED數(shù)字屏、485通信電路、電源管理。系統(tǒng)整體結(jié)構(gòu)框圖如圖1所示。其中控制器STC15F2K56S2作為系統(tǒng)的“大腦”,負責總體運行;時鐘芯片PCF8563提供實時時鐘;設(shè)定HMI(Human Machine Interface:人機界面)、LED數(shù)字屏和485通信電路作為系統(tǒng)的輸入輸出部分。
圖1 系統(tǒng)整體結(jié)構(gòu)框圖
穩(wěn)定可靠的硬件是系統(tǒng)長期穩(wěn)定運行的基礎(chǔ),硬件的模塊化設(shè)計可以將系統(tǒng)化繁為簡,使其更便于設(shè)計、制作、調(diào)試及維護。下面將整體硬件分6大模塊進行詳細說明。
■2.1 控制器STC15F2K56S2最小系統(tǒng)
控制器采用STC15F2K56S2,其內(nèi)部包含增強型8051內(nèi)核、8路高速10位A / D轉(zhuǎn)換、2KB RAM、56KB ROM、5K 的EEPROM,該EEPROM用于永久保存用戶設(shè)定的起始日期、終止日期等信息[2]。STC15F2K系列單片機內(nèi)置SPI(Serial Peripheral Interface:串行外設(shè)接口),方便與其他SPI接口設(shè)備連接;內(nèi)置看門狗,可用程序控制其啟用及關(guān)閉。其最小系統(tǒng)原理圖如圖2所示。其中CH340G為USB轉(zhuǎn)串口芯片,用于給STC15F2K56S2單片機下載程序及PC與MCU(Micro Controller Unit:單片機)間的串口通信,其封裝為SOP-16,方便焊接使用。 STC15F2K56S2作為天數(shù)計時系統(tǒng)的控制核心,其引腳功能分配如表1所示。
圖2 控制器最小系統(tǒng)原理圖
■2.2 時鐘芯片PCF8563應(yīng)用電路
時鐘芯片選用PCF8563,該芯片功耗低,具有實時時鐘和日歷功能,并具有可編程時鐘輸出、定時中斷輸出、低電壓檢測的功能,I2C接口便于和MCU通信[3]。其應(yīng)用電路如圖3所示。其中紐扣電池BAT1用于在系統(tǒng)斷電時為PCF8563供電,保證時鐘持續(xù)、穩(wěn)定運行。一枚型號為CR1220的紐扣電池的標稱容量為38mAH, PCF8563在3V電池供電消耗電流為0.25μA,故主電路斷電后一枚CR1220電池可使PCF8563運行15年以上[4]。
■2.3 LED數(shù)字屏設(shè)計
LED數(shù)字屏的優(yōu)點是亮度高、視角廣,在室內(nèi)室外都可以被清晰的看到,且其大小有多種型號,可根據(jù)不同需求進行選擇,提高了系統(tǒng)的通用性。LED數(shù)字屏內(nèi)部有3位七段數(shù)碼管,每段數(shù)碼管由多個LED燈串并聯(lián)組成。其驅(qū)動采用大功率達林頓集成電路ULN2803,每段的驅(qū)動電流最大可達500mA,為LED數(shù)字屏的供電提供了充足的裕度。使用74HC573鎖存器鎖存LED數(shù)字屏段選信號,從而用P2口可控制3位數(shù)碼管的段選。一位LED數(shù)字屏驅(qū)動電路如圖4所示。
表1 天數(shù)計時系統(tǒng)中STC15引腳功能分配表
圖3 PCF8563應(yīng)用電路圖
■2.4 設(shè)定HMI
設(shè)定HMI采用12864液晶作為后臺顯示、6個獨立按鍵用于設(shè)定參數(shù)、一個蜂鳴器用于輸出聲音。在液晶上顯示當前時間日期、倒計時截止日期、正計時開始日期、倒計時剩余天數(shù)、正計時累計天數(shù)等信息。
■2.5 485通信電路
圖4 一位LED數(shù)碼屏驅(qū)動電路
485通信為預(yù)留接口,以備后期將設(shè)備接入物聯(lián)網(wǎng)系統(tǒng),實現(xiàn)遠程設(shè)定計時參數(shù)及控制LED數(shù)字屏的亮滅。485通信具有通信距離遠、抗干擾能力強的優(yōu)點,此處選用MAX485芯片作為TTL與RS-485轉(zhuǎn)換芯片,其硬件電路如圖5所示[5]。
圖5 485通信接口電路
■2.6 電源電路
電源作為整個系統(tǒng)的心臟,其穩(wěn)定性、抗干擾能力、負載能力將對系統(tǒng)的穩(wěn)定運行起到至關(guān)重要的作用。本系統(tǒng)采用LM2596_5V開關(guān)型穩(wěn)壓芯片,其負載電流最大可達3A,且具有較好的負載調(diào)整特性。在DC-DC轉(zhuǎn)換前,設(shè)計LC濾波電路以減小電源的紋波。電源電路如圖6所示。
天數(shù)倒計時/正計時器的軟件采用模塊化設(shè)計,在主程序中進行計時模式的判斷及相應(yīng)天數(shù)的計算;按鍵設(shè)定計時模式及參數(shù)的設(shè)定在外部中斷中完成。為防止系統(tǒng)在異常情況下,受到強烈干擾,MCU程序跑飛,導致系統(tǒng)長時間不能正常工作,引入看門狗。如果MCU沒有在規(guī)定的時間內(nèi)按預(yù)定要求訪問看門狗,就判斷MCU為異常狀態(tài),看門狗就強制MCU復(fù)位,使系統(tǒng)重新從頭開始按用戶編寫的程序運行。
■3.1 主程序設(shè)計
主程序采用C語言進行編程,使用到順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),在main()函數(shù)中執(zhí)行的操作流程如圖7所示。首先進行系統(tǒng)初始化,然后讀取PCF8563的日歷時鐘,從EEPROM中讀取當前的計時狀態(tài),而后進入3種分支結(jié)構(gòu)的判斷,并根據(jù)判斷執(zhí)行相應(yīng)的操作。
圖6 5V電源電路
■3.2 輸入設(shè)置
首先對6個按鍵的功能定義為菜單/確定鍵、左移鍵、右移鍵、加1鍵、減1鍵、屏幕喚醒鍵。在設(shè)定參數(shù)時,長按菜單/確定鍵2s,進入設(shè)定模式并且液晶屏的相應(yīng)區(qū)域光標閃爍,這樣既防止了誤碰按鍵帶來的問題又將設(shè)定的變量突出顯示;再次長按菜單/確定鍵2s,將設(shè)置的參數(shù)保存,并跳轉(zhuǎn)到運行模式。12864液晶背光燈電源和供電電源的通斷用三極管開關(guān)電路控制,在設(shè)定好各參數(shù)10s后,關(guān)閉液晶顯示,節(jié)省電能;在需要顯示時,按下屏幕喚醒按鍵,12864液晶即可重新顯示。
圖7 主程序流程圖
系統(tǒng)時間的設(shè)定與矯正、計時截止日期的設(shè)定在外部中斷中處理。其處理流程如下圖8所示。當設(shè)定的截止日期晚于RTC(Real Time Clock:實時時鐘)日期時,則在程序中判斷為倒計時模式;若設(shè)定的截止日期早于或等于RTC日期,則在程序中判斷為正計時模式。
圖8 按鍵設(shè)定RTC及計時截止日期流程圖
■3.3 計時天數(shù)的計算及顯示
3.3.1 當前日期距離截止日期天數(shù)的計算
若RTC日期小于截止日期,則認為是倒計時;若RTC日期大于等于截止日期,則認為是正計時,此算法在程序中完成。計時天數(shù)的計算以倒計時為例進行說明。
設(shè)N0為當前日期,N1為當前日期在當前年的天數(shù),N2為當前日期到當前年底剩余的天數(shù),S0為終止日期,S1為終止日期在終止年的天數(shù),D1為當前日期距離終止日期的天數(shù)。時間先后如下圖9所示。
圖9 倒計時天數(shù)計算示意圖
三位計時器最大計時時間為999天,跨度最大為3年。因此倒計時天數(shù)分以下3中情況進行計算。
(1)終止年與當前年在同一年
D1 = S1 - N1
(2)終止年與當前年為連續(xù)年
D1 = N2 + S1
(3)終止年與當前年跨度3年,計中間一年的天數(shù)為Y2
D1 = N2 + S1 + Y2
由于太陽歷中,平年閏年相差一天,因此必須判斷相關(guān)的年份是否為閏年。相關(guān)年份為閏年時2月29天、全年366天,否則2月28天、全年365天。為使MCU能夠進行天數(shù)的運算,定義相關(guān)變量。
定義結(jié)構(gòu)體變量
typedef struct
{
unsigned int Year;
unsigned char Mon;
unsigned char Day;
unsigned char Hour;
unsigned char Min;
unsigned char Sec;
}RTC_Struct;
RTC_Struct Set_Data;
計算一年中的指定某一天來在該年中度過的天數(shù)、剩余的天數(shù)方法如下。
首先,預(yù)定義12個月的天數(shù),寫入數(shù)組
unsigned char Mon_Day[12] = {31, 28, 31, 30, 31, 30, 31,31, 30, 31, 30, 31};
對于指定的一天Set_Data.Day,先判斷其所在年份Set_Data.Year是否為閏年。若為閏年則Mon_Day[1]= 29,A_Year_All_Day=366,否則Mon_Day[1]=28,A_Year_All_ Day=365。
然后,計算該天在所在年中度過的天數(shù)
Spend_Day = Mon_Day[0]+ Mon_Day[1]+……+ Mon_ Day[Set_Data.Mon-2]+ Set_Data.Day
該天在所在年中剩余的天數(shù)Surplus_Day = A_Year_All_ Day - Spend_Day。采用此算法S1、N1、N2、Y2的值即可算出,從而可得當前日期距離終止日期的天數(shù)D1。
天數(shù)正計時的算法與上面的算法相似,只需交換一下截止日期與RTC日期的順序即可,此處不再詳述。
3.3.2 當前日期距離截止日期天數(shù)的顯示
當前日期距離截止日期天數(shù)的分別在后臺HMI的液晶及LED數(shù)字屏上顯示。具體顯示方案需要根據(jù)天數(shù)位數(shù)不同來用不同的方式進行顯示,其具體顯示方案如圖10所示。根據(jù)數(shù)據(jù)D1位數(shù)的多少點亮LED數(shù)字屏,減少了系統(tǒng)無用的功耗,以節(jié)約電能。
圖10 計時天數(shù)在液晶及LED數(shù)字屏上顯示方案
基于STC15F2K56S2設(shè)計的天數(shù)計時器,能夠的實現(xiàn)天數(shù)倒計時、正計時的功能,同時能夠顯示當前日期、時分秒等信息,并具有體積小、性價比高、安裝方便的特點,很好的滿足了人們對于天數(shù)倒計時、天數(shù)正計時的需求。當前設(shè)計為一個獨立運行的計時系統(tǒng),但預(yù)留了485通信接口,以便后期與其他物聯(lián)網(wǎng)設(shè)備連接,實現(xiàn)聯(lián)網(wǎng)控制。
* [1]陳娜. 室外倒計時系統(tǒng)的設(shè)計與實現(xiàn)[J].河南科技學院學報(自然科學版)2009(1)
* [2] 陳桂友.單片機應(yīng)用技術(shù)基礎(chǔ)[M].2015: 北京:機械工業(yè)出版社.230
* [3] 龍世瑜,林漢,陳新源.基于PCF8563戶外型倒計時系統(tǒng)的設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用2004(2)
* [4] PCF8563 Real-time clock/calendar Product data sheet. Rev.11. 26 October 2015
* [5] 趙意鵬,趙河明,張毅,李煥.基于MODBUS和RS-485布網(wǎng)方式的氣體監(jiān)測系統(tǒng)設(shè)計[J]-計算機測量與控制 2015(9)