張鋒


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