基于RS485网络中系统时钟同步方法与流程

文档序号:17533496发布日期:2019-04-29 13:44阅读:1914来源:国知局
基于RS485网络中系统时钟同步方法与流程

本发明涉及一种基于rs485分布式网络系统时钟同步的方法。



背景技术:

目前,在电力系统设备的测量过程中越来越多地采用rs485网络。相对于以太网组成的系统,虽然rs485网络传输数据带宽较小,但是rs485网络结构简单,除了硬件上的成本降低外,对于由单片机组成的测量系统中,不需要复杂的网络通讯协议和大量的程序和内存空间,在单片机上的软件开销比较小,运行效率更高。

虽然rs485的网络系统简单,但实际应用中有时对网络中各个设备进行数据采样的时钟同步性要求高。在由一个主机控制和以多个从机为数据采集单元组成的系统中,主机和从机上都有各自的时钟系统。本文中把主机上的时钟称为主时钟,从机上的时钟称为从时钟,要求各个采集单元采集数据时达到和主机时钟同步,就需要解决系统对时问题。其中主时钟作为整个rs485网络的系统时钟。



技术实现要素:

针对上述现有技术中存在的缺陷,本发明的目的是提供一种基于rs485网络中的系统同步对时方法,应用于基于单片机组成的rs485分布式网络系统中,实现测量时的精确时钟同步。

为达到上述目的,本发明所采用的技术方案如下:

一种基于rs485网络中系统时钟同步方法,包括主机和从机,主机与从机之间通过rs485接口连接,所述rs485接口的连接线不仅作为主机和从机之间的通讯连接线,同时,作为主机和从机之间的时钟同步信号线,用于主机对从机进行时钟同步命令控制,且,作为rs485通讯连接线时的通讯波特率的配置对作为rs485时钟同步信号线时的同步控制不产生影响。

具体包括步骤如下:

步骤1:主机发送准备命令

当需要进行时钟同步时,主机先发送时钟同步准备命令,发送命令后主机要做必要的准备工作,包括允许外部中断,中断标志清零;

步骤2:从机接收准备命令

从机接收到准备命令后,做必要的准备工作,包括允许外部中断,中断标志清零;

步骤3:主机发送同步命令

同步命令发送出去后,主机会产生外部中断,会产生中断标志,在外部中断中记录中断产生时的主时钟并保存,并且禁止外部中断再产生,直至再次发送新的同步命令;

步骤4:从机接收同步命令

从机接收到同步命令后,也产生了外部中断,在外部中断中记录中断产生时的从时钟值并保存,并且禁止外部中断再产生,直至再次接收到主机发送的新的同步命令;

步骤5:主机发送主时钟;

步骤6:从机接收主时钟;

步骤7:从机修正各自的从时钟;

从机接收到主机的主时钟值后,对自己的从时钟进行修正。

主机的数据发送线连接其外部中断引脚,在主机向各从机发送同步命令后,主机发送一个数据,该数据的起始位作为时钟同步信号用以触发主机外部中断引脚发生中断。

从机的数据接收线连接其外部中断引脚,在从机接收到主机发出的同步命令后,等待接收主机发送的数据,该数据的起始位作为时钟同步信号用以触发从机外部中断引脚发生中断。

主机中的cpu控制器的外部中断优先级配置为其所有中断中的最高优先级;从机中的cpu控制器的外部中断优先级配置为其所有中断中的最高优先级。

主机中的外部中断引脚上的中断信号的触发配置为从高到低触发中断;从机中的外部中断引脚上的中断信号的触发配置为从高到低触发中断。

同步命令是一个字节或多个字节的数据。

时钟包括时钟计数器的值和定时器的值,其中,定时器的值记录至系统时钟的精度设定位,直到溢出中断,定时器的值清零并重新装载,时钟计数器的值加1。

