1IRIG-B直流码
标识位用于识别码元代表何种时间信息,每一帧直流码从第0个码元开始依次到第99个码元为止,共有PR、P1、P2…P9、P0等11个标识位,分别位于第0、9、19…89、99位码元上。一个B码时帧帧头是由P0标识位及其相邻参考码元PR组成的,故每一帧都是以相邻两个8ms脉冲开始,每10个码元为1个字段,字段内以8421BCD码传输数据,数据时序是秒、分、时、天、年,低位在前高位在后[6]。时帧的准时参考点是PR的上升沿,其与GPS时间的1PPS脉冲上升沿严格对齐才能保证IRIG-B码的高精度。根据IEEE1344-1995的规定,年的时间信息存放于第50-59位之间的8位码元上,可以表示的时间范围是00-99年。P5、P6…P0之间是IRIG-B码的控制信息和附加信息,可以根据需要编码,本文只探讨时间信息编码成IRIG-B的方法,控制功能暂不考虑。
2GPS导航电文
常用的GPS导航电文数据标准是NMEA-0183标准,它是美国国家海事电子协会(NMEA)制定的,用于解决GPS接收机之间的接口问题。NMEA-0183格式导航电文的所有字符均为ASCII文本字符。数据传输以一帧帧“语句”方式进行,每帧语句格式如下:$aaccc,ddd,ddd,...,ddd觹hh<CR><LF>其中“$”为帧命令起始位,“aaccc”为地址域,“ddd”为数据,“觹”为校验和前缀,“hh”为校验和,<CR><LF>是回车和换行符(即帧结束标志)。常用的帧命令语句包括:$GPGGA、$GPGSA、$GPGSV、$GPRMC等。本文用于GPS授时的导航电文是GPRMC码流,该码流是包含了:UTC时间、定位状态、经纬度、UTC日期等的最小数据量码流,可以减少解析时间数据的工作量,缩短解析时间。
3系统设计
系统的总体框图如图2所示,该系统主要由GPSOEM模块、串口接收模块、波特率发生器模块、时间信息解析模块、B(DC)码编码模块构成。GPSOEM模块将GPS码流通过串口发送给串口接收模块,由串口接收模块完成数据的串并转换,将8位并行数据发送到时间信息解析模块,经过解析的数据包含了秒分时天年等信息,送入B(DC)编码模块进行编码,最后输出符合要求的IRIG-B直流码。其中时间信息解析模块、B(DC)编码模块是本系统设计中的核心部分。3.1GPSOEM模块GPSOEM模块连接到GPS天线上,用以接收和处理GPS数据,并产生需要的NMEA-0813格式标准的GPS码流,通过串口以4800bps发送给串口接收模块。国际上很多厂商都生产有自己的GPSOEM产品,本文选择了丽台的LR9548系列芯片,该芯片具有价格低廉、稳定性好、精度高等特点。3.2串口接收模块串口接收模块接收到的数据是波特率为4800的串行数据,需要将其转换成8位并行数据再进行后续处理。系统主时钟为1MHz脉冲,这就需要设计一个波特率发生器专门产生16倍波特率的脉冲作为该模块的时钟信号,保证数据采样时刻位于每一位数据的中间位置,从而避免接收数据错误问题。3.3时间信息解析模块前文已介绍过GPRMC码流,时间信息解析模块以字节为单位逐一判断数据帧内容,首先从所有GPS码流中筛选出帧头为$GPRMC的数据帧,根据时间信息在数据帧中的位置,确定一帧数据中的时间信息。本文采用状态机技术设计该模块,根据$GPRMC命令帧的结构特点,可以将状态机定为st_head、st_G、st_P、st_R、st_M、st_C、st_comma,st_data等8个状态,分别代表“$”、“G”、“P”、“R”、“M”、“C”、“,”、“数据位”,状态图如图3所示[7-8]。在状态机中设置comma、data两个计数器,comma用来计数“,”的个数,每当状态为st_comma时comma就加1,comma=1表示从下一位开始是时分秒数据,comma=9表示从下一位开始是日月年数据,。data用来计数有效数据位的个数,当有效数据采样完成时,关闭采样进程。经过解析后的时间信息是ASCII码字符,不能直接发送给B(DC)编码模块,需要将每一位数据减去0x30得到其对应的8421BCD码。但还要注意的是,此时解析出的“日”信息是当月中的第n天,需要将其换算成一年中的第m天,因此需要设计一个日期转换进程,转换时还要考虑平年跟闰年的差别,即平年2月份28天,闰年2月份29天。再者,解析出来的时间是格林时间,需要将小时加8,换算成北京时间,最后输出sec[6..0]、min[6..0]、hour[5..0]、day[9..0]的秒分时天8421BCD码并行数据。3.4B(DC)编码模块前文已对IRIG-B直流码做了详细介绍,1个码元周期为10ms,以频率为1MHz的脉冲为主时钟,那么一个码元对应10000个时钟周期,“0”、“1”、标识位的脉冲宽度分别对应于2000、5000、和8000个时钟周期。这里设置两个计数器clk_cnt、B_cnt[9],分别是时钟脉冲计数器和B(DC)码码元索引计数器,前者控制着B(DC)码码元的脉冲宽度,后者控制着码元的位置。
4CPLD内部电路设计
本文采用的CPLD芯片为ALTERA公司生产的EPM570T100C5系列芯片,其内部RTL级电路图如图4所示,其中baud是波特率产生模块,它产生16*4800Hz的时钟脉冲;uart_rxd是串口接收模块,它在每一位串行数据的中点采样,接收一位则令sig标志信号置“1”,通知下一模块采样结束;State_Machine是时间信息解析模块,其输出的是8421BCD码信号;DC_code是B(DC)编码模块。
作者:胡跃祥 刘浩 张捷 单位:南京理工大学自动化学院 宜昌测试技术研究所