时域反射仪的硬件设计与实现----关键电路设计(三)
扫描二维码
随时随地手机看文章
3.3采样与存储设计
要将模拟的脉冲信号显示到液晶屏上,必须通过数据采集系统来实现。首先通过模数转换器,将模拟信号转换成数字信号,再将数字信号做相应的处理后,通过ARM将数字信号送到显示屏。
3.3.1模数转换器
在已知的早期的手持式数字示波器中,模数转换器常采用的是AD9288[26」,其采样率只有100MSPS,即使在拼合的情况下也只有200MSPS.本系统要求的最高采样率为250MSPS,采样精度为8位。ADI公司有两款这样的模数转换器满足上述要求,分别为AD9480和AD9481,这两款ADC器件外观基本上一样,而只是在数字信号输出方式上完全不同,分别具有以下特点:
AD9480:
◢单通道模数转换通道,250MSPS
◢模拟通道带宽:750MHZ
◢最大功耗590mV(250MSPS)
◢数据输出为LVDS(低压差分信号)形式,频率与采样频率相同
◢带同步输出时钟
优点:LVDS输出,抗噪声和干扰强,且对系统干扰小。
缺点:功耗高,输出必须与对应的LVDS接口相连,通用性不强。
AD9481:
◢单通道模数转换通道,250MSPS
◢模拟通道带宽:750MHz
◢最大功耗439mW(250MSPS)
◢数据输出为COMS电平形式,交替输出,频率为采样频率二分之一
◢带同步输出时钟,有数据同步控制端
优点:功耗低,输出端频率低,输出与TTUCMOS兼容;可实现数据拼和。
缺点:CMOS输出抗干扰性不强,同时也容易产生电磁干扰经过对功耗、接口方式、可实现性的考虑,
本设计采用了AD9481作为模数转换器,来完成对脉冲信号的高速采样。AD9481的具体时序图如图4-23所示。
AD9481数字部分的输出采用的是交替输出,即输出分为八位并行的A口和B口。模数转换器在每一次时钟的上升沿进行采样,当第N个采样时钟到来时,A口输出一个新的八位并行数据,B口保持上一次输出数据不变;当N+l次采样时钟到来时,B口输出一个新的八位并行数据,A口八位数据保持不变。则通过上述方式,实际上A、B口的输出频率最高也只有125MHz(25OMsPS),信号输出频率降低了一半,减缓了高速数据存取对读写控制的要求,减小了数据在存储过程当中产生错误的可能性。
ADC采样的时钟信号由FPGA提供,ADC的采样时钟分为三种情况:250MHz、200MHz、100MHz.系统所用的时钟则由50MHz的有源石英晶体提供,50MHz的时钟送给FPGA以后,通过FPGA内部的一个PLL(锁相环),即可产生以上三种高速时钟信号。
3.3.2峰值检测
峰值检测是数据采集系统中比较常用的方式,对于捕获毛刺信号具有很大的帮助。它不像正常取样方式那样,通过采集大量与信号有关的数据,存储在大型存储器中(兆量级),而是仅仅存储了少量能够反应信号真实形状的有效数据,占用了极少的存储空间,在不增加存储深度的情况下,准确的捕获到毛刺和偶发事件,同时峰值检测采样形式还能防止显示出现差拍效应和具有包络显示功能[切。
峰值采样的基本原理就是以尽可能高的采样率对信号进行采集,在单位时间内对采集到的数据进行高速比较,从中找出最大值和最小值并保持下来,而将其它值忽略掉,在显示方面依靠采集到的最大值和最小值可以比较真实的还原出原始信号的一些特性。如图4-24所示,在周期时间T内(对应屏幕上一个像素点的时间),信号被高速采样,采样点数大于等于2,所有被采集到的数据都被直接送到FPGA内部进行高数比较,找到最大值和最小值(如左图中黑点部分)。在周期时间T结束之前,将比较出的最大值和最小值保存在FPGA内部的RAM中,当ARM读到这两个数值时,通过软件处理,很容易就在屏幕上恢复出与原信号相似的波形。右图中黑色像素点对应ARM读到的最大值或最小值,灰点由硬件产生。
图4-25显示了利用峰值检侧来捕获毛刺信号的优点。在没有峰值检测情况下,当信号上出现较窄的毛刺信号的时候,由于采样点间隔大于毛刺信号的宽度,因此恢复出的信号上并不能显示出毛刺信号;而在使用峰值检测采样以后,由于采样间隔小于毛刺信号的宽度,则必然会捕获到毛刺信号,其捕获毛刺信号的能力取决于采样间隔,一般宽度大于采样间隔的毛刺信号都可以捕获到。这种捕获毛刺和偶发事件的能力在检测维修当中十分有用。
差拍现象(混盛)是由于采样没有遵循Nyquist采样定律导致的结果,当示波器工作在慢速时基档位(此时采样速率较低),而输入信号频率较高的情况下就可能发生差拍。当发生差拍时,显示波形频率将低于实际信号频率,一般两者成倍数关系,同时示波器在己触发的情况下也不能稳定,在采样周期性波形情况下,屏幕上可能显示出与原信号形状相同但频率不正确的信号。检查是否发生差拍的方法之一是改变时基,当时基在相邻档位变化时,若波形发生很大变化,则表示己经产生了差拍,另一种方法是采用峰值检测方式,由于峰值检测即使在慢速时基档位下也始终采用最高的采样率捕获信号,所以当输入信号的频率在可测范围内时,就可以避免差拍出现。如图4-26所示,在低速采样下产生差拍信号的现象。
在时域反射测量中,在高速时基情况下,如100ns/div--5ns/div之间,屏幕上的一列对应了ADC单次采样采集到的数据,即点对点形式,此时ADC也处于最高速采样状态下(250MSPS),当时基为20ns/div时,采样率仍保持在250MSPS,此时屏幕上的单个像素点对应的时间间隔为5ns,对应了两次采样时钟,即两个数据确定了屏幕上的一列图形,如果这两个数据相同,则对应屏幕上的一点,如果不同,则对应屏幕上同一列的上下两个或是连成一小段的像素点。当时基为500ns/div,如果采样率仍为250MSPS,则单个像素点的时间(20ns)对应5次采样的数据,如果采样率为200MSPS,则单个像素点的时间(20ns)对应4次采样的数据。又因为为了降低功耗的目的,在1us/div以后都采用了100MSPS,单个像素点的时间(20ns)对应了以4为倍数的采样数据。为此在500ns/div时也采用200MsPs,这样在进行峰值检测的时候可以一次将4个数据送到高速比较模块做流水线比较,并在规定时间周期内找到最大值和最小值。4个高速数据的峰值比较电路设计流程如图4-27所示。
在FPGA内部,峰值检测模块电路由于采用了流水线的模式,因此用了较多的8位并行D触发器、8位比较器和8位两路选择器来实现。虽然占用了一定的FPGA的内部逻辑单元(LB),但却保证了大量数据的高速连续处理,且不丢失有用的数据,唯一的缺点就是实时性不强,即4个数据的比较需要经过好几次时钟(每个时钟为周期为4*4ns)以后才能找到最大值和最小值,即有一定的延时性,但并不影响波形的正常显示。因此这种流水线的操作方式实际上是一种利用空间换取时间的方式。整体设计模块如图4-28所示。
在峰值检测模块当中,输入端有两个控制输入,CLK_NUM和OVER_4.OVER_4表示峰值检测在单位时间内总共多少个数据进行比较,因为在时基为500ns/div和1us/div下,一次只进行4个数据的比较,就要输出最大和最小值,而在Zu叮div以后都是要进行大于4个,且以4为倍数的数据的比较,而模块单次只能比较4个数据,因此用OVER4来控制总共比较的数据是否大于4,大于4则OVER_4为1,反之为O。CLK_NUM用来控制单位时间间隔内到底有多少个数据进行比较,如果CLK-少旧M的周期为16ns,则只有4个数据比较,此时OVER_4也为0,当CLK_NUM的周期为16ns的倍数后,则会有4的倍数个数据进行比较。[!--empirenews.page--]
实际上CLK-少旧M的周期与时基是相联系的,如时基为500ns/div,则CLK_NUM的周期为20ns,又因为此时的采样率为20OMSPS,所以只有4个数据比较,当时基为1us/div,CLK_NUM的周期为40ns,采样率为100MSPS,所以同样只有4个数据比较,而当时基为2us/div,CLK_NUM的周期为80ns,采样率为100MSPs,就会有8个数据进行比较,而在比较的过程当中,先进去的4个数据会比较出一个大值和小值,这两个数据被默认为最大值和最小值暂时保留下来,直到与后进来的4的数据比较出的大值和小值继续做比较,最终确定最大值和最小值。表4-3给出了在不同时基情况下起用峰值检测模块控制信息相关对照表
从表中可以看到,在一般情况下,CLK_NUM的周期都可以直接通过分频来获得,而在时基比较大时,如100ms/div情况下,由于本设计的存储深度在3K左右,对应了10屏(每屏300个点)的图形,如果一次连续的将存储器填满,则需要的时间大概为12s,信号刷新率太低,不适合波形显示,因此在100ms/div时基以后,都采用了软件采样的方式,且此时没有存储深度的概念。波形显示采用了扫描的方式,CLK_NUM的周期由ARM内部的定时中断器开控制。此时屏幕上的信号不是一次刷新,而是从屏幕左方向右方依次更新,当更新完最后一列信号后,又重新回到屏幕波形显示区域的最左侧,依次显示新的波形。
图4-29和图4-30是峰值检测电路时序仿真图,其中MAX和M取输出作为观察峰值检测模块内部单次比较结果,MAX_OUT和MIN_OUT是最终比较出的最大值和最小值,WR_CLK可以作为将比较出的数据写入FPGA内部RAM的写时钟信号。图4-29显示的是在CLK_NUM周期内只有4个数据进行比较的输出结果,而图4-30表示的在CLK_NUM周期内有8个数据进行比较的输出结果。从两张图都可以看到,从数据输入到数据输出都有一定的时间延时。虽然数据有延时,但通过这种流水线的方式将模块的工作速度降了下来,使模块工作更加稳定,同时也不影响波形的正常显示。
本峰值检测模块在示波器模式和时域测量模式下,经过实验证明,完全可以捕获到宽度超过10ns的毛刺信号,而在200MSPS下,可捕获的毛刺宽度将更窄。
3.3.3时域测量下的触发
与一般的时域反射仪相比,本设计具有其它产品所没有的触发功能,该触发功能的设计与示波器测量模式下的触发完好的衔接在一起。脉冲时域测量的触发不像示波器模式下的触发那样,还需要外部触发模拟电路支持,由于脉冲信号是由数字电路来产生,所以可以直接利用FPGA内部的数字逻辑单元来完成触发设计,类似于示波器模式下的上升沿触发,同时为了有效观察脉冲信号的反射,脉冲信号需要在屏幕上可以左右的移动,在触发电路设计上也具有预触发的能力。
预触发是在数字示波器取代模拟示波器后产生的一种新的触发方式。这是因为模拟示波器不具备数据存储的功能,而数字示波器利用它的大量数据存储能力和软件处理能力,实现了预触发功能。有时在某些特定测试情况下,人们感兴趣的波形部分并不是紧跟在引起稳定触发信号的后面,而是在触发以后一段时间,或者是在触发之前。这就需要采集系统能够将触发事件前后一段时间内发生的信号都存储下来,以供处理器处理并显示出来。在实际操作过程中,可以通过左右移动触发点,将触发之前或者之后的信号移到屏幕中供用户观察。
本系统的存储深度为3K,对应了10个波形显示区,即实际波形显示范围只占到总共采集到的波形的十分之一。图4-31为预触发设计结构图。
从预触发电路结构图中可以看出,整个电路主要包括四个部分:触发信号输入、RAM地址计数、预触发计数、后触发计数。在触发源选择由一个二选一选择器,可以选择内部脉冲信号触发。当用内部产生的脉冲信号作为触发信号时,在FPGA内部己经启动了脉冲时域测量信号产生模块,因此选择了直接用脉冲信号上升沿作为触发信息。在这里并没有采用从通道进来的脉冲信号,是因为从通道进来的脉冲信号并不是周期信号,同时在通道上还有反射回的脉冲信号,如果前一次触发是发射脉冲,下一次触发有可能不是发射脉冲,而有可能是反射脉冲,则显示出来的信号就有可能不正确,无法正常观察脉冲信号,因此只有采用内部触发,且在此状态下只有一种触发信号,即发射脉冲信号,不会出现触发不正确的情况。当然采用触发释抑的方式也可以解决上述问题,这样的话就可以选择通道脉冲信号来触发,但是需要设计额外的数字电路,因此在这里没有采用。
预触发电路的工作顺序大体上分为四个步骤,首先由ARM对模块进行初始化,则所有的计数器清零。预触发计数器和RAM地址计数器同时开始计数,计数时钟与时基相对应。当预触发计数器达到设定值(1K)以后,产生一个高电平信号,该高电平信号作为触发使能信号,而在此之前触发信号被屏蔽掉的。如果触发使能以后还没有来触发脉冲信号,RAM地址计数器仍然保持计数状态。直到有触发脉冲到来,后触发计数器开始计数,而RAM地址计数器仍然保持计数状态,后触发计数器的计数值大小(2K)等于存储深度(3K)减去预触发计数值大小,当后触发计数器计数达到设定计数值(2K)以后,就会产生一个高电平,将计数时钟改为由ARM来提供,当ARM检测到该高电平以后,就会通过软件来发时钟,使RAM地址计数器重复计数,每发送一个时钟,ARM就会从RAM中读取一个数据,直到发送3K个时钟后,将RAM中的所有数据读出。预触发电路的工作流程图如图4-32所示。
在触发电路工作中有一个关键地方决定了预触发的实现,那就是一直处于工作状态下的RAM地址计数器,从模块初始化以后,RAM地址计数器一直都处于计数状态,当触发使能后,而又没有触发脉冲到来的时候,RAM地址计数器也保持计数状态;当后触发计数结束以后,RAM计数才暂时停止,而整个模块从开始计数到后触发计数结束,RAM计数器的计数时钟次数大于预触发计数器和后触发计数器之和(3K),也就是说,在后触发计数器停止之前,RAM计数器已经计数满,并又从0开始重新计数,直到后触发计数器停止时它才停止。在这里RAM就类似于一个环状的存储器,其工作方式如图4-33所示。
在上图的a图中表示的是预触发初始化以后,RAM从1号地址开始将采集到的数据写入RAM即从A点开始写数据,写满IK数据以后,触发使能打开,RAM到达B点。B图表示触发使能以后,仍触发信号,则继续将数据写入RAM内,直到C点,此时触发信号到来。c图表示触发信号到来以后,RAM被继续写入数据,当RAM计数器计到3K点后,回到了A点,而此时后触发计数器还没有停止,因此RAM计数器从0开始继续计数,直到到达D点,此时后触发器计数停止,RAM计数器也停止。也就是说RAM从最开始工作,到地址到D点所存储的旧数据,被最后存储进来的新数据覆盖掉,即。图中A点到D点这一段黑色区域,在预触发存储数据阶段,被先后两次写入数据,最终存储的数据为后一次写入的数据。
在ARM读取RAM内部的数据时,此时RAM计数器的计数时钟已经换成由ARM来提供,即ARM通过I/O口产生一个上升沿信号,送给地址计数器。在读取数据的时候,RAM地址计数器并不是从零开始从新计数,而是继续从D点所在的地址继续计数,则D+1号地址所对应的数据应该是被认为在整个储存深度(3K)中的第一个数据,从D+l到C点则为1K的预触发数据,从C到D则为后触发数据。因此根据触发信号到来的偶然性,每一次从RAM中读取数据时,C点和D点所对应的RAM的地址不一定都相同,但是ARM从RAM中读回的数据,经过从新排列,保证每次采集到的数据的前1K点就是预触发数据。这样经过软件处理显示到屏幕上以后,波形不仅可以前后移动,同时也保证了触发的稳定。