# 低抖动ADC采集
## Gitee链接
为了做好代码管理,我尝试使用Gitee管理。也在学习如何更好的使用Gitee管理代码,写好文档,做一个合格的开源贡献者
[STM32采集](https://gitee.com/ledgejin/sdr-neutral-hydrogen)
## 参考资料
[数学代码库](https://www.nayuki.io/category/programming):
[STM32F407的硬件I2C-CSDN博客](https://blog.csdn.net/Jianfeng_Zhang1990/article/details/45396353)
ST文档:AN1709-ST微控制器EMC设计指南
ST文档:AN4488-STM32F4xxxx MCU 硬件开发入门
TI文档:基准电压源(VREF)应用设计技巧和诀窍
## 问题
在使用STM32F407ZGT6内置的ADC对接地信号采集,ADC的采样率为2MHz。但是在测试中发现,按照道理12位的ADC都应该输出为0 ,实际上却有一些抖动。最大可以达到8的抖动。
抖动如下图所示

## 问题分析
因为本次电路使用了一颗LDO为整个板子进行供电。板子如下,

LDO的型号如下:
品 牌: DIODES(美台)
厂家型号: AZ1117D-3.3TRE1
商品编号: C362112
封装: TO-252
我使用12V的电源适配器输出,在ADC的接口上使用一个SMA的短路帽进行连接。测试数据如问题中图片所示,按照道理都应该输出0,但是有抖动。
我认为可能是电源不稳定导致的,故使用示波器去测量LDO输出退耦电容上的电压波形。如下图所示
电源引脚上面有非常大的波动,我使用同轴电缆,剥开线芯,焊接在退耦电容的两侧,极大的降低了外界电磁波的干扰。为了可以稳定触发,我使用一个GPIO翻转,后面会放上细节图。
尤其是在开始采集最开始阶段,电源波动的非常大。并且在最后面有一个持续的电流消耗比较大的过程。

展开发现在开始采集的一瞬间,电源的波动可以达到4mV。STM32 12位最小分辨率也没有1mV,所以3.68MV的电源波动将会直接导致ADC采集出现问题。

并且Vdda的退耦电容上电源波动的频率,大概为60KHz。后面在PCB的设计过程中,需要对这个频率点做特殊处理。
### 处理办法
使用TI 的电压基准芯片作为STM32 的参考电压,该参考电压为2.5V。模拟电源和数字电源分开供电。

之前的电源是使用12V直流电源经过LDO直接降低到3.3V,将会有9V左右的压降在LDO上,但是当整个电路板上的的功耗达到200mA之后,将会有1.8W的热通过LDO释放出来,为了解决板子过热的问题,这次使用TYPEC的5V供电,这样只有1.7V的压降在LDO上消耗,并且本次设计将使用多个LDO进行供电,所有的热量消耗都被分散了。假设一个LDO的功耗,需要100mA的电流,那么只有0.17W的热量需要被释放。
这次使用的LDO具有较高的电源抑制比,最大可以输出250mA,这颗芯片和我之前用的RT9013是一样的封装,这个专门给射频和模拟电路设计的,之前出现问题是因为电路负载瞬态响应更不上导致的。

下图是负载瞬态响应测试,可以看到当输出突然增大的时候会有一个比较大的下陷,大概在40mV的变化。但是在实际的ADC测试中将不会出现0-250mA的大电流场景,也就不会出现比较大的下陷。

## 采集板卡重新打板测试
之前怀疑是使用一颗LDO导致ADC采集不稳定,但是经过使用数字、模拟、参考基准芯片之后效果反而恶化了。PCB版图如下

STM32供电使用了两个LDO,模拟和数字单独供电,没有做地的隔离,其中使用四层板子的顶层、第三层、底层覆铜铺地。
输入如下,我将ADC的引脚焊接到板子上的地。之后通过串口输出ADC采集到的数据。在上电1分钟之后,各输出5000组数据,统计抖动0到10出现的次数,各OLD为之前使用一颗LDO给整个板子供电的参数,NEW为使用单独LDO给芯片的数字、模拟供电的数据。反而出现0的次数要比没有整改之前的效果差。

按照道理出现0、1的频率要增加,抖动大的次数要减小。但是实际测试下来橙色的曲线表明,出现0的次数减少了,并且在大抖动的情况下,出现的次数反而还比之前要多。
## 总结
本次测试使用示波器测量了电源退耦电容上电纹波,噪声,但是由于当时实验已经是深夜,故没有使用电脑导出示波器图片。不过电源的抖动比之前的要小很多,大师为什么实际的效果会恶化呢?实在是想不明白。