OpenEdv-开源电子网

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

关于STM32的ADC采样频率的疑问,求指点

[复制链接]

10

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2012-3-14
在线时间
0 小时
发表于 2012-8-5 14:54:51 | 显示全部楼层 |阅读模式
想用STM32采集音频信号,查得音频信号的频率为20~20000Hz,也就是说AD采样的频率至少大于40KHz,以前从没弄过AD,这几天看了一下stm32的手册关于AD的部分,也对照了一下原子的实验例程,对ADC还是不太了解。stm32的AD有那么多种模式把我弄晕了。
我现在的问题就是,我要设置采样频率为40K的话,是不是要用一个定时器每隔25μm中断一次来操作ADC的转换?如果是这样的话,是不是太麻烦?而且因为我的程序里还有其他中断程序,我也质疑stm32的工作速度是否跟得上,25μm的时间是很短的,是否能保证单片机能否在这么短的时间里执行一次中断程序我不确定。
有没有更好一点,能够实现AD固定采样频率连续不停的采样而我的程序只需要读取采样结果?
我看了一下手册,里面也提到了采样时间,但是好像和我理解的采样周期不是那么一回事,所以想征求一下大家的建议
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2012-12-27
在线时间
0 小时
发表于 2013-3-12 22:01:15 | 显示全部楼层
回复【4楼】shuilian007:
回复【楼主位】10086rainer: --------------------------------- (1)我们的输入信号是50Hz (周期为20ms),初步定为1周期200个采样点,(注:一周期最少采20个点,即采样率最少为1k) ,每2个 采样点间隔为 20ms /200 = 100 us ADC可编程的通道采样时间 我们选最小的 1.5 周期,则 ADC采样周期一周期大小为 100us /1.5=66us 。 ADC 时钟频率为 1/66us =15 KHz。   ADC可编程的通道采样时间 我们选71.5 周期,则 ADC采样周期一周期大小为 (100us /71.5) 。 ADC 时钟频率为 7.15MHz。  (2)接下来我们要确定系统时钟:我们 用的是 8M Hz 的外部晶振做时钟源(HSE),估计得 经过 LL倍频 LL 倍频系数分别为2的整数倍,最大72 M
......
---------------------------------
看完之后有点明白了,但是我有个实际问题,我要用线阵CCD,有将近4000个像素左右,每个像素点至少得采一次,也就是在20ms内采完,还要用DMA存储,不知道STM32RBT6能不能做到,应该怎样设置采样时间?
回复 支持 1 反对 1

使用道具 举报

18

主题

158

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
400
金钱
400
注册时间
2011-11-23
在线时间
0 小时
发表于 2012-8-5 20:15:39 | 显示全部楼层
回复【楼主位】10086rainer:
---------------------------------
(1)我们的输入信号是50Hz (周期为20ms),初步定为1周期200个采样点,(注:一周期最少采20个点,即采样率最少为1k) ,每2个 采样点间隔为 20ms /200 = 100 us
ADC可编程的通道采样时间 我们选最小的 1.5 周期,则 ADC采样周期一周期大小为
100us /1.5=66us 。 ADC 时钟频率为 1/66us =15 KHz。
  ADC可编程的通道采样时间 我们选71.5 周期,则 ADC采样周期一周期大小为
(100us /71.5) 。 ADC 时钟频率为 7.15MHz。
 (2)接下来我们要确定系统时钟:我们 用的是 8M Hz 的外部晶振做时钟源(HSE),估计得 经过 LL倍频 LL 倍频系数分别为2的整数倍,最大72 MHz。为了 提高数据 计算效率,我们把系统时钟定为72MHz,(PLL 9倍频)。则 CLK2=72MHz,PCLK1=36MHz;
 
我们通过设置时钟配置寄存器(RCC_CFGR) 中 有 为ADC 时钟提供一个专用的可编程预分器,将PCLK2 8 分频后作为ADC 的时钟,则可知ADC 时钟频率为 9MHz
    从手册可知: ADC 转换时间:
STM32F103xx 增强型产品:ADC 时钟为56MHz 时为1μs(ADC 时钟为72MHz 为1.17μs)
回复 支持 1 反对 0

使用道具 举报

27

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2011-11-2
在线时间
11 小时
发表于 2012-8-5 15:18:02 | 显示全部楼层
坐等高手。。。  DMA  ? 换主控?  或者超频?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-5 15:52:05 | 显示全部楼层
ADC+DMA即可.
一直不停的采集,貌似没这个必要吧.
如果要的话,你要处理的过来,也可以.

ADC设置好转换时间和采样时间,使得每次转换时间都是1/40Khz秒,然后DMA到内存,根据你的需要设计DMA长度,比如256,512,1024等.这样一次就采样了这么多个数据,等DMA中断来了,你去处理这些数据即可.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2012-3-14
在线时间
0 小时
 楼主| 发表于 2012-8-6 12:09:48 | 显示全部楼层
回复【3楼】正点原子:

---------------------------------
呵呵,多谢原子哥,你这么一说让我明白了不少
现在我还有两个疑问请原子解惑:
1.手册里面所谓“采样时间”我理解为单片机里AD转换器采样保持器给电容的充电时间,不知道这样理解对否?
2.如果第一条成立,由于stm32采样时间固定几个时钟周期,那么如果ADCCLK固定了的话,如果我要实现连续不断的采样,那采样频率不也就固定为几个离散值了吗?也即我的采样周期T固定为:采样时间(电容充电时间)+12.5个固定转换周期。这样的话岂不是对许多低频信号采样应用都会出现过采样?
回复 支持 反对

使用道具 举报

10

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2012-3-14
在线时间
0 小时
 楼主| 发表于 2012-8-6 12:10:27 | 显示全部楼层
