面向LoRa的时间同步系统设计

(整期优先)网络出版时间:2022-06-15
/ 2

面向 LoRa 的时间同步系统设计

张娅

重庆工商职业学院 重庆 400052

摘要:LoRa是近年来森特公司提出的LPWAN(low-power Wide-Area Network,低功耗广域网)技术,它专为低带宽、低功耗、远距离的物联网应用而设计,本文在研究相关同步技术的基础上,本文设计了时间同步系统的定时器模块,体现了针对面向LoRa的时间同步系统的实现。

关键词:LoRa;时间同步;系统;定时模块


LoRa是一种基于扩频技术的远距离低功耗的无线传输技术。这种技术解决了对低功耗远距离的问题,有良好的节能特性,为用户提供了一种能实现远距离、低功耗、电源长久供应的系统,进而扩展物联网的应用。

1 系统实现

面向LoRa的时间同步系统的实现图如图1所示[1-3]。此系统中的时间同步引擎的计算参考PTP的同步原理图2所示来设计;通过定时器能够得到Sync报文的真实发出时间Tm1、从时钟记录下真实的Sync报文接收时间Ts1、由从时钟发出Delay_Req报文并记录准确的发送时间Ts2、主时钟接收方记录准确的接收时间Tm2;将同步报文、跟随报文、延迟请求报文、延迟响应报文封装在LoRa MAC帧中,可从帧中取出时间戳信息,按照时间同步引擎进行计算,得到极大极小模型的观测值,将观测值通过极大极小模型估算出相位偏移62a9473c4c895_html_7a22d6eaa9047fd8.gif ,将从时钟的本地时间加上相位偏移值,即完成从时钟与主时钟的时间同步。


62a9473c4c895_html_e2c1e8fb717cd463.png

图1 系统实现图

62a9473c4c895_html_892a0166e41b4fac.gif

图2 PTP的同步原理

2 终端

LoRa终端芯片目前常用的是SX1276和SX1278,它们均是单信道。SX1276是面向欧美市场(支持862~1020MHz),SX1278面向中国市场(不支持支持862~1020MHz)。从硬件设计到软件驱动都为开源设计,用户可以免费下载。LoRa终端硬件的设计主要包括MCU、SX1278、TCXO等部分。其LoRa终端硬件框图和实物图如图3所示。

62a9473c4c895_html_a9e496f53d2584c9.png62a9473c4c895_html_c18d2e142bcdab95.jpg

(a)硬件框架图 (b)实物图

图3 LoRa终端硬件框图和实物图


其中:MCU主要用于驱动SX1278,实现无线网络协议,与用户系统交互等;SX1278主要用于完成LoRa无线信号的接收与发送;TCXO是为SX1278高频电路提供精确时钟。

3 定时模块

使用一个硬件定时器作为系统基准时钟,然后在此基础上设计了定时器队列,以解决对系统时间的需求。

定时器列表应当允许有效的计时器插入、删除、取消以及更改。如图4中链接的定时器列表(list-timer)的实现。如果定时器项的结构体是双向链表,则注册一个定时器节点的最快方式是在定时器列表的头或尾插入。

但是由于定时器没有按特定的次序排序,所以维护定时器的ticks系统消耗是昂贵的。每个tick更改定时器列表需要遍历整个链表和更改每个定时器节点的Lefttime的值。当定时器到达0值时,调用callout函数。定时器节点成功注册后,返回给应用一个定时器句柄(handle)。取消定时器节点也要求遍历整个列表。每个定时器节点与定时器句柄进行比较,当匹配时,特定的定时器节点从定时器列表中取消。定时器队列如图5所示。

因此,在嵌入式系统设计中对定时器的这种组织管理方式会有以下两个问题:

(1)定时队列太长,找到所有到点定时器的时间开销难以接受;

(2)当定时器中断发生时要对所有的定时器的时长域进行减法操作,该部分时间性开销也很大。


62a9473c4c895_html_6c447523c22c338.gif

图4 维护定时器队列


62a9473c4c895_html_fd0afd0ff07f6fb8.gif

图5未排序的定时器队列


因此,根据各个定时器节点的Lefttime值,对其按升序进行排序,然后按照后一个定时器的值是前面所有定时器的值加上本身值的规则对所有节点重新赋Lefttime值。

设有A,B,C 3个定时事件,且A> B>C。在定时队列中,定时通过时间增量来描述,即T1=C,T2=(B-C),T3=(A-B),分别以时间粒度为计时单位,在时间队列中的位置如图6所示[3]

根据T1,T2,T3分别对每个定时器节点的Lefttime值进行重新设置,使其按升序排列,TimeRoot是链表的头,始终指向下一个有最小的剩余时间的元素。定时器链表的排序过程:

(1)查找链表中剩余时间是最小的元素,移动TimeRoot使之指向该元素。

(2)调整TimeRoot指向的链表中的各个元素的Lefttime值,即减去头的Left -time值,按头的Lefttime值来启动定时器。

(3)根据定时器列表中的Lefttime的值判断是否来循环访问元素,对每一个等于0的元素调用其回调函数。如图7所示,为其已排序的定时器队列。

62a9473c4c895_html_515654cad3b0b347.gif

图6定时模块的定时队列示意图


62a9473c4c895_html_8d55171dc4c1ce0a.gif

图7已排序的定时器队列


通过这样的设计,就能使所有的定时器节点的值隐含是递减的,系统每收到一个tick就修改链表首对象的时间值,如果链表对象的时间单位为tick,则每发生一个tick,链表首对象的时间值就减1,当减到0时,链表首对象就被激活,并从定时器列表中取下一个,下一个对象又成为链首。这大大的降低了时钟中断处理函数的工作量。当需要注册新的定时器节点时,在插入定时器进入列表前,应根据第一项修改超时值。

在定时器列表管理时钟的实现中,有一个专门的定时器管理任务为有定时需要的任务分配相应的定时器节点,形成一个相对时长定时队列,队列中的定时节点按定时时长排序,时间短的靠前,在队列中,定时节点的定时长值改为相对前一定时节点时长的差值,即相对时长。当时钟中断发生时,只需对队头的时长域进行减1操作,所有的到点定时节点也均集中于队列的前面。

采用该种定时器列表方式管理时钟,硬件定时器不再需要周期性地产生中断请求,而只在用户预先指定的时刻产生,下一次中断发生时间被动态地写入硬件定时器。这种方法的优点是:对CPU资源的利用率高,只在必要的时刻才产生中断,占用CPU时间粒度小,精度等级高,可以达到微秒级而不影响系统的正常工作;从而利用此种定时器链表管理机制,不仅解决了硬件资源不足,而且大大提高了定时器的遍历速度。从而能够简单、有效地满足系统对定时器的需求。


4 小结

本文设计了时间同步系统,并设计了定时器模块,体现了针对面向LoRa的时间同步系统的实现。



参考文献:

  1. 崔丽珍,员曼曼,李璋,赫佳星.面向煤矿井下WSN低功耗双向时间同步算法研究与实现[J].传感技术学报.2014(09).

  2. 王兴.基于ZigBee的无线传感器网络时钟同步算法的研究[D].北京邮电大学 2012.

  3. 谢昊飞.网络控制技术[M].北京:机械工业出版社,2009.

作者简介:张娅(1985-),女,研究方向为自动控制

基金项目:2021年重庆工商职业学院科研项目,科研编号为NDYB2021-03


Shape1

3