張鋒


摘 要
設計一種實用的天文時鐘控制器,硬件主要由電源單元、單片機單元、人機界面單元、實時時鐘單元、光照度采集單元、繼電器輸出單元、以及通訊單元等組成。控制器以STM32F103為核心,通過設定的經緯度和當前的日期,計算出日出和日落時間,與模數轉換器采集到的光照度相結合,來控制繼電器的輸出。控制器還可以接收GPRS控制指令,實現特殊控制。
【關鍵詞】天文時鐘 STM32F103 光照度采集 實時時鐘 日出日落
隨著社會的發展和節能降耗的要求,對道路交通照明的要求越來越高,需要根據日出日落時間和光照度、以及遠程臨時指令來開關照明燈具的供電電源,以實現照明的靈活控制。為此,設計了一款天文時鐘控制器,并在實踐中得到了應用。
1 總體設計
設計基于單片機的天文時鐘控制器,系統框圖如圖1所示,電路由由電源單元、單片機單元、人機界面單元、實時時鐘單元、光照度采集單元、繼電器輸出單元、以及通訊單元等組成。電源單元給其余單元提供電源,人機界面單元的按鍵與單片機的IO口相連,人機界面單元的LCD與單片機通過并行電平轉換芯片相連,光照度采集單元與單片機的AD采集通道相連,實時時鐘單元與單片機通過I2C總線相連,通訊單元與單片機的UART串口相連,繼電器輸出單元與單片機的IO口相連。
2 硬件設計
電源單元采用TOP253芯片為控制芯片,經反激式脈沖變壓器把交流220V轉化為系統芯片使用的電壓,+5V,+3.3V,隔離的24V等。
單片機單元以STM32F103為核心,屬ARM Cortex-M3系列,主頻72MHz,帶有雙路12位ADC,帶有I2C、USART等接口,內置SRAM和大容量FLASH等,集成度高。采用3.3V、8MHz有源晶振,引出SWD接口作為調試口。使用外部硬件看門狗MAX706S,在收外部干擾使程序跑飛時復位芯片,使軟件重新運行。與芯片內部看門狗相比,MAX706S在系統上電掉電情況下,系統電壓尚未穩定時使芯片處于復位狀態,避免誤動作。
人機界面單元包括按鍵和LCD兩部分,按鍵部分與單片機的IO直接相連。因STM32F103工作電壓為+3.3V,LCD接口電壓則是+5V,需要2片電平轉換芯片74LVC4245APW。見圖2,實時時鐘單元主芯片為RX8025SA, 與STM32F103的I2C管腳相連。系統正常工作時,電源單元的+3.3V為RX8025SA提供電源,系統未上電時,由CR2032電池為時鐘芯片提供電源,保持實時時鐘數據繼續計數。
光照度采集單元部分通過模擬光耦HCPL-788J將光照度傳感器的4-20mA電流信號轉換為電壓信號,經低通濾波后送到STM32F103單片機的AD采樣通道管腳上,同時起到隔離作用。
通訊單元采用GPRS通訊,選用SIM900A模塊,與STM32的串口相連。
繼電器輸出單元與單片機單元的2個輸出引腳相連,然后通過光耦TLP627接到2個24V繼電器的線圈上,2個繼電器分別為主控繼電器和節能繼電器,各提供1個常開干接點輸出。
3 軟件設計
3.1 人機界面部分
LCD為128*64點陣液晶,分為4行顯示,每行可顯示16個字符或8個漢字。按鍵部分有4個按鍵,分別為“MODE”、“SHIFT”、“DATA” 和“ENTER”。因顯示一屏時間較長,當讀按鍵程序放在主程序中時,有時按下鍵時會沒有反應。因此,將讀按鍵程序和按鍵去抖程序放在1mS定時器中斷中。顯示程序采用菜單結構,可通過按鍵翻頁顯示多種參數和實時狀態。通過按鍵和LCD顯示,可設置日期時間和本地經度緯度,開燈照度與關燈照度以及確認時間等參數。
3.2 日出日落時間計算
STM32F103從實時時鐘單元得到具體年月日數據,另外從人機接口單元得到本地的經度和緯度,據此計算出從格林威治時間2000年1月1日到計算日的精確天數,進而計算此刻的本地恒星時、太陽的黃道經度和太陽的傾角、以及太陽的圓周半徑等,最后得到太陽在黃道南邊的時間,區分東西半球后進一步處理,從而得到需要的日出和日落時間。
3.3 光照度采集
采用雙ADC的DMA模式,一路ADC用于光照度采集,另一路接地用于校驗數據的有效性。按照每20mS采樣24點的要求開啟ADC觸發定時器,取24次AD采樣的平均值進行數字濾波,以消除工頻干擾。并通過預設系數轉換為對應的流明數。開啟轉換完成的DMA中斷。
3.4 通訊軟件
通訊軟件要求的反應時間不高,可不使用發送和接收中斷占用CPU時間,利用STM32F103芯片的DMA來處理。
DMA中斷不開啟,在定時器中斷中進行串口數據處理。單片機通過AT指令集與GPRS模塊進行通訊,監測收到的短信息。為防止誤操作,開關燈指令分別需要不同的32位密碼,并對報文進行CRC校驗。
3.5 軟件總體設計
中斷優先級的設置,軟件中開啟了2路中斷,1mS定時器中斷和采樣DMA中斷,要求1mS定時器中斷優先級要高于采樣DMA中斷。部分代碼如下:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/*1mS timer*/
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
... ...
/*ADC DMA*/
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
... ...
當沒有收到通訊控制指令時,若當前未開燈,光照度在確認時間內(缺省為5分鐘)連續小于開燈照度,或者當前時間大于日落時間時,軟件閉合主控繼電器。關燈時則需要2個條件同時滿足,即光照度在確認時間內連續大于關燈照度,以及當前時間大于日出時間。節能繼電器的輸出與節能時間有關,以上次日落時間和下次日出時間的中間時刻為中點,取節能時間的一半的前后偏移。比如設定節能時間為4小時,則在中點時刻前后2小時之間閉合節能繼電器,其余時間斷開。通訊指令的優先級高于光控和天文控制,收到指令后立即執行開關燈,閉合或斷開主控繼電器。
4 測試
將參數設置為上海市徐匯區的經度121.32°,緯度31.13°,實時時鐘時間設置為2017年9月10日,控制器計算的日出時間為05:44:15,日落時間為18:12:23,與萬年歷標示的時刻一樣。多次更改經緯度和日期,均能得到相同的數據。光照度測量準確性也較高,GPRS模塊接收到指令后,可以正確控制繼電器輸出。
5 結語
以STM32F103單片機為核心的天文時鐘控制器,可通過人機界面進行經緯度和日期時間等參數的設置,并進行了光照度采集和日出日落時間計算,能夠根據光照情況和日出日落的變化進行靈活控制,并可以進行GPRS無線控制。設計已進行了小批量試用,實際運行中工作正常。
參考文獻
[1]ST,STM32F103xC STM32F103xD STM32F103xE Rev12,2015(11).
[2]廖義奎.CortexM3之STM32嵌入式系統設計[M].機械工業出版社,2012(04).
[3]劉火良,楊森.STM32庫開發實戰指南,2013(11).
[4]EPSON.RX-8025 SA/NB Preliminary,2002(11).
[5]劉火良,楊森.STM32庫開發實戰指南[M].機械工業出版社,2013(11).