[北斗]基于北斗定位系统的桥梁监测系统

北斗三代定位系统,桥梁监测,RTK,PPP,秒脉冲

  • 因为疫情的原因,许多考试都取消了线下考试,变成了各类小论文的撰写。
    本文为导航基础与原理课程的大作业,对内容做了一些简单的整理,博君一笑V●π●V

问题研究背景

  2020年5月5日15时20分,虎门大桥受主桥风速大影响,出现了较为明显的晃动与振幅。基于安全考虑,大桥管理部门迅速启动应急预案,配合交警实施双向交通管制措施,省交通集团已组织养护技术人员对桥体进行检查并组织专家研判。后经专家的研究与分析,本次振动是由后期维护和施工改造安装的水马造成了桥梁材料和结构的改变导致的桥振与风振共同作用形成的涡振所导致的。
  涡振是是因风流过物体截面后,在物体背后周期性的漩涡脱落,由此产生对结构的周期性强迫力,是各种结构最容易出现的振动,包括桥塔,拉索,主梁和高耸建筑物。涡激振动相对来讲,对于结构的危害有限,因为当结构的振动幅度持续增大时,气流受到结构振动的影响,漩涡的周期性脱落就会被破坏。因此,涡振引起的振动幅值是无法无限增大的,对于结构的耐久性和使用性有影响。但是很少会造成结构的彻底损坏。但涡激振动若颤振和弛振达到临界状态时,将出现危险性的发散状态,造成不可逆转的损失。
  在设计桥梁时,各种载荷一般都事先假定,然而在运营阶段实际的载荷往往和假定的值不一致,出现如涡振等危害桥梁安全的现象。故有必要对桥梁进行长期的健康监测,当出现异常状况时,及时封闭桥梁撤离人员,并采取相关的应对措施解除危害,才可以保证桥梁的安全运营。

研究现状与创新方案

  关于桥梁的检测技术,目前传统的检测方法有采用位移传感器、加速度计、倾斜传感器、激光干涉仪等,这些传统的桥梁监测方案方法,在其优势的某一项类别指标的检测方面,有着突出的检测性能,但如果从整体桥梁监测的角度出发,这些方法也存在许多不足之处。
  近年来,随着北斗三代导航系统的不断完善,目前已完成全网部署。北斗定位系统实现系统设计的全部功能,可达到厘米的定位精度,这使得采用北斗定位系统对桥梁监测变成了可能。
  本文创新的采用北斗定位系统应用于桥梁监测,包括桥梁的稳态性能参数监测和动态性能参数监测两个部分。该方案相较传统的桥梁监测方案,具有不受气候的影响,可以全天候自动测量,能够实时提供定给结果(RTK),方便地实现各测点的时间同步等优点。

项目需求分析

  针对对于桥梁进行长期健康监测这一具体问题,具体分为两方面展开分析。大型桥梁的监测主要分为两方面的内容,一方面,我们关注桥梁的稳态特征,即桥梁是否出现了永久性的形变,如由于基础沉降,桥墩的位移,以及钢索牵引力的松弛而造成的长期永久性的形变;另一方面我们还关注桥梁的瞬态特征,即桥梁由于风、温度、潮汐、地震以及交通等引起的短期的变形。
  对于桥梁的稳态特征,我们希望能够获得关于桥梁各个观测标志点的绝对坐标位置,且要求定位精度能够尽可能的高,从而使得整套健康监测系统对于桥梁永久性形变具有更高的敏感度,更快发现微小形变的发生。而对于桥梁的瞬态特征,我们并不要求获得桥梁的绝对位置信息,而更加关注桥梁的瞬时状态,即桥梁各个点相对于基准点的位置偏移,且要求观测的瞬时状态越精确越好。

总体设计方案

  通过对于该问题的具体分析,针对桥梁稳态特性和瞬态特性两个不同的观测问题,分别提出对应的解决方案。

稳态特性的测量方案

  对于桥梁的稳态特性,即桥梁的长期形变,可在桥面上安装多个北斗定位接收机,作为系统测量点。通过获取北斗定位系统几个小时或者更长时间的测量数据,通过取平均处理,平均处理后的位置精度可以达到厘米级升值毫米级定位精度。
  通过长时间的平均,在原理上等效于一个低通滤波器,能够滤除因信号误差,多径误差,以及接收机信号产生的信号波动而导致定位信息的偏差。但仍然无法避电离层误差,对流层误差,轨道误差与钟误差所产生的系统固有误差,可采用RTK技术或者PPP技术对误差加以消除。

