OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9651|回复: 7

ADC采集历程中delay_ms(5)的作用

[复制链接]

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-12-5
在线时间
6 小时
发表于 2015-2-5 14:17:19 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]//获得ADC值 //ch:通道值 0~3 u16 Get_Adc(u8 ch) { //设置指定ADC的规则组通道,一个序列,采样时间 ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束 return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果 } u16 Get_Adc_Average(u8 ch,u8 times) { u32 temp_val=0; u8 t; for(t=0;t<times;t++) { temp_val+=Get_Adc(ch); delay_ms(5); } return temp_val/times;[/mw_shl_code]
采集ADC后为什么需要delay_ms(5)延时5毫秒呢?
Get_Adc函数中已经有等待采集结束了,说明函数调用完就已经采集完了啊 [mw_shl_code=c,true]while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束[/mw_shl_code] [mw_shl_code=c,true] [mw_shl_code=c,true]但是去掉delay后采集到的数据会偏小[/mw_shl_code]
[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

就是等待5ms再去采集下一次数据,分散数据。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-2-5 14:17:20 | 显示全部楼层
就是等待5ms再去采集下一次数据,分散数据。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-12-5
在线时间
6 小时
 楼主| 发表于 2015-2-6 10:11:22 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
分散数据是何意?
既然已经完成采集为何需要延时呢,没法理解
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-12-5
在线时间
6 小时
 楼主| 发表于 2015-2-6 10:30:17 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
这个地方应该使用的是ADC单次转换模式
那么这个转换为何需要延时呢~
回复

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2015-2-6 10:31:22 | 显示全部楼层
是不是因为ADC模块对电压有干扰,分散采集误差较小?具体查一下模块的编程指南吧。
业余程序玩家。
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-12-5
在线时间
6 小时
 楼主| 发表于 2015-2-6 10:39:26 | 显示全部楼层
http://bbs.21ic.com/icview-170595-1-1.html
此论坛中这句话不知是不是答案
用ADC1,Regular通道的顺序为Ch0,Ch1,Ch2,Ch3,启动Scan模式

在单次转换模式下:
启动ADC1,则
1. 开始转换Ch0
2. 转换完成后自动开始转换Ch1
3. 转换完成后自动开始转换Ch2
4. 转换完成后自动开始转换Ch3
5. 转换完成后停止,等待ADC的下一次启动。下一次ADC启动从第一步开始

在连续转换模式下:
启动ADC1,则
1. 开始转换Ch0
2. 转换完成后自动开始转换Ch1
3. 转换完成后自动开始转换Ch2
4. 转换完成后自动开始转换Ch3
5. 转换完成后回到第一步

单次转换模式下Get_Adc每次循环都要重新启动ADC么?
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-12-5
在线时间
6 小时
 楼主| 发表于 2015-2-6 10:41:29 | 显示全部楼层
回复【5楼】ofourme:
---------------------------------
也有怀疑过这个,采集频率太高拉低电压,但是采集频率远没有达到STM32限制频率,此处delay 5ms 对ADC采样速率影响太大了些啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-2-6 23:39:06 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我这里就是想取分散时间内的adc值,求平均值,已得到更好的效果。
说白了就是个样本取值的问题,当直流信号的时候,样本尽可能的长,自然得到结果越准确,样本都几种在一个时刻,那么如果这个时刻抖动大,那么你得出的结果,就不能那么好的体现真实情况了。
但是对于交流信号,就另当别论了,所以,这东西看你需求的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-26 01:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表