作者 / 張瑞增、顏丙波、陳紀旸,山東大學控制科學與工程學院
?
多功能天數計時器的設計與應用
作者 / 張瑞增、顏丙波、陳紀旸,山東大學控制科學與工程學院
針對人們對天數正計時、倒計時產品的需要,設計了多功能天數計時器。本文介紹了該天數計時器硬件接口電路及其軟件編程思路,提出了正計時/倒計時模式自動轉換的簡易方法。該系統能夠進行天數正計時、倒計時,記錄計時開始時間及截止時間,相關信息保存到STC15內部EEPROM中,使其在系統斷電后不丟失,解決了現有產品中數據在掉電后不能保存的問題。采用低功耗日歷時鐘芯片PCF8563 作為實時時鐘,并設計了雙電源電路向PCF8563供電,使實時時鐘在主電路斷電后仍可以繼續運行,保證系統的穩定性。LED數字屏亮度高,室內室外都可使用,且大小可根據需要選擇,提高了系統的通用性。
單片機;正計時;倒計時;EEPROM;PCF8563;LED屏
在企業安全生產中,人們對生產線安全運行天數進行記錄并顯示。在舉辦重大活動時,為了提高對活動的關注度和緊迫感,人們開始研發各種倒計時系統[1]。比如高考倒計時、運動會倒計時、比賽時間計時等等。
本文提出一種基于STC15F2K56S2的多功能天數計時系統設計方案,使正計時/倒計時模式可自由轉換,并通過實驗驗證了其可行性、實用性。利用STC15F2K56S2內部EEPROM保存人們設置的計時時間基準,確保系統掉電后設置的參數不會丟失。
系統主要功能是計算當前時間與截止日期間的天數并在LED數字屏顯示。在設計上,將系統分為6個子模塊:控制器STC15F2K56S2、時鐘芯片PCF8563、設定HMI、LED數字屏、485通信電路、電源管理。系統整體結構框圖如圖1所示。其中控制器STC15F2K56S2作為系統的“大腦”,負責總體運行;時鐘芯片PCF8563提供實時時鐘;設定HMI(Human Machine Interface:人機界面)、LED數字屏和485通信電路作為系統的輸入輸出部分。

圖1 系統整體結構框圖
穩定可靠的硬件是系統長期穩定運行的基礎,硬件的模塊化設計可以將系統化繁為簡,使其更便于設計、制作、調試及維護。下面將整體硬件分6大模塊進行詳細說明。
■2.1 控制器STC15F2K56S2最小系統
控制器采用STC15F2K56S2,其內部包含增強型8051內核、8路高速10位A / D轉換、2KB RAM、56KB ROM、5K 的EEPROM,該EEPROM用于永久保存用戶設定的起始日期、終止日期等信息[2]。STC15F2K系列單片機內置SPI(Serial Peripheral Interface:串行外設接口),方便與其他SPI接口設備連接;內置看門狗,可用程序控制其啟用及關閉。其最小系統原理圖如圖2所示。其中CH340G為USB轉串口芯片,用于給STC15F2K56S2單片機下載程序及PC與MCU(Micro Controller Unit:單片機)間的串口通信,其封裝為SOP-16,方便焊接使用。 STC15F2K56S2作為天數計時系統的控制核心,其引腳功能分配如表1所示。

圖2 控制器最小系統原理圖
■2.2 時鐘芯片PCF8563應用電路
時鐘芯片選用PCF8563,該芯片功耗低,具有實時時鐘和日歷功能,并具有可編程時鐘輸出、定時中斷輸出、低電壓檢測的功能,I2C接口便于和MCU通信[3]。其應用電路如圖3所示。其中紐扣電池BAT1用于在系統斷電時為PCF8563供電,保證時鐘持續、穩定運行。一枚型號為CR1220的紐扣電池的標稱容量為38mAH, PCF8563在3V電池供電消耗電流為0.25μA,故主電路斷電后一枚CR1220電池可使PCF8563運行15年以上[4]。
■2.3 LED數字屏設計
LED數字屏的優點是亮度高、視角廣,在室內室外都可以被清晰的看到,且其大小有多種型號,可根據不同需求進行選擇,提高了系統的通用性。LED數字屏內部有3位七段數碼管,每段數碼管由多個LED燈串并聯組成。其驅動采用大功率達林頓集成電路ULN2803,每段的驅動電流最大可達500mA,為LED數字屏的供電提供了充足的裕度。使用74HC573鎖存器鎖存LED數字屏段選信號,從而用P2口可控制3位數碼管的段選。一位LED數字屏驅動電路如圖4所示。

表1 天數計時系統中STC15引腳功能分配表

圖3 PCF8563應用電路圖
■2.4 設定HMI
設定HMI采用12864液晶作為后臺顯示、6個獨立按鍵用于設定參數、一個蜂鳴器用于輸出聲音。在液晶上顯示當前時間日期、倒計時截止日期、正計時開始日期、倒計時剩余天數、正計時累計天數等信息。
■2.5 485通信電路

圖4 一位LED數碼屏驅動電路
485通信為預留接口,以備后期將設備接入物聯網系統,實現遠程設定計時參數及控制LED數字屏的亮滅。485通信具有通信距離遠、抗干擾能力強的優點,此處選用MAX485芯片作為TTL與RS-485轉換芯片,其硬件電路如圖5所示[5]。

