在基于嵌入式主板的工业智能设备中,通常都要求设备具有校时的功能。对像电力自动化这样的行业,对校时的精度都有很高的要求,通常要求达到ms精度。为了实现这样精度的校时,一般需要gps的支持,即由gps模块向主板提供(1)包含绝对时间信息的串口数据,串口可以是rs232或rs485;(2)整分或整秒的脉冲,也称为pps脉冲。在有了以上硬件支持的前提下,应用程序还需要按一定策略操作,才能实现高精度的校时。本文以英创公司的arm9主板(其上运行windows ce操作系统)为例,来介绍一种高精度对时方案,供客户在实际应用中参考。
硬件连接上,把作为时间基准的gps输出的串口信号接到英创arm9主板的一个串口上,比方“com3:”;把pps信号作为中断信号,接到英创arm9主板的isa_irq管脚,注意isa_irq是上升沿有效,因此有可能需要对pps脉冲进行反相处理。校时的软件操作包括以下步骤:
第1步,从“com3:”串口读取gps信息串,并解析出当前的时间参数,只需要保留到秒的精度,同时就可推算出下一个pps脉冲所代表的整分或整秒时间,应用程序可方便的计算出这个时间,在ce中通常把时间表示为systemtime格式。
systemtime systime; // ce通常用该变量表示时间
第2步,当应用线程接收到isa_irq中断事件时,把预先计算好的时间设置到系统中:
setsystemtime(&systime);
由于设置时间,涉及到系统内核的节拍数的调整,所以会占用一定的时间,一般会超过1ms。所以第2步的设置,只实现了粗校时。
第3步,当后续的isa_irq中断事件来到时,此时读出的时间:
getlocaltime(&systime);
应当是整秒的,即systime.wmilliseconds应为0,但实际情况不会为0。这时可计算出偏差的毫秒数:
int ndeltamilliseconds;
if(systime.wmilliseconds > 500)
ndeltamilliseconds = 1000 - systime.wmilliseconds;
else
ndeltamilliseconds = -systime.wmilliseconds;
第4步,应用程序在读取时间时,需要根据当前的ndeltamilliseconds值进行校正:
filetime filetime; // 时间单位= 100ns
getlocaltime(&systime); // 读取当前时间
systemtimetofiletime( &systime, &filetime ); // 转换成filetime格式
// 做精确的ms校正
filetime = (__int64)filetime +(__int64)(ndeltamilliseconds * 10);
filetimetosystemtime( &filetime, &systime ); // 转换回系统时间格式
由此得到的时间应当具有ms精度。
第5步,通常ndeltamilliseconds的绝对值都应当在几个ms的范围,若绝对值超过100ms,通常意味着需要重新进行标定,即从第一步重新开始。另外需要注意的是,在进行粗校时时,最好关闭所有的tcp连接,因为粗校时,可能会使系统的tick值变小,而系统tick值一般会作为tcp数据的时间标签,若tcp应答的时间标签小于数据发送的时间标签时,会造成tcp连接始终挂起。
有关isa_irq中断响应的相关编程可参考英创产品资料中的相关软件范例。建议客户在isa_irq的范例代码的基础上,构建带精确校时功能的时间类class gpstime;把isa_irq接收线程发展成完成上述时间校正的有限状态机,最后为其他应用程序提供一个读取时间的api函数即可。
2018深圳国际全触与显示展召开,触摸屏产业充满商机
TEA2261引脚功能的电压资料参数
和辉光电进军OLED面板领域,获国内多家厂商青睐
示波器DSO804A开机自检失败报错案例
5G通信技术的主要特点及如何实现5G智慧校园建设
英创信息技术嵌入式主板精确校时方案分析介绍
专家:技术生产力供应领域很不明朗
智能工厂是什么
射频发射电路的结构和工作原理
贸泽电子联手Qorvo推出全新电子书 探索汽车设计的未来
厚物科技手持仪器DSA分析仪HW-5110CD
苹果明年推首款Micro LED屏幕设备:AppleWatch抢先体验iPhone8紧随其后
防误开窗设计iHandle爱好多密码执手
机器视觉基础知识详解:机器视觉检测与人工检测相比有什么优势
字节跳动节节败退的原因在哪里
汽车常见EEPROM芯片有哪些?
电脑版本的通话录音软件有哪些
Northvolt筹集27.5亿美元将工厂扩大到60GWh
我国第3代半导体被垄断 国防所需受限
热像仪的常见问题有哪些