回复【4楼】shuilian007:

---------------------------------
三楼的兄弟谢谢你的回答,但是我真没有看得很懂呵呵
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-8-6 12:37:35 | 显示全部楼层
回复【5楼】10086rainer:
---------------------------------
1,是的.
2,你可以通过修改采样时间来修改采样频率.另外,你也可也可以通过ADC分频,来降低采样频率.这些都是可控的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2012-3-14
在线时间
0 小时
 楼主| 发表于 2012-8-6 13:49:35 | 显示全部楼层
回复【7楼】正点原子:

---------------------------------
懂了,非常感谢!
回复 支持 反对

使用道具 举报

15

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2011-9-16
在线时间
8 小时
发表于 2013-7-16 01:26:49 | 显示全部楼层
回复【7楼】正点原子:
--------------------------------
原子哥,我觉得4楼楼主第二点说的是正确的。
采样时间来修改采样频率,采样时间就那几个。ADC分频,可以选择HSI 14M,也可以选择PCLK分频,但PCLK分频因子也就那几个。如果我的系统时钟定了,改变采样时间,ADC分频是可能组合出产生接近所要的采样频率,但不能保证恰好为所要的采样频率,总会存在误差

不知道我的理解对不对??
所以我想要产生精确的所要采样频率,是不是用定时器去触发ADC采样,ADC再开启DMA传输使能,采样到一定数据量时,DMA全部传输到RAM。即一楼楼主的思想。
请问原子,我的思想对不?如果可以的话,我需要注意什么,望指点!!
你不努力,谁都会看不起你!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-16 10:19:21 | 显示全部楼层
改变采样率:
方式1:通过ADC设置.
1,设置ADC时钟.
2,设置采样时间.

方式2:通过定时器设置.这个采样最大不能超过ADC设置.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2013-7-17 09:33:31 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
顺便问下,AD采集的时候,外部电路需要加什么电阻电容之类的吗?或者是用射极跟随器等东西?我在采集20k的信号,然后绘图到LCD上的时候出现个别点不稳定,应该不是信号源的问题吧。

 


 



 


 



回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-17 10:07:01 | 显示全部楼层
不加也没事吧...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2015-6-8
在线时间
2 小时
发表于 2015-6-8 16:41:49 | 显示全部楼层
回复【12楼】miaoguoqiang:
---------------------------------
请问你是用什么方法让ADC的采样速率提高的?我测量30K的时候每个周期只有10多个点。这样来看adc的采样只有300kHz。怎么提高?
RCC->CFGR &= ~0x3;    //close LL
RCC->CR &= ~(1<<24);

RCC->LLCFGR &= ~0x3f; //M
RCC->LLCFGR |=  (25);

RCC->LLCFGR &= ~(0x1ff<<6);   //N
RCC->LLCFGR |=  (336<<6);

RCC->LLCFGR &= ~(3<<16);
// RCC

RCC->CR |=  (1<<24);  //open LL choose LL
RCC->CFGR |=  0x2;

RCC->CFGR &= ~(0xf<<4);   //HSE
// RCC->CFGR |=  (0x9<<4);

RCC->CFGR &= ~(0x3f<<10);
RCC->CFGR |=  (7<<13); //PB2


这个是我时钟配置。
还有一个问题,f407的用户手册上说APB1不能超过42MHz,APB2不能超过84MHz。如果超了会怎样?
回复 支持 反对

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2015-6-11 22:24:21 | 显示全部楼层
回复【14楼】yzl:
---------------------------------
我用的定时器触发   经过DMA传输。
手册上说不能超过,那最好不要超过,超过了应该会不稳定。
回复 支持 反对

使用道具 举报

15

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2015-5-14
在线时间
6 小时
发表于 2015-6-12 09:39:25 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
“STM32F103xx 增强型产品:ADC 时钟为56MHz 时为1μs(ADC 时钟为72MHz 为1.17μs)”转换时间是不是写反了?
回复 支持 反对

使用道具 举报

15

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2015-5-14
在线时间
6 小时
发表于 2015-6-13 09:00:45 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
弄明白了,没反!56MHz可以正好分频为14MHz(最高),14个采用周期也就是1us,72MHz最高可分频为12MHz,14个采样中期也就是1.17us
回复 支持 反对

使用道具 举报

23

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
306
金钱
306
注册时间
2014-9-24
在线时间
39 小时
发表于 2015-6-15 13:35:25 | 显示全部楼层
回复【15楼】miaoguoqiang:
---------------------------------
请问你一下,你每次都是使用定时器进行软件出发的吗?这样的话你DMA传输的个数是怎么确定的?也就是DMA中传输的数据量你试写多少的?
回复 支持 反对

使用道具 举报

23

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
306
金钱
306
注册时间
2014-9-24
在线时间
39 小时
发表于 2015-6-15 13:42:25 | 显示全部楼层
回复【4楼】shuilian007:
---------------------------------
【6楼】正点原子:
---------------------------------
采样周期是完成一次ADC采样所用的时间吗?还是说相邻两次ADC采样的间隔回复?
回复 支持 反对

使用道具 举报

23

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
306
金钱
306
注册时间
2014-9-24
在线时间
39 小时
发表于 2015-6-15 15:31:10 | 显示全部楼层
回复【12楼】miaoguoqiang:
---------------------------------
请问你这一个电压信号是多久采集一次的?
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-7-12
在线时间
0 小时
发表于 2015-7-17 21:44:39 | 显示全部楼层
mark 新手 也在看adc
回复 支持 反对

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-2-1
在线时间
20 小时
发表于 2016-2-3 17:06:19 | 显示全部楼层
可以传一份代码给我吗?我最近也在做这个,谢谢   973767524@qq.com
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 08:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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