打印

STM32的12位ADC令人失望!

[复制链接]
楼主: hexenzhou
手机看帖
扫描二维码
随时随地手机跟帖
21
qihao| | 2007-12-30 14:39 | 只看该作者 回帖奖励 |倒序浏览

大家可能还没到意识到的问题:

用VDD做基准, 
   在真实的产品中,外部输入当然不会是那么VDD分压而已,比如一个标准的988mV,那么,在不同的板子上,不同的三端(开关电源的3.3V就更别提了!)输出的3.3V是有很大离散性的, 3%的离散性很正常!哪么这个988mV在不同的板子上将会得到3%的读数差别!这个IC本身的12位AD体现出来的就一个8位的罢了。优势在哪里?(还不考虑温漂)

   作为一个产品的话,该IC的AD的表现就是一个8位AD的表现。

当然,100Pin的肯定要外接基准了,不然就是设计者自己的错了~~~,开发板嘛,就是跑软件而已,可以这样搞嘛。

使用特权

评论回复
22
hotpower| | 2007-12-30 14:44 | 只看该作者

串口终于通了...ADC是有漂移

这个结果是在EMSTM32V1上用ADC的例程得到的结果.
42;31m AD value = 0x0F41 
 AD value = 0x0F44 
 AD value = 0x0F53 
 AD value = 0x0F42 
 AD value = 0x0F44 
 AD value = 0x0F46 
 AD value = 0x0F41 
 AD value = 0x0F45 
 AD value = 0x0F44 
 AD value = 0x0F45 
 AD value = 0x0F42 
 AD value = 0x0F40 
 AD value = 0x0F42 
 AD value = 0x0F46 
 AD value = 0x0F45 
 AD value = 0x0F30 
 AD value = 0x0F41 
 AD value = 0x0F43 
 AD value = 0x0F43 
 AD value = 0x0F3C 
 AD value = 0x0F44 
 AD value = 0x0F44 
 AD value = 0x0F3B 
 AD value = 0x0F45 
 AD value = 0x0F45 
 AD value = 0x0F45 
 AD value = 0x0F45 
 AD value = 0x0F45 
 AD value = 0x0F45 
 AD value = 0x0F46 

家里没表,先来个估算吧.

假定Vref=3.30V. 12位ADC

vd1=0x0f30=3888   

v1=vd1*Vref/2^12=3888*3.3/4096=3.132421875V

vd2=0x0f46=3910

v2=vd2*Vref/2^12=3910*3.3/4096=3.150146484375V

从这个结果可以看出有近18mV的漂移~~~

当然这个没加入软件滤波...

如果外电压在15V左右采用1/5分压电路后,会有90mV的漂移~~~

没看板子的采样保持电路,所以现在没有发言权~~~

使用特权

评论回复
23
hotpower| | 2007-12-30 14:46 | 只看该作者

看错了~~~还有个0x0f53,看来漂移还要大~~~

使用特权

评论回复
24
qihao| | 2007-12-30 14:53 | 只看该作者

KAO 菜农!

你保重身体哦!你家网管出去玩去了?!哈哈

关键你假设的这个3.30V 在不同板子上由于3.30V的三端的离散性,同样的外部输入还要变!

TO 圈圈同学:
ADI这样的老牌模拟公司当然啦!它的都不好,没好的了~~

使用特权

评论回复
25
hotpower| | 2007-12-30 14:59 | 只看该作者

1/3处还不错~~~(网管让我一小时~~~)

42;31m AD value = 0x0662 
 AD value = 0x0661 
 AD value = 0x0663 
 AD value = 0x0660 
 AD value = 0x0660 
 AD value = 0x0663 
 AD value = 0x0662 
 AD value = 0x0662 
 AD value = 0x065E 
 AD value = 0x0661 
 AD value = 0x0662 
 AD value = 0x0662 
 AD value = 0x0662 
 AD value = 0x0661 
 AD value = 0x0662 
 AD value = 0x0660 
 AD value = 0x0661 
 AD value = 0x0660 
 AD value = 0x0662 
 AD value = 0x0663 
 AD value = 0x0663 
 AD value = 0x0663 
 AD value = 0x0662 

