OpenEdv-开源电子网

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

stm32的ad采集

[复制链接]

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-3-18
在线时间
0 小时
发表于 2015-4-7 22:24:29 | 显示全部楼层 |阅读模式
5金钱
我在学习stm32的ad采集时,发现给的例子是采集数据并在显示屏上输出。每隔250ms采集一次。现在我把例子稍微改了一下,不显示,只是采集,并用它采集方波,我把采样时间设置为1.5个周期即转换时间为1us,延时50ms,采集一次通过print输出到串口调试助手。但发现只是采集小于10hz的方波比较准确。我想测量1khz时,把delay函数改为延时50us,结果不对,换算出来的周期频率根本不对。我该怎么修改程序才可以测量2khz左右的方波

最佳答案

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

回复【12楼】预愉悦自我: --------------------------------- 也是一个方法,不过10估计有点小,你设置大一点,比如500之类的,比较好。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-7 22:24:30 | 显示全部楼层
回复【12楼】预愉悦自我:
---------------------------------
也是一个方法,不过10估计有点小,你设置大一点,比如500之类的,比较好。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-7 23:42:34 | 显示全部楼层
你这个应用,别用ad了,用输入捕获 比较好
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-3-18
在线时间
0 小时
 楼主| 发表于 2015-4-8 14:33:56 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
感觉不太现实啊,因为stm32不可能连2khz的方波信号都采集不了啊。而且结果错误是因为什么原因啊?是因为程序本身运行的指令太多,达到了us级所以不可以通过延时变化即延时50ms变成50us进行理论上的由采集2hz变为采集2khz?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-8 23:01:33 | 显示全部楼层
回复【3楼】预愉悦自我:
---------------------------------
是可以采集,你用DMA采集试试吧,弄示波器那种方式
1us采集一次,不停的采集。不过也只是能采集一段时间的波形,你得根据输入信号频率,动态调节采样率,以得到最好的结果。
比如你2Khz,一个周期是500us,完全可以以1us的采样率,采集2K个点,这样,你可以得到4个周期的波形,然后显示出来,看像不像?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-8 23:01:51 | 显示全部楼层
中间不要printf什么的卡顿,就不停的采集,采集完成再处理。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-3-18
在线时间
0 小时
 楼主| 发表于 2015-4-12 21:28:24 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
就是说我新建一个数组,不断地进行数据的采集然后存储。那么,数组我应该怎么建立呢?因为我也不知道采集多少个数据。数组这段程序应该怎么写?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-12 22:41:03 | 显示全部楼层
回复【6楼】预愉悦自我:
---------------------------------
这就要你分析需求后来确定到底要多大的数组
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-3-18
在线时间
0 小时
 楼主| 发表于 2015-4-13 11:59:09 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
假如我需要200个数据,程序应该怎么写啊。
#define n 200
int a[n]={0};
i=0;
......
while(i<n)
{
     adcx=getADC(ch0);
     a=adcx;
       i++;
}
你看这个可以么>
回复

使用道具 举报

1

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2014-4-14
在线时间
104 小时
发表于 2015-4-13 15:16:12 | 显示全部楼层
回复【8楼】预愉悦自我:
---------------------------------
 你这还是在单次采,DMA方式的连续采集是不依赖CPU的,不需要你的程序代码去控制ADC的采集了。你只需要使能和禁能DMA就能取得所需数据,需要将ADC设为连续转换,DMA数据的入口设为ADC数据寄存器,DMA指向的内存地址指向你开辟的内存数组区,选择数据区长度和大小,单次传输或者循环传输,然后打开ADC,使能DMA,DMA就会在每完成一次ADC转换后,把数据寄存器里的值搬运到内存区里去……
打个比方就是:DMA是个机器人,你告诉他把货物从哪搬到哪,搬多少个,然后告诉他:开始搬!剩下的事就不用你管了,他就不停的搬呀搬,直到搬了那么多货就停下来。你只需要等他搬完了触发个中断告诉你搬完了就可以去取货了。
回复

使用道具 举报

8

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2015-4-8
在线时间
0 小时
发表于 2015-4-13 16:21:32 | 显示全部楼层
请问,串口下载中如何拨动,boot0拨到上面和boot1拨到下面,什么意思啊?是用手按他们吗?看起来不像,还是接根线,然后怎么着?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-3-18
在线时间
0 小时
 楼主| 发表于 2015-4-21 22:28:13 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
现在我将数据采集完成了,想将采集到的数据进行变换还原为方波频率。有一个想法,就是将数组内的数据与10进行比较,遇到第一个比10小的数据,计数器+1.直至遇到比10大的数字(及方波由0变为1),计数器停止技术,另一个计数器加1.统计两个计数器,然后计算频率。不知道可不可以。我也知道用输入捕获简单,但是我的课题要求用ad采集,我也无奈了。求原子指导
回复

使用道具 举报

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-3-18
在线时间
0 小时
 楼主| 发表于 2015-4-22 15:23:41 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
原子哥,这个问题解决了。但是有个新问题,我们老师要我选用最低功耗的stm32.我现在用的是在你那买的STM32F103RCT6。你知道那款型号的stm32的功耗最低么?
回复

使用道具 举报

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-3-18
在线时间
0 小时
 楼主| 发表于 2015-4-22 15:27:22 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
追问,我查了一下最低功耗给了三个型号,分别是STM32L151、STM32L152、STM32L162.问一下使他们三个么?还有想问一下,他们的编程跟STM32F103RCT6一样么?还是有很大的差别
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-22 22:51:25 | 显示全部楼层
回复【15楼】预愉悦自我:
---------------------------------
没用过L系列的,不过L系列功耗肯定比普通 的低了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-3-18
在线时间
0 小时
 楼主| 发表于 2015-4-25 00:13:26 | 显示全部楼层
回复【16楼】正点原子:
---------------------------------
那编程一样吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 07:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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