瞬态特性的测量方案

  对于桥梁的瞬态特性,即桥梁的瞬时形变,其更关注桥梁各个位置的相对位置偏差,并要求各采集点的采集时刻具有良好的同步性。由于只关注桥梁各观测点的相对位置,故电离层误差,对流层误差,轨道误差与钟误差所产生的系统固有误差对于桥梁各观测点的影响基本一致,故不会对各点相对位置的定位产生影响。但信号误差,多径误差,以及接收机信号产生的信号波动而导致定位信息的偏差则无法避免,可采用RTK技术或者PPP技术对误差加以消除。
  除此之外,还需要同步各个测量点的时钟频率尽可能一致,从而能采集到精准的桥梁瞬态特性。可采用北斗定位信号中的秒脉冲信号作为基准信号,对压控晶振进行修正,并进行时钟的相位同步,从而实现各个测量点之间的时钟获得统一。

具体实施方案

消除系统误差的具体方法

  消除系统误差可采用RTK技术(实时动态载波相位差分技术),即在观测大桥的附近,建立一个具备精确位置的地面基准站。基准站通过数据链将其观测值和测站坐标信息一起传送给移动北斗接收机。北斗接收机不仅通过数据链接收来自基准站的数据,还要采集来自北斗卫星的观测数据,并在系统内组成差分观测值进行实时处理,从而消除误差给出厘米级定位结果。对于单基准站动态定位,一般要求基准站和移动站之间的距离为10~15km,定位精度为厘米级。
  若由于各种原因无法在测量点附近建站的,也可采用PPP技术(精密单点定位技术),即利用单台双频地球导航卫星系统GNSS接收机,基于载波相位观测值和国际GNSS服务组织IGS 提供的卫星轨道和钟差产品进行单点定位的技术。利用IGS发布的卫星轨道和钟差产品或用IGS跟踪站数据解算得到卫星轨道和钟差参数,采用无电离层伪距和相位观测值消去相关性误差的影响;而地球自转、卫星和接收机相位中心偏差、海洋负荷等采用精确的模型改正,对天顶流层延迟误差、多路径效应等未模型化的误差作为未知参数与测站坐标参数一同解算,从而获得ITRF框架(国际地球参考框架)下点位的高精度的三维坐标。
  也可将网络RTK技术与PPP技术相结合,如2018年5月16号千寻位置利用国家北斗地基增强系统“全国一张网”及千寻位置的海外地基增强站点,实现基于地球同步轨道卫星和互联网的双路GNSS的SSR改正参数播发,满足无缝、连续、安全可靠的精准定位和复杂时间协同需求的定位服务。星地融合增强算法采用NRTK和PPP技术融合处理方法,利用星基SSR信息,可实现在终端或服务端等价变换为常规RTK用户可使用的OSR观测信息,终端用户采用常规RTK模式即可实现高精度定位,避免终端和服务端非差误差模型不统一造成的计算误差,减低终端计算量负荷;与此同时,由于转换得到的OSR观测值具有统一的模糊度基准,因此,在主站切换及卫星失锁等条件下无周跳产生,并在无网络场景下,支持RTK模式平滑切换到PPP模式,满足一些特殊场景的连续性定位要求。

