打印

试了STM32 ADC太烂

 关闭 [复制链接]
楼主: apple
手机看帖
扫描二维码
随时随地手机跟帖
61
IJK| | 2010-10-26 13:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
要说相当于11位的话,估计还有人信...
zhaoyu2005 发表于 2010-10-26 10:22


赞同。

使用特权

回复
62
apple|  楼主 | 2010-10-26 13:14 | 只看该作者
测试开始,STM32F103程序 ADC测试.rar (495.99 KB)

PC上的软件 AdcTest.rar (211.58 KB)

下面的测试基于上面的软件进行

使用特权

回复
63
apple|  楼主 | 2010-10-26 13:41 | 只看该作者
测试板为MCBSTM32 原理图如下,直接用板上的AIN1(PA1)采样电位器电压,如红圈处


采样到的ADC值转到PC上以波形显示。
接地时的波形,很好



往上调一些,可以看到有波动,也许你说波动不大,是因为图的高度只有400左右像素,如果以4095来画图,就很明显了



当调到中间某个位置(约1.65V),就很夸张了,如果说板子不好,滤波不好,为什么中间这点波动非常大,应该与其它点波动一样才对。

4.gif (8.95 KB )

4.gif

使用特权

回复
64
apple|  楼主 | 2010-10-26 13:42 | 只看该作者
补原理图

使用特权

回复
65
sjnh| | 2010-10-26 13:46 | 只看该作者
zhaoyu2005发表于 2010-10-26 10:22 | 只看该作者 回复 引用 返回版面 TOP 得分:0 61楼:  虚心,再虚心,不要随便说一个芯片很烂,不可能标称12位的AD,实际性能相当于8位的,ST要是这水平还不早就关门了,还能混到现在?要说相当于11位的话,估计还有人信,说相当于8位的,有些高手笑一下,有些人为是在说梦话

我用103估计到11位(参考电压就用的电源电压),
TI的2812,12位AD,能调到10位的凤毛麟角,所以用2812和AD的都是外扩,我同事的一个朋友说:TI说能到12位就一定能到,但实际调到的还真没发现,9位都不容易,

使用特权

回复
66
香水城| | 2010-10-26 14:03 | 只看该作者
请楼主看看你这块板子的PCB设计,尤其是电源滤波部分,是否按照数据手册上的要求去做了。

再有,你在测试时候的系统供电电源是什么?干净吗?

使用特权

回复
67
apple|  楼主 | 2010-10-26 14:29 | 只看该作者
在第二个板上测试,图如下,MCU为103VCT6,100脚封装,VDDA外接3。3V,板子由USB供电


这个结果就很好,估计和64脚/100脚VDDA内接/外接有关, 之前那MCBSTM32板是64脚MCU,VDDA内接VDD




但这个调到1.65V时出现了和之前一样情况

使用特权

回复
68
apple|  楼主 | 2010-10-26 14:40 | 只看该作者
把电位器去掉,直接接560欧电阻到PA1上和地之间,不接其它元件,测到AD值竟然不为0,换成接220欧、100欧才基本为0

使用特权

回复
69
IJK| | 2010-10-26 14:42 | 只看该作者
测试板为MCBSTM32 41037原理图如下,直接用板上的AIN1(PA1)采样电位器电压,如红圈处
41038

采样到的ADC值转到PC上以波形显示。
接地时的波形,很好
41039


往上调一些,可以看到有波动,也许你说波动不大,是因 ...
apple 发表于 2010-10-26 13:41


MCBSTM32 似乎是 Keil做的STM32板,印象里有人说它在AD这方面做得 不好

使用特权

回复
70
宇宙飞船| | 2010-10-26 14:50 | 只看该作者
楼主的测试方法明显就不对!有你这样测试MCU的ADC转换性能的吗?
正确的测量器件的ADC的转换噪声,
1。根据噪声容限要求正确设计PCB板。
2。在ADC的输入端与地之间加滤波电容。
3。若用PC机做记录,绝对不能跟PC机共地(必需经光耦)。
4。实验室的堆放测量仪器的桌面必需有大面积的铜板,并接入真正的大地。
5。所有经市电的进线必需经过带屏蔽接地外壳的桥路电感虑波,外壳接地。

