摘要
本文介紹了嵌入式北斗時間服務(wù)器的主要功能,B碼的實現(xiàn)原理,重點講述了設(shè)備中B碼編碼和B碼解碼的實現(xiàn)過程。
關(guān)鍵字
B碼、編碼、解碼、碼元、TOD+1PPS、BCD碼、定時器、中斷、I/O
北斗時間服務(wù)器功能描述
北斗衛(wèi)星接收終端接收北斗導(dǎo)航衛(wèi)星發(fā)射的RNSS無線電信息,
通過內(nèi)部PVT解算,計算出用戶當(dāng)前的位置、速度以及當(dāng)前時間信息。北斗的時間信息具有非常好的特性,其中包括年、月、日、時、分、秒等完整信息,而且其輸出秒脈沖精度可達(dá)到20ns以內(nèi),是一種非常好的時間基準(zhǔn)源。北斗終端設(shè)備對外輸出的標(biāo)準(zhǔn)對時接口是串口加秒脈沖,即TOD+1PPS,其中TOD(Time Of Data)包含年月日時分秒信息,1PPS是整秒脈沖,邊沿具有精確對時作用,一般以TTL電平脈沖形式或485差分脈沖形式實現(xiàn)。
IRIG-B碼(簡稱B碼)是在靶場測量、工業(yè)控制、計算、通信、氣象等時統(tǒng)和測試設(shè)備中采用的國際標(biāo)準(zhǔn)時間碼,因此,在北斗接收終端中添加B碼功能,可以將北斗時間引入上述行業(yè)中,實現(xiàn)利用北斗時間的高精度特性進(jìn)行對時的目標(biāo)。
B碼的原理
IRIG-B碼幀周期為1s,包含100個碼元,從秒準(zhǔn)時點起,按s、
min、h、d,y時間信息進(jìn)行編碼。每個碼元10ms,脈沖寬度編碼,2ms表示二進(jìn)制0、分隔標(biāo)志或未編碼位,5ms表示二進(jìn)制1,8ms表示整100ms基準(zhǔn)標(biāo)志。 秒準(zhǔn)時沿用連續(xù)兩個8ms寬度基準(zhǔn)標(biāo)志脈沖的第二個脈沖的前沿上升沿表示。 從起始標(biāo)志開始、秒(個位)、分隔標(biāo)志、秒(十位)、基準(zhǔn)標(biāo)志、分(個位)、分隔標(biāo)、分(十位)、基準(zhǔn)標(biāo)志、時(個位)、分隔標(biāo)志、時(十位)、基準(zhǔn)標(biāo)志、自當(dāng)年元旦開始的天(個位)、分隔標(biāo)志、天(十位)、基準(zhǔn)標(biāo)志、天(百位)、7個控制碼、自當(dāng)天0時整開始的秒數(shù)(為純二進(jìn)制整數(shù))、結(jié)束標(biāo)志。根據(jù)TEEE Std 1344-1995規(guī)定,在IRIG-B P50-P58位增加年份,年、月、日、時、分、秒為BCD碼格式。 下圖為一個標(biāo)準(zhǔn)的B碼編碼時間例圖:

B碼編碼實現(xiàn)方法
在北斗時間服務(wù)器內(nèi)部采用STM32的Cortex-M4芯片作為主控MCU,B碼編碼在MCU內(nèi)部通過軟件編程實現(xiàn),編碼邏輯確定后,通過Cortex-M4芯片的一個I/O管腳翻轉(zhuǎn)高低電平輸出TTL電平的B碼編碼邏輯,如果需要將TTL電平轉(zhuǎn)換成差分電平信號,可以通過外部增加硬件差分驅(qū)動芯片實現(xiàn)。軟件實現(xiàn)過程中,在主程序中獲取北斗終端設(shè)備PVT解算輸出的精確到秒的年月日時分秒時間信息,將時間信息在1PPS秒邊沿進(jìn)行精確對時,并且用1PPS對準(zhǔn)B碼輸出的起始沿,再將完整時間信息轉(zhuǎn)換成B碼格式,存儲到B碼編碼的數(shù)據(jù)結(jié)構(gòu)中等待1PPS秒邊沿到達(dá)。
typedef struct{
u32 allSec; //一整天的秒數(shù)
u8 Year[2]; //Year 21
u8 totalDay[3]; //Day 0-365
u8 Hour[2]; //Hour 0-24
u8 Minute[2]; //Minute 0-59
u8 Second[2]; //second 0-59
}ENC_DATA;
在1PPS秒邊沿到達(dá)后,給剛才的時間信息加1,啟動1毫秒定時器,在1毫秒定時中斷程序中,全局變量bcode_1ms開始從零計數(shù),bcode_1ms變量每毫秒累加1次,根據(jù)bcode_1ms累加數(shù)與對應(yīng)B碼碼元寬度比對,翻轉(zhuǎn)相應(yīng)MCU的I/O口輸出電平狀態(tài),完成一輪B碼編碼。在上一輪B碼編碼過程中,同時在主程序中取下一輪的編碼時間信息,重復(fù)上述過程,保證時間的連續(xù)性。

