王長清,趙天恩,李 彥,江長青,蔡 菠,何 嶸
(南京南瑞繼保電氣有限公司,江蘇 南京 211102)
電力系統(tǒng)自動化設(shè)備配置時鐘同步系統(tǒng),為不同的設(shè)備提供了時鐘同步所需的時鐘源。自動化設(shè)備多采用分布式系統(tǒng)架構(gòu),設(shè)備內(nèi)模塊之間也要進行時鐘同步。自動化設(shè)備和模塊的時鐘同步,便于進行信息綜合[1];同時,只有采用時鐘同步手段,才能滿足事件順序記錄(sequence of event,SOE)時標誤差不大于1 ms的要求[2-3]。尤其在系統(tǒng)發(fā)生故障時,SOE時標的統(tǒng)一、準確,有利于事故原因分析。
時鐘同步裝置接收北斗/GPS衛(wèi)星發(fā)送的授時信號,處理后向自動化設(shè)備提供時鐘同步信號。時鐘同步裝置輸出同步信號的方式主要有IRIG-B、IEEE 1588、秒脈沖(pulse per second,PPS)、分脈沖(pulse per minute,PPM)、簡單網(wǎng)絡(luò)時間協(xié)議(simple network time protocol,SNTP)、IEC 103報文等[4]。
本文主要研究了分布式系統(tǒng)內(nèi)的串行通信對時設(shè)計。文獻[5]介紹了一種采用串口對時和脈沖對時結(jié)合的方式。串口報文連接線負責設(shè)備日歷時間的對時。PPS連接線下發(fā)同步信息。文獻[6]介紹了一種采用串口分時復用的方式。串口連接線先下發(fā)日歷時間,在整秒時刻再下發(fā)PPS同步碼。以上兩種方法均能實現(xiàn)較精確的對時。但方法一串口和脈沖對時線分開,受限于布線數(shù)目;方法二在中斷中響應整秒同步碼,中斷響應延時不確定,影響對時精度和總線復用。本文設(shè)計的方案彌補了上述兩種方法的缺陷。
系統(tǒng)包含主控模塊、高速串行通信總線以及掛接在高速串行通信總線上的輔控模塊。主控模塊借助現(xiàn)場可編程門陣列(field programmable gate array,F(xiàn)PGA)實現(xiàn)串行通信,在高速串行通信總線上傳輸數(shù)據(jù)通信和對時報文。數(shù)據(jù)通信報文采用主從輪詢方式,輔控模塊接收到該報文后回復報文;對時報文采用廣播方式,輔控模塊接收到該報文后只進行對時處理流程,不回復報文。
本文設(shè)計的分布式系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 分布式系統(tǒng)結(jié)構(gòu)圖Fig.1 Structure of the distributed system
主控模塊軟件劃分為管理、控制算法、對時、串行通信等模塊。本文僅闡述與對時相關(guān)的內(nèi)容。主控模塊內(nèi)部通過共享內(nèi)存的方式進行數(shù)據(jù)交換。共享內(nèi)存分為循環(huán)報文緩存區(qū)和管理內(nèi)存區(qū)。
一方面,主控模塊集成的FPGA通過IRIG-B方式從北斗/GPS授時裝置接收授時信息,并將解碼后的信息和整秒對應的時鐘節(jié)拍(TICK)通過管理內(nèi)存區(qū)共享給對時模塊。對時模塊負責守時,并將下一個整秒對應的TICK值和這一秒對應的TICK值通過管理內(nèi)存區(qū)共享給FPGA,由FPGA完成對時報文組幀和發(fā)送。
另一方面,F(xiàn)PGA接收到串行通信報文后,使用直接內(nèi)存訪問(direct memory access,DMA)方式推送到循環(huán)報文緩沖區(qū),更新管理內(nèi)存區(qū)報文索引并通知其他模塊處理。
主控模塊硬件如圖2所示。
圖2 主控模塊硬件框圖Fig.2 Hardware block diagram of the main control module
目前,串行通信總線較為常見的實現(xiàn)方式有控制器局域網(wǎng)(controller area network,CAN)和RS-485總線。本文高速串行通信總線采用RS-485。
主控模塊通過串行通信總線與輔控模塊進行通信。通信報文包括短周期的變量交換報文、長周期的對時報文,突發(fā)的調(diào)試下載報文等。短周期報文是實時報文,與主控模塊任務周期相關(guān)。長周期報文和突發(fā)報文是非實時報文[7]。對時報文數(shù)據(jù)通信報文分時復用該通信總線,簡化了系統(tǒng)硬件設(shè)計和布線成本,有利于現(xiàn)場施工和問題排查。
輔控模塊硬件采用微控制單元(microcontroller unit,MCU)芯片原生通用異步收發(fā)器(universal asynchronous receiver/transmitter,UART)實現(xiàn)高速串行通信。系統(tǒng)設(shè)計DMA方式完成報文收發(fā),從而有效地減少了MCU頻繁收發(fā)報文的耗時[8]。
輔控模塊MCU在UART接收超時中斷中處理接收到的串口報文,在UART發(fā)送完成中斷中進行RS-485收發(fā)方向控制,保證了收發(fā)控制的實時性。硬件上,MCU外部有RS-485總線驅(qū)動控制電路。這使得MCU必須周期性地向驅(qū)動控制電路發(fā)送脈沖才能發(fā)出報文,否則只能接收。軟件上,MCU增加收發(fā)方向防誤控制。當超過任務周期沒有收到報文或者報文發(fā)送超時,則將收發(fā)方向強制為接收。這可以防止由于MCU軟件跑飛或者收發(fā)方向控制失敗導致高速串行總線掛死,增強了通信總線的健壯性。
輔控模塊通過MCU自帶捕獲單元獲取對時報文起始時刻。當MCU不具備捕獲功能時,也可外擴FPGA處理高速串行通信報文并記錄報文起始時刻。
輔控模塊硬件如圖3所示。
圖3 輔控模塊硬件框圖Fig.3 Hardware block diagram of the auxiliary control module
為了提高對時精度,主控模塊串行通信模塊由FPGA實現(xiàn)。雖然對時報文與數(shù)據(jù)通信分時復用同一總線,但由于主控模塊發(fā)出的對時報文中包含發(fā)送起始時刻對應的精確時間戳,所以主控模塊下發(fā)對時報文時刻不受整秒或者固定時間間隔限制??紤]到輔控模塊的守時精度,主控模塊下發(fā)廣播對時報文的時間間隔一般在10 s以內(nèi)。本系統(tǒng)中主控模塊廣播下發(fā)對時報文,將時鐘同步功能集成于通信通道的空閑時隙中,每隔1 s左右下發(fā)一次??紤]輔控模塊守時進秒機制,下發(fā)對時報文時刻一般在該秒的100~900 ms之間。
輔控模塊接收主控模塊下發(fā)的對時報文,并記錄接收報文時刻對應的輔控模塊內(nèi)部時鐘。由于輔控模塊采用硬件捕獲報文起始時刻,故捕獲時刻不受關(guān)中斷等程序執(zhí)行的影響。
該報文時間戳信息,除串行通信模塊發(fā)出報文起始時刻對應協(xié)調(diào)世界時(coordinated universal time,UTC)秒外,還包含發(fā)出報文時刻的納秒時間,以及閏秒標志等。該報文中的納秒時間是主控模塊FPGA在對時報文發(fā)出時實時打上的時間戳,用于減少發(fā)送處理產(chǎn)生的誤差。
主控模塊下發(fā)的對時報文幀格式如圖4所示。
圖4 對時報文幀格式Fig.4 Frame format of the time synchronization message
輔控模塊接收對時報文處理流程如圖5所示。
圖5 對時報文處理流程圖Fig.5 Process flow of time synchronization message
輔控模塊接收對時報文并記錄報文起始到達時刻,并對接收報文的時刻的有效性進行校驗。有效性校驗包含絕對偏差和相對偏差兩部分校驗。絕對偏差是相鄰2個對時報文攜帶時間戳的時間差與輔控模塊內(nèi)部節(jié)拍對應的時間差;相對偏差是2個對時報文的時間差歸算到1 s后,與歷史記錄的偏差。當絕對偏差超過一定范圍時,認為時鐘發(fā)生跳變或受到干擾,偏差范圍取主控模塊和輔控模塊晶振偏差之和,本系統(tǒng)取100 μs。當相對偏差超過一定范圍時,認為時鐘受到干擾,本系統(tǒng)取5 μs。當對時報文受到干擾時,該對時報文將被丟棄;當發(fā)生時鐘跳變時,對時報文進行3次有效性確認。
根據(jù)相鄰2幀報文中時間戳差值和輔控模塊記錄的TICK差值,計算1 s對應輔控模塊的TICK差值T1s。其中,TICK即輔控模塊系統(tǒng)時鐘節(jié)拍??紤]到晶振抖動和上升沿捕獲等誤差,根據(jù)歷史記錄T1s,采用卡爾曼濾波算法計算出平均Tavg1s值[9-10]。結(jié)合主控模塊下發(fā)時刻、輔控模塊接收時刻和傳輸延時,即可計算輔控模塊本地時刻。輔控模塊在定時中斷中對本地時鐘進行維護,進入中斷時讀取當前TICK值,再根據(jù)Tavg1s對TICK差值進行修正,獲取每次進中斷的絕對時刻,從而進行守時管理。
串行通信網(wǎng)絡(luò)一般沒有轉(zhuǎn)發(fā)環(huán)節(jié),報文發(fā)送傳輸延時可以根據(jù)理論值推算。由于通信線長度改變造成傳輸延時的影響在幾個納秒級別,可以忽略不計。
當具有轉(zhuǎn)發(fā)環(huán)節(jié)時,可以根據(jù)以下方法獲取報文傳輸延時。主控模塊向輔控模塊發(fā)送報文包含時間戳T1。輔控模塊接收到報文的時間戳為T2。輔控模塊回復報文的時間戳為T3。主控模塊收到回復報文的時間戳為T4。則報文發(fā)送傳輸延時d為[11]:
(1)
本文主要分析圖1中沒有轉(zhuǎn)發(fā)環(huán)節(jié)的串行通信網(wǎng)絡(luò)。為了提高系統(tǒng)對時的精確度和可靠度,輔控模塊需要補償報文發(fā)送傳輸延時和晶振偏差引起的時間差。輔控模塊根據(jù)主控模塊對時報文時間戳、報文發(fā)送傳輸延時和晶振偏差,推算輔控模塊與主控模塊時鐘源的精確時間差,進而推算本地精確時間[12]。具體步驟如下。
①主控模塊FPGA發(fā)出廣播對時報文的時刻為S0、S1,...,Sn。輔控模塊接收對時報文對應的輔控模塊內(nèi)部節(jié)拍依次為I0,I1,...,In。設(shè)輔控模塊內(nèi)部時鐘源晶振理論頻率為FS、實際內(nèi)部時鐘源晶振頻率為FI,則輔控模塊內(nèi)部節(jié)拍到實際時鐘的轉(zhuǎn)換系數(shù)k為:
(2)
式中:n=1,2,...,N。
②使用相鄰2次對時報文計算k值,會出現(xiàn)一定抖動。因此,本文采用上文提及的濾波算法進行計算。
③采用輔控模塊理論晶振頻率時,時間上距離輔控模塊接收時刻In一定的時間間隔t。由于晶振偏差,對應實際時間間隔為:
t′=k×t
(3)
④若不考慮報文發(fā)送傳輸延時d,則對于主控模塊當前時刻S,對應輔控模塊的當前節(jié)拍I。則輔控模塊的時刻為:
(4)
若考慮報文發(fā)送傳輸延時d,則對于主控模塊當前時刻S,對應輔控模塊的當前節(jié)拍I,輔控模塊的時刻為:
(5)
結(jié)合上述過程,本系統(tǒng)產(chǎn)生誤差主要在于以下幾個方面。
①主控模塊發(fā)送對時報文時,報文中的納秒精度,誤差一般在百納秒級別。該部分誤差一方面由FPGA硬件邏輯電路延時引起,另一方面由FPGA時鐘精度和時鐘顆粒度決定。
②線路傳輸延時,由傳輸介質(zhì)決定,對于本文所述分布式系統(tǒng)內(nèi)一般在幾個納秒級別。
③輔控模塊捕獲報文誤差,受捕獲邊沿的波形質(zhì)量和MCU捕獲時刻精度影響,一般在幾十納秒級別。
綜合以上誤差,采用該方案后,輔控模塊的對時精度可以達到微秒級別。采用實際系統(tǒng),在輔控模塊中斷檢測整秒邊沿并輸出波形,與時鐘同步裝置秒脈沖輸出對比,實測對時偏差在±2.5 μs以內(nèi)。該測試包括中斷響應引起的誤差,已完全滿足系統(tǒng)對時精度要求。
對時精度測試結(jié)果如圖6所示。
圖6 對時精度測試結(jié)果Fig.6 Accuracy test results of time synchronization
本文介紹了一種基于串行通信的對時設(shè)計,將時鐘同步功能集成于通信通道的空閑時隙中,布線方便、性能可靠。采用該對時設(shè)計的分布式系統(tǒng)已應用在光伏發(fā)電和電池管理領(lǐng)域,SOE精度經(jīng)測試完全滿足現(xiàn)場要求,在多個工程現(xiàn)場投入運行,得到良好的應用效果。