外部中断中记录到的中断产生时的主时钟称为同步主时钟,保存到主时钟计数器m_int_time_counter和主定时器m_int_timer中;外部中断中记录到的中断产生时的从时钟值保存到从时钟计数器s_int_time_counter和从定时器s_int_timer中。

从机接收到主机的主时钟值后,对自己的从时钟进行修正时,从机首先读取自己当前的从时钟计数器s_time_counter和从定时器s_timer的值,分别计算这两个值和中断产生时保存的对应的两个值的偏差,把偏差值加上中断产生时保存的主时钟值,然后写入到s_time_counter和s_timer中,此后从定时器中的值从s_timer开始计数,直到溢出中断,中断后,s_time_counter值做加1的调整。

在从机对自己的从时钟进行修正后,修正后的从时钟与当前主时钟之间还会存在一定的同步误差,包括信号传输的时差、中断处理的时差以及主时钟和从时钟各自的时钟源不同造成的时差,信号传输的时差是指主机和从机产生中断之间的时间差,中断处理的时差在主机和从机中都有,表示在中断发生后到读取各自的时钟之间的时间差。

其中由主时钟和从时钟各自的时钟源不同造成的时差可以通过从机再对定时器的赋值进行校准。或者减小主机和从机之间的同步时间间隔来减小时间偏差。

主机为一个,从机为多个。

与现有技术相比,本发明具有如下的有益效果:

本发明公开的基于rs485的系统时钟同步方法,通过硬软件结合,使得各个从机通过从主机获取主时间来计算出自己的时钟时间与主机的时钟时间的偏差,通过计算,对自己的时钟进行修正校准,使得系统时钟同步效果能达到所设定的要求。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为本发明的硬件原理结构框图;

图2为本发明时钟同步过程示意图;

图3为本发明主机定时器中断服务流程图;

图4为本发明主机外部中断服务流程图;

图5为本发明主机主程序流程图;

图6为本发明从机主程序流程图;

图7为本发明的系统测试原理图;

图8为同步时的同步信号时间误差示意图;

图9为时钟同步一秒后,主机和从机的时钟差示意图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

本发明提供一种基于rs485网络中的主从机时钟同步对时方法。

时钟同步的原理:

一般系统包括一个主机,多个从机。主机和从机都以单片机作为控制单元,单片机上有定时器,有外部中断引脚和uart接口。其中uart连接rs485芯片,作为系统的通讯总线使用。

主时钟和从时钟的产生原理:

主机上的单片机称为主cpu,从机上的单片机称为从cpu。主机和从机上的单片机都是用外部晶振倍频后作为工作时钟。主、从cpu各自都有自己的工作时钟和定时器,工作时钟经过分频后作为定时器的时钟源,时钟源可以设定为经过一定的时间间隔产生定时中断,中断的次数被记录后形成主时钟和从时钟。时间间隔根据实际需要设置,可以是1秒,1毫秒等。

硬件信号的同步实现:

要实现时钟同步,在硬件上通过信号线来实现。主机和从机的硬件连接结构图如图1所示。系统中主机和从机通过rs485通讯,而rs485芯片和cpu连接的接口为uart接口。通讯过程中,主cpu的发送数据线txd_m和从cpu的接收数据线rxd_s产生的信号相同,并且同步,可以用此信号线作为同步信号线。

时间的精确读取:

uart发送数据是按照位发送,发送一个8位的数据一般要发送10个位,其中有起始位和停止位。uart发送信号在没有发送数据时是高电平,而发送数据时的起始位为低电平,可以用通信过程中的这个起始位作为同步信号。根据这个同步信号,需要主cpu和从cpu同时抓取各自的时钟。

同时抓取信号通过中断来实现。在cpu中都有外部中断引脚,在主cpu中,把txd_mx信号连接到一个中断引脚。在从cpu中,把rxd_s信号连接到一个中断引脚。cpu的外部中断都设置为从高到低电平的跳变来触发。在cpu的外部中断中读取时钟,这样主、从cpu就能同时读取到各自的时钟。