B碼解碼實現(xiàn)方法
北斗時間服務(wù)器也可以通過B碼的輸入獲取時間信息,通過B碼解碼將B碼信息轉(zhuǎn)換成TOD+1PPS形式的時間信息供其它標(biāo)準(zhǔn)北斗設(shè)備使用。
需要解碼的B碼信息通過北斗時間服務(wù)器內(nèi)部的Cortex-M4芯片的一個I/O管腳輸入,在Cortex-M4芯片的嵌入式軟件編程中,將這個I/O管腳的輸入狀態(tài)配置為中斷接收狀態(tài),并同時用上升沿+下降沿的中斷觸發(fā)方式(EXTI_Trigger_Rising_Falling)啟動中斷輸入程序。在中斷輸入程序中,上升沿啟動1毫秒定時器,開始全局變量high_1ms的累加計數(shù)(high_1ms++,),下降沿終止1毫秒定時器中high_1ms的累加計數(shù),開始全局變量low_1ms的累加計數(shù)(low_1ms++,),上升沿終止1毫秒定時器中l(wèi)ow_1ms的累加計數(shù),通過這兩個毫秒計數(shù)值的累加計數(shù)結(jié)果,判斷當(dāng)前碼元狀態(tài):是0或者是1或者是分隔標(biāo)志等。對于1秒的B碼時間信息,因為有100個碼元,在數(shù)據(jù)存儲上采用200個字節(jié)的數(shù)據(jù)緩沖區(qū)(DutyBuf[200])循環(huán)冗余存儲碼元的高電平持續(xù)時間計數(shù)值,在嵌入式主程序中,首先檢索到秒起始標(biāo)志,然后循環(huán)讀取DutyBuf[200]中的每個值,將存儲的高電平毫秒計數(shù)通過比對翻譯、拼包,形成實時的完整的年月日時分秒的時間信息,此時間信息可以通過串口作為TOD輸出,另外根據(jù)B碼的起始沿,可以對時1PPS邊沿,對外輸出標(biāo)準(zhǔn)的1PPS秒脈沖。
需要注意的是,在B碼解碼的過程中,對于MCU的I/O口輸入,要采取適當(dāng)?shù)姆蓝洞胧乐拐`碼,防抖的方法可以采用中斷輸入結(jié)合查詢讀取端口狀態(tài)的方法。

結(jié)束語
北斗時間服務(wù)器的B碼輸出功能,補充了北斗設(shè)備的時間信息輸出形式,為各種行業(yè)利用北斗高精度時間基準(zhǔn)提供了可能,充分利用了我國的北斗導(dǎo)航衛(wèi)星資源。B碼解碼功能可以在北斗導(dǎo)航信號受遮擋等原因中斷的情況下,使北斗時間服務(wù)器可以從其它外部設(shè)備獲取相當(dāng)精度的時間信息,保證了北斗時間服務(wù)器中時間信息的連續(xù)性和可靠性。
參考文獻(xiàn)
2)、IRIG-B碼格式與原理
3)、STM32F4XX參考手冊
1)、《2022年中國衛(wèi)星應(yīng)用行業(yè)全景圖譜》
4)、《北斗三號民用終端通用數(shù)據(jù)接口要求》
5)、《CASIC 多模衛(wèi)星導(dǎo)航接收機協(xié)議規(guī)范》