如何实现多个C模块的同步?



主要软件: LabVIEW Modules>>LabVIEW FPGA Module
主要软件版本: 2011
主要软件修正版本: N/A
次要软件: Driver Software>>NI-RIO

问题:

之前在KB中有提到过FPGA项目中C模块的onboard clock如何导出并且共享给其他C模块,从而在同步中发挥其共享一个时钟的作用。本篇文档则是详细的验证此方法的同步性,为了更好的说明共享onboard clock的性能改善,同时验证了共享和不共享onboard clock的结果,并且对最后的结果进行了一定的分析。


解答:

首先,下图中是FPGA项目浏览器,硬件方面使用cRIO 90149104,模块则使用了两块9234和一块9225,其中9225用来导出onboard clock

                     
1 Project explorer
然后是FPGA程序,主要功能是设置两块9234的采样率,并且保证两个模块同时开始采集波形,被测波形是1KHz的正弦波,最后FPGA程序将数据存到FIFO中,如下图:
 

 2 FPGA程序框图

最后是RT主机程序,用来读取FIFO中的数据,对两个模块采集的数据进行显示和相位分析:
3 RT Host程序框图
 
三.实验结果及分析
经过一些实验的验证,得到结果如下,在两块9234都是用9225onboard clock情况下,测得两模块采集到的波形非常吻合,其相位差稳定在0.006度左右。
4 50K vs 50K
 
但是当两模块的采样率设置为不一样的时候,他们的相位差不再为0,下面的图片将给出不同情况下的结果:
5 50K vs 25K
 
 
6 50K vs 12.5K
7 50K vs 10K
从上面的结果可以看到,共享onboard clock的情况下,固定某个模块的采样率,而设置另外一个模块为不同的采样率,delay开始发生变化,模块间产生相位差,但是相位差的值非常稳定,我们可以通过观察上面图片下方的Delay Results得到这个结论。而如果不使用共享onboard clock的方法,我们使用同样的程序来运行,得到结果如下:
 
8 51.2K vs 51.2K
9 51.2K vs 25.6K
 
我们可以从图下方的Delay Results中发现,和共享时钟的情况不同,两个模块之间不但有相位差,而且相位差处于一个逐渐递增的状态。相位差的不同表现情况说明,共享时钟的效果是非常好的。但是对于稳定的相位差,我们也需要找寻其原因,通过查找9234的规格说明,我们找到下面的一个参数:
其中fs是指模块的采样率,这个计算公式表明,因为fs的不一样会导致两个模块的input delay的不同,从而也就解释了为什么在不同采样率下,两个模块采集的数据相位差不为0。我们可以进行如下计算,当fs 150K,则input delay 138.4/50K+3.2us=771.2usfs 225K,则input delay38.4/25K+3.2us=1539.2us然后可以计算量模块间的time delay1539.2us-771.2us=768us这是通过公示计算得到的理论值,而实际情况呢,我们从上面的图中可以看到,这种情况下的相位差为47.8度,而被测波形频率为1KHz,所以两个模块间的time delay47.8/360*1000=133us理论值和实际值并不符合。所以,接着我们以相同方法计算其他情况下的理论值和实际值,如下表:
 

fs1Hz
fs 2Hz
delay理论值(us)
delay实际值(us)
理论值\实际值
50K
50K
0
0.017
0
50K
25K
768
133
5.8
50K
12.5K
2304
397
5.8
50K
10K
3072
528
5.8
25K
25K
0
0.017
0
25K
12.5K
1536
265
5.8

表格1 不同采样率下delay
 
从表格中发现在不同采样率下,实际值和理论值都是不符合的。但是,同时我们发现一个规律,那就是在采样率不同的情况下,理论值和实际值的比值是恒定的5.8。这个不会是一个巧合,我们如果把上面提到的Input delay公式改为 6.65/fs+3.2us,则实际值将和理论值完全符合。

 



相关链接:

附件:
cRIO 9225+9234+9234.zip




报告日期: 08/13/2012
最近更新: 08/13/2012
文档编号: 60C2JQ54