为什么10位ADC采集的数据一直是512的幅度的直流信号

最近在调试板子的时候,ADC采集出现了问题。一开始并不能确定是软件问题还是硬件问题(在做的功能是将ADC的数据采集,使用fifo进行储存,再通过串口传输)

串口传输的结果如下图所示

串口传输的结果是10位ADC采集后补零,通过两次串口发送得到的结果。图中大部分为“02 02”,“02 03”转换为10进制就是514,515左右,如果用图形显示的话,就是一个直流信号。

并且,不管如何改变信号发生器的输出,得到的结果都是一样的。

 直到去学习了quartus的signal tap功能,得到如下结果

这就很奇怪了,后来用示波器测量,得到信号发生器到ADC输入引脚都没有问题。

观察ADC原理图部分,使用的ADC芯片为AD9215。设计时,只将数据位D0-D9,ADC_CLK,PDWN与FPGA连接并控制,ADC的参考电压由内部提供为1V。将这些引脚再一一检查,没有发现问题。直到看到输入端的这个东西(以下仅为示意图):

这四个电阻,是师兄设计的类似于跳线帽的功能。目的是:当输入信号是正信号时,直接将信号输入进VIN+,参考电压ADC1_REF接入VIN-,最后采集得到的为正信号;而当输入信号为负信号时(比如核脉冲信号),则将信号输入进VIN-,参考电压ADC1_REF接入VIN+。只是跳线帽用0Ω电阻进行功能的实现,但是在给SMT封装时,这四个电阻在硬件上全部连接,也就是说,每条电路都是通的。

下面我们再来看一下得到的数据,绝大部分都是512,这其实是一个比较敏感的数字。已知ADC是10位的,即最大能输出的数字为1024,512与1024是什么关系?是一半的关系!

再回到原理图上,当四个0Ω电阻全部焊接上,可视为所有部分都是导线,等效图即为下图

也就是说,参考电压不仅连接到了VIN-,同时还与VIN+与信号输入连接,则不管输入怎么变化,都会被ADC1_REF钳位到1V,得到的也就是1V的直流信号,则VIN+与VIN-的差值为0。当ADC在双极性输入模式下,ADC的输入范围通常覆盖 ​​正负对称电压。此时,输入差值为 ​​0V​​ 时对应输出值的中间点:512。

为什么双极性输入,VIN+ = VIN-,得到就是中间值呢?下面举一个例子:


双极性输入模式就像一个天枰:

  • ​左侧托盘(VIN+)​​:代表ADC的正输入端
     
  • 右侧托盘(VIN-)​​:代表ADC的负输入端

当两侧放上 ​​相同重量​​ 时,天平指针指向正中间(即差值0V)。此时双极性ADC的输出值就是中间点(如10位的512)


将硬件上的R185与R186取下后,ADC采集正常,问题解决。

经验总结:

①测试ADC最关键的一点,应该首先判断ADC的输入引脚是否正常!本次测试时,由于前端只有一些简单的电阻电容,没有运放加入,就理所当然认为信号输入引脚正确从而ADC的输入引脚也正确,从而花费了大量时间检查其他电路!如果首先测ADC的输入引脚,那会很快找到原因。

②不管是quartus的signal tap还是vivado的ILA,这种在线调试助手都必须学会并灵活使用,否则出问题了根本无法判断是在哪一步出错的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值