[STM32F1] 用AD采集连续两个零点

[复制链接]
 楼主| rainic 发表于 2017-9-5 15:07 | 显示全部楼层 |阅读模式
类正弦波零点是2.5V转为AD值是3103.我想采集连续两个零点的数据,我的程序如下:
while(1)
{
if(tmp==3103)
{
for(i=0;i<len;i++)
{
sig[i]=Get_Adc(ch1)
}
}
}
请问到下一个零点我应该怎么停止呢?只想一段一段的采集。求大神们告知
gx_huang 发表于 2017-9-5 15:33 | 显示全部楼层
有点丈二和尚的感觉
mcu5i51 发表于 2017-9-5 17:01 | 显示全部楼层
对比中点(0点)的值,开始点为第一个大于这个点的值,正半周至小于这个点为止,一个周期到开始的条件
 楼主| rainic 发表于 2017-9-6 10:22 | 显示全部楼层
gx_huang 发表于 2017-9-5 15:33
有点丈二和尚的感觉

唉  C语言基础不牢真是地动三摇啊,我只是想采集连续两个过零点(连续两个相同的电压之间的数据)。只会怎么开始不会结束。
 楼主| rainic 发表于 2017-9-6 10:24 | 显示全部楼层
mcu5i51 发表于 2017-9-5 17:01
对比中点(0点)的值,开始点为第一个大于这个点的值,正半周至小于这个点为止,一个周期到开始的条件 ...

对 是这样的  只是不知道到了下个零点我怎么停下来不再往数组存数了。请大神赐教
戈卫东 发表于 2017-9-6 11:58 | 显示全部楼层
如果能够预测大致的下一个“过0点”时间,那么就在取得前一个“过0点”时开始计时,到达“最短时间”再开始比较
戈卫东 发表于 2017-9-6 11:59 | 显示全部楼层
一般的,用小于某值作为“过0点”判断,不能用“==0”
gx_huang 发表于 2017-9-6 12:47 | 显示全部楼层
rainic 发表于 2017-9-6 10:22
唉  C语言基础不牢真是地动三摇啊,我只是想采集连续两个过零点(连续两个相同的电压之间的数据)。只会 ...

这和C语言好不好关系不大呀,关键是逻辑思维呀!
ADC不一定就是连续的,过零采样能采样到3103的概率也不是100%的。
判断是否过零,要判断ADC是否在一定的范围内,凡事不能太绝对。
 楼主| rainic 发表于 2017-9-6 15:55 | 显示全部楼层
戈卫东 发表于 2017-9-6 11:58
如果能够预测大致的下一个“过0点”时间,那么就在取得前一个“过0点”时开始计时,到达“最短时间”再开始 ...

信号周期可能随时会变,所以没法预测。我想采用定时器控制ADC,第一个零点开启TIME下一个零点关闭TIME,DMA传输数据。这样的话就可以只采集“半个”周期的信号,还可以计算时间。
myiclife 发表于 2017-9-6 22:35 | 显示全部楼层
连续采样是这样采样吗?
uytyu 发表于 2017-9-6 22:36 | 显示全部楼层
还是使用均值滤波吧。
iyoum 发表于 2017-9-6 22:36 | 显示全部楼层
这个len是怎么定义的
wwppd 发表于 2017-9-6 22:37 | 显示全部楼层
不完整的程序看不出来的。
jkl21 发表于 2017-9-6 22:37 | 显示全部楼层
计数完成之后重新把把变量复位。
maqianqu 发表于 2017-9-6 22:38 | 显示全部楼层
采样变量控制复位。
dspmana 发表于 2017-9-6 22:38 | 显示全部楼层
没有看懂楼主的代码要实现什么
eefas 发表于 2017-9-6 22:39 | 显示全部楼层
控制采样的flag呢?
pl202 发表于 2017-9-6 22:40 | 显示全部楼层
就是跟楼主的变量控制有关系。
myiclife 发表于 2017-9-6 22:40 | 显示全部楼层
楼主不是应该通过计算两次实现的吗?
uytyu 发表于 2017-9-6 22:40 | 显示全部楼层
两次采集求平均值,不如均值滤波算法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

37

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部