打印
[STM32F1]

检测出正弦波相邻的峰谷点个数乘于转换时间结果并不是zh...

[复制链接]
1176|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rainic|  楼主 | 2017-9-4 11:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
给入正弦波频率2Hz 500ms,计算出波峰波谷半个周期共有313点。AD频率12M,239.5采样时间计算出21u采集转换一次,10点一个平均值。313*2*21u*10=131.46ms,这个数据严重小于500ms是哪里出错了呢。或者说这种方法根本就不能用,再或者说还有个读取时间???
沙发
mmuuss586| | 2017-9-4 15:16 | 只看该作者
313*2*21u*10=131.46ms
你这个公式不对吧,0.021MS吧;

可能主要时间差别在这个0.021ms吧,至于读取时间差多少,要看你具体程序怎么写的了;

使用特权

评论回复
板凳
rainic|  楼主 | 2017-9-4 15:58 | 只看该作者
mmuuss586 发表于 2017-9-4 15:16
313*2*21u*10=131.46ms
你这个公式不对吧,0.021MS吧;

12M 239.5+12.5=252,就是21us也就是0.021ms。我是用采集的点数乘0.021ms得到周期。请问这种方法本身就不对吗??

使用特权

评论回复
地板
mmuuss586| | 2017-9-4 19:39 | 只看该作者
rainic 发表于 2017-9-4 15:58
12M 239.5+12.5=252,就是21us也就是0.021ms。我是用采集的点数乘0.021ms得到周期。请问这种方法本身就不 ...

方法没问题的,不知道你程序怎么处理的;

还有你说的时钟12M,真正是不是12M,你都要查

使用特权

评论回复
5
rainic|  楼主 | 2017-9-4 19:51 | 只看该作者
mmuuss586 发表于 2017-9-4 19:39
方法没问题的,不知道你程序怎么处理的;

还有你说的时钟12M,真正是不是12M,你都要查 ...

我也感觉没问题因为只要转换了这个数就实实在在的存在。用的正点原子的F103开发板ADC例子,APB2倍频72M
6分屏给ADC。我自己仔细查找一下到底哪里丢失了数据。

使用特权

评论回复
6
mmuuss586| | 2017-9-4 19:55 | 只看该作者
嗯,ADC什么模式呢?ADC+DMA
还是再加中断触发?

使用特权

评论回复
7
lxyppc| | 2017-9-4 20:54 | 只看该作者
本帖最后由 lxyppc 于 2017-9-4 20:56 编辑

我一顿饭要吃半个小时,一个星期吃了21顿饭
21x0.5=10.5小时
而一个星期有24x7=168小时
为什么我一个星期只过了10.5个小时,这个数据严重小于168小时
或者说还有睡觉时间,一天10个小时一共70小时,加起来80.5小时,也不够啊

使用特权

评论回复
8
rainic|  楼主 | 2017-9-5 10:23 | 只看该作者
mmuuss586 发表于 2017-9-4 19:55
嗯,ADC什么模式呢?ADC+DMA
还是再加中断触发?

ADC是软件触发,没有DMA也没用到中断。我的目的是检测到峰值点谷值点立即从另一个IO口输出一个单次脉冲,实时性很强。做了个阈值法确实能检测到峰值点位置,但是问题来了:必须要对一段数据处理才能知道有没有峰谷值点,甚至一个或者多个,那么这样的话就错过峰谷值点了,再加上处理更加延迟了。所以根本达不到实时的目的,而且信号有噪声也没法用中间一个数和两边的数比较,有毛刺一定会误判。我的解决方法是计算出峰值点和零点的时间并记下这个时间t,下个零点过来时立即开启定时器定时时间t,时间一到立马输出脉冲波。然后再次计算零点和谷值点时间t1,依次递推。把峰值到零点时间给零点到谷值点用。

使用特权

评论回复
9
rainic|  楼主 | 2017-9-5 11:16 | 只看该作者
lxyppc 发表于 2017-9-4 20:54
我一顿饭要吃半个小时,一个星期吃了21顿饭
21x0.5=10.5小时
而一个星期有24x7=168小时

说的有道理,对MCU的功能理解不深,往兄台赐教。

使用特权

评论回复
10
rainic|  楼主 | 2017-9-5 11:23 | 只看该作者

使用特权

评论回复
11
mmuuss586| | 2017-9-5 13:21 | 只看该作者
那时间可能还是花在你软件处理上吧

使用特权

评论回复
12
rainic|  楼主 | 2017-9-5 14:26 | 只看该作者
mmuuss586 发表于 2017-9-5 13:21
那时间可能还是花在你软件处理上吧

可能是采集转换时间不对,如果对的话乘于点数绝对是时间。

使用特权

评论回复
13
sonicll| | 2017-9-5 18:03 | 只看该作者
ADC你不用DMA的话,怎么保证连续采样?这样你的实际采样间隔时间肯定是大于理论计算的21us的

使用特权

评论回复
14
rainic|  楼主 | 2017-9-6 10:15 | 只看该作者
sonicll 发表于 2017-9-5 18:03
ADC你不用DMA的话,怎么保证连续采样?这样你的实际采样间隔时间肯定是大于理论计算的21us的 ...

DMA不是做数据搬运的吗。是不是说时间就花在cpu数据存储上?兄台可否赐教,让我死了这条心。我一直觉得峰值点和零点的点数乘时间等于四分之一个周期。我不用过零点是因为这个是类正弦信号,每四分之一周期也不一定相等,虽然差距不大但是为了提高精度。我很想这么做。请赐教

使用特权

评论回复
15
lxyppc| | 2017-9-6 10:56 | 只看该作者
你要在250ms采集313个点
也就是你要以250/313=0.8ms的间隔采样
我们可以设置一个以0.8ms为周期的中断,在中断中采样
没次采样要取10点平均
可以设置10个rank,每个rank通道相同
在一次采样中转换10个rank的值
800us采集10次,设置好每次采样转换时间小于80us就行了
如果你理解了中断的方式,再换成dma也就不难了

使用特权

评论回复
16
rainic|  楼主 | 2017-9-8 11:42 | 只看该作者
lxyppc 发表于 2017-9-6 10:56
你要在250ms采集313个点
也就是你要以250/313=0.8ms的间隔采样
我们可以设置一个以0.8ms为周期的中断,在中 ...

谢谢!

使用特权

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

本版积分规则

5

主题

37

帖子

0

粉丝