转——高速数据采集之ADC(3)
作者:chenzhufly QQ:36886052
1、 硬件环境
硬件平台:Embest SoC --LarkBoard
软件平台:开发板-linux-3.10.31
Quartus 14.0
& E- O+ x* Q4 s- I" V
2、信号链深入剖析
原本只打算简单的介绍一下AD9628,然后用FPGA控制,采集到数据就完事了,哪知水太深,还需进一步的深入分析,方能更加清晰的明白整个数据信号链的组成,理清楚数据的来龙去脉。
( @" G/ j b5 L P; v
1)浅谈AD9628的默认配置
AD9628这个控制器是可以通过SPI 接口来配置操作模式或者一些特殊功能,我在测试的过程中并没有进行配置,使用的是芯片的默认配置,那么都是那些功能呢?刚开始的时候也疏忽了,还是需要静下心来认真阅读啊
- The AD9628 serial port inteRFace (SPI) allows the user to configure
- the converter for specific functions or operations through a
- structured register space provided inside the ADC) ~; Y6 x: }3 \- Q
! O. T' a' w' l X ~8 y7 c3 v
, j$ N% b+ D. v8 @2 s& [ 具体spi控制寄存器的详细描述可见AD9628数据手册的36页,以下是我摘录的一些主要参数:- 采样率为105MSPS, 芯片型号AD9268-105: R) t5 h( I, n: t
- The AD9628 is a monolithic, dual-channel, 1.8 V supply, 12-bit,
- 125 MSPS/105 MSPS analog-to-digital converter (ADC). It
- features a high performance sample-and-hold circuit and onchip voltage reference.% z$ S8 p3 k% T9 m7 r7 h. e7 P
# y9 |2 r. M/ l) V ~
1 x+ g# `- \) U, x; d- 模拟电压的输入范围,这点很重要,慢慢向下看 U4 q" n: D& C8 q2 f
9 Y& \% S' A0 U6 P" N9 `, a6 R- 时钟:默认时钟分频系数为1
* J. ]) P4 C' |" d
2 b- V3 t8 Y% B& |; i
- 输出模式:默认输出接口为CMOS,而不是LVDS,一开始我也理解错了;编码格式为offset binary
8 v4 i6 T& E; w1 _
+ i; q* E( u) m
- 参考电压:固定参考电压为1.0V
, y3 l6 d" D! h5 }% P2 d
这个地方是有些疑问的,默认配置是2.0Vp-p,实际用示波器测量是1.0V
7 N4 C, A* b- y. Z" m$ E8 v
! y& B, `( t5 y* p4 b- SENSE接地,固定使用内部参考电压,也就是1.0V
$ u) W5 ^& D0 y# x+ v" M
! t+ G4 K& g& ~3 n
- 数据的编码格式,offset binary
/ Z0 a$ o' O% e0 Z
$ ^: ~4 L2 `" Y z6 W这样通过VIN+和VIN-我们就可以计算出它的编码,并且可以和实际的测量值进行比较。这时候我们不得不研究一下前级放大电路。
. t) n2 N; O8 I+ V6 h4 Y 2)前级放大干了什么,模拟信号的前世今生
从实际的电路中可以看出,进入AD9628的信号是进过前级放大电路ADL5562的,它在电路中起了什么样的作用,对后续的ADC到底产生了什么影响呢?
7 t, K+ B( j5 F1 p
实际的ADL5562电路就是按照参考电路设计的:
% }; Q* U8 H" M8 K% C$ Z9 T: w4 C) M
注意:这依然是差分输入,和单独输入还是不一样的,有兴趣的详见数据手册第15页。
3 i( j& t4 N' A
这个电路的增益是多少呢?选择R1=R2=40.2欧姆的时候增益为15.5db,相当于信号放大6倍。
- j6 `. q& w4 f* e& S& S注意:这个地方可以通过修改实际电路中电阻,改变整个链路的增益,可以设置为6db(2倍),12db(4倍)
7 U4 _/ Z" H9 |' x: s
从这个电路可以看出,原始信号进入ADL5562后被放大6倍,然后一差分信号的方式输出给下一级AD9268
由于VIN-接地,那么VIN+的原始电压输入范围为 -0.3/6V<VIN+<2.0/6V
/ s" F7 A: Y! F6 z+ ]
3、测试数据
初步的试验结果,配置AFG3252如下:
高电平配置的有些不合适,要不然可以计算一下实际测量值是否正确,明天看看可有时间补测一下。
y0 C8 E0 U2 Z* F/ Z j: {( b
- 低电平的数据:
" _$ C s8 g- ^! j2 [
- 高电平的数据:电压设置太高,肯定超过了* V/ B* z! I) J* Q4 c
- 数据频率:5 o; ?! L; o0 p$ t: F. |' U+ f
singtap的采样率设置的是100M,可以数一数高电平大概维持了50个采样点,100M/(50*2)=1Mhz
; l( ?( X: G; @ V2 I# o* m) z
- 抓出的模拟波形:
2 u- u( O# V1 [& G7 t. [+ r6 S5 ?
波形有畸变,原因不明,直观感觉和硬件电路有关,用示波器测量时候发现,ADC前级输入的信号已经发生畸变,在这就不深究了。
% g: s4 ~3 Q I( Y' `
4、总结
1) 看数据手册太累了,这部分最好由开发板厂商来说清楚,而实际上他们提供的入门指南确实有些简陋;
2) 信号采集部分也就打算整理到这个程度了,后面还有很多工作需要做,就不在这个地方过多的停留;
3) 欢迎大家批评指正,一起学习,共同进步。