关于2812的AD采集

[复制链接]
1255|16
 楼主| 米尔豪斯 发表于 2017-4-29 19:40 | 显示全部楼层 |阅读模式
想用2812内置的AD模块进行实时的数据采集和处理,但是对AD中断部分和数据处理部分的运行有些疑惑。首先AD中断如果采用软件启动的话,假如在中断结尾进行如此设置:AdcRegs.ADCTRL2.bit.SOC_SEQ1=1,是不是马上就开始下一次中断?是不是主函数部分就不会执行?还有有人和我说数据运算的部分最好不要放到中断部分里,但如果和中断分开的话,这两个部分是如何执行的?我希望AD在采集512次之后进行FFT,怎样保证在采到了512个数据能够跳出中断进行FFT运算?如果主函数这样编写:
main()
{
省略初始化部分
  for(;;)
   {
     if(AdcRegs.ADC_ST_FLAG.BIT.SEQ1_BSY==0)
        AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;                    
       //是不是这里只要置1,就马上开始AD中断?中断部分中把各次采集到的数据放在一个数组中,并且不在中断结尾进行软件出发,是不是在满足n=512之前都是一次中断结束就会执行下一次循环,直到n=512才会执行下面的if语句?
     if(n==512)
        FFTmain();  //FFT运算

   }
}
有些钻牛角尖,关于AD中断的问题总想不明白,这些问题可能有些低级,望各位给予解答
lefeng 发表于 2017-4-29 19:52 | 显示全部楼层

设置好定时器,使用定时器起动AD中断。在AD中断程序中读取采样值。
lwsn 发表于 2017-4-29 20:04 | 显示全部楼层
采样样本达到512个时,置位个标志。在主程序中查询该标志去做FFT.
309030106 发表于 2017-4-29 20:17 | 显示全部楼层
建议用定时器起动AD。不需要人为干涉
尤彼卡 发表于 2017-4-29 20:33 | 显示全部楼层
那样本达到512个并且置位哪个标志位比较好?在置位标志位后是不是就不执行中断开始执行主程序了?
Levenburg 发表于 2017-4-29 20:51 | 显示全部楼层
自己定义个标志位。
Thorald 发表于 2017-4-29 21:06 | 显示全部楼层
看你的实际需要,如果是做测量,采不采都行,反正测量需要的都是多次平均之后的值,不需要连续。如果做保护的话就得连续采集了,一般情况下一个点都不能少,不过根据实际需求, 短暂的间断有时候也是允许的。总之一句话,根据时间需要进行处理
mmbs 发表于 2017-5-5 21:55 | 显示全部楼层
这个应该关掉定时了?
1988020566 发表于 2017-5-5 21:56 | 显示全部楼层
楼主的采样频率是多大?
lzbf 发表于 2017-5-5 21:57 | 显示全部楼层
采样应该不会影响到FFT的算法执行。
houjiakai 发表于 2017-5-5 21:58 | 显示全部楼层
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1  这样的执行效率是不是会影响?
youtome 发表于 2017-5-5 21:58 | 显示全部楼层
楼主可以使用乒乓操作,设置两个数组。
mmbs 发表于 2017-5-5 21:59 | 显示全部楼层
中断执行采样,不会影响FFT的算法。
1988020566 发表于 2017-5-5 21:59 | 显示全部楼层
512个数据计算FFt可能需要1/8s的时间。
lzbf 发表于 2017-5-5 21:59 | 显示全部楼层
主函数部分是不是数据会被中断替换。
houjiakai 发表于 2017-5-5 21:59 | 显示全部楼层
最好能够采样的时间段就把函数代码执行完。
youtome 发表于 2017-5-5 21:59 | 显示全部楼层
楼主的采样速度能够到多少?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

150

主题

731

帖子

1

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