IRIG-B高精度B码解码 同步精度10ns

       IRIG-B解码模块是专门用于对IRIG-B码进行解码的模块,能解码出同步秒脉冲,同时通过串口或IO接口可以获取同步时间,用于对设备进行校时。

       模块具有处理速度快,输出精度高的特点,秒脉冲误差在10ns左右,能满足设备对时间的高精度要求。模块使用简单,输入TTL电平的B码,就能自动解码出同步秒脉冲和时间,对单片机性能没有任何要求。

       从模块获取时间有两种方式:1)通过串口接收,模块每秒钟会发送一次;2)通过IO口模拟串行时序获取时间,这种方式不占用串口,适合串口资源不够的应用。

      解码模块体积很小,可以直接通过邮票孔焊接到主板上。

引脚号

名称

方向

功能

1

IO2

--

预留,不连接

2

IO1

--

预留,不连接

3

IO0

--

预留,不连接

4

LED_UART

out

串口发送指示灯,当串口输出时间时闪烁,低电平有效

5

LED_SPI

out

串行通信指示灯,当串行通信时闪烁,低电平有效

6

LED_B

out

B码接收指示灯,接收到B码后闪烁,低电平有效

7

GND *

in

电源负

8

3V3 *

in

电源正,输入3.3V

9

RST_N *

in

模块复位信号,低有效。可以连接复位芯片,也可以用RC设计一个简单的自复位电路

10

B_IN *

in

IRIG-B码输入引脚,TTL电平

11

PPS_INT

out

秒中断信号,当解码出B码同步沿后输出方波,上升沿有效,脉宽7.5ms,精度10ns左右

12

LED_PPS

out

秒脉冲指示灯,当解码出B码同步沿后闪烁,脉宽107.5ms ,低电平有效

13

UART_TX

out

串口发送引脚,波特率9600

14

IO_CS

in

IO串行通信片选,低有效

15

IO_SDA

out

IO串行通信数据

16

IO_SCK

in

IO串行通信时钟,上升沿出数据

*表示必须使用的引脚,其它引脚根据需要选择使用)

  1. DC Characteristics

名称

描述

最小值

最大值

VCC

电源电压

2.5V

3.44V

VIO

IO引脚电压

2.5V

3.44V

Ambient Temperature

工作环境温度(工业级)

-40℃

+85℃

  1. AC Characteristics

名称

描述

典型值

PPS_INT Time Delay

PPS_INT秒中断脉冲相对B码同步脉冲时延

10ns

(从B码同步沿70%位置开始计算)

LED_PPS Time Delay

LED_PPS秒脉冲相对B码同步脉冲时延

10ns

(从B码同步沿70%位置开始计算)

IO_SCK Speed

IO_SCK最大时钟

50Mhz

UART Baudrate

串口波特率

9600bps

Frequency Tolerance(25℃)

频率稳定度(25℃)

±10ppm

  1. B码同步沿与PPS_INT

       黄色为PPS_INT,蓝色为B码。PPS_INT滞后B码同步沿约10ns(从B码同步沿70%位置开始计算)。

 

2.B码同步沿与LED_PPS

       黄色为LED_PPS,蓝色为B码。LED_PPS滞后B码同步沿约10ns(从B码同步沿70%开始计算)。

 

串口通信

串口波特率9600bps,1位起始位,1位停止位,无校验。数据一共12个字节,96bit。当模块的秒脉冲发出后,100us以内就会发送串口数据。

输出格式:

字节

说明

[7:0]

报文头0x5A

[ 9: 8 ]

bit8为刷新标志,刷新一次会反转一次;

bit9:保留

[ 16: 10 ]

秒,为BCD码,低4位为个位,高3位为十位

[ 23: 17 ]

分,为BCD码,低4位为个位,高3位为十位

[ 29: 24 ]

时,为BCD码,低4位为个位,高2位为十位

[ 39: 30 ]

一年中的天数,低4位为个位,中4位为十位,高2位为百位

[ 47: 40 ]

年的十位和个位,低4位为个位,高4位为十位

[ 64: 48 ]

一天中的秒数,17位,为16进制

[79: 65]

B码标志位,一般情况下不需要使用

bit65:闰秒预告

bit66:闰秒标志

bit67:夏时制预告

bit68:夏时制标志

bit69:时间偏移符号位

bit73:70:时间偏移

bit74:时间偏移0.5h

bit78:75:时间质量

bit79:校验位

[ 87: 80 ]

异或校验位,bit8-bit79,9个字节,按字节异或

[ 95:88 ]

结束符0xA5

IO时序

    CS和SCK由处理器控制输出,解码模块在SCK的上升压沿输出数据,处理器在SCK的下降沿读取数据。数据低位在前,一共96位。

  1. 数据格式

  和串口格式一样)

       详细电路请参考IRIG-B评估板原理图。

  1. 概述

       为了简化用户编程,我们提供了相关驱动文件IRIG_B_CORE.c和IRIG_B_CORE.h。驱动使用C语言编写,开发板提供STM32F107的例程。

       驱动通过宏定义选择使用串口或IO口通信,如果注释掉宏定义即为IO口通信。

#define USE_UART  //使用串口通信

  1. 使用串口方式与B码模块通信

       这种方式最简单,只需要调用一个解析函数就可以得到精确时间。

首先需要在IRIG_B_CORE.h 中定义 #define USE_UART 。然后调用解析函数,解析串口接收到的数据。解析函数如下:

       err_code  Irig_Parse(unsigned char *val, sTime *time)

       *val:串口接收到的数据指针,大小为12字节;

       *time:解析后输出的时间结构体指针;

       err_code:解析结果,为枚举类型;

       注:如果想提高授时精度,可以把模块输出的PPS_INT连接到单片机的外中断引脚,当中断触发后,将系统时钟的毫秒清0。

  1. 使用IO串行时序与B码模块通信

       当单片机串口不够用时,可以使用这种方式,实现对时。驱动会使用到3个IO,所以需要根据不同的硬件适配单片机的IO口。

  1. 注释掉宏定义:

       //#define USE_UART

  1. 通过宏定义,适配IO

修改IRIG_B_CORE.h,红色部分需要根据不同的单片机进行修改;

       #define IO_CS_L      GPIO_ResetBits(GPIOD,GPIO_Pin_15)    //CS=0

       #define IO_CS_H     GPIO_SetBits(GPIOD,GPIO_Pin_15)      //CS=1

       #define IO_SCK_L   GPIO_ResetBits(GPIOD,GPIO_Pin_14)    //SCK=0

       #define IO_SCK_H GPIO_SetBits(GPIOD,GPIO_Pin_14)     //SCK=1

       #define IO_SDA       GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_13)   //SDA输入

  1. 调用初始化函数Irig_Init( ),设置IO的初始化状态

      

  1. 调用IO串行读取函数,获取数据,

       可以周期性调用读取,也可以在收到PPS_INT中断后读取,推荐后者。

       void Get_Irig _Data(unsigned char *val)

       *val:接收数组指针,数组大小为12字节

  1. 调用B码解析函数,获取时间

       err_code  Irig_Parse(unsigned char *val, sTime *time)

       *val:串口接收到的数据指针,大小为12字节;

       *time:解析后输出的时间结构体指针;

       err_code:解析结果,为枚举类型;

注:如果想提高授时精度,可以把模块输出的PPS_INT连接到单片机的外中断引脚,当中断触发后,将系统时钟的毫秒清0。

        更详细的资料可以搜一下云智优创的网站。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值