摘要
本文介绍了嵌入式北斗时间服务器的主要功能,B码的实现原理,重点讲述了设备中B码编码和B码解码的实现过程。
关键字
B码、编码、解码、码元、TOD+1PPS、BCD码、定时器、中断、I/O
北斗时间服务器功能描述
北斗卫星接收终端接收北斗导航卫星发射的RNSS无线电信息,
通过内部PVT解算,计算出用户当前的位置、速度以及当前时间信息。北斗的时间信息具有非常好的特性,其中包括年、月、日、时、分、秒等完整信息,而且其输出秒脉冲精度可达到20ns以内,是一种非常好的时间基准源。北斗终端设备对外输出的标准对时接口是串口加秒脉冲,即TOD+1PPS,其中TOD(Time Of Data)包含年月日时分秒信息,1PPS是整秒脉冲,边沿具有精确对时作用,一般以TTL电平脉冲形式或485差分脉冲形式实现。
IRIG-B码(简称B码)是在靶场测量、工业控制、计算、通信、气象等时统和测试设备中采用的国际标准时间码,因此,在北斗接收终端中添加B码功能,可以将北斗时间引入上述行业中,实现利用北斗时间的高精度特性进行对时的目标。
B码的原理
IRIG-B码帧周期为1s,包含100个码元,从秒准时点起,按s、
min、h、d,y时间信息进行编码。每个码元10ms,脉冲宽度编码,2ms表示二进制0、分隔标志或未编码位,5ms表示二进制1,8ms表示整100ms基准标志。 秒准时沿用连续两个8ms宽度基准标志脉冲的第二个脉冲的前沿上升沿表示。 从起始标志开始、秒(个位)、分隔标志、秒(十位)、基准标志、分(个位)、分隔标、分(十位)、基准标志、时(个位)、分隔标志、时(十位)、基准标志、自当年元旦开始的天(个位)、分隔标志、天(十位)、基准标志、天(百位)、7个控制码、自当天0时整开始的秒数(为纯二进制整数)、结束标志。根据TEEE Std 1344-1995规定,在IRIG-B P50-P58位增加年份,年、月、日、时、分、秒为BCD码格式。 下图为一个标准的B码编码时间例图:
B码编码实现方法
在北斗时间服务器内部采用STM32的Cortex-M4芯片作为主控MCU,B码编码在MCU内部通过软件编程实现,编码逻辑确定后,通过Cortex-M4芯片的一个I/O管脚翻转高低电平输出TTL电平的B码编码逻辑,如果需要将TTL电平转换成差分电平信号,可以通过外部增加硬件差分驱动芯片实现。软件实现过程中,在主程序中获取北斗终端设备PVT解算输出的精确到秒的年月日时分秒时间信息,将时间信息在1PPS秒边沿进行精确对时,并且用1PPS对准B码输出的起始沿,再将完整时间信息转换成B码格式,存储到B码编码的数据结构中等待1PPS秒边沿到达。
typedef struct{
u32 allSec; //一整天的秒数
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秒边沿到达后,给刚才的时间信息加1,启动1毫秒定时器,在1毫秒定时中断程序中,全局变量bcode_1ms开始从零计数,bcode_1ms变量每毫秒累加1次,根据bcode_1ms累加数与对应B码码元宽度比对,翻转相应MCU的I/O口输出电平状态,完成一轮B码编码。在上一轮B码编码过程中,同时在主程序中取下一轮的编码时间信息,重复上述过程,保证时间的连续性。
B码解码实现方法
北斗时间服务器也可以通过B码的输入获取时间信息,通过B码解码将B码信息转换成TOD+1PPS形式的时间信息供其它标准北斗设备使用。
需要解码的B码信息通过北斗时间服务器内部的Cortex-M4芯片的一个I/O管脚输入,在Cortex-M4芯片的嵌入式软件编程中,将这个I/O管脚的输入状态配置为中断接收状态,并同时用上升沿+下降沿的中断触发方式(EXTI_Trigger_Rising_Falling)启动中断输入程序。在中断输入程序中,上升沿启动1毫秒定时器,开始全局变量high_1ms的累加计数(high_1ms++,),下降沿终止1毫秒定时器中high_1ms的累加计数,开始全局变量low_1ms的累加计数(low_1ms++,),上升沿终止1毫秒定时器中low_1ms的累加计数,通过这两个毫秒计数值的累加计数结果,判断当前码元状态:是0或者是1或者是分隔标志等。对于1秒的B码时间信息,因为有100个码元,在数据存储上采用200个字节的数据缓冲区(DutyBuf[200])循环冗余存储码元的高电平持续时间计数值,在嵌入式主程序中,首先检索到秒起始标志,然后循环读取DutyBuf[200]中的每个值,将存储的高电平毫秒计数通过比对翻译、拼包,形成实时的完整的年月日时分秒的时间信息,此时间信息可以通过串口作为TOD输出,另外根据B码的起始沿,可以对时1PPS边沿,对外输出标准的1PPS秒脉冲。
需要注意的是,在B码解码的过程中,对于MCU的I/O口输入,要采取适当的防抖措施,防止误码,防抖的方法可以采用中断输入结合查询读取端口状态的方法。
结束语
北斗时间服务器的B码输出功能,补充了北斗设备的时间信息输出形式,为各种行业利用北斗高精度时间基准提供了可能,充分利用了我国的北斗导航卫星资源。B码解码功能可以在北斗导航信号受遮挡等原因中断的情况下,使北斗时间服务器可以从其它外部设备获取相当精度的时间信息,保证了北斗时间服务器中时间信息的连续性和可靠性。
参考文献
2)、IRIG-B码格式与原理
3)、STM32F4XX参考手册
1)、《2022年中国卫星应用行业全景图谱》
4)、《北斗三号民用终端通用数据接口要求》
5)、《CASIC 多模卫星导航接收机协议规范》