EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——高速数据采集之ADC(2)
5 R8 Y, e! }6 `! r; @& x& s2 A4 v' n" q3 ?
作者:chenzhufly QQ:36886052 1、 硬件环境 硬件平台:Embest SoC --LarkBoard 软件平台:开发板-linux-3.10.31 Quartus 14.0 + y" x: f' ^# Y
2、测试环境 4 @& J: X% z4 m
示波器:DS1054,(论坛送的哦,一直没有写获奖感谢,羞愧啊) 信号源:泰克的AFG3252 ; [' ^1 j4 Y- v( [# o
程序其实很简单,硬件ok的话,几行代码就搞定了,主要注意几点: 1)ADC需要时钟输入,这里输入的是105M时钟,如果按奈奎斯特定律 2倍的信号频率需要小于采样频率,那么就是大概能够正确还原50Mhz左右的模拟信号; 2)通道1接入的是泰克的AFG3252,最大可输入240Mhz的正弦信号 3)OEB需要设置成0 4)ADC数据输出的同步时钟为DCOA和DCOB
1 G; K y& X. J7 e
AD9628的verilog驱动代码如下: - assign o_adc_clk_105m_p = s_video_clk_105m ;
- assign o_adc_oeb = 1'b0;1 s( D* f c3 L& \) i& }
2 F, j- O; c( L8 p! C5 w1 I0 Y
+ {2 k$ k9 k, G( R7 Z: A
. `5 l" j9 U0 n/ o, H
AD9628的输出同步时钟 - always @(*)
- begin
- s_chnl_a_clk = i_adc_dco_p;
- s_chnl_b_clk = i_adc_dco_n;
- end
9 A, A* s `. A/ B8 O4 l * D9 j! J+ G) ^. `4 [1 [
9 g! o/ r! _& a8 C t3 D+ v
8 i7 j' G1 b! j1 R获取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];
* S( L# ^( Y. ^5 d: S3 C
* H7 n/ b v( }- X' l3 T- C0 h0 h0 y1 \1 n1 o. L
% Y) ^) I% n) \1 Q% @" q
6 N s& X0 U4 {0 _2 E4、测试结果 这个测试结果有些简陋了,说明是有数据上来的,而且也是符合预期的,我输入了100Mhz,10Mhz,30Mhz的正弦信号做测试,都能得到大致的正弦波形,但是数据的正确性还没有进一步的检验。下图是信号发生器的输出: / k' c' N; o% v7 D8 u
下图是调试利器SignalTap的截图(怎么使用SignalTap就不在这里细说了)可以很清晰的看出是个正弦信号 0 T0 `+ z4 P$ o! N- S
5、小结 1) 做到这,可以说已经可以通过Altera SoC控制AD9628采集到模拟信号了,但是依然还有许多问题,正如我上面说的那样,对于数据的格式,和数据的正确性还没有深究,只是这条路通了,这两个问题留着以后再去进一步完善,AD9628的datasheet还需要再认真的读读; 2)AD9628的spi控制端口还没有弄明白,目前都是默认模式; 3)接下来要找个方法把FPGA采集到的数据发送的ARM端去;
' x" O( {, I; J( o z8 ~) U |