楼主的学习板只能用于学习MCU编程原理,跟实际工程测试设计相去甚远。
做为器件参数测试本身就是大错特错的想法。
真TMD被楼主吓了一跳。还好,有惊无险。

使用特权

回复
71
apple|  楼主 | 2010-10-26 15:11 | 只看该作者
楼上说的没错,那是非常理想的状态,很象以前我们做技术支持时对客户经常说的大话,打死不能说IC不好。
按你的做法我想可以排除的一些问题,但有些问题还是无解释,我又不是第一天做ADC,在一样的条件下换个STC的来做都没有发现这么多问题, 也没时间做太多测试,不行的话只有外持ADC了,

使用特权

回复
72
香水城| | 2010-10-26 16:58 | 只看该作者
下载了63楼的测试程序看了看,先提几点看法:

1)看得出来,楼主是个熟手,程序的注释写得比较清楚;同时你能直接操作寄存器也能说明这点。

2)请确认你的CPU系统时钟(SYSCLK)的频率配置为多少MHz?从程序中看出,如果外部晶振是8MHz,则SYSCLK=72MHz。

3)为什么你在stm32_ClockSetup()中设置了RCC->CFGR.ADCPRE=10 (PCLK2 divided by 6),而在InitAdc2()中又再次设置RCC->CFGR.ADCPRE=00 (PCLK2 divided by 2)?

4)函数InitAdc2()中校准这个等待语句似乎有问题:
  while(ADC2->CR2 & 1<<3); //等待校准结束
如果我没有记错,'&'的优先级大于'<<';导致这个语句如下结果:
  while((ADC2->CR2 & 1)<<3);
下面还有一句话也是同样问题:
  while(ADC2->CR2&1<<2); //等待校准结束

5)前面我还有几个人已经提到电路阻抗的问题,根据你的电路,如果2)的判断正确,转换周期应设置为7.5周期或更大为好,但你设置的是1.5周期:
  ADC2->SMPR2 = (0<< 9) | (0<<6) | (0<<3);   //1.5周期

这里最关键的问题是上述3):如果2)的判断正确,这个设置使得ADC模块的时钟频率,远远高于手册规定的频率;STM32的ADC模块最高工作频率是14MHz,但你却设置为36MHz(72MHz/2);再结合上述5),这很可能就是你测试有问题的关键因素之一,除此之外电路板和供电滤波仍然还是关键因素。

使用特权

回复
73
apple|  楼主 | 2010-10-26 19:06 | 只看该作者
香水城果然是很细心的高手,  程序AD初始化部分是我从网上COPY过来的,其它部分是KEIL的例程, MAIN中是我写的,现在很多程序员都象生产线上的熟练工人了,到处COPY代码,我也不例外。

第3点,(PCLK2 divided by 2)确实是个错误, 我只核对了KEIL里对时钟的配置,而忽略了这里,经过更正后情况大有好转,就是12MHz + 1.5周期, 电位器调到1.65V时波动比原来小很多,2033-2055, 然后在PA1上并一个电容基本达到要求,我不明白为什么在其它电压点不用并电容也很好;  因为并上电容对信号带宽有影响,做高速采样可能不太好.

第4点, 最开始我也看到了,也改过,没发现有什么问题,就保留原样.

第5点,我需要用的最高的采样速度,所以只能设成1.5周期了, 如果降低采样可能更好.

经过与大家的共同探讨和测试,现在可以得出一些结论如下,不对的话请批评指正:

1. ADC脚是有一定的内阻(或者说负载),可以参见前面香水城贴的内部图, 采样率越高,内阻越小,所以最好加运放做驱动比较好。比如当用ADC对NTC做温度采样就要注意了,简单的方法是用电阻分压直接送到ADC,会受到ADC内阻的影响。

2. KEIL的MCBSTM32板始终干扰很大,用的IC是64PIN封装103RBT6,VDDA在IC内部接到VDD,不能确定是否是这个问题引起,还是板子不好。

3. 貌似ADC的时钟可以超过14MHz, 只是精度越来越差。

4. 网络上的东西不能拿来就用,水平参差不齐,还是要经过自己消化才行。

另外我还有一个问题,就是多通道扫描DMA转输,通道错位,不过目前我暂时用不到.

最后希望坛友们都用务实的态度来进行交流,共同进步.

