stm32f030 ADC的数据有干扰,问题会出在哪里呢
暂时每通道采集256个数据,去掉64个最大和最小的,用中间128个取平均值,这样的
结果很稳定了,但是靠近0和4095的地方还是有些跳动,也略不准确,应该因为干扰是
上下对称的缘故,看来还是模拟要单独供电才好。
不错了
我一般每次采8到16个数据,然后取中间4到8个平均
然后再进8~16个数的环形队列滤波
对缓慢变化的数据采样很有效
缺点是刚启动时输出是从零逐渐上升的,要稍等一会才能稳定下来
u16 average_filt(u16 data)
{
static u16 buf[8];
static u8 k = 0;
u8 i;
u32 sum;
buf[k] = data;
sum = 0;
for (i = 0; i < 8; i++)
sum += buf[i];
k++;
k %= 8;
return sum >> 3;
}
原来都这样啊。我释然了
另外两个stm32f103的板子也写上同样程序试了,其中一块跳动非常非常小,另外一个
较大,仔细观察,跳动小的那个电路板用到两个电容较厚一些。
而且相对于stm32f030的板子,stm32f103的板子电容更靠近芯片。
你这应该用些科学的表达方式。大小到底是多少,怎么算的,说清楚
我是民科,稳定的那个数值在只在临近的两个数变动比如 1501 1502 而且大部分时间是 1501
变动严重的数值就在1492到1509之间频繁变动吧
你这个AD需要做到什么精度呢?
精度到不一定要求多高。关键跳动太快不好用啊。
stm文档说的是12位那就应该有12位吧,这样跳来跳去也就10位顶天了。
反证我觉得那些引脚少的stm芯片,不能接外部基准也没有内部基准,只有个内部参
照,加上adc的抗干扰能力差(可能是内部干扰),adc这方面大打折扣了。
还有个spi的nss不能自动拉低。 小毛病不少吧。
12位,ENOB做到10位已经可以了。送的ADC,要求不要太高。
看看ADI 12位同速度的AD多少钱一片。
ti的片内ADC就这样,忍忍吧
关键还是你采集的信号带宽有多少,原则上在AD采样前需要接一个模拟低通滤波器
其次,你可以多抓点数据,然后做FFT分析,看干扰的频率范围
如果这个频率高于你采集的信号带宽,只需要在CPU软件里做数字低通滤波就能消除很多干扰
好吧
那就先加个模拟低通再说
看来是惯用方法了,多谢各位点解
量化噪声和环境噪声不是一回事啊
1Bit ADC,ΔΣ调制。
能到0.1LSB就很实用了~
感觉STM32的ADC挺尴尬的,单为了外置REF弄个100脚的有点不值
要求稍微高点的话12位不够
不过通道倒是够多
这得相关专家来讲授.
我看到的是结果,你没注意到么?硬件专家设计的板子,所谓的环境噪声很小,这就是为何ADC不会乱跳.
用的水电还是火电?水电供电要平稳些
做传感器基本够了,配合前置电路,1%精度没问题。