OpenEdv-开源电子网

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

adc正弦波采集怎么算?程序参数怎么设置

[复制链接]

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-10-10 16:38:51 | 显示全部楼层 |阅读模式
5金钱
求助:50Hz正弦波,20ms一个周期。一个周期需要采128个点,20000/128us采集一次。然后怎么算,怎么设置adc库函数的几个参数,分频、采样周期之类?一团乱麻
128合适吗?该怎么确定这个值,没有头绪。。。

最佳答案

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

156.25us采集一个点。 然后你再好好看看我们教程。 ADC频率是固定的(设置好就固定了) ADC转换周期,有公式。 然后时间是156.25us,那你自己去算。不懂就仔细看我们的ADC例程。
小小蜗牛
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-10 16:38:52 | 显示全部楼层
156.25us采集一个点。

然后你再好好看看我们教程。
ADC频率是固定的(设置好就固定了)
ADC转换周期,有公式。
然后时间是156.25us,那你自己去算。不懂就仔细看我们的ADC例程。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-10-10 16:48:30 | 显示全部楼层
书上说adc频率不能高于14M,如果我6分频为12M,这个12M就是1/12us采集一次,既然都确定了,为什么还要选ADC_SampleTime_55Cycles5?不懂
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-10-11 09:02:46 | 显示全部楼层
 回复【3楼】 正点原子 :
---------------------------------
请先看看我凌乱的思路:
例程中如下:
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;


是否理解为每5ms采集一次,就是1s采集200次,采样频率是200Hz?,前面6分频后adc采样频率为12MHz。这。。。

u16 Get_Adc(u8 ch)   
{
  //设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期      
  /*前面adc分频后为12MHz,239.5+12.5=252个周期,这个252 * 1/12 = 21us。那就是每经过21微秒 adc采集一次还是怎么?这个和上面延时的5ms什么关系?我算了上面这几个时间,到底采样时间是哪个呢?按照例程的设置,采集正弦波的话,一个周期采了多少点呢?如何达到我们期望的128呢?*/
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
 
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
}
这个128也是看别人的,不知道为什么是128,怎么确定这个值?128的话,我需要156.25us采一次,怎么写程序能得到156.25呢?
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-10-11 09:06:54 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
给你一把梳子,塞进我脑子里,请帮我理一理思路吧。
小小蜗牛
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-11 22:13:18 | 显示全部楼层
回复【4楼】jiutianshenjian:
---------------------------------
继续想几天先.待我把F4搞出来,你还没想明白,再帮你解决.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-10-12 08:25:24 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
好,希望等不到你来就解决了。
小小蜗牛
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-10-12 09:42:49 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子兄这次的网络是用什么协议的?  UIP还是LWIP ?
学无止境
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-12 12:30:09 | 显示全部楼层
回复【8楼】jermy_z:
---------------------------------
lwip
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-10-12 14:44:22 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
赞   盼望早日推出
学无止境
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-10-15 09:47:29 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我在网上看到有文章这么说:

提出如下两套方案:
方案一:我们的输入信号是50Hz (周期为20ms),初步定为1周期2500个采样点,(注:一周期最少采20个点,即采样率最少为1k) ,每2个采样点间隔为 20ms /2500 = 8 us
ADC可编程的通道采样时间我们选71.5 周期,则 ADC采样周期一周期大小为8us /71.5 。 ADC 时钟频率约为 9 MHz。
将PCLK2 8 分频后作为ADC 的时钟,则可知ADC 时钟频率为 9MHz


方案二:我们的输入信号是50Hz (周期为20ms),初步定为1周期1000个采样点,(注:一周期最少采20个点,即采样率最少为1k) ,每2个采样点间隔为 20ms /1000= 20 us
ADC可编程的通道采样时间我们选239.5周期,则 ADC采样周期一周期大小为20us /239.5 。 ADC 时钟频率约为 12 MHz。
将PCLK2 6 分频后作为ADC 的时钟,则可 知ADC 时钟频率为 12MHz

这种说法合理吗?如果可以,我就用方案二了。设置6分频,然后239.5.这两个设置了就OK了吧。
小小蜗牛
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-15 23:38:18 | 显示全部楼层
回复【11楼】jiutianshenjian:
---------------------------------
可以
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 06:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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