使用特权

评论回复
26
hotpower| | 2007-12-30 15:02 | 只看该作者

谢谢~~~哈哈...1/2处也行~~~

42;31m AD value = 0x07FA 
 AD value = 0x07FB 
 AD value = 0x07FA 
 AD value = 0x07FA 
 AD value = 0x07FB 
 AD value = 0x07FB 
 AD value = 0x07F9 
 AD value = 0x07F6 
 AD value = 0x07F7 
 AD value = 0x07FA 
 AD value = 0x07F9 
 AD value = 0x07F8 
 AD value = 0x07FA 
 AD value = 0x07F8 
 AD value = 0x07F9 
 AD value = 0x07F6 
 AD value = 0x07F7 
 AD value = 0x07FE 
 AD value = 0x07FA 

使用特权

评论回复
27
qihao| | 2007-12-30 15:12 | 只看该作者

LED跑马

TIM1 输出占空比不同的PWM,IIC放出去写EEPROM,使用最高的采用速率试试

使用特权

评论回复
28
ijk| | 2007-12-31 11:09 | 只看该作者

几个月前我也做过ADC的测试

  几个月前也做过ADC的测试,对于测试结果的稳定性可以感到满意。我使用的是ST官方的DEMO板,测量结果比万利的和EMBEST的DEMO板好。我在0~3.3V间,选取了不同电压等级进行测量,过些时候可以贴出来让大家参考。

使用特权

评论回复
29
ijk| | 2007-12-31 13:38 | 只看该作者

STM32的ADC-稳定性试验

  使用的是ST官方的STM32的DEMO板,测量的是DEMO板上的电位器电压,每次的测量结果由4次采样取平均值得到,采样时间设置为55.5 cycles。
  注:每个测量点都进行了>30秒的测量和统计,统计包括最大值、最小值和平均值。另外,每秒可以得到和统计多个测量结果,也就是说下面每个测量点的统计结果都是由上百个测量结果来的。

1)~4000
    min        4058
    max        4064
    avr        4060
2)~3000
    min        2952
    max        2956
    avr        2953
3)~2000
    min        2027
    max        2030
    avr        2028
4)~1000
    min        980
    max        982
    avr        981
5)~200
    min        216
    max        218
    avr        216

使用特权

评论回复
30
ijk| | 2007-12-31 14:11 | 只看该作者

STM32的ADC-稳定性试验的结论

  根据楼上的测量试验,对照STM32 ADC的特性参数(Rev.4),可以相信它的
Total unadjusted error的典型值能达到3。
  说明,ST官方的STM32的DEMO板在VDDA和Vref+的电路连接为:VDD经过LC滤波接VDDA,L估计是10uH数量级,C为10uF并联10nF;VDDA经过RC滤波接Vref+,R为47欧,C为10nF。由此可见,ST官方的STM32的DEMO板用料更好些,但也没什么特别设计。

使用特权

评论回复
31
qihao| | 2007-12-31 14:15 | 只看该作者

ijk 这试验效果真不错

不是用USB 供电的?

关于STM32的AD的设计,我也发了些噪声,呵呵,其实我的主要看法是在没有外接ref的情况下(非100Pin的),由于在板的时候,供电的3.3V一般是三端,这个三端本身的离散性是要考虑的,而不是针对一块板上本身的离散性,是生产时,由于不同板子上的3.3V(基准)完全可能有3%的离散性,那么对于外部输入的信号在不同板上转换结果将有3%的离散性。

使用特权

评论回复
32
qihao| | 2007-12-31 14:20 | 只看该作者

哦 VDDA 有LC! 呵呵

这就是老牌帝国主义和新兴力量的差距哈!