圖5 485通信接口電路
■2.6 電源電路
電源作為整個系統的心臟,其穩定性、抗干擾能力、負載能力將對系統的穩定運行起到至關重要的作用。本系統采用LM2596_5V開關型穩壓芯片,其負載電流最大可達3A,且具有較好的負載調整特性。在DC-DC轉換前,設計LC濾波電路以減小電源的紋波。電源電路如圖6所示。
天數倒計時/正計時器的軟件采用模塊化設計,在主程序中進行計時模式的判斷及相應天數的計算;按鍵設定計時模式及參數的設定在外部中斷中完成。為防止系統在異常情況下,受到強烈干擾,MCU程序跑飛,導致系統長時間不能正常工作,引入看門狗。如果MCU沒有在規定的時間內按預定要求訪問看門狗,就判斷MCU為異常狀態,看門狗就強制MCU復位,使系統重新從頭開始按用戶編寫的程序運行。
■3.1 主程序設計
主程序采用C語言進行編程,使用到順序結構、分支結構、循環結構,在main()函數中執行的操作流程如圖7所示。首先進行系統初始化,然后讀取PCF8563的日歷時鐘,從EEPROM中讀取當前的計時狀態,而后進入3種分支結構的判斷,并根據判斷執行相應的操作。

圖6 5V電源電路
■3.2 輸入設置
首先對6個按鍵的功能定義為菜單/確定鍵、左移鍵、右移鍵、加1鍵、減1鍵、屏幕喚醒鍵。在設定參數時,長按菜單/確定鍵2s,進入設定模式并且液晶屏的相應區域光標閃爍,這樣既防止了誤碰按鍵帶來的問題又將設定的變量突出顯示;再次長按菜單/確定鍵2s,將設置的參數保存,并跳轉到運行模式。12864液晶背光燈電源和供電電源的通斷用三極管開關電路控制,在設定好各參數10s后,關閉液晶顯示,節省電能;在需要顯示時,按下屏幕喚醒按鍵,12864液晶即可重新顯示。

圖7 主程序流程圖
系統時間的設定與矯正、計時截止日期的設定在外部中斷中處理。其處理流程如下圖8所示。當設定的截止日期晚于RTC(Real Time Clock:實時時鐘)日期時,則在程序中判斷為倒計時模式;若設定的截止日期早于或等于RTC日期,則在程序中判斷為正計時模式。

圖8 按鍵設定RTC及計時截止日期流程圖
■3.3 計時天數的計算及顯示
3.3.1 當前日期距離截止日期天數的計算
若RTC日期小于截止日期,則認為是倒計時;若RTC日期大于等于截止日期,則認為是正計時,此算法在程序中完成。計時天數的計算以倒計時為例進行說明。
設N0為當前日期,N1為當前日期在當前年的天數,N2為當前日期到當前年底剩余的天數,S0為終止日期,S1為終止日期在終止年的天數,D1為當前日期距離終止日期的天數。時間先后如下圖9所示。

圖9 倒計時天數計算示意圖
三位計時器最大計時時間為999天,跨度最大為3年。因此倒計時天數分以下3中情況進行計算。
(1)終止年與當前年在同一年
D1 = S1 - N1
(2)終止年與當前年為連續年
D1 = N2 + S1
(3)終止年與當前年跨度3年,計中間一年的天數為Y2
D1 = N2 + S1 + Y2
由于太陽歷中,平年閏年相差一天,因此必須判斷相關的年份是否為閏年。相關年份為閏年時2月29天、全年366天,否則2月28天、全年365天。為使MCU能夠進行天數的運算,定義相關變量。
定義結構體變量
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;
計算一年中的指定某一天來在該年中度過的天數、剩余的天數方法如下。
首先,預定義12個月的天數,寫入數組
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。
然后,計算該天在所在年中度過的天數
Spend_Day = Mon_Day[0]+ Mon_Day[1]+……+ Mon_ Day[Set_Data.Mon-2]+ Set_Data.Day
該天在所在年中剩余的天數Surplus_Day = A_Year_All_ Day - Spend_Day。采用此算法S1、N1、N2、Y2的值即可算出,從而可得當前日期距離終止日期的天數D1。
天數正計時的算法與上面的算法相似,只需交換一下截止日期與RTC日期的順序即可,此處不再詳述。
3.3.2 當前日期距離截止日期天數的顯示
當前日期距離截止日期天數的分別在后臺HMI的液晶及LED數字屏上顯示。具體顯示方案需要根據天數位數不同來用不同的方式進行顯示,其具體顯示方案如圖10所示。根據數據D1位數的多少點亮LED數字屏,減少了系統無用的功耗,以節約電能。

圖10 計時天數在液晶及LED數字屏上顯示方案
基于STC15F2K56S2設計的天數計時器,能夠的實現天數倒計時、正計時的功能,同時能夠顯示當前日期、時分秒等信息,并具有體積小、性價比高、安裝方便的特點,很好的滿足了人們對于天數倒計時、天數正計時的需求。當前設計為一個獨立運行的計時系統,但預留了485通信接口,以便后期與其他物聯網設備連接,實現聯網控制。
* [1]陳娜. 室外倒計時系統的設計與實現[J].河南科技學院學報(自然科學版)2009(1)
* [2] 陳桂友.單片機應用技術基礎[M].2015: 北京:機械工業出版社.230
* [3] 龍世瑜,林漢,陳新源.基于PCF8563戶外型倒計時系統的設計[J].單片機與嵌入式系統應用2004(2)
* [4] PCF8563 Real-time clock/calendar Product data sheet. Rev.11. 26 October 2015
* [5] 趙意鵬,趙河明,張毅,李煥.基于MODBUS和RS-485布網方式的氣體監測系統設計[J]-計算機測量與控制 2015(9)