打印
[STM32F1]

STM32F103 ADC 遇到奇怪问题

[复制链接]
2850|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liang_ke|  楼主 | 2016-12-13 15:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liang_ke 于 2016-12-14 09:01 编辑

原因已找到,问题出现在时钟配置方面.

使用DMA通道采集两路ADC,后来改成一路了,同样的问题,这个问题是我在几次断电和上电过程中发现的,

ADC和DMA的配置是在网上找和例程,采用DMA中断方式.

仿真时将监控ADC缓冲区数据,每次点仿真复位按钮后,缓冲区数据就有可能改变一次,最终会在两个数据之间交替切换.
不点复位按钮的情况下,这个数据就一直很稳定,不会乱跳.

如下图,


不同转换结果的情况下我都测量了ADC供电和ADC引脚电压,都是相同的,就是说电压没变,数据确变了.从上图可以看出,大了16个AD值

经过检查,发现问题出现在下面两段程序上,注释掉后就不再出现上电ADC数值交替变换的情况了.
//        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//选择FLASH预取指缓存的模,预取指缓存使能
//        FLASH_SetLatency(FLASH_Latency_2);//FLASH操作的延时周期




沙发
liang_ke|  楼主 | 2016-12-13 15:05 | 只看该作者
本帖最后由 liang_ke 于 2016-12-13 15:28 编辑

再上传一组,这次变了15个AD值



加一路内部1.2V参考电压采集,参考电压 那个没跳,另一路ADC,两次差值还是15

  







使用特权

评论回复
板凳
yhummqj| | 2016-12-13 16:24 | 只看该作者
仿真时的ADC值很难讲的。AD十几的变化。假设Verf=3.3V,换算过来也就在十几个mv的变化量。同时MCU的VCC是连接仿真器的,并不是说VCC就能够不收到干扰。想做到iAD一位数值都不变,几乎做不到。

使用特权

评论回复
地板
xyz549040622| | 2016-12-13 16:57 | 只看该作者
看整体变化吧,只要这个值一直是稳定的,就认为读数是正确的。也可能有其他参数的影响,比如温度,电源的纹波。

使用特权

评论回复
5
liang_ke|  楼主 | 2016-12-13 17:31 | 只看该作者
xyz549040622 发表于 2016-12-13 16:57
看整体变化吧,只要这个值一直是稳定的,就认为读数是正确的。也可能有其他参数的影响,比如温度,电源的纹 ...

一直很稳定,但是每次重启后,AD值不同,但是很稳定,
同事之前也写了一段DMA ADC程序,仿真重启,没这问题,同一块板子测试的
我把他程序全部复制到我的程序里,然而也不行.

使用特权

评论回复
6
mmuuss586| | 2016-12-13 20:31 | 只看该作者
差15还好啊;
可以程序里再加些算法

使用特权

评论回复
7
liang_ke|  楼主 | 2016-12-14 07:46 | 只看该作者
mmuuss586 发表于 2016-12-13 20:31
差15还好啊;
可以程序里再加些算法

差之毫厘谬以千里
随机出现的,无法通过算法避免

使用特权

评论回复
8
yhummqj| | 2016-12-14 15:23 | 只看该作者
LZ能具体说说怎么解决的吗?

使用特权

评论回复
9
Brand2| | 2016-12-14 21:12 | 只看该作者
这个值整体变化是不是稳定的

使用特权

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

本版积分规则

8

主题

33

帖子

0

粉丝