EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——高速数据采集之ADC(2)
/ S9 a ]3 h! s! o, ^2 ^) f" ^2 D; U$ O; j- x( n# v' Y
作者:chenzhufly QQ:36886052 1、 硬件环境 硬件平台:Embest SoC --LarkBoard 软件平台:开发板-linux-3.10.31 Quartus 14.0
- c9 n; N' m; P/ S' _
2、测试环境 |7 M' l" b7 q5 \; b" x
示波器:DS1054,(论坛送的哦,一直没有写获奖感谢,羞愧啊) 信号源:泰克的AFG3252 % e2 a* ?, D d( h+ T# x
程序其实很简单,硬件ok的话,几行代码就搞定了,主要注意几点: 1)ADC需要时钟输入,这里输入的是105M时钟,如果按奈奎斯特定律 2倍的信号频率需要小于采样频率,那么就是大概能够正确还原50Mhz左右的模拟信号; 2)通道1接入的是泰克的AFG3252,最大可输入240Mhz的正弦信号 3)OEB需要设置成0 4)ADC数据输出的同步时钟为DCOA和DCOB + o @$ Z" v# j+ O$ q
AD9628的verilog驱动代码如下: - assign o_adc_clk_105m_p = s_video_clk_105m ;
- assign o_adc_oeb = 1'b0;
3 F/ G- ?: Z* p0 [2 H+ P
% ]5 l! z4 Q% Q' i- _" {- f9 X
. f4 v( J& |8 \% |+ ~5 D6 L! _4 i) g0 @! M: W$ q& {
AD9628的输出同步时钟 - always @(*)
- begin
- s_chnl_a_clk = i_adc_dco_p;
- s_chnl_b_clk = i_adc_dco_n;
- end
: D3 N2 g+ ]$ G9 w ' M6 R+ B W m% Z
2 ]6 n* H6 h) q' t6 Y; R2 u4 T
( R$ |/ Z& d8 v4 S& [
获取AD9628的数据 - always @(posedge s_chnl_a_clk or negedge fpga_rst_n)
- if (!fpga_rst_n)
- s_a_data <= 12'd0;
- else// if (i_adc_dco_p)
- s_a_data <= i_adc_data_p[11:0];
# b/ u, T! d5 T6 I1 H
" m( G2 x' |/ x
3 Q$ I" B0 G; ]2 f4 d
5 O- g- { q6 p6 Y9 @
* ?2 h1 \* O4 E! Z, r4、测试结果 这个测试结果有些简陋了,说明是有数据上来的,而且也是符合预期的,我输入了100Mhz,10Mhz,30Mhz的正弦信号做测试,都能得到大致的正弦波形,但是数据的正确性还没有进一步的检验。下图是信号发生器的输出:
. A- M2 _$ I$ S- j( T; o
下图是调试利器SignalTap的截图(怎么使用SignalTap就不在这里细说了)可以很清晰的看出是个正弦信号
+ w! C, ^- B. a
5、小结 1) 做到这,可以说已经可以通过Altera SoC控制AD9628采集到模拟信号了,但是依然还有许多问题,正如我上面说的那样,对于数据的格式,和数据的正确性还没有深究,只是这条路通了,这两个问题留着以后再去进一步完善,AD9628的datasheet还需要再认真的读读; 2)AD9628的spi控制端口还没有弄明白,目前都是默认模式; 3)接下来要找个方法把FPGA采集到的数据发送的ARM端去; % {0 ?: d- T1 y* z. G9 f7 ^
|