从机时钟修正:

得到各自的时钟后,主机把主时钟发送给从机,从机按照主机的时钟修正自己的时钟,就实现了和主机时钟的同步。

以下通过一具体实施例来对时钟同步的具体实现方法做进一步详细的说明。

定时器的配置及定时中断处理:

主cpu使用stm32f103vct6芯片,系统时钟频率:72mhz时钟,使用定时器timer4,时钟预分频数为720,那么一个时钟周期为0.01ms,即10us。定时器的自动重装载寄存器周期的值设置为50000,则定时中断一次的时间为50000x0.01ms=500ms。主定时器命名为m_timer。

从cpu使用stm32f103c8t6芯片,系统频率和定时器的配置和主cpu相同,从定时器命名为s_timer。

cpu的定时器为16位,配置后开启定时器,定时器每隔10us计数加一,等计数值达到50000时计数值清零,并产生定时中断,两次定时中断时间间隔500ms。定义变量记录中断次数,就可以换算成时钟。主机的定时器中断次数计数变量命名为主机时钟计数器,变量名:m_time_counter,从机的定时器中断次数计数变量名称为从机时钟计数器,变量名:s_time_counter。

主机定时中断中,m_time_counter计数器加1;从机定时中断中,m_time_counter计数器加1。

uart接口的配置:

uart用于连接rs485芯片进行通讯。主cpu使用uart1接rs485,配置波特率115200,8位数据位,1位停止位,无奇偶校验。从cpu使用uart3连接rs485芯片,配置波特率115200,8位数据位,1位停止位,无奇偶校验。

外部中断的配置和中断处理:

主cpu外部中断使用pc0引脚,连接uart的发送信号线tx。配置为下降沿触发中断。从cpu外部中断使用pa2引脚,连接uart的接收信号线rx。配置为下降沿触发中断。主、从cpu的外部中断都可以进行禁止和允许的设置,即禁止中断产生和允许中断产生。

在中断中读取定时器的时间计数值,保存。

主cpu外部中断处理:读取时钟计数器m_time_counter和定时器m_timer的值,并保存到m_int_time_counter和m_int_timer中,设置中断标志,禁止外部中断;

从cpu外部中断处理:读取时钟计数器s_time_counter和定时器s_timer的值,并保存到s_int_time_counter和s_int_timer中,设置中断标志,禁止外部中断;

时钟同步过程:

从机和主机的时钟同步包括以下步骤实现:主机发送准备命令;从机接收准备命令;主机发送同步命令;从机接收同步命令;主机发送主时钟;从机接收主时钟并修正自己的从时钟,如图2所示。

具体过程包括如下:

主机发送准备命令:当需要进行时钟同步时,主机先发送时钟同步准备命令。发送命令后主机要做必要的准备工作,具体为允许外部中断,中断标志清零。

从机接收到准备命令后,做同样的准备工作,允许外部中断,中断标志清零。

主机发送同步命令:同步命令发送出去后,主机会产生外部中断,会产生中断标志,并且也在外部中断中记录到了中断产生时的主时钟,主时钟值保存在m_int_time_counter和m_int_timer中。m_int_time_counter中的值的时钟单位是0.5s,即500ms;m_int_timer中的值的时钟单位是0.01ms,即10us。

从机接收到同步命令后,也已经产生了外部中断,这个可以根据中断标志可以判断。中断产生时的从时钟值保存在s_int_time_counter和s_int_timer中。s_int_time_counter中的值的时钟单位是0.5s,即500ms;s_int_timer中的值的时钟单位是0.01ms,即10us。从机接收到同步命令后,等待接收主机的主时钟值。

主机发送主时钟:主机发送同步命令后,发送主时钟值,即m_int_time_counter和m_int_timer中的数据给从机。

从机接收到主机的时钟值后,通过计算,对自己的时钟进行修正。

