打印
[STM32F1]

STM32内部的ADC模块精度

[复制链接]
10132|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
STM32内部的ADC模块精度怎么样,我在论坛里看到误差不过1LSB,可是我采集的误差都很大,跳动的有些大。会是什么原因呢。板子是STM32F103ZCT7的 跳动大概在0x670到0x67f之间


沙发
mmuuss586| | 2014-4-14 19:59 | 只看该作者
跳4位也还好啊。
软件又做平均值滤波吗?
输入的啥信号啊?

使用特权

评论回复
板凳
mmuuss586| | 2014-4-14 20:01 | 只看该作者
电源,基准,ADC输入等怎么连接的?

使用特权

评论回复
地板
heelary| | 2014-4-15 09:43 | 只看该作者
软件滤波就能解决。

使用特权

评论回复
5
momingwei|  楼主 | 2014-4-15 10:22 | 只看该作者
mmuuss586 发表于 2014-4-14 19:59
跳4位也还好啊。
软件又做平均值滤波吗?
输入的啥信号啊?

1LSB不应该是跳动最后一位吗,软件没有做均值滤波,采集的是8路模拟电压信号,在硬件上有经过滤波和隔放大换成最大为3.3V的无高频干扰的电压信号,基准是3.3v,
ADC的输入如下
至于电源单元,也是做过滤波处理的。

使用特权

评论回复
6
mmuuss586| | 2014-4-15 10:41 | 只看该作者
momingwei 发表于 2014-4-15 10:22
1LSB不应该是跳动最后一位吗,软件没有做均值滤波,采集的是8路模拟电压信号,在硬件上有经过滤波和隔离 ...

我说的是,从你的数据分析,跳4位,还好了。

使用特权

评论回复
7
mmuuss586| | 2014-4-15 10:42 | 只看该作者
momingwei 发表于 2014-4-15 10:22
1LSB不应该是跳动最后一位吗,软件没有做均值滤波,采集的是8路模拟电压信号,在硬件上有经过滤波和隔离 ...

啥都没做,跳1位不太现实,除非你的电源,信号,基准特别稳定,采样速率特别低

使用特权

评论回复
8
momingwei|  楼主 | 2014-4-15 11:43 | 只看该作者
mmuuss586 发表于 2014-4-15 10:42
啥都没做,跳1位不太现实,除非你的电源,信号,基准特别稳定,采样速率特别低 ...

VDDA与VREF+相连VSSA与VREF-相连 这个基准应该就是3.3v没错吧,输入信号已经通过滤波,也不会有问题,关键就是电源,如果电源不稳定,这个VDDA就会不稳定,进而这个VREF+就会不稳定,基准就不准,我这么理解对吧?我是用定时器触发的ADC,20ms触发一次,采样时间这么设置
     ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5);
     ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5);
     ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_239Cycles5);
     ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_239Cycles5);
     ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 5, ADC_SampleTime_239Cycles5);
     ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_239Cycles5);
     ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 7, ADC_SampleTime_239Cycles5);
     ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 8, ADC_SampleTime_239Cycles5);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 9, ADC_SampleTime_239Cycles5);
   ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 10, ADC_SampleTime_239Cycles5);

应该也是足够的。用DMA搬移数据到内存ADC_DualConvertedValueTab[10]. 用ST-LinK调试观察ADC_DualConvertedValueTab[10],跳动很大。




使用特权

评论回复
9
IJK| | 2014-4-15 15:11 | 只看该作者
ST-LinK 对ADC的稳定性会有影响的,通过串口输出或许会好点

使用特权

评论回复
10
momingwei|  楼主 | 2014-4-15 17:37 | 只看该作者
IJK 发表于 2014-4-15 15:11
ST-LinK 对ADC的稳定性会有影响的,通过串口输出或许会好点

试了一下,用串口测试,是好了一点也只能精确到0.01V,距离要求还差的很远,我想大概是因为供电电源电压不稳造成的,VREF+和VDDA直接连在一起,如8楼的图所示,如果供电电压不稳 VREF+会有变化吗 ?谢谢各位悉心指导~~~

使用特权

评论回复
11
海中水| | 2014-4-15 21:17 | 只看该作者
用一些软件的滤波算法应该就OK的

使用特权

评论回复
12
zhimagod| | 2014-4-16 08:24 | 只看该作者
Vref最好是用独立的基准芯片吧,和VDD接一起的貌似都是些粗略测量的低成本用法

使用特权

评论回复
13
IJK| | 2014-4-16 10:16 | 只看该作者
momingwei 发表于 2014-4-15 17:37
试了一下,用串口测试,是好了一点也只能精确到0.01V,距离要求还差的很远,我想大概是因为供电电源电压 ...

电源电压稳定性可以用示波器看,看纹波有多大。
可以在Vref+就近再接0.1uF电容。

使用特权

评论回复
14
王紫豪| | 2014-4-16 11:41 | 只看该作者
电源本来就有波动的(特别是数字电源,电流都是忽大忽小,你可以用万用表检测一下,呵呵。)。

我觉得小于 100脚的 stm32,没有独立的 vref,是最大的败笔。我现在用48脚的stm32的 adc,都是在一个通道上挂个基准,做反向对比,推算出来 AD值。

使用特权

评论回复
15
momingwei|  楼主 | 2014-4-17 13:37 | 只看该作者
我的是144脚的,额 ,,精度基本达到了。。总结一下,,
影响ADC精度比较明显的几个因素。
1、供电电源电压稳定;
2、基准选择,使用内部参照电压精度好一些;
3、ST-Link调试会对精度有一定影响,如楼上IJK所说。
再次谢谢大家悉心指导,结贴给分。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

57

帖子

0

粉丝