再次感谢香水城!

使用特权

回复
74
香水城| | 2010-10-27 09:53 | 只看该作者
关于75楼的第1个问题:STM32的ADC采用逐次逼近模数转换采样,进行转换时首先要对内部采样电容充电,然后对采样电容上的电压进行逼近转换,一次转换之后对采样电容放电并进入下个循环。如果外部电路阻抗太大,而设置的采样周期太短即充电时间太短,则会造成在转换时内部采样电容上的电压不等于外部电路电压的情况,这时转换结果当然不准或有波动。当你把电位器放到中间位置时,电路的阻抗最大,在采样周期设置不当时,肯定表现出误差也最大。

关于多通道扫描DMA转输,通道错位的问题,到目前为止我还没有看到这种现象,也没有人能给我一个程序可以重现这种现象,如果你能给出一个测试程序重现它,我将非常感谢。

碰到问题并不可怕,怕的是轻易下结论,如果能够像楼主说的,每个人都能用务实的态度来对待问题,大多数问题都可以很好地解决的。

使用特权

回复
75
香水城| | 2010-10-27 10:19 | 只看该作者
关于逐次逼近AD转换的原理,这里有一个旧帖可能对你有帮助:
https://bbs.21ic.com/icview-110701-1-1.html

使用特权

回复
76
宇宙飞船| | 2010-10-27 10:42 | 只看该作者
香水版主真有耐心。换转在俺的地盘,至少要楼主改成如下标题才搭理他。否则当作倒乱份子看待。:lol
“试了STM32 ADC 太烂?”
从原理图上看出,楼主的模拟电子技术其实还没入门。

测试电路中ADC的电容接法就是错误的。至于为什么会是错的?
麻烦楼主回去学习两年模拟电路后再上来放P话。

使用特权

回复
77
zhaoyu2005| | 2010-10-27 11:06 | 只看该作者
66# sjnh

呵呵,TI的除了外围器件,MCU只接触过430,所以不了解,关于性能我是针对ST的片子的,因为几年前用过4052模拟开关,极限好像是正负10V,ST的片子我用正负12V(超标应用,应该尽量避免的),有点温升(不明显),其他好几个厂家的,上电就热,前年用ST的可控硅,质量也不错,前一段时间用STM32F101的片子,正好用了AD(直接用电源电压作参考)和DMA,效果不错,虽然我对精度要求不高,但是用J-link调试看,数值跳动在5个以内(没加电容滤波),从这些经历看,ST的片子质量刚刚地

使用特权

回复
78
一级菜鸟| | 2010-10-27 12:19 | 只看该作者
香水版主真有耐心。换转在俺的地盘,至少要楼主改成如下标题才搭理他。否则当作倒乱份子看待。:lol
“试了STM32 ADC 太烂?”
从原理图上看出,楼主的模拟电子技术其实还没入门。

测试电路中ADC的电容接法就是错误 ...
宇宙飞船 发表于 2010-10-27 10:42


我觉得飞船应该改姓王,历史上有个姓王的卖西瓜的挺有名。

围观你跳脚挺有趣的。

使用特权

回复
79
宇宙飞船| | 2010-10-27 12:42 | 只看该作者
一级菜鸟这老头的的模拟技术也太菜了,一并回去修练两年再上来放P话。

使用特权

回复
80
香水城| | 2010-10-27 14:20 | 只看该作者
香水版主真有耐心。换转在俺的地盘,至少要楼主改成如下标题才搭理他。否则当作倒乱份子看待。:lol
“试了STM32 ADC 太烂?”
从原理图上看出,楼主的模拟电子技术其实还没入门。

测试电路中ADC的电容接法就是错误 ...
宇宙飞船 发表于 2010-10-27 10:42


哈哈,俺不信奉“顾客就是上帝”的说法,因为俺不信上帝,:lol    但是俺信奉人人平等的原则。

每当我犯了错误,我知道那不是我故意所为,而是认知上的某种缺失;本着人人平等的原则,我知道别人犯错误的时候,也并非他故意所为,也是因为认知的缺失,弥补了这个缺失,以后他也就不会再犯同样的错误了;既然人人平等,大家都有义务来帮助他,而不是嘲笑他。

使用特权

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

本版积分规则