使用特权

评论回复
33
ijk| | 2007-12-31 15:08 | 只看该作者

关于STM32的VDDA 有LC

  上面提到STM32官方DEMO板的VDDA 有LC滤波,但需要说明的是,使用的L实际上是很低廉的贴片封装的,尺寸可能是0603或0805,成本或许也就1毛钱*币,并不希奇,呵呵

使用特权

评论回复
34
老狼| | 2007-12-31 15:14 | 只看该作者

qihao

由于不同板子上的3.3V(基准)完全可能有3%的离散性,那么对于外部输入的信号在不同板上转换结果将有3%的离散性。
-------------qihao:这个好办,其实采样值都是相对值,还没考虑零漂,温漂,可以用软件重新整定,这个工作可以在设备完成后来做,设备完成后,在软件上加一个系统整定界面,设备外加允许输入的最大信号(标准信号源)这个测试的对应采样值就和外加标准信号的物理量对应起来了,然后找到零信号(输入端短接)对应的采样值,知道了满量程和零点的采样值,那么每个采样点对应的物理量就清楚了,至于温漂的整定,可以用补偿的方法。

使用特权

评论回复
35
老狼| | 2007-12-31 15:21 | 只看该作者

ijk:你那里买的板子?多少钱?

使用特权

评论回复
36
香水城| | 2007-12-31 15:23 | 只看该作者

STM32官方DEMO板的电源部分线路图

完整的线路图可在ST网站下载:http://www.st.com/stonline/products/literature/um/13472.pdf

使用特权

评论回复
37
alien2006| | 2008-1-2 21:38 | 只看该作者

建议楼主的问题还是要多些思考深入分析的好

STM32的12BIT ADC自身实际上是非常棒,可以负责任的说STM32自带的ADC实际上比大部分独立的12BIT ADC还要好,楼主说的数据跳动大的问题,还得具体问题具体分析。
     就我个人实地使用的情况,我用的板子是ST公司的评估版(ST网站上可以下到该板的PROTEL文件),电路板是四层板,板上有一个电位器可以来测试ADC,我在实地测试ADC的数据是非常稳定的,数据基本上是恒定的跳动不会超过1LSB的!用2根杜邦线引出ADC输入引脚和AGND引脚,直接去测量一节电池的电压,数值也是非常稳定的,变动也是不超过正负1LSB,实在是非常了不起的。对比之下我用12bit 的MAX1284这个独立ADC都得有2~3LSB,
    我在我发过的STM32做的示波器的帖子里有ADC采样的图形曲线

使用特权

评论回复
38
alien2006| | 2008-1-2 21:47 | 只看该作者

补充下,

绿色的那根线就是测试评估板上可调电位器输出的电压,可以看到直线是非常平直,非常稳定的的。读数跳动不会大于1LSB。
    看了楼上几位的数据,跟我这边的实验结果还是有很大差距的。个人觉得估计还是跟电源以及布线有很大关系,ST的官方评估板的布线水平还是相当高的,值得学习

使用特权

评论回复
39
老狼| | 2008-1-2 23:10 | 只看该作者

可能是4层板的关系!

这个显示程序是你做的?做得不错!是.net的吧,C# ?,不像是VC的~!

使用特权

评论回复
40
alien2006| | 2008-1-3 19:32 | 只看该作者

回40楼:

    程序是.NET的,用C#2005写的。个人认为如果要开发.NET的程序的话,最好还是用C#来做,用C++来开发.NET应用的话,感觉相对C#并没有什么优势,C#是.NET最佳的搭档,C#本身就是专门为.NET平台而度身定做。
     不过好像基于.NET的程序好像性能要比传统MFC的程序差些,同样的绘图程序用.NET开发的和用MFC做的相比CPU利用率要高不少,在老PIII850笔记本上.NET的要到60%,MFC的则不足30%。不过在双核的机器上好像始终都是零:)

使用特权

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

本版积分规则