主机发送对时命令,16进制数据包:“55aa3154494d450d0a”

主机发送对时数据包,16进制数据包:“55aa32”

主机发送主机时间,16进制数据包:“55aa33xxxxxxxxyyyy”

参数定义:

主机时钟秒计时:m_time_counter,单位0.5秒

主机时钟微秒计时:m_timer,单位10微妙,或0.01毫秒

从机时钟秒计时:s_time_counter,单位0.5秒

从机时钟微秒计时:s_timer,单位10微妙,或0.01毫秒。

从机时钟的计算和修正:

从机接收到主机的时钟数据后,对自己的时钟进行修正。读取当前的时钟计数器s_time_counter和定时器s_timer的值,分别计算这两个值和中断产生时的对应的两个值的偏差,把偏差值加上主时钟值,然后写入到s_time_counter和s_timer中。此后定时器中的值从s_timer开始计数,直到溢出中断,中断后,s_time_counter值做加1的调整。

软件流程:

主机定时器中断服务程序,如图3所示:

主机定时器中断服务程序处理主机时钟更新,主要的功能是进行秒增加1计数。计数每加1,表示主时钟增加0.5秒。同时在中断服务程序中增加一个测试信号,测试信号是一个低脉冲信号,用示波器测量可以看到,每隔0.5秒输出一个低脉冲信号。

从机定时器中断服务程序:

从机的定时中断程序和主机相同,也是每隔0.5秒计数值加1,并且也输出一个低脉冲信号。

主机外部中断服务程序,如图4所示:

主机外部中断的产生是由时钟同步命令引起,在中断中读取主时钟并保存,并且禁止外部中断在产生。这个时钟称为同步主时钟,保存到m_int_time_counter和m_int_timer中。表示主机中断时的时钟。

从机外部中断服务程序:

从机外部中断的产生也是由时钟同步命令引起,处理方式和主机相同,读取的时钟值保存到s_int_time_counter和s_int_timer中。表示从机中断时的时钟。

主机主程序流程,如图5所示:

主机主程序流程是主机在时钟同步过程中从发起对时到最后对时结束的程序执行流程。

从机主程序流程,如图6所示:

从机主程序流程是从机在运行过程中,从接收到对时准备命令到对时处理完成的程序执行流程。

时钟同步测试结果与分析,图7所示。

影响时钟同步误差的因素:

影响时钟同步的时间差包括信号传输的时差和中断处理的时钟差。信号传输指的是主机和从机产生中断之间的时间差。通过测量,时差在1.4us左右,如图8所示。中断处理的时间在主机和从机中都有,表示在中断发生后到读取各自的时钟之间的时差。实际测量中,中断处理的时间为3us左右,如果使主机和从机的中断处理过程尽量一致,即可减小时间偏差。

时钟同步的测量:

图9是实际测量的同步后的时钟。是在时钟同步后1秒钟时主机和从机输出的信号时间偏差。根据图示时差小于5us。通过长时间的测量,有个别时间同步后的时钟偏差大于10us,但不会超过20us。

如果要减小时钟同步的偏差,可以采用的方法:减小定时器的分频数,从10us可以提高到2us。

时钟同步后,由于主时钟和从时钟各自的时钟源不同,运行过程中也会慢慢产生偏差,减小此偏差可以采用的方法是从机再对定时器的赋值进行校准;另外是减小主机和从机之间的同步时间,比如10秒或更短时间进行一次时钟同步。

本实验测量过程中,主时钟和从时钟之间的时间差是1.1us/s,如果10秒钟做一次时钟同步的时,偏差已经达到11us,所以可以采用5秒钟做一次时钟同步。

高精度时钟同步测量系统在电力监测设备中有很大的使用空间,试验证明,本发明基于rs485分布式网络系统的时钟同步精度可以达到微秒级。从成本和精度方面为其他基于rs485网络系统的时钟同步提供参考和帮助。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1