打印
[STM32F1]

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

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

313*2*21u*10=131.46ms
你这个公式不对吧,0.021MS吧;

使用特权

评论回复
板凳
liuzaiy| | 2018-11-8 16:57 | 只看该作者
可能主要时间差别在这个0.021ms吧,至于读取时间差多少,要看你具体程序怎么写的了;

使用特权

评论回复
地板
houcs|  楼主 | 2018-11-8 17:01 | 只看该作者
12M 239.5+12.5=252,就是21us也就是0.021ms。我是用采集的点数乘0.021ms得到周期。请问这种方法本身就不对吗??

使用特权

评论回复
5
yinxiangh| | 2018-11-8 17:05 | 只看该作者
方法没问题的,不知道你程序怎么处理的;

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

使用特权

评论回复
6
yiy| | 2018-11-8 17:07 | 只看该作者
不要看AD频率要看转换一次时间。

使用特权

评论回复
7
houcs|  楼主 | 2018-11-8 17:08 | 只看该作者
我也感觉没问题因为只要转换了这个数就实实在在的存在。用的正点原子的F103开发板ADC例子,APB2倍频72M
6分屏给ADC。我自己仔细查找一下到底哪里丢失了数据。

使用特权

评论回复
8
pangb| | 2018-11-8 17:11 | 只看该作者
嗯,ADC什么模式呢?ADC+DMA

使用特权

评论回复
9
chenjunt| | 2018-11-8 17:18 | 只看该作者
还是再加中断触发?

使用特权

评论回复
10
ousj| | 2018-11-8 17:23 | 只看该作者
我一顿饭要吃半个小时,一个星期吃了21顿饭
21x0.5=10.5小时
而一个星期有24x7=168小时
为什么我一个星期只过了10.5个小时,这个数据严重小于168小时
或者说还有睡觉时间,一天10个小时一共70小时,加起来80.5小时,也不够啊

使用特权

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

使用特权

评论回复
12
houcs|  楼主 | 2018-11-8 17:32 | 只看该作者
说的有道理,对MCU的功能理解不深,往兄台赐教。

使用特权

评论回复
13
houcs|  楼主 | 2018-11-8 17:38 | 只看该作者

使用特权

评论回复
14
zyf部长| | 2018-11-8 17:42 | 只看该作者
那时间可能还是花在你软件处理上吧

使用特权

评论回复
15
houcs|  楼主 | 2018-11-8 17:45 | 只看该作者
可能是采集转换时间不对,如果对的话乘于点数绝对是时间。

使用特权

评论回复
16
xxmmi| | 2018-11-8 17:48 | 只看该作者
ADC你不用DMA的话,怎么保证连续采样?这样你的实际采样间隔时间肯定是大于理论计算的21us的

使用特权

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

使用特权

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

使用特权

评论回复
19
houcs|  楼主 | 2018-11-8 18:02 | 只看该作者

哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

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

本版积分规则

743

主题

8382

帖子

5

粉丝