Lewisnx 发表于 2017-10-29 09:26

关于2812的AD采集

想用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中断的问题总想不明白,这些问题可能有些低级,望各位给予解答,万分感谢

CCompton 发表于 2017-10-29 10:12

设置好定时器,使用定时器起动AD中断。在AD中断程序中读取采样值。采样样本达到512个时,置位个标志。在主程序中查询该标志去做FFT.

Richardd 发表于 2017-10-29 10:25

建议用定时器起动AD。不需要人为干涉

Mattheww 发表于 2017-10-29 10:34

在置位标志位后是不是就不执行中断开始执行主程序了?还是在执行主程序中FFT时AD还在继续采集?

Erichk 发表于 2017-10-29 10:43

自己定义个标志位。

Thorald 发表于 2017-10-29 10:53

在开始进行FFT的时候,AD还在进行采集吗?还是是暂停的状态?

Rospiers 发表于 2017-10-29 11:12

如果是做测量,采不采都行,反正测量需要的都是多次平均之后的值,不需要连续。如果做保护的话就得连续采集了,一般情况下一个点都不能少,不过根据实际需求, 短暂的间断有时候也是允许的。总之一句话,根据时间需要进行处理

Bjorn 发表于 2017-10-29 11:22

输出的值都是多次平均之后的值

apple武 发表于 2017-10-30 19:32

本帖最后由 apple武 于 2017-10-30 19:33 编辑

CCompton 发表于 2017-10-29 10:12
设置好定时器,使用定时器起动AD中断。在AD中断程序中读取采样值。采样样本达到512个时,置位个标志。在主 ...
正解!
我现在有一个思路是:由于没有用过2812,现在在用28335,在28335里面没有定时器触发,可不可以使PWM在最低点处产生中断,这其实就是一个定时中断,然后在中断中软件触发AD转换,然后读取AD值,设置一个标志位在记够512次将标志位置1,在主函数中进行FFT转换。当进行FFT转换的过程中,若是遇到中断,那肯定是先进行中断然后再回来执行FFT转换。但是要保证这512次中断的时间不能超过进行FFT转换的周期,否则这次FFT未做完就要进行下次的FFT转换了。不知这种方法怎么样?

pengyoujianxiao 发表于 2019-11-5 18:49

可以
页: [1]
查看完整版本: 关于2812的AD采集