时钟同步的具体方法

  目前常用的北斗信号接收机均带有秒脉冲(PPS)输出信号。以民用接收芯片ATGM336H为例,它是一款高性能定位导航模块,采用了低功耗 GNSS SOC 芯片—AT6558,支持多种卫星导航系统,包括中国的北斗卫星导航系统,美国的GPS,俄罗斯的 GLONASS,欧盟的GALILEO,日本的QZSS以及卫星增强系统 SBAS(WAAS, EGNOS,GAGAN,MSAS)。ATGM336H是一款真正意义的六合一多模卫星导航模块。其信号捕获时间小于2S,重捕时间小于1S,授时精度由于30ns,时钟(1PPS)的锁定时间优于5分钟,就能够作为系统秒脉冲的校正来源。
  时钟同步模块主要由GNSS接收器、FPGA开发板、STM32单片机以及晶体振荡器外围电路。FPGA主要是从GNSS模块获取秒脉冲(1PPS)信号,以此信号为基准对晶振频率计数,以及发出计算所得频率差值给单片机,单片机主要是对接收的信号进行数模转换,并发出相应的控制电压给晶振压控端。系统框图如下:

  使用PPS秒脉冲信号对于各接收机模块的修正,能够很好将各接收机的时钟进行同步,从而获得桥梁精确的瞬态特性。
  FPGA开发板是本设计最主要的硬件,对晶振频率的计算处理都是利用FPGA丰富的逻辑资源来进行的。需要利用GPIO口接收发送数据与其他器件进行通信、需要六位数码管显示数据,还需要复位按键与LED灯等资源。
  考虑到该参考源的使用环境和芯片价格,所以本系统使用的主要开发板FPGA为EP4CE6F17C8N。该芯片具有体积小功能强大等优点。该芯片拥有6272个多组算术运算和逻辑运算的组合逻辑电路、2个全局锁相环、179个可用输入输出设备接口。开发板用USB供电, 通过3路低压差线性稳压器芯片AMS1117分别产生3.3V,2.5V,1.2V三路电源,满足FPGA各部分所需的供电电压。
  FPGA需要接收秒脉冲信号与晶振频率信号,经过计算处理后将频差送出给STM32单片机并且显示在数码管上。STM32单片机收到频差处理后输出校正电压送给晶振,并实时显示电压值等数据。STM32在本设计主要起到反馈修正的作用。主要应用了自带的两路12位DA及LCD显示屏。从FPGA接收到的数据需要通过DA转换为电压去校正晶振频率,而LCD显示屏主要显示实时的相关信息。
  将程序固化到开发板后,进行了测试。在刚刚接收到信号时,晶振经过压控后输出的频率跳变较大,并没有稳定下来,但是一定时间内,它就可以稳定在100MHz附近(频偏大致范围为±8Hz)。使用频谱仪对稳定前后的晶振频率进行测量,效果如下图所示:

  经过对比,发现晶振频率经过电压校正后与100MHz的差值由2533Hz变为8Hz左右,达到了预期的目标,使晶振频率稳定在100MHz附近。由于该测试系统,仅对调控原理进行简单的验证,只使用了STM32芯片自带的精度为12位DA,对于压控晶振的电压变化而言,跳动幅度还是偏大。故如进一步提高DA的位数,能进一步提高晶振稳定后的频率偏差。

数据回传的具体方案

  对于一些较长的跨海大桥,或位于偏僻位置的部分大桥,可能无线蜂窝网信号无法做到完全的覆盖。故当检测到桥梁异常数据时,可采用北斗短报文功能,将异常数据即时传送给外界,从而实现信息的即时传递。北斗短报文功能作为北斗一代因主动定位模式所附带的一项功能,一直被继承了下来。北斗短报文功能每次最长可发送120个汉字,已基本满足该桥梁监测系统对于信息的回传需要。

总结

  通过对于桥梁监测的现实问题,结合北斗定位系统的自身优势,结合各类导航定位的增强技术以及授时校正的具体方案,提出了基于北斗定位系统的桥梁监测系统,并针对系统设计中的几个实际问题,提出了对应的解决方案,作为一种系统方案构想,为未来的进一步研究工作提出了可行的研究方向。

附:核心程序源码

//该模块使用pps秒脉冲作为基准,测量晶振频率差值
//IO define
module gnss_pss_different(
    input   clk_in,  //输入时钟信号
    input   sys_rst,  //复位按键
    input   gnss_pps, //gnss脉冲信号
	
    output  reg[19:0]  different,  //差值
    output  reg  different_sign, //差值符号
	 output  reg led //信号灯
);

// parameter difine
parameter  COUNT_MAX = 28'd210_000_000;

//reg,wire define
reg [1:0]  clock_d1_d0;   //缓存d0_d1     
reg [28:0] count;      //计数器
reg [3:0]  count_num;  //计数到第几秒 

//wire define
wire    rase_flag;

//上升沿检测器
assign  rase_flag = (clock_d1_d0 == 2'b01); //比较当前输入和前一输入的电平值
reg raise_edge_dly;
//对输入时钟数据延迟检测上升沿
always @(posedge clk_in or negedge sys_rst) 
begin 
    if (!sys_rst) clock_d1_d0 <= 2'b00;            //如果复位按键被按下,清零两个缓存位      
    else clock_d1_d0 <= {clock_d1_d0[0],gnss_pps};            //移位输入信号,用于判断输入是否边沿         
    if(!sys_rst) 
	 begin
        count <=0;
        count_num <=0;
    end
    else if (rase_flag) //上升沿
	 begin
            if(count_num == 4'd1) 
				begin
                led<=~led;                                                                                
                if(count > 200_000_000)
					 begin
                    different <= count - 200_000_000;
                    different_sign <= 0;
                end
                else if(count < 200_000_000)
					 begin
                    different <= 200_000_000 - count;
                    different_sign <= 1;
					 end
                else 
					 begin
                    different <= 0;
                    different_sign <= 0;
                end
					 count <= 1'b0;
                count_num <= 4'b0;
            end 
            else 
				begin
                count <= count + 1;
                count_num <= count_num + 1;
            end
     end
     else
            count <= count + 1 ;
 end
endmodule