tag 标签: 同步

相关博文
  • 热度 1
    2024-3-3 14:54
    139 次阅读|
    1 个评论
    使用CSDN的同步功能,将文章同步到CSDN中,两边文章同步。 本文为同步文章,读者请忽略。
  • 热度 18
    2014-12-25 23:16
    1025 次阅读|
    0 个评论
    1 引言 近些年来,随着电子技术的发展,无线通信技术、计算机网络的发展,分布式无线数据采集网络技术开始兴起,并迅速的应用到各个领域。在一些地形复杂,不适合人类出现的区域需要进行数据采集的情况下,都可以适当的选择无线分布式采集来进行。现有的无线分布式采集系统中,往往使用单片机、DSP等作为系统的主控控制单元。但是由于其自身工作特点,往往对于精确的定时控制以及并行处理能力上比FPGA弱。随着FPGA等可编程逻辑器件的发展,为无线数据可靠传输提供了很好的实现平台。采用FPGA作为时序控制和信号处理的处理器,将使系统电路设计更加简洁、可靠、灵活,可有效的缩短开发周期,并降低开发成本。 为此,基于CycloneIV+STM32设计了一种新型的无线分布式采集系统,实现了数据的高可靠和同步传输。设计主要由3大部分组成:编码器、译码器、无线收发电台。在对编码器、译码器同步校准后,对待发送数据进行卷积编码,并转换为串行数据。数据转换为串行数据后,在串行数据帧头加入Barker码来实现帧的同步,并使用2条互为备份的数据传送通道同时发送数据。在数据接收端检测到barker码后,本地对互为备份的双通道数据进行viterbi译码(本文设计的viterbi译码器采用并行结构,大大的降低译码时间)。译码结束后,本地对双通道数据进行循环冗余校验,并做出判选,最后执行相应指令。并在规定时间给出相应反馈信号。设计的无线采集系统,即使某一数据通道出现少量错码,系统仍能有效的恢复出数据,并进行可靠的数据传输。系统添加了监控模块,实时备份上传的数据并监控,如发现不能正常上传,则启用备用模块保证整个系统正常工作。系统不仅能实现数据的高可靠和同步传输,而且具有很好的适用性,可广泛应用工业中。 2 无线分布式采集系统简介 2.1 系统硬件简介 无线分布式采集系统包括编码器、译码器(编码器、译码器硬件完全相同,只是配置逻辑不同,可配置为编码器、译码器、中继站)和无线通信电台。如图1所示,这是一个最简单的一对一式分布式系统。 图1 无线分布式采集系统结构 编码器作为上位机与译码器之间的桥梁,通过USB/RS485通道进行发送、接收命令和数据。译码器接收编码器发来的命令进行配置和采集,并将数据存储至DDR2中。译码器收到上传命令后,上传数据至编码器。 编码器/译码器硬件系统框图如图2所示。本系统主控单元由FPGA完成。FPGA选用Altera公司的EP4CGX30F407,逻辑单元为29440个,80个18×18乘法器,多达290个用户自定义IO。STM32作为监控和备用单元组成系统的基本架构,STM32F407ZG系列是基于高性能的ARM CortexTM-M4F的32位RISC内核,工作频率高达168 MHz,该STM32F407ZG系列采用高速嵌入式存储器(多达1 MB闪存,高达192 KB的SRAM),拥有3个12位ADC,2个DAC,1个低功耗RTC,12个通用16位定时器,2个通用32位定时器。人机交互部分由16X2液晶显示字符模块和4个按键组成,其主要功能是通过按键对基站编号设置并显示在LCD上。无线模块选用WSN-03系列无线模块作为收发平台,工作电压为5 V,传输速率和工作频段等都可配置。目前传输速率最大为115 200b ps,工作频为433 MHz可调。无线模块与FPGA主要以RXD/A,TXD/B,NRST(复位控制),SET(设置模块参数),SLP(休眠控制)信号线连接。GPS模块选用VKl6U6进行定位,与FPGA以UART接口连接,波特率定位9600 bps。ADC选用基于△-Σ技术的32 bits高精度低功耗模数转换芯片ADSl282,采样信号电平范围:差分输人一2.5~+2.5 V。单个译码器有6个采集通道,以2 k采样率,采样时常16 S来计算,单个译码器纯数据量为6×2 k×16×24—6144 Kbits。考虑到编码器,一次采样,8个基站的数据经编码后数据总量为98 304 Kbits,所以编码器和译码器需增加l片Micron Technology公司的MT47H256M8HG-37E IT(256Meg×8)作为缓存空间。由于DDR2 SDRAM需要特定的控制读写时序,系统直接采用Quartus II自带的“DDR2 SDRAM High-Performance Controller”IP CORE。USB部分由2个通道组成,一个是由FPGA、CY7C68013和USB接口组成;另一个由STM32(自带USB驱动)和USB接口组成。同时本设计中还添加了RS485串口,使整个系统与上位机能保持实时通信,为系统的远程控制提供了可能,并能保持系统更新。 图2 系统框架 2.2 系统数据流程 系统的数据流程为:同步校准译码器,设置各个译码器接收命令后的延时-编码器配置采集参数、命令-译码器采集数据保存至DDR2中一各译码器分时接收数据上传命令并上传数据-编码器将数据汇总保存至DDR2-数据收集齐后通过USB/RS485上传至上位机。译码器节点配合计算机对各个点的数据进行轮询采集,它包含了无线传输模块和与计算机通信的USB接口。STM32将组帧后的数据备份并实时监控FPGA,如在规定时间或未能按指令进行工作,STM32将替代FPGA并使FPGA进入断电状态。 2.3 系统组帧格式 编码器与译码器之间是一对多的关系,译码器分时上传数据,译码器有2个通道,译码器有唯一的配置编号。数据帧的格式如图3所示。数据帧中除20字节有效数据之外,还包括组号、目的编号等。 图3 编码器、译码器间数据帧格式 为了改进接收信号质量,本系统引入信道编码的方法来改善信道质量。具体如图4所示。发送端对数据进行组帧、并串转换、卷积编码、加入同步帧信息后,把数据发送至无线通信电台进行调制。接收端的无线通信电台对信号进行解调后发送数据至接收端的FPGA。接收端的FPGA检测到帧同步信息后对接下来的数据保存,并进行Viterbi译码。FPGA对双通道的数据进行冗余校验,并选择正确的数据执行相关操作。 图4 无线数据传输 3 无线分布式采集系统数据传输的实现 3.1 可靠性 待发数据经卷积编码,互为备份的双通道发送,Viterbi译码,冗余校验,数据判选,系统能够很好的进行无线收发。 3.1.1 卷积编码 数据组帧完成后,由低位至高位进行并串转换,进行卷积编码。卷积编码是一种纠错信道编码,是由连续的输入信息序列经编码后得到连续输出的编码序列口。以(n,k,m)来描述卷积码,k为每次输入到卷积编码器的bit数,行为每k元组码字对应的卷积码输出n元组码字,m为编码储存度。卷积编码生成的n元组元不仅与当前输入有关系,还与前面m一1个输入的k元组有关系。本系统采用(2,1,4)卷积编码器,如图5所示。图中“+”代表异或。每bit经编码后都有2 bit输出(C1,C2)。 图5 (2,1,4)卷积编码器 3.1.2 Viterbi译码 接收端有2个接收通道,互不干扰。接收端对2个通道同时译码。译码采用Viterbi译码。Viterbi译码算法是一种卷积码的解码算法。Viterbi译码根据最大似然算法规则,能达到最佳译码,特别适合向前纠错。以本设计为例,根据图5,编码器4个延时状态(0,1)组成整个编码器的16个状态(D4D3D2D1),每个状态在编码器输入1或0时,跳转到另一个状态。并且输出也随之改变。译码就是编码的逆过程。算法规定任意t时刻收到的数据都要进行32次路径值计算、16次比较,比较后每个状态只保存一个路径值,为接下来计算减少了一半的运算量。反复208次,从16条幸存路径中选出一条路径值最小的,反推出这条路径,得出相应的译码输出。考虑到每次译码后,译码器都能回到初始状态,所以源数据最后加了8 bit的“0”。本设计采用并行处理结构,经214个周期还原出源码。 在设计FPGA逻辑时,基本采用多条并行的流水线技术,译码部分包含4个子模块:加比选模块、回溯模块、存储模块和时钟控制模块。路径值的计算和比较在3个时钟周期内完成,4个模块同时运行,大大的降低了译码时间。另外,为了提高FPGA效率,系统加入采样触发信号,保证系逻辑能够稳定运行。 3.1.3 数据判选 经译码后,接收端已接收到2组互为备份的数据。经实践证明,简单的并联冗余能大大的提高系统的可靠性。具体选择流程如图6所示。2路数据经Viterbi译码后,开始接收一帧数据,并写入RAM中,同时计算CRC校验、帧完整性检测、ID是否符合本地。上述检测都没问题时,对2路幸存路径的度量值进行比较,选择值小的通道作为最终数据。 图6 数据的选择 3.2 同步的实现 为了保证编码器和译码器之间能严格实现同步,数据帧需要加入同步帧。实现帧同步的方法通常有2种:起止同步法和集中式插入同步法。起止式同步比较简单,一般在数据码元的开始和结束位置加入特定的起始和停止脉冲来表示数据帧的开始和结束。集中插入式同步法中插人的同步码要求在接收端进行同步识别时出现伪同步的概率尽可能低,并且要求该码具有尖锐的自相关特性以便识别。7位巴克码作为帧同步码,其局部自相关函数为: 由上公式计算可知,7位巴克码的自相关函数在j一0时出现尖锐的单峰特性。设计中采用2组同步帧头作为同步码,同步帧头由7位巴克码和1 bit的0组成。 到现在为止,待发数据bit数为:208×2+8×2-432 bits。经调制解调后,接收端检测帧同步信息,同步信息为2组11100100组成。每组同步信息高7位与7位巴克码相比,允许出错位数在1位以内 。设P为码元错误概率,行为同步码组的码元数,m为判决其允许码组中的错误码元最大数,在本系统中行n=7,m==1。在P=0.01时,单一barker码的漏同步概率为: 当2组同步帧都满足时,帧同步建立,接收端保 存接下来的数据。无线通信电台与FPGA以rs485连接,如图7所示,FPGA检测X是否为“0”,当检测到“0”,不接收端对接下来的数据X与本地巴克码对应位进行位异或运算。当检测1 byte barker码,错1位以内时,发出一value脉冲。当检测到2个value脉冲时,说明同步已建立,接收端开始存储接下来的数据。 图7 barler码识别 4 系统监控模块的实现 STM32与FPGA连接如图8所示,由于ARM与FPGA的相互通信直接影响着控制器的性能,所以该并行总线的设计就成为一个非常关键的问题。该总线可以包括芯片的地址总线(ADDR )、数据总线(DB )、控制总线、复位信号(nRST)以及中断信号线(INT),其中控制总线包括使能信号(nOE)、片选信号(nCS)、读信号(nRD)、写信号(nWE),这样做的好处是,将FPGA芯片存储器化,即STM32可通过对特定地址的访问来控制FPGA工作,并且可通过共同的复位信号将STM32与FPGA芯片同时复位,尽量避免总线竞争和冒险现象的出现。 图8 STM32与FPGA连接 STM32与FPGA同时接收命令,在解析完命令后,FPGA应在规定的时间内发送数据,FH认组帧完成时,发出INT信号至黜2申请中断。如果STM32在规定时间内没有接收到FPGA发来的INT信号,将开始计时,计时时间内未能接收INT信号,STM32将停止FPGA供电电源工作,由STM32代替FPGA工作,保证整个系统能稳定进行。 5 系统测试 编码器实物如图9所示。测试时搭建一对编码、译码器,采用12 V的直流电源供电。待 发数据为208 bits,即208’b00000000_10010010_01100100_10011001_00100110_01001001_10010010_01100100_10011001_00100110_01001001_10010010_01100100_10011001_00100110_01001001_10010010_01100100_10011001_00100110_01001001_10010010_01100100_10011001_00100111_00111111;图10显示了测试中利用SignalTap II截取经卷积编码后输出的部分信号波形。其中z为串行输人数据,yt为卷积编码后输出的数据。数据经无线发送后,经Viterbi译码,仿真图形如图11所示,编码器发送的数据为208 bit S,data_out为译码输出的部分数据,译码数据与发送端的高低位顺序相反。由于数据经发送后,高低位互换,图上只截取了经Viterbi译码后的高27位的译码结果。经多次测试,数据传输正常,在少量不连续的错码情况下,系统能够自动纠正。 图9 编码器实物 图l0(2,1,4)编码器输出 图ll Viterbi译码输出 6 结论 在无线分布式采集系统设计中,采用了基于卷积编码、Viterbi译码的编码和互为备份的双通道传输方案,利用了FPGA内丰富的逻辑资源以及存储资源,实现了数据的远距离同步可靠传输。加入备份数据通道后,通过FPGA内部逻辑控制,在硬件上实现了对两路数据的实时校验及自动判选,提高了系统的稳定性和可靠性。相比于“备份-重传”等机制,该方法实现简单、实时性好,即使某一通道不能正常工作,系统仍能正常进行。该无线分布采集系统,满足了现在同步触发和数据量不大情况下的传输。本文提出的互为备份的双通道编解码、数据冗余传输机制,亦可应用相关无线传输领域,以提高远距离数据传输的可靠性和稳定性。
  • 热度 23
    2014-1-14 23:45
    1606 次阅读|
    3 个评论
    进程间通信——信号量、互斥锁等的异同   最早接触在系统上编程,是在嵌入式Linux上完成几项功能。当时就是按照写单片机程序的思维写的。实现几个功能,就用了一个进程,单线程来做。 后来实习时,接触Linux下多进程,多线程的编程。了解到多个线程之间的操作需要进行同步,互斥等。 在工作后,有进行了uCOS的多任务编程。发现uCOS中的多任务的同步,互斥与Linux下有很多相似性。但是也有很多不同。 也因为一开始把uCOS的信号量,互斥锁等和Linux类比来操作。概念确实是一致的,但是由于具体实现的差异,也导致了实际操作中的一些失误(uCOS中的任务相当于进程中的线程,任务间通信相当于线程间通信)。 虽然,经过这些实践,但是有些疑问却一直没有解开。   在一篇博客中到关于深入了解系统的书籍推荐找到了《UNIX网络编程第二卷:进程间通信》,说道它介绍了信号量等IPC通信(但是它也说了,这些技术是老掉牙的技术)。 不过这本书确实解开了不少一直来的疑惑。   传统设计原则认为:把应用程序设计为一组互相通信的小片段比将其设计为单个庞大的程序更好。 应用程序的几种构建方法: 1、用一个庞大的程序完成全部工作。 2、使用多个程序,程序之间用某种形式的IPC进行通信; 3、使用一个包含多个线程的程序,线程之间使用某种IPC。 注:IPC:Interprocess Communication,进程间通信。 在自己最早的时候使用的就是第一种方式来构建程序的。   对于UNPv2,主要介绍了4种不同的IPC方式: 1、消息传递; 2、同步(互斥量、条件变量、读写锁、文件和记录锁、信号量); 3、共享内存; 4、远程过程调用。   由于更多的是在单进程中实现多线程通信,对于同步的使用要多于消息传递。因为在单进程中,所有线程共享运行地址空间。全局变量(以及局部静态变量(通过访问函数))所有线程可以访问。所以对于同步的使用要多于消息传递。也因此对于互斥量,信号量,条件变量等何时使用,如何使用留下了疑问。 一开始,自己把互斥锁和信号量几乎没有怎么区分,只要实现了对临界区的保护就可以。也感觉他们之间似乎没什么差异,还纳闷为什么会有了互斥锁还有信号量存在。 在已经有了互斥锁的时候,还提供信号量,Posix.1给出的理由是:提供信号量的主要目的是提供一种进程间同步方式。这些进程可能共享也可能不共享内存区。互斥锁,条件变量是作为线程间同步机制说明的,这些线程总是共享某个内存区(因为线程共享运行地址空间)。这两者都是已经广泛用了很多年的同步范式。每组原语都特别适合于特定的问题。 应该可以理解为,互斥锁,条件变量,信号量都可以作为同步来使用,不必纠结于需要同步时使用那一个。但是每一个都用了很长时间,都有自己特别适合的问题。所以就都留着了。 也就因为有自己最合适的问题,所以它们之间肯定有些地方很不一样。 以下是:信号量,互斥锁,条件变量三者的一些差别: 1、互斥锁总是要由给它上锁的线程解锁,信号量的挂出却不必由执行过它的等待操作的统一线程执行。 2、互斥锁要么被锁住,要么被解开(二值状态,类似于二值信号量,区别于多值信号量)。 3、既然信号量有一个与之关联的状态(它的计数值),那么信号量挂出操作总是被记住。而当向一个条件变量发送信号时,如果没有线程等待在盖条件变量,则该信号丢失。(即:如果在信号量挂出的时候,没有线程等待此信号量,则在下次有线程等待的时候,会收到此信号量,并进行处理。而条件变量则将会陷入等待) 4、在Posix.1标准中,各种同步技巧(互斥锁,条件变量,读写锁,信号量)中,只有信号量挂出操作,能够在信号处理程序中安全调用。 从这几点看,似乎信号量很有优势,但也因为功能强大,所以其运行开销会偏大。具体的性能,需要实际在系统中测试才知道。   UNPv2在最后关于解决问题使用哪种IPC给出的解答是:对于解决特定问题使用哪种IPC,应该视具体问题而定。我们可以做的是,熟悉各种IPC机制,然后根据具体需要选择一个适合当前的。   关于消息传递一块,个人感觉:远程过程调用和共享内存,都是实现了一种消息传递的方式,或者更准确的说是数据传递。虽然对于具体实现技术上来说,有四种IPC方式,但是从数据传递和同步来看,只有两种。一种实现临界区保护,一种实现信息的传递。   在uCOS中也有一些对应于这些IPC方式的实现(当然是任务间通信): 1、消息传递(邮箱,消息队列); 3、同步(信号量,互斥锁,邮箱(可以作为互斥来用)); 由于uCOS中的代码,共享内存空间,所以全局变量就相当于内存共享。所以在使用uCOS的时候,更多的参照线程间通信的方式,来操作。但是就像文前提到的,uCOS毕竟不遵守Posix.1标准,所以在实现上不一样。 在Linux上信号量很多时候是二值信号量(不知道最新的是否支持多值),但是uCOS支持的信号量是多值信号量。由于一开始将uCOS上的信号量类比于Linux上的信号量,也当做二值来处理,结果程序的运行结果不符合预期。   虽然很多概念是适用的,但是当针对于具体应用的时候,还是要看具体的实现是怎么样子的。这样才会避免一些细节上的问题。而且对于嵌入式编程而言,IPC技术不但不是老掉牙的技术,相反还是十分重要的。因为嵌入式开发中,有时候使用的操作系统,是共享地址空间的。而且有时候,要实现多任务,多线程等同步操作就是其中实现任务或者线程间协作的很重要的一个步骤。即使开发裸机系统,出去性能考虑会实现为异步式的。而异步就要考虑很多资源的同步问题,其实也就是做一个操作系统的一些工作——调度。   由于现在Linux等操作系统对于这些高度抽象,似乎不用去考虑这些。但是对于嵌入式编程而言,这些还是要经常面对的问题。 IPC对于嵌入式开发,还不过时。   注: http://coolshell.cn/articles/4990.html 技术员技术练级攻略 《UNPv2》 《 嵌入式实时操作系统μC/OS-2 》
  • 热度 20
    2013-2-15 16:43
    2153 次阅读|
    0 个评论
        在自然界中,我们很难找到可以利用的绝对时间尺度。因此产生精密时间尺度的理想装置只是一种理论上的构想,所有天文观测或者物理仪器为基础的实际时间尺度,都是对于理论概念的逐步逼近。     一般而论,任何一个钟,包括地球自转和天体的运动,都具有三种职能:     a. 具有可以观测的周期运动;     b. 能够连续计算运动周期;     c. 可以记数显示。     当然,获得上述三个基本职能的方法是多种的,但无论运用什么方法,得到的是一个实际的时间尺度;按照导出时间尺度的方式,我们可以把用于守时的各种周期物理运动分为三类:     a. 转动体的自由旋转;     b. 开普勒运动;     c. 谐波振荡。     第一类和第二类周期运动是天文学时间概念和天文学时间尺度的基础。     第三类的谐波振荡产生了一般意义上所说的时钟,其中原子钟最为精确,使我们得到了原子时和原子时间尺度的概念。     要以上述任一周期运动为基础,通过观测,连续记数,记录和显示来建立一个时间尺度,必须进行两方面的工作:一是测量、校准和确定振荡的基本周期,或者倒数———频率,二是确定时间尺度的原点。     第一项工作就是确定时间间隔的单位;当然,仅有时间单位是不够的,只有在选择或确定了原点之后,才能从原点起计算周期,完成建立时间尺度的任务。在实际工作中,为保持相互协调,这两项工作往往需要反复进行。     事实上,实际应用中的所有时间尺度的原点,都是以国际间各有关部门的协调一致为基础的。     无论用哪样一种运动周期现象来建立时间尺度,均匀性都是一个最重要的技术指标。所谓均匀,就是指时间尺度上各刻度间的间隔要保持一致,也就是振荡的基本周期或频率要稳定。因此,时间尺度的均匀性和频率稳定度是紧密相关的。实际上均匀性和稳定度代表着时钟的同一特性。     时间一词包含两种含义(即时间的两个基本概念):即时间间隔(事件持续的时间长短)和时间尺度上某个瞬间所代表的时刻(钟时)。在科学实验中,有时只需要测量两个事件之间的时间间隔或事件持续的时间,有时需要以实验开始为起点,按照某种时间尺度记录大量事件的发生时刻,这两类实验对实验开始时刻(相对某一时间尺度,例如UTC)的精度要求是不高的;而还有一类实验工作,它们必须参考于一个共同的时间尺度(如UTC)来进行,记录观测或观测结果。     在最后这类工作中,要求在测量瞬间有一个定时信息,这一信息可以是数字显示的,也可以用时码的形式给出。对于这种定时信息可以由两种方式获得;一种是使用一个独立的地方钟,二是利用远方时钟发播的定时信号。多数情况下则是两种方法结合起来使用。     无论地方钟的质量和预期的性能如何,它们都必须经过频率校准和确定运转的起始时刻,才能保持与某一时间尺度(如UTC)接近,而要这样做,一是将地方钟搬到有合适的参考时间尺度的地方进行比对,或者通过接收远方钟发播的定时信号在扣除各种时延的情况下,进行比对和校准。使用地方钟的优点是,只有在必要的校准和重新调整时才需要接收定时信号。因此,利用地方钟提供实际时间尺度的要求做到:     a . 要有一个参考时间尺度;    b . 需要进行频率和速率调整;    c .需要进行时刻调整和同步。  目前应用的时间尺度有:  a.世界时;  b.历书时;  c.原子时;  d.协调世界时。  
  • 热度 22
    2011-10-4 11:13
    1513 次阅读|
    0 个评论
    航天测控和数据采集网(space tracking and data acquisition network )          是对航天器进行跟踪测量并控制其运动和功能的专用地面系统,由航天测控中心和若干航天测控站组成,简称测控网。测控网通过对航天器跟踪测量、监视、控制和接收航天器发送来的数据,检测和控制航天器的运动,检测和控制航天器上各种装置和系统的工作,接收来自航天器的专用信息,与载人航天器和乘员进行通信联络。         网的组成:         由航天测控中心和若干配有跟踪测量、遥控和数据采集设备的航天测控站(包括测量船和测量飞机)组成。测控站的数量、设备和分布取决于航天器的飞行轨道及测控要求。航天测控中心与各测控站通过有线、无线通信与卫星通信构成一个通信和数据传输系统的综合体。           资料来源:《中国大百科全书》
相关资源